Back-end/Spring

[Spring/JPA] CascadeType.ALL 사용시 주의 해야 할 점

최근에 JPA를 본격적(?)으로 사용하면서 무릎을 탁! 쳤던 경험을 했습니다. 바로 연관관계 매핑, 영속성 전이, 연관관계 편의 메서드, 고아 객체를 이해하고 사용했던 경험인데요. 이번 시간에는 Cascade에 대해서 간단하게 살펴보고, Cascade를 사용할 시, 주의할 점에 대해서 알아보려고 합니다. 0. Cascade란? 먼저 Cascade는 무엇인지에 대해 간단하게 살펴보겠습니다. 특정 엔티티를 영속 상태로 만들 경우, 연관된 엔티티도 함께 영속 상태로 만들고 싶을 경우 영속성 전이를 사용하는데요. JPA에서는 영속성 전이를 Cascade옵션을 통해서 설정하고 관리할 수 있습니다. 쉽게 말해서 부모 엔티티를 다룰 경우, 자식 엔티티까지 다룰 수 있다는 뜻이죠. Cascade는 6가지의 옵션을 가지..

2023.03.15 게시됨

Back-end/Spring

[Spring/JPA] @JoinColumn 의 name, referencedColumnName 에 대해서(부제. org.hibernate.MappingException Column duplicate error)

프로젝트를 진행하는 도중 아래와 같은 상황이 있었습니다. 하나의 엔티티에서 두 개의 같은 엔티티를 매핑해야 한다. 0. 이전 @JoinCloumn 사용 예시 예를 들어보겠습니다. @Entity @Table(name = "friend") @Builder @NoArgsConstructor(access = AccessLevel.PROTECTED) @AllArgsConstructor @Getter public class Friend extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) @Id @Column(name = "friend_id") private Long id; @ManyToOne @JoinColumn(name = "u..

2023.03.08 게시됨

Back-end/Spring

[Spring/JPA] @Transactional을 사용하는 이유에 대하여 (부제. JPA Dirty Checking)

이번 포스팅에서는 JPA를 사용한다면 한 번쯤은 사용해 봤을 법한 @Transactional 어노테이션에 대해서 알아보려고 합니다. 0. Transaction이란? 그럼 먼저 Transaction에 대해서 간단하게 짚고 넘어가 보겠습니다. Transaction이란 한 문장으로 정의해 보면 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위를 의미합니다. 일반적으로 알고 있는 SELECT, INSERT, UPDATE, DELETE을 사용해서 데이터베이스를 사용하곤 하는데요. 데이터베이스를 사용할 때 한번 접근해서 수행하는 작업의 단위라고 할 수 있죠. 트랜잭션의 특징으로는 안전성을 보장하기 위해 필요한 4가지 성질이 있습니다. (ACID 성질) 1. 원자성(Atomicity) : 트랜잭션이 한번 ..

2023.03.02 게시됨

Back-end/Spring

[Spring / TIL] SpringBoot 버전 3.X.X에 Swagger적용하기

프로젝트 진행 중 클라이언트와의 협업에 필요한 API명세를 위해 Swagger를 도입하게 되었습니다. 이 글은 SpringBoot 버전 3.0.0 이상을 사용하는 프로젝트에서 Swagger를 도입할 때 사용해야 하는 Swagger 라이브러리에 대해 정리해보려고 합니다. 결론부터 말씀드리자면. 0. SpringBoot 3.0.0 이상부터는 springfox가 아닌 springdoc-openapi-ui 라이브러리를 사용해야 합니다. 아니 웬만하면 springdoc-openapi-ui를 사용하는 편이 좋습니다. SpringBoot3.0.0 이상이 아니라도 말이죠. 검색해 보면 상위 게시물들은 물론 거의 대부분의 게시물에서 springfox를 이용한 swagger 설정방법을 설명해주고 있지만 사실 sprindd..

2023.02.13 게시됨