강의 (130) 썸네일형 리스트형 @Configuration과 proxyBeanMethods 학습 테스트 남이 만든 코드를 동작 방식을 정확하게 이해할 수 있도록 테스트 코드로 샘플을 만드는 것이다. 어떤 기술을 정확하게 이해하고 싶을때 테스트 코드를 학습 목적으로 만들 수 있다. 테스트 코드로 사용법을 이해하고 이걸 사용하는 코드가 어떤 식으로 작성이 되는가 연습할 수 있는 기회가 될 수 있다. configuration의 가장 default 구성 그 특징을 살펴보는 코드를 만들어 볼 것이다. configuration의 특징은 이 안에 bean이라는 어노테이션이 붙은 메서드를 많이 가지고 있다. 각각의 메서드들이 자바 코드에 의해서 빈 오브젝트를 생성하고 다른 오브젝트의 관계를 설정하는 부분을 담당하게 된다. 이자체로는 평범하게 팩토리 메서드로 동작하면 된다고 하지만 생각보다 단순하지는 않다. .. 자동 구성 애노테이션 적용 일단 어떻게 수정을 하였는지 살펴보자 먼저 DispatcherServletConfig와 TomcatWebServerConfig에 @Configuration 어노테이션을 @MyAutoConfiguration annotation으로 수정해주자. package com.example.config.autoconfig; import com.example.config.MyAutoConfiguration; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springf.. 동적인 자동 구성 정보 등록 동적이라는 것은 내가 어떤 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를 사용해 보는 것이다. 팩토리 메서드는 오브젝트를 생성하는 로직을 담고 있는 것이다. 팩토리 메서드에서 빈 오브젝트를 생성하고 의존관계 주입하고 리턴하는 오브젝트를 스프링 컨.. 이전 1 2 3 4 ··· 17 다음