강의

멘토링

커뮤니티

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

wheon06님의 프로필 이미지
wheon06

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 기본편

코드 느끼기

QnA에서 Join 필드 표현법

작성

·

25

1

강사님의 코드를 보니 Question 클래스 등에 id, userId, title, content 등만 넣어두신 것 같은데 일반적으로 자주 표현되는 다른 필드를 표현하려면 어떻게 하는 것이 좋을까요?

예를 들어 QnA 조회시 질문 목록에서 질문 작성자의 이름이 표시되는 형태가 많습니다. 이때 그렇다면 QnAResponse 에 questionAuthor 필드가 있어야 할 것 같은데 해당 필드가 추가된다면 어떻게 username 정보를 넣어주어야 할지 궁금합니다.

 

1안. Question 클래스가 userId 대신 User 클래스를 가지고 있는다...

2안. Controller에서 user 목록을 조회해서 response 팩토리 메서드에서 매핑한다.

2안이 더 나을 것 같긴 합니다만, 리스트이다 보니 매핑로직이 복잡해 질 것 같기도 하고... qnsList->question->userId 모아서 userList조회... map생성 후 매핑 등등 이런 과정이 괜찮은건지 궁금합니다.

또 2안이 더 나은 방법이라면 response에 노출해야하는 join 필드 5-6개 처럼 많을때는 어떻게 처리하시는 편인지도 궁금합니다

답변 1

0

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

안녕하세요 질문 감사드립니다! 아주 좋은 질문입니다! 😃

사실 일반적인 상황에서는 1번의 방향성이 쉽게 접근가능하고 명확함이 올라간다고 생각합니다
다만 꼭 User클래스를 갖지 않더라도 author 라는 필드로 갖고 있을 수도 있을 것 같습니다


그런데 우리 강의의 정의한 시스템 상황에서 문제가나 하나 발생합니다
지금 우리 상황에서는 User에 대한 데이터를 별도 UserService 와 UserDB로 분리하여 운영하고 있습니다
즉 우리가 예제 코드로 바라보고 있는 곳에선 UserDB를 접근하지 못하고 UserName을 알고 싶으면 API로 가져와야합니다 😅

이 상황이라서 2안으로 가더라도 UserService의 API를 호출해서 목록을 조합해야하기 때문에 UserService API가 성능이 느려진다면 QnA목록 조회 API도 느려지게 되는 문제가 생기게 됩니다.

 

그래서 현실적으로 우리 상황에서 해당 요구사항을 처리하려면 Question을 추가할때 userName을 DB에 추가하도록 해야 할 것 같습니다 (Answer의 경우는 관리자 등록 이므로 제외 가능 할 듯하네요)

(물론 UserService의 User정보를 동기화 시켜두는 전략도 있지만 그 전략은 이것 때문에 작업하기에는 다소 과하지 않나 싶단 생각이 듭니다)

 

또 추가적으로 이 작업을 하려면 G/W단에서 UserName을 같이 넘겨주는 작업을 해야할 것 같습니다
(현재 가정은 UserId만 넘겨주는 상태)

이 강의에서는 해당 내용을 추가하면 집중을 의도하고자한 부분이 흐려지기 때문에 제외했습니다 그래서 우선 ID만 내려주도록 구성해두었습니다!


이런 전략은 이번 강의의 메인 주제와 벗어나긴하지만 충분히 생각해볼 수 있는 부분인 것 같습니다 😃
좋은 질문 감사드립니다! 모쪼록 답이 되었길 바랍니다! 감사합니다!

wheon06님의 프로필 이미지
wheon06

작성한 질문수

질문하기