Inflearn brand logo image

인프런 커뮤니티 질문&답변

김아현님의 프로필 이미지
김아현

작성한 질문수

웹소켓/STOMP 채팅서비스(spring, vue, redis)

이전메시지조회

참여자 검증 로직 질문있습니다.

작성

·

115

1

7:30 초 부터
chatParticipantRepository.findByChatRoom()
메서드로 조회한 다음에
특정 멤버와 같은지 for문으로 검증하셨는데

chatParticipantRepository.findByChatRoomAndMember()
여기 만들어 둔 메서드를 활용하지 않고 위 로직을 사용하신 이유가 있을까요?

답변 2

0

bradkim님의 프로필 이미지
bradkim
지식공유자

안녕하세요.

코드 전반에서 jpa를 충분히 활용할수 있음에도 활용하지 않은 부분들이 있는데, jpa사용이 익숙치 않은 수강생들을 고려한 측면이 있습니다. 이 부분 먼저 양해 부탁드립니다.

그런데, 이 부분은 제가 이미 메서드를 만들어 놨음에도 활용하지 않았으니, 다소 일관성이 떨어지게 코딩을 한것 같습니다.

ChatParticipant participant = chatParticipantRepository.findByChatRoomAndMember(chatRoom, member)
        .orElseThrow(() -> new IllegalArgumentException("본인이 속하지 않은 채팅방입니다."));

말씀하신대로 findByChatRoomAndMember 메서드를 만들어 뒀으니 이 메서드를 활용하는게 더 깔끔해 보입니다.

김아현님의 프로필 이미지
김아현
질문자

감사합니다

0

안녕하세요, 인프런 AI 인턴입니다. 김아현님.

채팅 서비스 구현에서 chatParticipantRepository.findByChatRoomAndMember() 메서드를 직접 사용하지 않고, for문을 통해 검증하는 방식을 선택한 이유에 대해 궁금하신 것 같습니다. 이러한 선택에는 몇 가지 이유가 있을 수 있습니다.

  1. 코드의 명료성 및 가독성:

    • 특정 상황에서는 반복문을 통해 명시적으로 검증 로직을 작성하게 되면, 코드의 흐름이 명확하게 드러나고, 해당 로직을 쉽게 이해할 수 있게 됩니다. 이는 특히 해당 부분에서 추가적인 검증이나 부가 로직이 필요할 때 유용합니다.
  2. 확장성:

    • 직접 반복문을 사용하는 방식은 추후 로직의 변경이나 추가가 용이합니다. 만약 특정 멤버와의 비교 외에도 다른 조건들이 필요하게 되면, 기존에 작성된 코드를 간단히 확장하여 사용할 수 있습니다.
  3. 구현 초기 단계:

    • 프로젝트 초기 단계에서는 복잡한 쿼리 메서드보다는 직접적인 로직 구현으로 시작한 후, 나중에 성능 최적화나 코드 정리가 필요할 때 이를 리팩토링하는 경우가 많습니다. 이는 Iterator 방식이 디버깅에 유리하도록 할 수도 있습니다.

혹시 프로젝트 설계 상의 특별한 이유가 있을 수도 있으니, 여러분의 요구사항에 맞추어 구체적인 로직을 구성해 보시길 추천드립니다.

이와 관련된 질문으로 비슷한 상황을 다룬 게시물을 참고하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김아현님의 프로필 이미지
김아현

작성한 질문수

질문하기