Spring 20

Spring Boot의 SSE(Server-Sent Events) Graceful Shutdown 동작 원리

들어가기 전에 포스팅 계기앞전에 Graceful Shutdown의 동작원리에 이어서, SSE Graceful shutdown 이 어떻게 동작하는지 동작 원리를 명확히 알고자 포스팅하게 됐습니다.1. 일반적인 Graceful Shutdown vs SSE Graceful Shutdown일반적인 HTTP 요청과 SSE 연결의 가장 큰 차이점은 "연결 지속 시간"입니다.일반 HTTP 요청요청-응답 후 즉시 연결 종료대부분 짧은 시간 내 처리 완료Graceful Shutdown 시 진행 중인 요청만 완료하면 됨SSE 연결클라이언트와 서버 간 장기 연결 유지서버에서 클라이언트로 지속적인 이벤트 스트리밍명시적인 연결 종료 처리 필요2. SSE Graceful Shutdown 동작 과정2.1 Shutdown 시그널 수..

Spring/Spring Boot 2025.01.05

Spring Boot의 Graceful Shutdown 동작 원리와 구현 과정

들어가기 전에 포스팅 계기오랜만에 글 작성 해보려고 합니다. 최근에 사내에 SSE(Server-Sent Events)를 기반으로 개발한 기능이 있어서 Graceful shutdown 이 어떻게 동작하는지 추상적으로만 알고 있었고 동작 원리를 명확히 알고자 포스팅하게 됐습니다.본론Spring Boot 애플리케이션이 종료될 때, Graceful Shutdown은 중요한 역할을 합니다. 이는 처리 중인 요청을 안전하게 종료하고, 리소스를 정리하며, 종료 상태를 클라이언트에 알리는 메커니즘입니다. 본 글에서는 Spring Boot의 Graceful Shutdown이 어떻게 등록되고 실행되는지, 그리고 kill -15 신호를 받을 때 어떤 단계로 동작하는지 상세히 살펴보겠습니다.1. Graceful Shutdow..

Spring/Spring Boot 2024.11.24

@Log4j2 vs @Slf4j with log4j2

@Log4j2 vs @Slf4j with log4j2 프로젝트 진행 도중 @Log4j2 을 사용할지 @Slf4j로 log4j2.xml 을 설정해서 같이 사용할지 고민을 했었다. SLF4j(Simple Logging Facade For Java) 애플리케이션이 문자열을 기록하도록한다. Log4j2 API는 텍스트를 로깅하려는 경우 모든 CharSequence 로깅을 지원하지만 모든 개체를 있는 그대로 로깅하는 것도 지원한다 Log4j2 메시지 개체 로깅, Java 8 람다식 및 가비지 없는 로깅을 지원한다(CharSequence 개체 로깅시 문자열 생성방지) 뭘 써야할까? Log4j2와 slf4j는 똑같은 기능을 제공한다고 한다. Log4j2가 API와 구현 모듈로 분리되어서 SLF4J를 사용하지 않아도 ..

Spring/Spring Boot 2021.01.22

Spring Boot AutoConfiguration 자동 설정, 원리

Spring Boot AutoConfiguration 자동 설정, 원리 Spring Boot는 Spring과 마찬가지로 component-scan을 통해서 component들을 찾아서 bean을 생성한다. 이 과정으로 설정한 bean들(@Repository, @Service, @Controller, @RestController, @Configuration에 등록한 @Bean과 같은 설정들)이 생성된다 Spring Boot에서 미리 작성된 autoconfiguration에 의해 추가적인 bean들도 같이 생성된다. @SpringBootApplication @SpringBootApplication public class Application { public static void main(String[] ar..

Spring/Spring Boot 2021.01.03

[Spring] HTTP 요청 맵핑 - 커스텀 애노테이션

Custom Annotation 직접 커스터마이징 하는것이 커스텀 애노테이션이다. @RequestMapping 애노테이션을 메타 애노테이션으로 사용하기 @GetMapping 같은 커스텀한 애노테이션을 만들 수 있다. 메타(Meta) 애노테이션 애노테이션에 사용할 수 있는 애노테이션 스프링이 제공하는 대부분의 애노테이션은 메타 애노테이션으로 사용할 수 있다. 조합(Composed) 애노테이션 한개 혹은 여러 메타 애노테이션을 조합해서 만든 애노테이션 코드를 간결하게 줄일 수 있다. 보다 구체적인 의미를 부여할 수 있다. @Retention 해당 애노테이션 정보를 언제까지 유지할 것인지. Source: 소스 코드까지만 유지. 즉, 컴파일 하면 해당 애노테이션 정보는 사라진다는 이야기이다 Class: 컴파인 ..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - HEAD와 OPTIONS

HEAD와 OPTIONS 우리가 구현하지 않아도 스프링 웹 MVC에서 자동으로 처리하는 HTTP Method HEAD OPTIONS HEAD GET 요청과 동일하지만 응답 본문을 받아오지 않고 응답 헤더만 받아온다. (테스트 하기 위함) 예시 @Controller public class SampleController { @GetMapping( value = "/hello", params = "name=sungjun" ) @ResponseBody public String hello() { return "hello"; } } @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - 헤더와 매개변수

헤더와 매개변수 특정한 헤더가 있는 요청을 처리하고 싶은 경우 @RequestMapping(headers = “key”) @Controller public class SampleController { @GetMapping( value = "/hello", headers = HttpHeaders.AUTHORIZATION ) @ResponseBody public String hello() { return "hello"; } } @WebMvcTest public class SampleControllerTest { @Autowired MockMvc mockMvc; @Test public void helloTest() throws Exception { mockMvc.perform(get("/hello") .hea..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - 미디어 타입

미디어 타입 맵핑 특정한 타입의 데이터를 담고 있는 요청만 처리하는 핸들러 @RequestMapping(consumes=MediaType.APPLICATION_JSON_UTF8_VALUE) Content-Type 헤더로 필터링 매치 되는 않는 경우에 415 Unsupported Media Type 응답 특정한 타입의 응답을 만드는 핸들러 @RequestMapping(produces=”application/json”) Accept 헤더로 필터링 (하지만 살짝... 오묘함) 매치 되지 않는 경우에 406 Not Acceptable 응답 문자열을 입력하는 대신 MediaType을 사용하면 상수를 (IDE에서) 자동 완성으로 사용할 수 있다. 클래스에 선언한 @RequestMapping에 사용한 것과 조합이 되..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - URI 패턴 맵핑

URL(Uniform Resource Locator 또는 web address, 문화어: 파일식별자, 유일자원지시기) 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다. 즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다. 쉽게 말해서, 웹 페이지를 찾기위한 주소를 말한다. 흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다. URI Uniform Resource Identifier. resource의 식별자이다. 리소스의 식별은 리소스의 위치를 표시하거나 unique한 이름으로 접근할..

Spring/Spring MVC 2020.11.15

[Spring] HTTP 요청 맵핑 - 요청 메소드

HTTP Method GET, POST, PUT, PATCH, DELETE, ... GET 요청 클라이언트가 서버의 리소스를 요청할 때 사용한다. 캐싱 할 수 있다. (조건적인 GET으로 바뀔 수 있다.) 브라우저 기록에 남는다. 북마크 할 수 있다. 민감한 데이터를 보낼 때 사용하지 말 것. (URL에 다 보이니까) idempotent(멱등) Controller import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public ..

Spring/Spring MVC 2020.11.15