Spring Boot Docker 배포 가이드 – Dockerfile부터 docker-compose까지
Spring Boot 애플리케이션을 Docker로 패키징하고 docker-compose로 데이터베이스와 함께 실행하는 전체 배포 흐름을 정리한다.
배움의 즐거움, 나눔의 가치를 실천하는 DevLog
Spring Boot 애플리케이션을 Docker로 패키징하고 docker-compose로 데이터베이스와 함께 실행하는 전체 배포 흐름을 정리한다.
Spring Boot Security와 JWT를 연동하여 인증/인가 시스템을 구현하는 전체 흐름을 실무 코드 중심으로 정리한다.
Spring Boot 애플리케이션은 tomcat, jetty, undertow와 같이 여러 내장 서버를 사용할 수 있지만 디폴트 내장 서버는 tomcat을 사용한다. tomcat 내장 서버를 바로 사용할 수 있는 기본 구성 세트가 있지만 속성 또는 yaml 파일을 이용하여 내장 톰캣 서버를 구성하고 기본 설정을 변경할 수 있다. 이번 포스팅에서는 Embedded Tomcat Server Config에 대해서 간단히 정리하고자 한다.
Spring Data MongoDB 자동 구성과 함께 application.yml 에서 mongodb 관련 설정 몇가지를 알아보고 연결 설정을 제어하는 몇가지 방법에 대해서 정리하고자 한다.
외부 서버의 REST API를 호출할 때 RestTemplate, WebClient나 RestClient(Spring Boot 3.2)를 사용하는 것이 일반적이다. 이러한 클라이언트는 요청 메서드, URI, 헤더, 응답 매핑 등을 직접 작성해야 하므로 반복 코드가 많아졌다. HTTP Interface는 이러한 문제를 해결하기 위해 Spring Framework 6부터 등장한 개념이다. 단순히 Java 인터페이스에 어노테이션(@HttpExchange, @GetExchange, @PostExchange)을 붙이면 Spring이 자동으로 구현체(Proxy)를 생성해 WebClient 혹은 RestTemplate, RestClient 기반으로 HTTP 요청을 수행할 수 있다.
클라이언트가 서버에 특정 HTTP 요청을 보내면 서버는 HTTP Status Code를 반환한다.
클라이언트는 응답 코드를 통해서 서버가 요청 처리를 실패했는지, 거부했는지,성공했는지 알 수 있다.
Spring Boot기반 애플리케이션에서 기본 프레임워크는 서버가 반환하는 모든 응답에 적절한 HTTP Status Code를 자동으로 추가한다. 또한 Spring Boot은 컨트롤러의 HTTP 응답 상태를 사용자 정의하는 방법도 제공한다.
우리가 작성한 수많은 서비스 객체들이 어느 시점에 생성되고 어떤 과정을 거쳐 완성되며 어떻게 서로 소통하는지를 아는 것은 프레임워크를 사용하는 단계에서 제어하는 단계로 넘어가는 핵심 역할을 할 수 있도록 한다. 이번 포스팅에서는 Bean의 생성 후 초기 작업(Bean Initialization)과 Bean 생성 시점에 틈새를 공략하는 확장 기법 그리고 부트스트래핑 과정에서 발생하는 이벤트와 이벤트 시스템(Event System)에 대해서 정리해 보고자 한다.
SpringApplication 인스턴스가 생성된 후 인스턴스의 run() 호출시(정적 메서드 run()이 아니다) Application Bootstraping을 위한 13단계를 거치는데 어떤 과정들을 수행하는지 알아보자. SpringApplication 클래스 코드는 Spring Boot 3.2.1 버전을 사용하였다.
Spring Boot 애플리케이션을 개발할 때 우리가 가장 먼저 마주하는 코드는 @SpringBootApplication 어노테이션이 붙은 클래스와 그 안의 main 메서드일 것이다.
몇 줄 안되는 매우 간단한 코드지만 SpringApplication.run() 호출 뒤에는 수십 개의 클래스가 협력하여 복잡한 초기화 과정을 수행한다. Spring Boot는 이러한 복잡성을 숨기고 개발자에게 단순한 인터페이스를 제공하지만 내부 동작을 이해 하면 더 효과적으로 Spring Boot를 활용할 수 있다. 이번 포스팅에서는 SpringApplication 객체가 생성될 때 내부적으로 어떤 동작들이 이루어지는지 정리해 보고자 한다.
Spring Boot 분산 환경(멀티 인스턴스)에서 발생하는 스케줄러 중복 실행 문제를 ShedLock과 Redis를 활용해 해결하는 방법과 상세 설정 과정을 정리했다.