전체 글 13

MDC를 활용한 추적 가능한 로그 남기기

## 에러는 보이는데 원인이 안 보였다 요청, 응답 로그는 잘 찍히는데 서로 엮이지 않았다. 400이 났다는 건 보이는데, 어떤 요청의 결과인지 바로 연결되지 않았다.## 눈으로는 구분이 안 됐다 로그는 이런 식이었다.(이해를 돕기 위해 예제에서는 요청(Request)과 응답(Response) 로그만 사용했습니다.실제 서비스 환경에서는 이 외에도 인증 정보, 파라미터, 내부 처리 과정, 외부 API 호출 등 다양한 로그를 함께 기록합니다.)- Before Request- Before Request- After Request status = 500- Before Request- After Request status = 200- After Request status = 400 어떤 요청이 어떤 응답을 주는..

개발/Spring Boot 2024.04.18

Spring 테스트할 때 @Transactional 써야 할까 말아야 할까

Spring으로 테스트코드를 작성하다 보면 한 번쯤은 이런 고민을 하게 된다. (안 했으면 죄송함다)“테스트에 @Transactional 붙여야 하나? 붙이면 자동 DB 데이터 rollback 되이서 편하긴 한데..” 어떤 글은 “무조건 붙여라”고 하고,어떤 글은 “절대 쓰지 말라”고 한다.그래서 더 헷갈린다. 결론부터 말하면 정답은 없다.대신 용도에 따라 명확히 갈린다. 이 글에서는@Transactional이 정확히 어떤 역할을 하는지테스트에서 사용할 때의 진짜 장점과 진짜 단점실무에서 언제 쓰고, 언제 피해야 하는지를 정리해보려고 한다.@Transactional 의미@Transactional은 Spring이 제공하는 선언적 트랜잭션 관리 어노테이션이다.해당 메서드(또는 클래스)는 트랜잭션 경계 안에서..

개발/Spring Boot 2023.07.30

JPA 복합키 @IdClass vs @EmbeddedId

JPA에서 복합키(Composite Key)를 매핑하는 방법은 크게 두 가지가 있다.@IdClass@EmbeddedId실제 서비스 코드 기준에서의 선택 기준을 정리해봤다.1. @IdClass 방식@IdClass는 엔티티 외부에 PK 클래스를 정의하고, 엔티티의 각 필드에 @Id를 붙여 매핑하는 방식이다.예시:@Entity @IdClass(MyId::class) class MyEntity( @Id val id1: Long,@Id val id2: Long, val name: String )data class MyId( val id1: Long, val id2: Long ) : Serializable 특징:PK 클래스는 Serializable 구현 필수엔티티 필드에 식별자가 그대로 노출됨JP..

개발/Spring Boot 2023.07.24