NOTE

Content๊ณผ์ œ ํ”ผ๋“œ๋ฐฑ ๋‚ด์šฉ์ค‘์— SQLDelete์™€ SQL Restriction ์–ด๋…ธํ…Œ์ด์…˜์„ ์•Œ๋ ค์ฃผ์…จ๋‹ค ํŠœํ„ฐ๋‹˜๊ป˜ ์—ฌ์ญค๋ณด๋‹ˆ ์šฐ๋ฆฐ ์–ด์ฐจํ”ผ BaseEntity์— deletedYN์œผ๋กœ ์‚ญ์ œ ์—ฌ๋ถ€๋Š” ๋”ฐ๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๊ธฐ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์›๋ž˜๋ฐฉ์‹๋Œ€๋กœ ํ•ด๋„ ๋œ๋‹ค๊ณ  ํ•˜์…จ์ง€๋งŒ ์ƒˆ๋กœ ์•Œ๊ฒŒ๋œ ๋‚ด์šฉ์ด๋‹ˆ ๊ณต๋ถ€ํ•ด๋ณธ๋‹ค ๐Ÿ˜‰

soft delete์™€ hard delete

๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

  • soft delete : ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ญ์ œํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ deleteYN๊ฐ™์€ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด์„œ ์‚ญ์ œ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด update๋กœ deleteYN ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ๋ฐฉ์‹
  • hard delete : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‹ค์ œ๋กœ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹

soft delete๋ฅผ ํ•ด์ฃผ๋ฉด ์กฐํšŒํ•˜๋Š” ๋กœ์ง์„ ์ž‘์„ฑํ•  ๋•Œ deleteYN์ด false์ธ์ง€ ์—ฌ๋ถ€๋„ ํ™•์ธํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค

@Query("select n from p_notices n where n.id = :noticeId and n.deleted_y = false")  
Optional<Notice> findById(UUID noticeId);

@SQLDelete

์ด๋•Œ @SQLDelete ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด delete๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๋ฐฉ์‹์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค

@SQLDelete(sql = "UPDATE p_notices SET deleted_yn = true WHERE id = ?")

๋จผ์ € notice entity์— @SQLDelete ์–ด๋…ธํ…Œ์ด์…˜๊ณผ ๋Œ€์‹  ์‹คํ–‰์‹œํ‚ฌ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด์ค€๋‹ค

    public void deleteNotice(UUID noticeId, String userName) {  
        try {  
            Notice notice = noticeRepository.findById(noticeId).orElseThrow(() -> new BaseException(ErrorCode.INVALID_PARAMETER));  
//            notice.setDeletedYnTrue(userName);  
//            noticeRepository.save(notice);  
            noticeRepository.delete(notice);  
        } catch (Exception e) {  
            throw new BaseException(ErrorCode.INVALID_PARAMETER);  
        }  
    }

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด ์ฝ”๋“œ๋Š” ์ฃผ์„์ฒ˜๋ฆฌํ•˜๊ณ  delete๋กœ ์ˆ˜์ •ํ•ด์ฃผ์—ˆ๋‹ค

์š”์ฒญ์„ ๋ณด๋‚ด๋ณด๋‹ˆ soft delete๊ฐ€ ์ž˜ ์ ์šฉ๋œ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค !

public void setDeletedYnTrue(String userName) {  
    this.deletedYn = true;  
    this.deletedAt = LocalDateTime.now();  
    this.deletedBy = userName;  
}

์›๋ž˜ base entity๋กœ ์‚ฌ์šฉํ•˜๋˜ ๋ฐฉ๋ฒ•์ด๋ž‘ ์–ด๋–ค๊ฒŒ ๋” ๋‚˜์€๋ฐฉ๋ฒ•์ธ์ง€โ€ฆ ๐Ÿค”