본문 바로가기

분류 전체보기

(461)
동적인 자동 구성 정보 등록 동적이라는 것은 내가 어떤 configuration을 가져올지를 db에서 읽어와서 참고할 수도 있고 외부 설정파일로도 가져올 수 있다. 코드에 의해 EnableMyAutoConfiguration을 고치지 않아도 되어야 한다는 것이다. 동적으로 가져올 때는 @import 로는 부족하다. ImportSelector 라는 interface를 살펴보자. annotation이라는 meta data를 받고 return을 String[] 에다가 클래스 이름을 넣어서 주면 된다. ImportSelector를 확장헌 DefferedImportSelector를 사용할 것이다. Import가 가져오는 것은 Configuration 클래스인데 특별히 ImportSelector 인터페이스를 구현한 클래스를 가져오면 그 안에 있..
자동 구성 기반 애플리케이션 (meta annotation, composed annotation) @AutoConfiguraiton Meta annotation에 대해서 살펴보자 여기서 Meta annotation이란 Controoler Service annotation을 말하는 것이다. Meta annotation을 활용하면 좋은점 Component를 붙이는 것과 @Controller를 붙이 WebMvc의 controller 역할을 하는 구나 buisiness를 담당하는 중요 로직이 들어있구나 라는 것을 알 수 있음 부가 기능을 넣을 수 있음 Dispatcher servlet이 Web controller로 사용되어 지는 구나 annotation을 이용한 mapping 정보가 들어있구나 request mapping, get mapping을 살펴볼 것임 annotation 기능을 확장 가능 meta a..
ㅇㄹㄴㅇ HelloController가 직접 SimpleHelloService를 의존하고 있는 상태 그렇다는 얘기는 helloController는 SimpleHelloService를 직접 의존하고 있고 의존 관계 방향은 다음과 같 DI를 얘기하면서 이런식으로 설계를 바꿨다. 의존관계의 방향이 바뀐것을 알 수 있다. 이렇게 하면 장점이 HelloController 코드에 손을 대지 않고 HelloService interface를 구현한 클래스를 교체해가면서 다양하게 적용하는것이 가능하다. 이런 작업을 가능하게 해주는 것이 DI이고 DI라는 것은 HelloController는 구현체에 의존하지 않지만 Runtime시에는 HelloController가 구현체를 사용하고 있으니까 object level에서는 의존하는 것..
테스트 코드 api 기능 테스트 package com.example.tobyboot; import org.junit.jupiter.api.Test; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import static org.assertj.core.api.Assertions.assertThat; class TobybootApiT..
Bean의 생명주기 메소 팩토리 메서드를 이용해서 빈 인스턴스를 생성하는 방법을 사용했다. 조금 더 간결하게 빈을 등록하는 방법을 알아보자. 나를 빈으로 등록해줘 클래스에 레이블을 붙여주는데 어노테이션을 이용해서 지정할 수 있다. ComponentScan : Component 라는 어노테이션을 찾아서 빈으로 등록해줌 Controller와 Service에 @Component라는 annotation을 붙여주면 된다. 애플리케이션 기능을 담당하는것은 컨트롤러 서비스 TomcatServletWebsServerFactory, DispatcherServlet standalone application을 만들기 위해서 존재하는데 이것도 bean으로 등록해보자 팩토리 메서드를 이용하여 빈으로 등록해보자. 디브패쳐 서블릿은 자기가 이용할 컨트롤러..
자바코드 구성 정보 사용 스프링 컨테이너가 사용하는 구성정보 우리가 만든 코드를 어떻게 오브젝트로 만들어서 컨테이너 내에 컴포넌트로 등록해두고 스프링 컨테이너 안에 들어있는 빈이라고 불리는 오브젝트가 또다른 오브젝트를 사용한다면 (의존한다면) 이 관게를 어떻게 맺어줄 것인가 어느시점에 오브젝트를 주입시켜 줄 것인가 이런 정보를 스프링 컨테이너에 구성정보로 제공해줘야한다. 구성정보로 제공하는 방법은 여러가지고 있는데 외부 설정 파일을 이용하는 방법도 있지만 쉽고 간결한 방법중 하나인 독특한 방법이 잇는데 이번시간에 사용해볼 것이다. factory method를 사용해 보는 것이다. 팩토리 메서드는 오브젝트를 생성하는 로직을 담고 있는 것이다. 팩토리 메서드에서 빈 오브젝트를 생성하고 의존관계 주입하고 리턴하는 오브젝트를 스프링 컨..
di 적용 dispatcherservlet은 servlet container인 application context를 생성자로 받았음 그걸 이용해서 dispatcher servlet은 bean을 다 훑어 보고 url mapping 정보를 살펴봄. getMapping이나 requestMapping annotation 정보가 존재하면 이것은 web 요청을 처리할 수 있도록 만들어진 web controller구나 라고 인식을 하고 그 안에 요청 정보를 추출한다. mapping 테이블을 만들어서 관리하고 이후에 웹요청이 들어오면 mapping 테이블을 확인하고 메서드를 연결해준다. package com.example.tobyboot; import com.example.tobyboot.toby.HelloController; ..
Dependency injection HelloController가 소스코드 레벨에서는 특정 클래스에 의존하지 않으나 (interface) Runtime이 되면 hellocontroller는 구현체를 이용해야 되기 때문에, 둘사이의 연관관계를 만들어 주긴 해야한다. 이 작업을 DI(Dependency injection)이라고 한다. DI는 제 3의 존재를 필요로 한다. 우리가 이것을 Assembler라고 부른다. HelloController는 HelloService 구현한 클래스에 의존해야하나 소스코드레벨에서는 의존하고 싶지 않다. SimpleHelloService에서 ComplexHelloService로 바꿨다고 해서 소스코드를 고치고 싶지는 않다. Hellocontroller가 사용하는 오브젝트를 new로 만들지 않고 외부에서 그 오브젝..