글/개발

[개발/Spring] Soft delete vs Hard delete에 대한 나의 생각

현업에서 개발을 하면서 깨달은 사실은 사소해 보이는 데이터 또한 소중한 자산이라는 점입니다. 따라서 추후에 다시는 사용하지 않거나 데이터 분석이 필요 없는 데이터들을 제외하고는 보통 DB에 남겨놓는 편인데요. 여기서 Soft delete(논리삭제)와 Hard delete(물리삭제)가 등장합니다. 이번 포스팅에서는 Soft delete, Hard delete에 대해서 살펴보고 제 생각을 간단하게 정리해보려고 합니다. 0. Soft delete(논리 삭제), Hard delete(물리 삭제) 란? 말 그대로 논리적으로만 삭제하는 방법입니다. 논리삭제를 해도 물리적인 데이터는 DB에 그대로 남아있게 됩니다. 먼저 물리 삭제 예시를 들어보겠습니다. 일반적인 삭제 Delete 쿼리는 아래와 같습니다. 쿼리를 실행..

2023.03.29 게시됨

Back-end/Spring

[Spring/Java] @Builder 패턴 사용시 @AllArgsConstructor를 사용하는 이유

현재 개발을 할 때, 일반적으로 Entity 객체를 생성하는 경우 Lombok 라이브러리를 사용해서 빌더 패턴을 적용하고 있습니다. Entity 클래스에 적용된 어노테이션 중 @Builder라는 어노테이션이 있는데요. @Builder 어노테이션을 사용할 경우, 기본 생성자를 생성해 주는 @NoArgsConstructor 어노테이션을 사용하고 있습니다. 일반적으로 기본 생성자에 대한 접근 제어를 위해 @NoArgsConstructor(access=AccessLevel.PROTECTED)와 같이 사용하곤 합니다. 이유는 무분별하게 생성되는 객체들을 한 번 더 체크해 줌으로써 의도하지 않은 엔티티 객체를 만드는 행위를 방지할 수 있습니다. @Builder와 @NoArgsConstructor 어노테이션을 동시에..

2023.03.22 게시됨

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 게시됨