더 명시적인 Soft Delete 정책을 위해 저희 이렇게 코딩을 해보면 어떨까요? #46
Replies: 6 comments 18 replies
-
안녕하세요, @silberbullet 님! 이번에 강조하신 대로, 이 논의가 지난 몇 차례 동안 강조된 내용이었음에도 이 내용을 리마인드 할 수 있도록 논의로 정리해 주심에 감사드립니다. 👍 🚀 👁️🗨️ 기존 논의의 리마인드사람들이 놓쳤을 수 있는 일부 논의와 리뷰에서 다음과 같이 결정했으며, 잠정적으로 그런 작업이 발생한 것 같습니다.
💡 개선하고 싶은 아이디어❗ 실제 조회 대신 Assertion에 위임제안해 주신 코드의 일부: // board가 Hard Delete가 됐는지 확인
var board = boardCommandPort.findById(id)
.orElseThrow(/* returns exception */) 제가 생각하는 방향으로 개선할 때 코드: assert boardCommandPort.existsById(id) : "데이터베이스에서 실제로 삭제되어선 안 됩니다."; 개선으로 생각하는 이유 프로덕션 코드에서 매번 '조회' 로직이 실제로 수행되지 않고도 안전성을 제공받을 수 있습니다.
🎨 열거 상수의 비교에
|
Beta Was this translation helpful? Give feedback.
-
다른 분들의 의견도 필요합니다. 명시적으로 메소드를 네이밍을 softDelete 할지 updateStatus를 할지 고민해보면 좋을 것 같네요! 소환술을 사용할게요 😄 @wowddok99 @jilpoom @shin-jingyu @taewookimm @github-insu @Ropung @sweetykr7 |
Beta Was this translation helpful? Give feedback.
-
✅ 공통 전제라 생각되는 점
💭 의견
|
Beta Was this translation helpful? Give feedback.
-
명시적인 건 좋으나, softDelete란 명칭보단 updateStatus가 좋아보입니다. 레포지토리가 쪽에서 softDelete란 단어를 쓰면 마치 delete 메소드를 써야 할 것 같습니다! |
Beta Was this translation helpful? Give feedback.
-
안녕하세요, @silberbullet 님! 제가 생각했을 땐 softDelete 명칭을 사용하는 것이 좋다고 생각합니다. updateStatus 명칭을 사용할 수 있겠지만, 저희 서비스의 규모가 커졌을 때 어떤 부분은 Hard Delete를, 어떤 부분은 Soft Delete를 혼합해서 사용할 수 있다고 생각합니다. updateStatus 명칭을 사용했을 때 위와 같은 경우가 생긴다면 다른 파트에 익숙지 않은 개발자가 볼 때 한 번에 알아보기 쉽지 않을 수 있고, 조금 복잡도가 올라간다면 휴먼 버그 또한 생길 수 있다고 생각합니다. 다만, 몇가지 고려해야할 점은 있는것 같습니다.
다른 분들께서도 의견 말씀해 주시면 더욱 좋을 것 같습니다!! |
Beta Was this translation helpful? Give feedback.
-
단순히 remove만 생각하고 있었는데, reserved까지 고려할 상황까지 알려주셔서 감사합니다. 저도 updateState보다는 명시적으로 눈에 보일수 있는 메소드명이 더 나아보인다고 생각합니다. 말씀하신 updateSoftDelete도 괜찮은 대안 같습니다. 향후에 이렇게 delete에 대해서 다양한 status를 쓰게 되는경우 port를 분리하여 아래와 같이 쓰는 경우도 있는지 궁금합니다.
|
Beta Was this translation helpful? Give feedback.
-
안녕하세요! 금일 2025.2.12(수) 회의에서 구두로 말씀했던 Soft Delete가 뭔가 흐지부지 끝나서 글을 올립니다.
현재 저희 Board가 Hard Delete(delete)랑 Soft Delete 사이에서 애매한 구간에 있다고 생각합니다. 그래서 하기와 같이 저의 생각을 공유합니다.
❗ Board 도메인에서는 Hard Delete를 명시하지 않기
백엔드 팀은 Board 도메인에서는 Soft Delete로 정해졌습니다. 이는 하나의 정책이라고 생각합니다. 이 정책을 명시하는 역할은 Application Layer 계층에 담당이라고 생각합니다.
그렇기에
interface
하기와 같이 수정이 이루어지면 좋겠습니다.BoardCommandPort
수정 전BoardCommandPort
수정 후또한,
service
는 다음과 같이 수정이 됐으면 좋겠습니다.BoardCommandService
수정 전BoardCommandService
수정 후위와 같다면 Adapter도 Application Layer의 정책에 맞게 코딩을 하지 않을까 합니다!
더 나은 방안이 있다면 공유해주시면 감사합니다!
Beta Was this translation helpful? Give feedback.
All reactions