Server 120

Connection Pool Deadlock 해결하기! (feat. REQUIRES_NEW)

HTML 삽입 미리보기할 수 없는 소스 해당 포스팅은 서비스를 오픈하면서 겪었던 이슈와 해결에 대해 공유한다. 아래 코드 및 내용은 예시를 위해 만든 프로젝트이다! 송금 서비스 송금 서비스에서 은행 API를 호출해서 송금을 한다고 가정해보자. 아래는 예시를 위한 코드이다. @Service @RequiredArgsConstructor public class TransferService { private final TransferRepository transferRepository; private final BankingRequestRepository bankingRequestRepository; private final BankingApiAdaptor bankingApiAdaptor; @Transactio..

Server/Spring JPA 2024.03.30

FixtureMonkey 적용 검토해보기!

HTML 삽입 미리보기할 수 없는 소스 새로운 팀에서 테스트를 위한 객체를 생성하는 패턴이나 라이브러리가 필요하게 되었다. 팀원 분이 FixtureMonkey를 추천해주셔서 POC를 진행하게 되었다. FixtureMonkey FixtureMonkey는 Naver에서 만든 테스트 객체를 쉽게 생성하고 조작할 수 있도록 도와주는 Java 및 Kotlin 라이브러리이다. FixtureMonkey는 한국어 docs를 지원한다. 오픈소스 중에 볼륨도 작은 편이라 한번 읽어보는 것도 추천드린다. 포스팅 내용은 요약 및 검토 정도로 봐주면 좋을 것 같다. https://naver.github.io/fixture-monkey/v1-0-0-kor/docs/introduction 이전에 사용하지 않았던 이유 Fixture..

Server/JUnit, Spock 2024.03.23

Spring Webflux - ServerSentEvent 이해하기!

HTML 삽입 미리보기할 수 없는 소스 Server Sent Event Server Sent Event는 서버에서 클라이언트에게 일방적으로 이벤트를 전달하는 방식이다. 클라이언트에서 서버의 이벤트를 구독하기 위해서는 Polling 방식을 주로 사용했다. Polling Polling 방식은 Client에서 Server에게 특정 주기로 요청을 보내서 데이터를 조회하는 방식이다. 구현이 간단하지만, 실시간성이 떨어지고 불필요한 네트워크 요청을 지속적으로 하기 때문에 자원을 낭비하게 된다. Long Polling 앞선 Polling의 문제를 해결하기 위해 Long Polling 기법이 나왔다. Long Polling 방식은 서버가 요청을 받은 후 데이터가 생길 때까지 기다렸다가 응답을 보내는 방식이다. 이 방식..

Spring Webflux란 무엇인가?! - 3. Spring Webflux 이해하기!

해당 포스팅은 Netty, Reactor를 넘어서 Spring Webflux에 대한 자세히 다룬다. Spring Reactive Stack 1편에서 봤던 Spring Reactive Stack을 다시 살펴보고 넘어가자. WebFluxAutoConfiguration WebFluxAutoConfiguration은 SpringWebflux 사용을 위한 필수적인 AutoConfiguration이다. 아래 코드를 보자. @AutoConfiguration(after = { ReactiveWebServerFactoryAutoConfiguration.class, CodecsAutoConfiguration.class, ReactiveMultipartAutoConfiguration.class, ValidationAutoC..

Spring Webflux란 무엇인가?! - 2. Reactor 이해하기!

이번 포스팅에서는 Project Reactor의 사용 방법에 대해 다룬다. Project Reactor 아래 포스팅에서 ReactiveProgramming에 대해 설명했고, Reactive Stream과 Project Reactor에 대해서도 간단하게 설명했었다. https://jaehoney.tistory.com/359 개념 자체가 생소하다면 해당 포스팅(이전 편)을 참고하시길 추천한다. Reactive Stream을 이해하고 있다면 굳이 보지 않아도 괜찮다. 첫 번째로 살펴볼 것은 Subscribe이다. Subscribe Mono와 Flux가 구현하는 CorePublisher 인터페이스이다. public interface CorePublisher extends Publisher { void subsc..

Spring Webflux란 무엇인가?! - 1. Netty 이해하기!

Reactive Programming with Spring Boot 아래는 Spring 공식문서에 나와있는 Spring MVC와 Spring Webflux에 대한 설명이다. Spring MVC는 동기 블로킹 기반의 서블릿 API와 request-per-thread 모델을 제공하고, Spring Webflux는 대량의 동시 커넥션이 가능한 Non-Blocking 웹 프레임워크이다. 해당 부분을 조금 더 풀어서 알아보자. Spring Webflux Spring MVC는 request-per-thread 모델이기 때문에 만약 1만개 이상의 요청이 동시에 들어온다면 쓰레드가 부족하게 된다. Spring Webflux는 쓰레드를 가능한 최소한으로 사용하는 모델과 리액티브 프로그래밍 라이브러리를 제공한다고 생각하면..

Axon Framework로 Orchestration-based Saga 구현하기!

HTML 삽입 미리보기할 수 없는 소스 해당 포스팅은 아래 강의 내용의 예시 코드를 포함하고 있습니다. https://fastcampus.co.kr/courses/216427 강의 코드를 따라하면서 재해석한 부분으로 이해해주시면 감사하겠습니다~ Axon Framework란? Axon Framework의 Document의 설명을 보면 첫줄은 아래와 같다. Axon Framework is a framework for building evolutionary, message-driven microservice systems based on the principles of Domain-Driven Design (DDD), Command-Query Responsibility Separation (CQRS), and..

Server/Spring MSA 2023.12.26

Hibernate ORM 공식문서 읽어보기!

Spring JPA 기반에서 개발하다보면 아래 라이브러리를 사용하게 된다. Jakarta Persistence API Hibernate ORM Spring Data JPA Jakrta Persistence API는 명세에 해당한다. 실제 구현하는 기술은 Hibernate ORM에 있다. 해당 포스팅에서는 Hibernate ORM에 대해 공식문서를 읽고 학습 테스트를 진행하면서 알아두면 좋을 내용에 대해 소개한다. Hibernate ORM Hibernate ORM에서 소개하는 목표는 아래와 같다. Hibernate’s design goal is to relieve the developer from 95% of common data persistence-related programming tasks by e..

Server/Spring JPA 2023.12.19

QueryDsl에서 Index Hint 사용하기!

MySQL 5.7을 사용하는 프로젝트의 QueryDSL 동적 쿼리에서 특정 경우에 인덱스를 안타는 문제가 발생했다. 운영 중인 서비스에서 커버링인덱스를 탈 수 있는 상황에서는 인덱스를 선택했지만, 인덱스에 없는 컬럼 정렬 등에서 PK를 타서 쿼리가 밀리는 현상이 자주 생겼다. 그래서 Index Hint를 QueryDsl에서 사용할 수 있도록 조치가 필요했다. 아래는 해당 처리를 위해 길을 떠나면서 얻게된 방법들이다. 1. JPASQLQuery querydsl-jpa는 JPASQLQuery라는 것을 제공한다. 아래는 해당 클래스의 설명이다. JPASQLQuery is an SQLQuery implementation that uses JPA Native SQL functionality to execute q..

Server/Spring JPA 2023.12.08

JPA - OSIV 제대로 이해하기!

OSIV(Open Session In View) OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 개방하는 기능이다. 이를 사용하면 트랜잭션이 종료되어도 영속성 컨텍스트가 관리될 수 있다. 여기까지는 사실 다 아는 내용이고 OSIV의 동작 원리에 대해 알아보자. OpenInView Spring 환경에서 보통 아래의 property로 OSIV 설정에 접근한다. spring.jpa.open-in-view 아래는 JpaWebConfiguration 클래스의 애노테이션이다. open-in-view 속성에 따라 해당 Configuration이 등록된다는 것을 알 수 있다. 이를 통해 알 수 있는 놀라운 사실은 'Spring JPA도 웹과 연관이 있다.'는 것이다. JpaProperties..

Server/Spring JPA 2023.11.19