목록Spring (3)
'그 뭐더라'에서 '그' 를 설명하는 블로그
개요기획의 변경으로 open API 1개당 API 1개를 개발하는것에서open API 두개를 호출하여 하나의 API로 합쳐 반환하는 기능을 맡게 되었다.해당 기능을 구현하기 위해각 API를 비동기로 불러오고 이 과정을 스레드로 처리하면 좋겠다고 생각하였고.마침 자바 22를 사용하고 있어 가상스레드를 사용하게 되었다.코드를 작성하기 전에 가상스레드가 무엇인지 간단하게 알아보자. 가상 스레드란?1. 가상 스레드 VS 플랫폼 스레드(자바 기존 스레드)플랫폼 스레드운영체제는 유저모드와 커널모드로 나눠져있어 사용자가 커널의 기능을 사용하기 위해선 시스템 콜을 통해 통신해야합니다.기존 java 스레드는 유저 스레드를 만들면, Java Native Interface(자바와 외부가 통신해아하니깐)를 통해 System ..
개요스프링은 REST 엔드포인트 호출을 위해 다음과 같은 선택 사항을 제공한다.장점과 단점을 주로 기록하려고 한다. 실제로 단점을 느끼고 싶으면 코드를 찾아보면 좋다.RestTemplate스프링 3.0에 추가된 HTTP 통신 템플릿이다.동기 방식으로 작동한다.장점오래된 스프링 버전에서 사용 가능자유롭게 구성을 할 수 있음단점여러 메서드가 오버로드되어있어 사용하기 힘듦고전적인 템플릿 패턴Non-blocking 환경에서 적합하지 않음WebClientspring 5에 추가된 템플릿으로 비동기, 논블로킹을 지원하며 사용하고 싶다면 webflux 의존성이 필요하다.장점비동기 방식직관적이고 유연한 API 제공단점webflux 의존성 추가 필요 -> werClient만을 위해 해당 종속을 추가해야한다면....굳이 싶..
개요테스트를 통합테스트나 repository 테스트를 위해 외부 인프라 환경(예를 들어, DB!)이 필요한 경우가 온다.보통 이럴땐, 3가지 정도 방법이 존재하는데Local에 인프라 환경과 동일한 환경 구성하기 -> 보통 docker-compose 파일을 사용한다.h2 DB 사용하기 (DB 한정 해결 방법)TestContainers 사용하기기존 프로젝트는 1번과 2번을 혼합하여 사용하였다.하지만 이런 경우, 운영환경은 DB가 MySql인데 H2 인메모리 DB를 사용한다는 것과대부분 기능은 정상 작동하지만, 트랜잭션 isolation이나 특정 DBMS에 종속된 날짜함수를 사용하는 경우 문제가 생길 수 있다고 한다.이를 해결하기 위해 운영 환경과 동일한 테스트 환경을 만들어 테스트 멱등성을 보장하는것이 좋다..