Yun Blog

기술 블로그

JPA 플러시 정리

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

JPA 영속성 컨텍스트 주의 점

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

스프링 Application Event

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

Spring 트랜잭션 단위

해당 코드는 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() { ......

인텔리제이 Execute Gradle task로 Gradle를 쉽게 사용하자

IntellIj를 이용하면 Gradle Task의 명령어 assistant 해주는 기능을 통해서 보다 쉽게 Gradle을 사용할 수 있습니다. 설정 방법 Find Action에서 Execute Gradle Task을 열어 볼 수 있습니다. 단축키를 지정해서 사용하는 것을 권장드립니다. Keymap -> Execute Gradle Task -&......

Mysql Explain

해당 글은 MySQL 5.7 완벽 분석을 정리한 내용입니다. MySQL 옵티마이저 구조 MySQL 옵티마이저는 비용 기반으로 어떤 실행 계획으로 쿼리를 실행했을 때 비용이 얼마나 발생하는지를 계산해하여 비용이 가장 적은 것을 택하게 됩니다. 어디까지나 추정 값이므로 정확한 비용은 실행 전까지 정확하게는 알 수 없습니다. EXPLAIN EXPLAI......

ConstraintValidator을 이용해서 효과적인 검증

코드는 Github에 공개 되어있습니다. 스프링에서는 JSR 303 기반 어노테이션 기반으로 일관성 있는 Validation을 진행할 수 있습니다. 하지만 @NotNull, @NotEmpty, @Email과 같은 검증은 가능하지만 비즈니스적에 맞는 Validation은 별도로 진행해야 합니다. 예를 들어 주문에 대한 결제 정보를 받는 경우 카드 결......