JVM/SpringMVC 5

스프링 이벤트 시스템

스프링 이벤트 시스템은 애플리케이션 내부에서 이벤트를 발행하고, 이를 처리하는 리스너에게 비동기 또는 동기적으로 전달함으로써 결합도를 낮추고 유연한 아키텍처를 제공하는 메커니즘이다. 특정 이벤트가 발생했을 때 이를 감지하고, 적절한 리스너에게 알림을 보내는 방식으로 동작한다. 이벤트를 발행하는 컴포넌트와 이를 처리하는 리스너는 서로 독립적으로 동작한다.  스프링 이벤트의 장점 및 주의점느슨한 결합: 이벤트 발행자와 리스너 간의 의존성이 없기 때문에 모듈 간 결합도를 낮출 수 있다.확장성: 새로운 이벤트 리스너를 추가하는 것이 매우 쉽다.유연성: 필요에 따라 동기 또는 비동기 방식으로 이벤트를 처리할 수 있다.비동기 처리 시 주의: 비동기 처리를 사용할 때는 스레드 풀 설정이나 예외 처리 등에 신경 써야 ..

JVM/SpringMVC 2024.08.10

빈 스코프: 빈의 생명 주기와 활용

스프링 빈 스코프란 무엇일까?스프링 빈 스코프는 스프링 컨테이너에서 관리되는 빈의 생명 주기와 활용 범위를 정의하는 개념이다. 빈 스코프는 빈이 생성되는 시점, 빈이 사용되는 범위, 빈이 소멸되는 시점 등을 결정한다. 스프링 빈 스코프 종류싱글톤기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다.프로토타입스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.프로토타입 빈을 관리할 책임은 프로토타입 빈을 받은 클라이..

JVM/SpringMVC 2024.03.09

CORS와 Preflight Request

CORS Corss-Origin Resource Sharing의 약자로 서로 다른 도메인 간 리소스 공유를 제어하는 메커니즘이다. 브라우저는 동일 출처 정책에 의해 다른 호스트로에 리소스 요청을 차단한다. cross origin의 예시 기준 URL http://kyoulho.com 프로토콜이 다른 경우 https://kyoulho.com 포트가 다른 경우 http://kyoulho.com:8080 도메인이 다른 경우 http://ulho.com 하위 도메인 http://sub.kyoulho.com maxAge 설정 maxAge를 설정하면 동일한 도메인에서 동일한 리소스에 대한 CORS 요청 시 매번 사전 검사 요청을 보내지 않고 캐시 된 결과를 사용할 수 있다. maxAge 값만큼 시간이 지나면 캐시가 ..

JVM/SpringMVC 2024.03.09

요청 처리와 스레드풀

스레드풀을 사용하는 이유프로세스는 실행 중인 프로그램을 나타내며, 스레드는 프로세스의 작업 단위이다. 자바에서의 스레드는 주로 OS의 스레드에 일대일로 매핑된다. 이는 각 자바 스레드가 하나의 OS 스레드에 대응된다는 것을 의미한다. 그러나 이런 매핑 방식은 스레드 생성 비용과 Context Switching 빈도로 인해 효율적이지 않다. 이러한 문제에 대응하기 위해 사용되는 것이 스레드 풀이다. 스레드 풀은 미리 정의된 수의 스레드를 생성하고 관리하여 작업을 효율적으로 할당한다. Http 요청은 어떻게 스레드에 할당되는가? 서버가 실행되면 NioConnector(비동기 네트워크 통신을 관리하는 주체)가 생성되고 그다음에는 NioProtocol(실제 통신 프로토콜 및 데이터 처리를 담당)이 생성되고 이후..

JVM/SpringMVC 2023.12.20

Spring WebSocket & STOMP

웹소켓 웹소켓은 텍스트와 바이너리 타입의 메시지를 양방향으로 주고받을 수 있는 프로토콜이다. 게임, 채팅, 실시간 주식 거래 사이트 등 실시간성을 보장하는 서비스에서 사용된다. HTTP에서도 실시간성을 보장하는 기법이 존재한다. (Polling, Long Polling, Streaming) 웹소켓을 지원하지 않는 브라우저에서는 SockJS, Socket.io를 사용하여 HTTP의 다른 기법을 대신 사용하여 웹소켓을 사용하는 거처럼 보이게 할 수 있다. HTTP vs 웹소켓 HTTP 웹소켓 비 연결성 매번 연결 맺고 끊는 과정의 비용 (매 요청마다 수많은 헤더들을 만들어서 보내야 한다) 요청 - 응답 구조 연결 지향 한번 연결 맺은 뒤 유지 양방향 통신 첫 연결은 HTTP를 사용한다 설정 @Configur..

JVM/SpringMVC 2023.12.15