스프링29 섹션 7-3 [조건부 자동구성] @Conditional, Condition 학습 테스트 @Conditional, Condition 학습 테스트public class ConditionalTest { @Test void conditional() { // true // Bean 구성정보를 확인하여 테스트할 수 있는객체 ApplicationContextRunner 생성 ApplicationContextRunner contextRunner1 = new ApplicationContextRunner(); // Configuration 구성정보 Class를 매개변수로 넘겨주고 contextRunner1.withUserConfiguration(Config1.class) .. 2024. 6. 27. 섹션 7-2 [조건부 자동구성] @Conditional과 Condition @Conditional과 Condition@Conditional은 class레벨 뿐만 아니라 method레벨에도 애노테이션을 사용할 수 있습니다. 다만 class와 method에 동시에 애노테이션을 사용할경우 class레벨의 @Conditional이 우선순위가 가장 높으며 class레벨의 @Conditional의 Condition구현체의 값이 false라면 method레벨의 값은 체크하지않고 무조건 false로 bean으로 등록되지 않습니다. @MyAutoConfiguration /* JettyWebServerConfig를 ConFiguration class Bean으로 등록할 것인지 스프링 컨테이너에게 알려주는 애노테이션 @Conditional에는 Condition의 구현체 클래스를.. 2024. 6. 27. 섹션 7-1 [조건부 자동구성] 스타터와 Jetty 서버 구성 추가 스타터와 Jetty 서버 구성 추가plugins { id 'java' id 'org.springframework.boot' version '2.7.6' id 'io.spring.dependency-management' version '1.1.5' } group = 'com.tobyspring' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '11' } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' // Spr.. 2024. 6. 27. 섹션 6-1 [자동 구성 기반 애플리케이션] 메타 애노테이션과 합성 애노테이션 메타 애노테이션과 합성 애노테이션메타 애노테이션이 붙은 클래스를 기능적인 면에서는 애노테이션이 붙은 클래스와는 차이가 없습니다. 다만 컴포넌트를 직접 붙이는 것과 컨트롤러나 서비스 같은 컴포넌트를 메타 애노테이션으로 갖고 있는 애노테이션을 붙이는 것과 컴포넌트 스캐너가 바라볼 때는 동일합니다. 하지만 다른 이름을 부여하여 메타 애노테이션을 만들면 Spring Bean으로 등록되는것 뿐만 아니라 @Controller애노테이션이 붙은 Bean은 웹 MVC의 컨트롤러 역할을 담장하는지 혹은 비즈니스 로직을 담당하는 Service로직인지 추가적인 정보를 확인할 수 있습니다. 애노테이션 자체가 달라지기 때문에 여기에 부가적인 효과를 기대할 수 잇습니다.하지만 여기서 혼동할 수 있는 부분이 있는데 메타 애노테이션을.. 2024. 6. 14. 섹션 5-3 [DI와 테스트, 디자인 패턴] DI를 이용한 Decorator, Proxy 패턴 DI를 이용한 Decorator, Proxy 패턴우리는 앞서 HelloController가 의존하고 있는 HelloService를 interface화 하여 의존관계의 방향을 변경하였습니다. 코드 레벨에서의 의존방향성은 변경하였지만 결국 런타임시에는 HelloController가 의존하고있는 객체 즉 실제 구현된 객체가 주입되어야 하는데 Spring Container가 Assembler역할을 수행할때 SimpleHelloService를 주입해야할지 ComplexHelloService를 주입해야할지 결정할 수 없게 됩니다.이러한 문제점을 해소할 수 있는 방법은 의존성 주입에 우선순위를 정해주게 됩니다. 데코레이터 패턴을 예시로 들어보겠습니다. HelloDecoratort.classpackage com.tob.. 2024. 6. 12. 섹션 5-2 [DI와 테스트, 디자인 패턴] DI와 단위 테스트 DI와 단위 테스트5-1 섹션 에서는 Spring 서버에 직접적으로 네트워크 통신을 통해 테스트를 진행 하다 보니 테스트 수행 속도가 오래 걸리지만 아래 코드처럼 HelloService를 테스트를 진행 할 때는 네트워크를 통신을 하지 않고 Java객체를 직접적으로 호출하여 테스트 하므로 수행 속도가 월등히 빠릅니다. package com.tobyspring.tobyspringboot; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; public class HelloServiceTest { @Test void simpleHelloService() { HelloService.. 2024. 6. 12. 이전 1 2 3 4 5 다음