본문 바로가기

분류 전체보기58

섹션 6-4 [자동 구성 기반 애플리케이션] 인프라 빈 구성 정보와 분리 인프라 빈 구성 정보와 분리기존에 TomcatWebServerFactory, DispatcherServlet 구성정보를 등록하는 Config를 위 구조로 변경해보도록 하겠습니다. package com.tobyspring.tobyspringboot; import com.tobyspring.config.MySpringBootApplication; import org.springframework.boot.SpringApplication; @MySpringBootApplication public class TobyspringbootApplication { public static void main(String[] args) { SpringApplication.run(.. 2024. 6. 14.
섹션 6-3 [자동 구성 기반 애플리케이션] 빈 오브젝트의 역할과 구분 빈 오브젝트의 역할과 구분스프링 컨테이너가 관리하는 빈은 크게 두가지로 구분해볼 수 있는데 컨테이너 인프라 스트럭처 빈, 애플리케이션 빈으로 구분할 수 있습니다.애플리케이션빈은 개발자가 어떤 빈을 사용하겠다고 명시적으로 구성정보를 제시한 빈 이라고 합니다. 컨테이너 인프라 스트럭처 빈은 스프링컨테이너 자신이거나 스프링 컨테이너가 기능을 확장하며 추가해온 부분들을 빈으로 등록하여 사용하는 빈이라고 합니다. 애플리케이션 빈은 또 두가지로 구분할 수 있는데 애플리케이션 로직빈, 애플리케이션 인프라스트럭처 빈으로 구분할 수 있습니다. 애플리케이션 로직 빈은 애플리케이션에 기능, 비즈니스 로직, 도메인 로직들을 담고있는 빈이라고 할 수 있으며 애플리케이션 인프라 스트럭처 빈은 대부분 기술과 관련되어있는데 대부분 .. 2024. 6. 14.
섹션 6-2 [자동 구성 기반 애플리케이션] 합성 애노테이션 적용 합성 애노테이션 적용@SpringBootApplicationpublic class TobySpringBootApplication { public static void main(String[] args) { SpringApplication.run(TobySpringBootApplication.class, args); }}Spring Boot 프로젝트를 구성하면 우리가 직접 구현하지는 않는 서버를 구동시키는 Application class에서 사용되어지는 @SpringBootApplication 애노테이션을 직접 구현해보기 위해 합성 애노테이션으로 구성해보도록 하겠습니다. package com.tobyspring.tobyspringboot; import org.springframework.contex.. 2024. 6. 14.
섹션 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.