Yun Blog

기술 블로그

JPA 선호하는 패턴

최근 JPA를 3년 가까이 사용하면서 개인적인으로 선호하는 패턴들을 한 번 정리하려고 한다. 어디까지 개인적으로 선호하는 패턴으로 굳이 이런 가이드를 따르지 않아도 된다. 컬럼 에노테이션 사용 123456789101112@Entity@Table(name = "member")data class Member( @Column(name = "userna......

RestTemplate Mock 기반 테스트 하기

스프링 프로젝트에서는 외부 API 모듈을 RestTemplate를 이용해서 호출하는 경우가 많습니다, 이런 경우 RestTemplate을 기반으로 Mock 테스트를 보다 쉽게 진행할 수 있습니다. 왜 Mock 기반 테스트를 진행 해야하나 ? 외부 인프라스트럭처를 테스트 코드를 작성할 때는 mock 기반으로 테스트를 진행해야 합니다. 외부 인프라스트럭처......

JPA 벌크 작업 주의점

JPA Bulk 작업을 진행할 때 영속성 컨텍스트의 메커니즘을 이해하지 못한 상태라면 예상하지 못한 문제를 만날 수도 있게 됩니다. 어떤 문제가 있고 이 문제가 왜 발생하는지 정리해 보았습니다. 코드 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647......

JPA 플러시 정리

자바 ORM 표준 JPA 프로그래밍을 보고 플러시 관련 내요을 정리한 정리한 내용 입니다. 플러시 란? JPA는 엔티티를 영속성 컨텍스트에서 관리합니다. 영속성 컨텍스트에 있는 내용을 데이터베이스에 반영하는 것을 플러시라고 합니다. 보통 트랜잭션을 커밋하면 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화(등록, 수정, 삭제) 작업을 진행하게 됩......

JPA 영속성 컨텍스트 주의 점

엔티티 객체 123456789101112131415161718192021222324@Entity@Table(name = "member")data class Member( @Column(name = "username", nullable = false) var username: String, @Column(name =......
JPA

스프링 Application Event

해당 코드는 Github를 확인할 수 있습니다. 스프링에서는 Application Event를 제공해주고 있습니다. Application Event Publisher, Application Event Subscriber 방식으로 결합도를 낮춰 느슨한 결합 관계를 갖을 수 있습니다. 시나리오 주문 단계에 (주문, 결제)가 완료되면 주문 완료 이후 ......

스프링 트랜잭션 단위

해당 코드는 Github를 확인할 수 있습니다. 123456789101112@RestController@RequestMapping("/sample")class SampleController( private val aRepository: ARepository, private val bRepository: BRepository......

스프링 Immutable으로 Properties 설정하기

해당 코드는 Github에 공개되어 있습니다. Spring Boot 2.2 버전에서부터는 Immutable으로 Properties 설정을 할 수 있습니다. 커스텀 하게 설정한 값들은 Properties 객체로 관리하는 것이 좋습니다. 해당 내용은 Properties 설정값 가져오기를 참조하시면 됩니다. 기존 Properties의 단점은 Mutable이......

Junit5 with Spring boot

해당 코드는 Github를 확인해주세요. Spring boot 2.2 버전부터는 Junit5 디펜던시를 기본으로 포함하고 있습니다. Junit5 주요 테스트 어노테이션과 Spring boot에서 활용법을 정리해보았습니다. @ValueSource @ValueSource어노테이션을 사용하면 배열을 값을 테스트 메서드로 손쉽게 전달할 수 있습니다. 12......

JPA N+1 발생원인과 해결방법

해당 코드는 Github를 확인할 수 있습니다. JPA를 사용하다면 보면 N+1문제를 많이 만나게 됩니다. 그에 따른 발생 원인과 해결법을 정리해보았습니다 ERD 12345678910111213141516171819@Entity@Table(name = "member")class Member private constructor() { ......