java

Spring

[Spring] Junit 테스트시 Atomikos 커넥션풀의 Connection Name 중복 오류

문제 발생‘어느날 갑자기’ Jenkins 배포중 빌드가 실패, Jenkins 실패 원인을 보니 테스트가 깨지고 있었음현상 재현을 위해 로컬에서 테스트를 돌렸으나 모든 테스트는 PassJenkins의 간헐적 이슈 인가 싶어 다시 Jenkins 빌드를 진행하니 성공후 정상 배포되었음(이때까지만 해도 Jenkins의 버그로 인한 단순 해프닝으로 생각)2주뒤 다시 정기배포일자가 다가왔고, 배포를 진행했으나 이전과 동일하게 다시 Jenkins 빌드가 실패함로컬에서도 마찬가지로 테스트가 깨지고 있었고 로그에서는 아래와 같이 Atomikos 에러가 출력 수 차례 재시도 하니 정상적으로 배포됨...나를 더욱 헷갈리게 하는 상황들Jenkins 배포시에도 매번 실패하는 것이 아닌 여러번 시도하면 그 중 한번은 성공함로컬에..

Spring

IntelliJ에서 Spring MVC 세팅하기

인텔리제이의 Add Framewrok Support를 이용해서 Spring MVC 설정하는 방법이 대부분이지만, Add Framework Support 기능이 정상 동작하지 않는 다수의 케이스를 위해 작성 Spring MVC 설정및 동작을 위한 최소한의 설정만 작성1. 프로젝트 생성 Maven Archetype 으로 새로운 프로젝트를 생성Archetype -> maven-archetypoe-webapp 설정 2. pom.xml 설정Maven Archetype으로 프로젝트를 생성하면, Spring 세팅이 되어 있지 않은 깡통 프로젝트이기 때문에 Spring MVC Dependency를 추가해줘야 한다. pom.xml에 Spring Web MVC Dependency 추가- Maven Repository 에서..

Spring

[JPA] 일대다(1:N), 다대일(N:1) 관계

JPA의 일대다, 다대일 관계에 대해 알아보자. 일대다(1:N) 데이터베이스에서 일대다 관계는 굉장히 다양한 경우에 적용될 수 있다. 예를 들어, 장바구니와 담긴 상품, 교실과 학생, 게시판과 게시글 등이 있다. 이런 관계를 구현하기 위해 @OneToMany 어노테이션을 이용하여 다음과 같이 구현할 수 있다. 다음은 주문과 상품의 관계에 대한 일대다 양방향 관계를 나타낸 코드이다. @Entity public class Order { // ... @OneToMany(mappedBy = "order") private List products = new ArrayList(); // ... } @Entity public class Product { // ... @ManyToOne @JoinColumn(name ..

Spring

[JPA] 연관관계의 주인

JPA를 사용하며 알아야할 개념중 '연관관계의 주인'에 대해서 살펴보자. 연관관계의 주인이란? JPA에서 연관관계의 주인은 엔티티 간의 양방향 연관관계를 관리하는데 중요한 역할을 하는 개념이다. 양방향 연관관계란 두 개의 엔티티 클래스가 서로를 참조하고 있는 상태를 의미한다. 연관관계의 주인은 일반적으로 두 개의 연관관계 테이블중 외래키를 가지고 있는 테이블에 해당하는 엔티티가 연관관계의 주인이 된다. 연관관계의 주인을 엔티티간의 관계를 주도하고 관리하게 된다. 주인 엔티티의 필드를 사용하여 연관관계 간의 관계를 매핑하며, 이 필드는 데이터베이스 테이블에 반영된다. 더불어 연관관계의 주인이 아닌 엔티티는 읽기 전용(Read-Only) 엔티티로 사용되게 된다. 주인 엔티티가 데이터베이스에 영향을 미치기 때..

Spring

[Spring] 서비스 운영간 발생한 DB Connection Closed 이슈

장애 발생 및 발견8월 24일 서버 정기점검이 이루어지던 새벽정기점검 대상이 아닌 서버의 특정 인스턴스에 인입된 요청들이 'SQLException : Connection Closed' 오류로 모두 500처리가 되는 이슈가 발생하였다. 24일 3시 43분에 처음 발생한 이슈는 오전 9시 45분에 이슈사항으로 확인되었고 전사에 전파 및 담당자인 나에게 전달되게 되었다.( 약 6시간의 장애 시간의 텀은 너무 부끄러운 장애대응이다.. ) 장애 대응오전 9시 45분, 전사 장애 대응 채널에 내이름이 멘션되어 호출되기 시작했고, 해당 시스템은 팀내에서 개발한것이 아닌 외주업체에서 관리하고 있었기에 담당 업체에 연락하여 원인 파악 및 조치를 요청하였다. 오전 10시 03분, 담당 외주 업체에서의 조치 이전에 인프라팀..

Spring

[JPA] 연관관계 조회 방식별(Fetch, Lazy) 성능 차이 테스트

개요 N+1 문제와 해결 방법 JPA를 이용해 별도의 옵션 없이 엔티티를 조회할 경우, 엔티티에 연결되어 있는 연관관계들이 함께 조회된다. 함께 조회되는 시점에 부모 엔티티를 조회 하는 쿼리(1) + 연결되어 있는 연관관계 엔티티들에 대한 조회 쿼리(N)가 DB 요청으로 날아가게 된다. 예를들어 4개의 연관관계를 가지고 있는 엔티티 100개를 조회할 경우 100 + 400, 총 500회의 조회 쿼리가 날아가게 됨으로 성능에 큰 영향을 미치게된다. 이런 문제는 완벽하지는 않으나 Fetch Join, Entity Graph, Batch_Size를 통해 해결 할 수 있다. 보통 연관관계 엔티티들에 대해 FetchType을 통해 연관관계 엔티티를 즉시 조회(Eager)할지, 지연 조회(Lazy)할 지 정할 수 ..

Spring

[Spring] MapStruct 사용 주의 사항

DTO Entity 변환을 위해 자주 사용하는 MapStruct를 사용하며 겪은 주의 사항들을 정리 1. MapStruct는 Getter, Setter, Builder 기반으로 동작 MapStruct가 클래스간 매핑 코드를 만들때 타겟 클래스의 Getter, Setter를 기반으로 코드를 생성한다. 다만 MapStruct 사용을 위해 클래스에 Setter를 만드는것이 꺼림칙 하다면, Builder로 대체할 수 있다ㅡ. 2. Spring에서 Mapper 생성시 @Mapper 옵션으로 componentModel = "spring" 선언으로 해당 Mapper가 Bean으로 등록될 수 있도록 해야 동작한다. @Mapper(componentModel = "spring") public interface Member..

Spring

[Spring] Redis Template과 Redis Repository 특징과 장단점

Redis는 뛰어난 성능과 유연성을 제공하는 인메모리 데이터베이스로, 다양한 애플리케이션에서 필수적으로 사용됩니다. 하지만 Spring 환경에서 Redis를 다룰 때는 두 가지 접근 방식인 RedisTemplate과 Redis Repository 중 하나를 선택해야 합니다.어떤 선택이 더 적합할까요? 이는 프로젝트의 요구사항과 Redis를 활용하는 방식에 따라 달라질 수 있습니다. RedisTemplate은 저수준 API로 세밀한 제어와 유연성을 제공하지만, 복잡한 작업과 설정이 필요합니다. 반면, Redis Repository는 고수준의 추상화를 통해 간단하고 직관적인 개발 경험을 제공하지만, 제한된 유연성과 고급 기능 부족이라는 단점이 있습니다.이번 글에서는 RedisTemplate과 Redis Re..

turtleDev
'java' 태그의 글 목록 (2 Page)