Spring 5

@SpringBootTest / @WebMvcTest

@SpringBootTest와 @WebMvcTest는 스프링 부트 프레임워크에서 테스트를 작성할 때 사용되는 어노테이션이다. 둘 다 테스트를 쉽게 작성하고 테스트할 때 필요한 빈(Bean)들을 자동으로 로드하는 데 도움이 되지만, 사용하는 방식과 대상이 다르다. @SpringBootTest @SpringBootTest 어노테이션은 애플리케이션의 전체 컨텍스트를 로드하며, 통합 테스트를 작성할 때 사용된다. 따라서 모든 빈들이 로드되고 설정 파일들이 활성화된다. 데이터베이스나 메시징 시스템과 상호작용하는 경우, 실제로 실행되는 애플리케이션과 비슷한 환경에서 테스트를 수행할 수 있다. 애플리케이션의 여러 레이어를 테스트할 수 있으므로, 시스템의 통합성과 동작을 더 정확하게 테스트할 수 있다. 하지만 테스트가..

Spring 2023.07.25

Spring Rest Client

Rest Client Rest API 서버에 HTTP 요청(GET, POST, PUT, DELETE 등)을 보낼 수 있는 클라이언트 툴 또는 라이브러리이다. 예시로 UI가 갖춰져 있는 Postman을 떠올릴 수 있겠다. RestTemplate Blocking I/O 기반의 Synchronous API이다. 따라서 순차적으로 실행중인 라인이 끝나기 전까지 다음 라인으로 넘어가지 않는다. spring-boot-starter-web 의존성을 등록하면, RestTemplateAutoConfiguration 이 자동 설정된다. 또, RestTemplateBuilder 를 빈으로 자동 등록해준다. WebClient Non-Blocking I/O 기반의 Asynchronous API이다. WebClientAutoCo..

Spring 2023.07.25

스프링 컨테이너 (Spring Container)

Spring Container 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다. 스프링에서는 자바 객체를 빈(Bean)이라 한다. 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하며, 생성된 빈에게 추가적인 기능을 제공하는 것이다. 스프링 컨테이너는 XML, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다. 원래 XML을 통해 직접적으로 설정해 주어야 했지만, 스프링 부트가 등장하면서 대부분 사용하지 않게 되었다. 스프링 컨테이너의 종류 BeanFactory : 스프링의 가장 기본적인 컨테이너로, 빈의 생성과 관리에 대한 기능을 담당한다. 지연 초기화를 지원하며, 어플리케이션의 시작 시점에 모든 빈을 로드하지 ..

Spring 2023.07.24

의존성 주입(Dependency Injection, DI)

의존관계란? "A가 B를 의존한다."는 것은 "의존대상 B가 변하면, 그것이 A에 영향을 미친다."라고 말할 수 있다. 즉, B의 기능이 추가 또는 변경되면, 그것으로 인해서 A에도 영향이 미친다는 것이다. 예를 들자면, 어떤 제품의 설계도가 바뀌었을 때 그 설계도로 인해서 생산자가 그 제품을 만드는 방법을 수정해야 한다. 설계도가 변함으로써 생산자의 행위에 영향을 미쳤다. 이를 "생산자가 설계도에 의존한다."라고 말할 수 있다. class Producer { private Blueprint blueprint public Producer() { blueprint = new Blueprint(); } } 코드로는 이렇게 표현할 수 있겠다. 두 클래스가 강하게 결합되어 있고, 객체들 간의 관계가 아니라 클래..

Spring 2023.07.23

(Spring Boot) AOP(Aspect Oriented Programming)를 이용한 예외처리

AOP AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하는 것이라고 이해할 수 있다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. Exception같은 전체 로직 어디에서든지 동작할 수 있는 기능을 하나로 묶어 전역으로 처리하는 것으로 쉽게 이해할 수 있겠다. @ExceptionHandler @ExceptionHandler 어노테이션을 메서드에 선언하고 특정 예외 클래스를 지정해 주면해당 예외가 발생했을 때 메서드에 정의한 로직을 처리를 할 수 있다. 즉, 처리하고 싶은 Exception을 정의한..

Spring 2023.07.20