본문 바로가기

Spring51

섹션 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.
섹션 5-1 [DI와 테스트, 디자인 패턴] 테스트 코드를 이용한 테스트 테스트 코드를 이용한 테스트테스트 코드를 작성하여 하는 테스트는 여러 이름으로 불리우지만 개발자가 진행하는 테스트라는 의미로 해석하면 이해하는데 무리는 없을듯 합니다. 기존에 구성하였던 HelloApi를 JUnit을 기반으로 테스트 코드를 작성해보도록 하겠습니다.package com.tobyspring.tobyspringboot; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.springframework.boot.test.web.client.TestRestTemplate; import org.springframework.http.HttpHeaders; import org.springfr.. 2024. 6. 11.
섹션 4-11 [독립 실행형 스프링 애플리케이션] SpringBootApplication SpringBootApplication.run을 직접 구현해보자MySpringApplication.classpackage com.tobyspring.tobyspringboot; import org.springframework.boot.web.server.WebServer; import org.springframework.boot.web.servlet.server.ServletWebServerFactory; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.DispatcherServlet; public class MyS.. 2024. 6. 1.
섹션 4-10 [독립 실행형 스프링 애플리케이션] Bean 생명주기 메소드 Bean생명주기 메소드지금까지 우리는 비즈니스를 처리하기 위해 HelloController, HelloService를 Bean으로 등록하고 관리하였습니다 그러나 이외 추가적으로 오브젝트를 새로 생성하는 게 두가지 정도가 있습니다. TomcatServletWebServerFactory, DispatcherServlet 입니다. Standart Alone애플리케이션을 만들기 위해서 보이지 않는곳에서 일을 해주는 오브젝트를 만들어야 해서 직접 코드로 생성을 했는데 이러한 오브젝트들도 Spring Bean으로 등록하여 관리될 수 있도록 코드를 수정하려고 합니다. TobyspringbootApplication.classpackage com.tobyspring.tobyspringboot; import or.. 2024. 6. 1.