Spring
-
[Spring] Spring Event로 비동기 이벤트 처리하기Spring 2024. 11. 25. 15:26
개요서비스에서 타임아웃 혹은 에러가 발생한 경우 협업 메신저인 잔디로 알람을 보내는 기능이 있었다. 이 기능은 응답을 받을 필요 없이 웹훅만 날리면 되는 기능이었기 때문에 이를 비동기로 처리되도록 하였다. @Async 메서드로 간단히 처리할 수 있지만 컴포넌트 간 결합을 느슨하게 하기 위해 Spring Event를 도입하였다. Spring Event 란Spring에서 제공하는 이벤트 기반 프로그래밍 기능으로, 애플리케이션 컴포넌트 간의 느슨한 결합을 지원한다. 이벤트를 발행(publish)하고 이를 처리(handle)하는 구조를 통해 비즈니스 로직과 부가 작업을 분리할 수 있다. Spring Event의 주요 개념 이벤트 발행자 (Publisher) 이벤트를 생성 Applicatio..
-
[Spring] Mybatis와 JPA의 차이Spring 2024. 10. 29. 00:12
개요Spring으로 개발을하게 되면 영속성을 관리하기 위하여 Mybatis 혹은 JPA중 어떤 기술을 사용할지 고민하게 될 수 있습니다. 이 두 기술은 서로 다른 특징을 갖고 탄생했는데 이 기술들에 대해 알아보기 전에 먼저 영속성이 무엇인지부터 알아보도록 하겠습니다. 영속성 (Persistence)영속성이란 프로그램이 종료가 되더라도 데이터가 사라지지 않는 특성을 말합니다. 영속성을 갖지 못한 데이터는 메모리에만 저장되고 프로그램이 종료되면 사라지게 됩니다. 90년대 이전에는 데이터의 영속성이 필수가 아니었지만 점점 온라인을 활용한 비즈니스가 증가하게 되면서 데이터의 영속성은 반드시 필요하게 되었습니다. 그렇게 데이터베이스를 활용하여 데이터를 저장하였고 프로그램이 종료되더라도 데이터가 휘발되지 않게 되었..
-
[Spring] ResponseEntity vs ServerResponseSpring 2024. 10. 28. 23:51
Spring Framework에서 HTTP 응답을 다루기 위해 ResponseEntity와 ServerResponse라는 두 가지 다른 접근 방식을 제공한다. 이 두 클래스는 각각 Spring MVC와 Spring WebFlux에서 사용되며, 사용하는 프레임워크의 아키텍처에 따라 선택된다. ResponseEntitySpring MVC에서 사용된다.HTTP 요청에 대한 전체 응답을 나타내며, 상태 코드, 헤더, 본문을 포함할 수 있다.동기식 처리동기적인 서버 환경에서 사용된다.요청을 처리할 때 서버 스레드가 해당 요청을 끝날 때까지 블로킹 된다.메서드에서 ResponseEntity를 반환하면, Spring MVC가 HTTP 응답을 구성한다.예시@GetMapping("/user/{id}") public Re..
-
[Spring] Controller vs RouterSpring 2024. 10. 28. 23:47
Spring Framework에서 HTTP 요청을 처리하는 두 가지 주요 방식은 Controller 와 Router 이다. 이 두 방식은 다음과 같다. Controller 방식Spring MVC에서 사용되는 전통적인 방식이다.이 방식에서는 @Controller 혹은 @RestController 어노테이션을 사용하여 클래스를 정의한다각 메소드에 @RequestMapping 또는 그와 유사한 어노테이션(@GetMapping, @PostMapping 등)을 사용하여 HTTP 요청을 처리한다. Router 방식Spring WebFlux에서 사용되는 방식으로 함수형 스타일을 통해 라우팅을 정의한다.RouterFunction 인터페이스를 사용하여 라우트를 설정한다.HandlerFunction 인터페이스를 통해 HT..
-
[Spring] @Transactional 정리Spring 2024. 10. 28. 13:59
Spring 에서는 트랜잭션을 세부적으로 설정할 수 있다.전파 속성격리 수준읽기 전용롤백/커밋 예외제한 시간 전파 속성 (Propagation)여러 트랜잭션 적용 범위를 묶어 하나의 트랜잭션 경계를 만들 수 있다.물리 트랜잭션은 실제 DB와 연결되어 작업이 이루어진다. ‘물리 트랜잭션 = 여러 논리 트랜잭션의 묶음’으로 모든 논리 트랜잭션이 커밋돼야 물리 트랜잭션이 커밋된다. 즉, 논리 트랜잭션의 하나라도 실패하면 롤백된다. 코드 예시@Transactional(propagation = Propagation.REQUIRED) REQUIRED디폴트 속성이미 시작된 트랜잭션이 있으면 참여하고 없으면 새로 시작하나의 트랜잭션이 시작된 후 다른 트랜잭션 경계가 설정된 메서드를 호출하면 같은 트랜잭션으로 묶임SU..