본문 바로가기

Spring Framework

(11)
[Spring Boot] 환경별 설정 어떻게 해야할까? 개요저번 팀 프로젝트에서는 application.properties에 spring.profile.include=secret을 적고,github에 공유하지 않는 application-secret.properties를 통해 비밀값들을 관리했었다.그리고 배포 과정에서 Github Secrets를 사용해 그 값들을 암호화했다. 그런데 실전 스프링부트 책을 읽으며 이런 방식말고도 환경 변수를 이용하는 방법과local(로컬), dev(개발), prod(운영)별로 세팅을 다르게 하는 방법을 알 수 있었다. 환경 변수로 비밀을 관리하는 건 어렵지 않으니환경별 세팅하는 방법에 대해 자세히 알아보자!! 1. Profile을 통해 환경별 설정하기먼저 Profile을 통해 환경별로 설정하는 걸 배워보자. Profile 방식..
[Spring Boot] 스프링 부트 이벤트 리스너 구현과 등록 개요 실전 스프링 부트 책을 읽으며,스프링에 이벤트와 이벤트 리스너가 존재한다는 사실을 알게 되었다. 리스너의 구현 방식과 등록 방법에 대해서 정리해보고자 이 포스트를 작성한다. 1. 이벤트 리스너 구현 방법1. @EventListener 어노테이션 방식 (Spring 4.2+)@Componentpublic class MyEventListener { @EventListener public void handleApplicationReady(ApplicationReadyEvent event) { // 처리 로직 } @EventListener public void handleContextRefresh(ContextRefreshedEvent event) {..
[Spring Boot] SpringApplication.run() 메서드 인자에 관해서 개요package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.WebApplicationType;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(DemoApplication.class); springApplication.setW..
[Spring Boot] 리액티브 프로그래밍이란? 개요실전 스프링부트 책을 읽으며 package com.example.demo;import org.springframework.boot.SpringApplication;import org.springframework.boot.WebApplicationType;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DemoApplication { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(DemoApplication.class); spring..
[Spring Boot] 스프링 부트 애플리케이션 종료 개요 실전 스프링 부트 책을 읽던 중 shutdown hook 개념과 안전 종료 개념에 대해 배울 수 있었다. 관련 개념에 대해 알아보고,스프링 부트의 종료 로직을 좀 더 자세히 알아보자! 관련 개념1. Shutdown Hook- 개념: JVM이 종료되기 전에 실행되는 스레드- 이용: 스프링 부트에서는 자동으로 shutdown hook을 등록하여 애플리케이션 컨텍스트를 안전하게 종료한다. 2. 안전 종료(Graceful Shutdown)- 개념: 진행 중인 요청을 완료한 후 서버를 종료하는 방식- 지원 버전: 스프링 부트 2.3부터 지원.- 설정 방법# application.ymlserver: shutdown: gracefulspring: lifecycle: timeout-per-shutdo..
[Spring Boot] SpringApplication.run()을 호출하면 일어나는 일들 개요실전 스프링 부트 책을 읽다가 SpringApplication.run() 메서드가 실행될 때 수행하는 작업을 알게되었다.classpath에 있는 라이브러리를 기준으로 ApplicationContext 클래스 인스턴스를 생성CommandLinePropertySource를 등록해서 명령행 인자를 스프링 프로퍼티로 읽어 들인다.앞의 1단계에서 생성한 ApplicationContext를 통해 모든 싱글턴 빈을 로딩한다.애플리케이션에 설정된 ApplicationRunners와 CommandRunners를 실행한다. 설명은 위와 같았는데 과연 정말 그럴까???개발자는 코드로 공부해야 한다고 생각한다. 직접 코드를 뜯어보며 이해해보자. 코드먼저 참고한 스프링 부트의 버전은 3.2.2이다.버전이 다를경우 내부 로..
[Spring Security] SecurityFilterChain SecurityFilterChain의 개요이 글은 Spring Security 6.4.3을 기반으로 작성되었습니다.  SecurityFilterChain은 FilterChainProxy에 의해서 사용되고,여러 개의 Security Filter들로 구성되어 있습니다. 이 SecurityFilterChain을 통해 보안 처리가 이루어진다고 생각하시면 됩니다.    Security Filter들은 보통 Bean이지만,DelegatingFilterProxy나 Servlet container에 등록되는 대신 FilterChainProxy에 등록됩니다.  이를 통해 얻는 장점이 몇 가지 있습니다.1. Spring Security 디버깅이 편리해집니다.- FilterChainProxy는 모든 스프링 시큐리티 지원의 ..
[Spring Security] DelegatingFilterProxy와 FilterChainProxy DelegatingFilterProxy이 글은 Spring Security 6.4.3을 기반으로 작성되었습니다.  위 그림은 Client의 하나의 HTTP request에 대해서 Filter들을 거쳐 Servlet까지 가는 그림입니다. DelegatingFilterProxy는 이 Filter중 하나입니다.  DelegatingFilterProxy는 스프링에서 제공하는 필터 구현체로서,Servlet 컨테이너와 스프링 IoC 컨테이너의 다리 역할을 합니다. 다리 역할?서블릿 컨테이너는 스프링 IoC 컨테이너에서 관리하는 Bean들에 대해 알지 못합니다.하지만 DelegatingFilterProxy는 스프링 컨테이너에서 Filter를 구현한 Bean(Bean Filter)들을 찾아 등록할 수 있습니다.※ 아래..