본문 바로가기
SpringBoot/구현 고민들

[Spring] soft delete와 임시 저장 구별

by rla124 2024. 6. 28.

창업팀에서 봉착한 구현 고민!

현재 상황

임시 저장을 하는데 DB 테이블의 deleted 필드 (soft delete)를 사용하여 구현을 한 상황이었다. 

private boolean deleted; 를 통해 작성 완료 여부를 나타내고 작성 완료를 누르지 않고 중간에 나가버리면 임시 저장이 가능. 소프트 삭제가 이뤄지는 방식이다. 

@Getter
@NoArgsConstructor
public class PromiseCatchRequestDto {
    private EventType event; //종목
    private Integer recruitmentNumber; // 모집 인원
    private RequirementType requirement; // 참여 조건
    private LocalDateTime dateAndTime; // 약속 일시
    private String title;//제목
    private String content; //내용
    private boolean deleted; //작성 완료 여부, 작성 완료 누르지 않고 중간에 나가버리면 소프트 삭제

    private double latitude; //위도
    private double longitude;  //경도
    private  String phoneNumber; //전화번호
    private LocalDateTime startTime; //운영 시작 시간
    private LocalDateTime endTime; //운영 종료 시간
    private String placeExplain; //장소설명
    private String address; //주소
    private String placeUrl; //장소 이미지
    private String placeName; //장소이름
    public static Promise toPromiseEntity(PromiseCatchRequestDto promiseCatchRequestDto){
        return Promise.builder()
                .event(promiseCatchRequestDto.event)
                .recruitmentNumber(promiseCatchRequestDto.recruitmentNumber)
                .requirement(promiseCatchRequestDto.requirement)
                .dateAndTime(promiseCatchRequestDto.dateAndTime)
                .title(promiseCatchRequestDto.getTitle())
                .content(promiseCatchRequestDto.getContent())
                .deleted(promiseCatchRequestDto.isDeleted())
                .build();
    }


    public static Place toPlaceEntity(PromiseCatchRequestDto promiseCatchRequestDto){
        return Place.builder()
                .address(promiseCatchRequestDto.address)

구현 고민

하지만 deleted 필드 속성으로 임시저장을 구현하게 되면 소프트 삭제와 임시 저장을 구분하지 못하게 되는 문제가 발생한다. 

대응 방안

그래서 내가 제시한 의견은!

1. Promise 테이블에 ACTIVE, TEMPORARY, DELETED와 같은 ENUM 상태 타입을 추가
2. 별도의 임시 저장 테이블을 create한다면 임시 저장 데이터를 삭제할 데이터와 명확히 분리 가능

 

다른 분의 의견은

3. 삭제 기능은 hard delete로 구별

.