더 명시적인 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.
Uh oh!
There was an error while loading. Please reload this page.
-
안녕하세요! 금일 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