인프런 커뮤니티 질문&답변
엔티티 상태를 조회하는 시점
해결된 질문
작성
·
30
·
수정됨
1
안녕하십니까 좋은 강의 잘듣고 있습니다.
강의를 들으면서 예제 코드도 같이 파악해보고 있는데요
repository 조회시 조회한 결과에서 활성 상태를 체크할때 2가지 방법으로 구현이 되어있는 것 같습니다.
repository에서 쿼리 메서드로 값 전달 findByXXAndStatus()
일단 findByXX로 조회하고 filter에서 isActive 체크
2가지 경우다 결과 자체는 Active인 엔티티를 조회하겠지만, 두 경우를 언제 사용하는 것이 좋은지가 구분이 있을까요??
일단 저라면 목록을 조회하는 경우라면 1번 방법으로 조회하면 조금이나마 성능 이점이 있을 것 같고, 단일 데이터 조회시에는 1번이나 2번이나 상관은 없을꺼 같다는 생각입니다!
https://youtu.be/o5byT9Ha5Tg?si=C1zj8oP8-wSB6g7Y
최근에 우테코에서도 softDelete 관련 처리를 엔티티 설정을 통해 하기도 하던데, 제미니님의 의견이 궁금하여 질문드립니다!
감사합니다!
ps. 아직 제가 강의를 쿠폰 부분까지 들어서 뒤에서 이에 대한 설명이 나오는지는 확인을 못했어요!
답변 2
1
안녕하세요! 질문 감사드립니다!
적어주신 내용과 유사합니다! 단건 조회시에는 코드 기반으로 조회하는게 가능하다고 생각합니다
(추가로 ID기반 조회라면 사실 status를 쿼리에 직접 넣어도 조회 데이터 범위가 명확하기 때문에 성능에도 영향이 없습니다)
대부분 목록 조회 시에는 직접 쿼리에 질의하는게 맞다고 생각합니다 (페이징 처리가 있다면 더더욱 그래야겠죠)
다만 상태 때문에 불 필요한 인덱스가 추가되어야하는지, 현재 인덱스의 효율이 괜찮은지 등의 구성을 보고 판단하는게 중요하다고 생각합니다!
추가로 softDelete의 경우 개인적으로는 직관적이고 예측가능하고 누구나 이해하기 쉬우면서 코드 기반으로 테스트하기 더 쉬운 구조를 선호하다보니, 어노테이션 기반을 그렇게 선호하진 않아서 저는 불호에 가깝습니다! 😅
그치만 적절히 검토해서 사용해도 무방하다고 생각합니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!
완강까지 화이팅 해주시고, 완강 후 후기도 기대하겠습니다!
1
안녕하세요, 인프런 AI 인턴입니다. 마틴파울러님.
질문해 주신 내용은 데이터베이스에서 엔티티를 조회할 때 상태를 체크하는 방법에 관한 것입니다. 특히, 활성 상태를 확인하는 두 가지 접근 방법에 대해 잘 정리해 주셨습니다.
두 가지 방법의 비교:
쿼리 메서드 사용 (findByXXAndStatus):
- 장점: 데이터베이스 레벨에서 이미 상태 필터링을 하므로, 불필요한 데이터 전송을 방지할 수 있고, 성능 면에서 이점이 있을 수 있습니다.
- 적용 상황: 대량의 데이터를 조회하는 경우나, 네트워크 비용을 줄이고자 할 때 더 적합합니다.
- 장점: 데이터베이스 레벨에서 이미 상태 필터링을 하므로, 불필요한 데이터 전송을 방지할 수 있고, 성능 면에서 이점이 있을 수 있습니다.
조회 후 필터링 (findByXX 후 isActive 체크):
- 장점: 코드의 가독성을 유지하면서 비즈니스 로직을 명시적으로 분리할 수 있습니다. 엔티티 상태를 여러 조건과 함께 조합하여 복잡한 비즈니스 로직을 처리하기 용이합니다.
- 적용 상황: 조회한 데이터가 많지 않거나, 엔티티 상태에 대한 추가적인 비즈니스 로직을 처리해야 할 때 적합합니다.
- 장점: 코드의 가독성을 유지하면서 비즈니스 로직을 명시적으로 분리할 수 있습니다. 엔티티 상태를 여러 조건과 함께 조합하여 복잡한 비즈니스 로직을 처리하기 용이합니다.
추천 사용 시나리오:
- 목록 조회 시: 첫 번째 방법을 사용하는 것이 더 효율적일 수 있습니다. 데이터베이스에서 필요한 데이터만 필터링하여 가져오므로 성능 최적화에 유리합니다.
- 단일 데이터 조회 시: 두 번째 방법도 문제되지 않으며, 비즈니스 로직에 따라 추가적인 처리가 필요할 때 유연하게 사용 가능합니다.
참고자료:
유사한 주제에 관한 더 많은 논의는 아래의 기존 게시물에서 확인할 수 있습니다:
- Entity 상태 관리와 Soft Delete
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다. 유사한 질문이 있었는지 검색해봤고 남겨주신 링크의 글도 저도 봤었는데, 링크는 모든 엔티티가 상태를 가져야하냐는 질문이고.
제 질문은 엔티티를 조회할 때 상태 체크를 하는 방법에 대한 질문이었습니다.





감사합니다!! 완강하러 가겠습니다