Resource 추상화
·
Programming/Spring
Resource 추상화Spring은 java.net.URL을 org.springframework.core.io.Resource로 감싸서 추상화한 클래스이다.스프링 내부에서 많이 사용하는 인터페이스이다추상화 한 이유java.net.URL 이 기본적으로 여러 prefix를 지원하는 프로토콜은 http,https, ftp, file, jar이지만 classpath 기준으로 리소스를 읽어오는 기능이 없다.ServletContext를 기준으로 상대 경로로 읽어오는 기능이 없다.새로운 핸들러를 등록하여 특별한 URL 접미사를 만들어 사용할 수는 있지만 구현이 복잡하고 편의성 메소드가 부족하다.ApplicationContext스프링의 핵심 인터페이스:단순히 빈 팩토리로서의 역할뿐만 아니라, 리소스 로딩 기능을 포함하..
ApplicationEventPublisher
·
Programming/Spring
ApplicationContext는 ApplicationEventPublisher 인터페이스를 구현하고, 이를 통해 스프링 애플리케이션에서 이벤트를 발행(publish)할 수 있는 기능을 제공한다.Spring 4.2 버전 이전 버전에서는 발행되는 Event 객체가 ApplicationEvent로부터 확장되고 (extends), EventListener 객체는 ApplicationListener 를 구현해야(implements) 했었다.public class ExampleEvent extends ApplicationEvent { private int data; public ExampleEvent(Object source, int data) { super(source); ..
@Component와 @Bean
·
Programming/Spring
@Component와 @Bean의 차이특징@Component@Bean사용 위치클래스 레벨메서드 레벨자동 감지스프링의 컴포넌트 스캔으로 자동 감지 가능스프링이 명시적으로 메서드를 호출하여 빈 생성소스 코드 의존성클래스의 소스 코드가 수정 가능해야 사용 가능제3자 라이브러리 클래스에도 적용 가능유연성간결하지만 인스턴스 생성 로직에 대한 제어 제한로직 추가를 통해 다양한 조건에 따른 빈 생성 가능@Component는 수정 가능한 클래스에만 적용될 수 있다는 점이 의문이 들었지만, 외부 라이브러리 클래스는 코드 수정이 불가능하므로 @Component 애노테이션을 붙일 수 없다는 점을 생각하면 당연하다. 따라서, 외부 라이브러 클래스는 @Bean을 통해 빈 생성이 가능하다.BeanExample might repr..
Autowired
·
Programming/Spring
@Autowired 빈 주입 방식 3가지생성자필드Setter@Autowired와 빈 주입 과정 이해@Autowired로 빈을 주입할 때, required = false 옵션을 사용하면 빈 주입이 이루어지지 않아도 객체가 생성될 수 있다. 하지만 생성자 주입 방식은 주입할 빈이 반드시 필요하므로, 주입 대상 빈이 없으면 객체 생성에 실패한다.@Componentpublic class ExampleService { private final DependencyService dependencyService; // 생성자 주입 @Autowired public ExampleService(DependencyService dependencyService) { this.dependency..
ApplicationContext 2가지 빈 설정 방식
·
Programming/Spring
ApplicationContext의 빈 설정 방식ClassPathXmlApplicationContext:XML 파일을 통해 Spring 빈을 정의하고 로드하는 과거 방식입니다.주로 applicationContext.xml과 같은 파일에서 빈 정의를 작성했습니다.AnnotationConfigApplicationContext:Java 기반의 빈 설정을 사용하는 방식입니다.XML 대신 자바 클래스를 사용하여 빈을 정의하고 구성합니다.Java 기반 빈 설정자바로 빈을 등록할 때는 @Configuration과 @ComponentScan 애너테이션을 활용합니다.@Configuration: 설정 클래스를 나타냅니다. 이 클래스는 하나 이상의 @Bean 메서드를 포함하며, 이러한 메서드들이 생성하는 객체를 Spring..
RequestBody 자바 객체 매핑
·
Programming/Spring
기본 생성자가 없음에도 @RequestBody를 통해 Java 객체가 올바르게 생성되었다. 기본적으로 리플렉션과 기본 생성자를 사용해 매핑된다고 알고 있었기에 의문이 들었다.@Getter@Builderpublic class SignupRequest { @NotBlank(message = "Email is required") @Email(message = "Invalid email format") private String email; @NotBlank(message = "Password is required") @Size(min = 6, max = 20, message = "Password must be between 6 and 20 characters") private String passw..
MapStruct & Lombok 적용
·
Programming/Spring
MapStruct - Dto를 Entity로 매핑(반대도 가능)해주는 라이브러리다. - 리플렉션이 아닌 직접 메소드를 호출하는 방식으로 동작하여 속도가 빠르다. Set up ... 11 1.3.1.Final 1.18.12 ... org.mapstruct mapstruct ${org.mapstruct.version} org.projectlombok lombok ${org.projectlombok.version} provided ... org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-compiler-plugin 3.5.1 11 11 org.mapstruct mapstruct-processor ${org.mapst..
@JsonProperty, @JsonNaming
·
Programming/Spring
REST API 방식으로 서버와 클라이언트가 데이터를 통신할 때 JSON 형식을 주로 사용한다. 서버는 카멜 방식(Camel Case), 클라이언트는 스네이크 방식(Snake Case)을 사용한다. 카멜 방식 - 첫 글자는 소문자, 중간 글자들은 대문자 표기법 ex)phoneNumber 스네이크 방식 - 언더바가 포함된 표현 방식 ex) phone_number 서버와 클라이언트의 JSON 표현의 방식의 차이로 데이터의 key가 달라지는 상황이 발생한다. 이러한 문제를 @JsonProperty, @JsonNaming을 사용하여 해결할 수 있다. 예제 UserRequest package org.juhyun.kotlinspringboot.model data class UserRequest ( var name:..
Entity, DTO, VO 차이
·
Programming/Spring
Entity 실제 DB table과 1:1 mapping 되는 Class - Domain Logic만 가지며 Presentation Logic을 가지고 있어서는 안된다. - Spring 3 Tier인 Persistence, Buseniss, Presentation Tier 중 Persistence Tier에서 사용 - Setter 지양. 객체의 일관성. 변경되게 되면 다른 Class에 영향(실제 테이블과 매핑되기 때문) DTO(Data Transfer Object) 계층 간 데이터 교환을 위한 객체 - getter, setter 메소드만 갖는다. 다른 로직은 없다. - DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고가는 것 - View와 통신하며 자주 변경 ..
REST API
·
Programming/Spring
REST API란? REST(Representational State Transfer) API 약자로 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다. 즉 REST란? 1. HTTP URI를 통해 자원(Resource)을 명시하고, 2. HTTP Method(POST, GET, PUT, DELETE)를 통해 3. 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미한다. REST 구성 요소 1. 자원(Resource) : HTTP URI 2. 자원에 대한 행위(Verb): HTTP Method 3. 자원에 대한 행위의 내용(Representations): HTTP Message Pay Load RESTful이란? RESTful이란 REST의 원리를 따르는 시스템을 의..