Spring Framework/Spring boot

Spring Framework/Spring boot

STOMP란? Spring WebSocket으로 실시간 채팅 시스템 만들기

STOMP란Simple Text Oriented Messaing Protocol의 약자텍스트 기반의 경량 메시징 프로토콜로, 웹에서 Websocket과 함께 사용하여 서버-클라이언트 간의 메시지 통신을 쉽게 구축할 수 있다.클라이언트와 서버가 전송할 메시지 유형, 형식, 내용들을 정의하는 메커니즘기본적으로 Publish-Subscribe 구조로 되어있다.Publish-Subscribe 구조란 메시지를 공급하는 주체와 소비하는 주체를 분리하여 제공하는 메시징 방법이다. STOMP 기능 STOMP 메시지 구조SENDdestination:/chat/room/123content-type:application/json{ "message": "Hello!" }SEND: 메시지 전송하는 명령destination: 메..

Spring Framework/Spring boot

Springboot 이벤트 발행과 처리 흐름 이해하기: @EventListner, ApplicationEventPublisher, Dispatcher

@EventListenerSpring 이벤트 리스너 어노테이션으로, 특정 이벤트가 발생했을 때 실행할 메서드를 지정할 수 있습니다.@EventListenerfun handle(event: CustomEvent) { // 이벤트 처리 로직}메서드의 파라미터 타입으로, 어떤 이벤트를 처리할지 결정합니다.기본 값은 동기적으로 실행됩니다.동시성이 중요한 작업이 아니라면, 비동기로 처리하여 효율적으로 처리할 수 있습니다.@TransactionalEventListener트랜잭션 상태에 따라 이벤트 처리 시점을 제어할 수 있습니다.An EventListener that is invoked according to a TransactionPhase If the event is not published within ..

Spring Framework/Spring boot

Spring @Transactional 동작 방식과 readOnly=true 사용 시 주의할 점 정리

Transaction 필요한 이유2 가지 이상의 작업을 하나의 트랜잭션으로 처리하기 위해서순서대로 작업되던 중 작업 A와 작업 B 사이의 오류가 발생하면, 이미 작업 A는 처리되어 commit 된 시점이어서 A의 돈이 차감되는 문제가 발생합니다.문제가 발생하여 rollback을 진행해도, 마지막 commit 시점이 작업 A가 끝난 시점이어서 문제가 발생하기 전 시점으로 롤백할 수 없습니다. JDBC Transaction 이해하기Connection connection = dataSource.getConnection();try (connection) { connection.setAutoCommit(false); // execute some SQL connection.commit();} catch (SQ..

Spring Framework/Spring boot

Spring 멀티 모듈에서 환경별 YML 파일 분리 및 관리 방법 (Gradle & processResources)

문제 : Multi Module yml 파일 분리 안됨문제 상황멀티 모듈 프로젝트 환경에서 yml 파일을 각 모듈의 역할에 맞게 관리하고자 했다.기존에는 yml 파일 내용이 중복으로 저장되고 있어, 이를 수정하거나 삭제할 때 번거로움이 있었다. 이를 A 모듈은 A와 관련된 설정 파일만 관리하고 B 모듈은 B와 관련된 설정 파일만 관리하도록 변경했다. 기대 효과중복되는 yml 설정 코드를 제거할 수 있다.수정, 삭제 시 한 곳에서만 처리 가능하다.각 모듈의 역할에 따라 설정 코드를 관리할 수 있다.기존에는 실행 모듈의 yml에 모든 정보를 가지고 있어, 어느 모듈에 대한 설정 코드인지 알기 어려움 Multi Module 분리하기A, B, C 모듈이 있다고 했을 때 각 모듈이 담당하는 설정들을 모듈 내 ym..