삭제 기능 구현에 대한 질문입니다.
안녕하세요. 오늘도 재미있게 잘봤습니다. 감사합니다.
// ReviewManager.kt
@Transactional
fun delete(user: User, reviewId: Long): Long {
val found = reviewRepository.findByIdAndUserId(reviewId, user.id) ?: throw CoreException(ErrorType.NOT_FOUND_DATA)
found.delete()
return found.id
}이 코드를 보면서 삭제를 구현할 때 두 가지 방식이 있겠다는 생각이 들었습니다. 첫번째는 조회 + 삭제, 두번째는 정확한 key를 넘겨주어서 한번에 삭제. 둘 가운데 어떤 방식을 선호하시는지 궁금합니다.
처음에는 두 번째 방식으로 구현을 한다면 메서드 이름과 동작이 더 일치해서 좋고 코드도 한 줄에 끝나서 더 좋은게 아닌가? 라고 생각을 했었는데 그렇다면 첫번째 방식을 하면 좋은점이 무엇일까 다시 생각을 해보니 만약 삭제할 때 ORM 예외가 발생한다면 ReviewManager가 몰라도 된다는게 장점일 수 있겠다는 생각이 들었습니다.
답변 1
1
제 경우는 JPA를 쓰는 상황이면 자연스럽게 전자의 상황의 코드를 선호합니다 😃
실제로 Hard-Delete(Delete 쿼리) 가 아니라 업데이트 문으로 처리하고 있는 형태기 때문에 한줄로 처리한다 하더라도 별도 JPQL을 써야하는 것 보다는 이게 더 자연스러운 형태라고 생각합니다!
답변이 되었길 바라겠습니다! 감사합니다!
아무도 모르게 책 내시면 모르실 줄 알고!!
1
54
2
개념과 격벽에 대한 이해를 팀과 공유하고 합의하는 방법
1
90
2
페이징 처리에서 offset/limit에 대한 질문
1
92
1
usecase 사용 기준
1
101
2
궁금한점이 여러개 생겼습니다.
1
129
1
다양한 관점의 코드 경험을 위해 개선하지 않은 코드
1
104
1
histories() 응답에 PointHistory.id를 포함한 이유가 궁금합니다/
1
81
2
SettlementTargetRepository Jquery 질문
1
82
2
부가 기능을 이벤트 핸들러로 분리하는 기준이 있을까요?
1
106
2
엔티티의 pk 를 0으로 초기화하시는 이유가 있을까요??
1
106
2
제미니님 안녕하세요!
1
116
2
개념 간 격벽 분리와 목록 조회 시 발생하는 참조 구조
1
139
2
프로덕트와 프로덕트카테고리 사이의 삭제 정책
1
117
2
새로 개발한다면 구현 순서
1
184
1
의존 방향에 대한 고민
1
162
2
어드민(Back-office)에서 예약 변경 시, '할인 조건 재검증(쿠폰 회수)' vs '기존 혜택 유지' 중 어떤 정책이 일반적인가요?
1
139
2
OrderKeyGenerator 인스턴스화 generate() 질문
1
112
1
외부 API 통합 시 데이터 제어 범위 설계 질문
1
118
1
PG 결제 승인 로직
1
189
2
QnA에서 Join 필드 표현법
1
133
1
결제서비스 콜백 동시성문제 가능성
1
163
2
굿
1
139
1
도메인/엔티티 분리 상황에서 쓰기 작업 하는 방법
1
178
2
도메인 객체와 엔티티 객체 사용
1
181
2





