[핵심 요약]1. 자체 HTTP Client 및 RestTemplate을 OpenFeign으로 전환기존에는 RestTemplate이나 직접 구현한 HTTP Client를 사용하여 외부 API를 호출했지만, 이를 OpenFeign으로 변경했다.OpenFeign을 사용하면 API 호출을 인터페이스 기반으로 선언형으로 작성할 수 있어 코드가 간결해지고 유지보수가 쉬워진다.테스트 시에도 API 호출을 Mock 객체로 대체하기 쉬워 테스트 용이성이 증가한다. 2. OpenFeign + Resilience4j로 서킷 브레이커 패턴 적용기존 HTTP Client에서 네트워크 장애가 발생하면, 응답 시간이 지연되거나 서버 부하가 증가하는 문제가 있었다.이를 Resilience4j의 서킷 브레이커 패턴을 활용해 해결했..
백엔드 개발/Spring&JPA
[문제 상황]Spring 애플리케이션에서 특정 환경에서만 빈(Bean)을 등록하도록 @Conditional을 활용했는데, 내부적으로 static boolean 값을 참조하는 Condition 구현체가 있었다.하지만, 이 boolean 값이 @PostConstruct로 초기화되기 때문에 빈이 생성되는 시점에서 값이 초기화되지 않아 애플리케이션이 정상적으로 뜨지 않는 문제가 발생했다. 1. 문제의 코드를 살펴보자 (예시)@Configurationpublic class AppConfig { @Bean @Conditional(MyCondition.class) // 특정 조건을 만족할 때만 빈 등록 public MyService myService() { return new M..

[문제 상황]조회 기능을 만드는데 order by로 정렬을 하는데 한국어가 정렬이 안된다. 데이터베이스의 로케일(Locale) 설정과 정렬 방식(Collation) 때문인데, PostgreSQL은 데이터베이스를 생성할 때 locale 지정을 해줘야하고, 만들어진 DB에는 수정이 불가하다고 한다... 따라서 기존의 테이블에서 정렬하는 해결 방법을 알아보자. 1. 현재 데이터베이스의 로케일(Locale) 확인하기PostgreSQL의 정렬 방식은 데이터베이스가 생성될 때 결정된다. 현재 사용 중인 데이터베이스의 로케일을 먼저 확인하자. PostgreSQL 실행해서 다음 명령어를 쳐주면 된다.* PostgreSQL 실행하는 법 PostgreSQL 설치 및 실행(homebrew, Macbook M2 Pro)hom..

JPA에서 제일 중요하다고 생각되는 주제중 하나이다. 실제 JPA가 동작하는것과 관련이 있고 그래서 강의를 들으면서 개념을 확실하게 정리해본다. 영속성 컨텍스트(PersistenceContext)란?영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. 영속성 컨텍스트는 애플리케이션과 DB 사이에서 객체를 보관하는 가상의 DB 역할을 한다. 엔티티 매니저(EntityManager)를 통해 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 관리하게 된다. 엔티티 생명주기- 비영속 (new/transient) : 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태- 영속 (managed) : 영속성 컨텍스트에 관리되는 상태- 준영속 (detached) : 영속성 컨텍스트에 저..

이전에 p6spy 적용하기 글을 남겼다.[Spring Data JPA] Spring 3에 p6spy 적용하기 [Spring Data JPA] Spring 3에 p6spy 적용하기P6spy 적용 이유 - P6Spy를 사용하는 주된 이유는 스프링 부트와 JPA를 사용하는 프로젝트에서 SQL 쿼리를 정확하고 효과적으로 로깅하고 추적하기 위해서이다. P6Spy는 아래의 3가지 상황에서 사용된taek2.tistory.com이어서 sql 쿼리를 커스텀해서 가독성이 좋게 포맷하는 과정과, 로그 파일 남기기, 로그 레벨 설정에 대해 알아보겠다.p6spy Custom format1. formatter 객체 생성아키텍처에 따른 패키지에 다음 파일을 생성하고 코드를 작성한다. import com.p6spy.engine.l..

P6spy 적용 이유 - P6Spy를 사용하는 주된 이유는 스프링 부트와 JPA를 사용하는 프로젝트에서 SQL 쿼리를 정확하고 효과적으로 로깅하고 추적하기 위해서이다. P6Spy는 아래의 3가지 상황에서 사용된다.1. 쿼리 확인JPA는 매우 편리하지만 개발자가 직접 쿼리를 작성하지 않기 때문에 실제 어떤 쿼리가 실행되는지 확인하기 어렵다. p6Spy를 사용하면 이러한 쿼리를 눈으로 직접 확인할 수 있다. 특히 의도한 대로 작동하지 않을 때나 N+1 문제가 발생했는지 확인이 필요할 때 유용하다. 2. 프록시를 통한 로깅P6Spy는 기존 어플리케이션의 코드를 변경하지 않고도 데이터베이스의 데이터를 가로채고 로그를 남길 수 있는 프레임워크다. 사용자의 DataSource를 P6SpyDataSource가 감..