개발자

데이터 join후 어디에 담으시나요?

2024년 02월 09일조회 258

안녕하세요 join한 결과를 repository를 통해 받아올때 다들 어떻게 하시나요?? 어떤 방법을 써야 하는지 모르겠어서 선배님들의 의견과 다른 회사에서는 어떻게 하는지 알고 싶어서 질문 드립니다~ 제가 알기로는 domain은 db테이블과 1대1관계를 가져야 한다?, dto는 request와 response시에만 사용하는것? 으로 알고 있습니다 Mybatis를 통해 두 테이블을 join할때 (예를 들어 게시판 상세페이지에 접속할때 게시판테이블의 정보와 업로드된 파일을 관리하는 테이블의 데이터를 함께 조회함) 그 데이터를 어디에 담아서 repository를 통해 리턴하면 될까요..? 게시판 domain에 파일 정보를 추가해서 조인한 데이터를 담자니 domain이 db와 1대 1관계를 깨는것 같고 dto에 바로 담자니 dto와 domain의 변환 시점이 있는데 규약(?)을 무시하는것 같고 브릿지 테이블을 만드는것도 아닌것 같고.. 회사에서도 여쭤볼 분이 마땅치 않아서 궁금증을 여쭤봅니다ㅜㅜㅜㅜ

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 2

인기 답변

다형님의 프로필 사진

프로젝트에서 DB 컬럼과 도메인 클래스의 필드를 1:1로 맞추자고 정한 것이 아니라면 mybatis의 resultType이 되는 클래스가 DB 스키마와 1:1 대응이 될 필요는 없습니다. 이 부분은 지금 질문자 분이 직면하신 join등의 문제로 완전히 1:1 대응으로 만드는 것이 불가능 해요. 이는 DB 엔티티(주로 테이블)의 연관관계를 처리하는 방식이 OOP와 차이가 있기 때문에 어쩔 수가 없습니다. 만약 DB에서 작성자 테이블과 작성글 테이블이 1:N 관계라면, 클래스 표현으로는 적성자 클래스안의 List<작성글> 형태의 필드를 가지는 형태로 표현이 되겠죠. DB에서는 연관관계를 인지하기 위해 키 값이 필요한데 비해, 클래스는 객체가 객체를 포함하는 방식으로 표현되는 차이가 있는 것입니다. 또한 엔티티 클래스와 도메인 클래스, 계층간 데이터 전달을 위한 DTO 클래스는 엄밀히 말해 동일한 것이 아닙니다. 도메인 클래스는 객체지향을 배울 때 나오는 예시 클래스들 처럼 특정 기술에 종속되지 않는 POJO 형태의 클래스 라고 이해하시면 더 쉽게 느낄 수도 있을 것 같네요. 굳이 따지면 엔티티 클래스가 DB 라는 외부 계층과의 매핑을 위한 클래스가 될 것 같습니다.(mybatis의 경우, resultType에 대응 / JPA의 경우 @Entity 클래스)이러한 클래스 구분을 두는 경우라 해도 DB의 질의 결과가 되는 엔티티 클래스를 도메인 클래스로 다시 변환하는 방식으로 만들기도 합니다. 뭐 이것저것 말씀드렸지만, 일단 그냥 도메인 클래스가 1:1이 이니여도 되니 join 해서 추가 되는 필드를 일단 추가 하세요. 이 후에 해당 추가로 인해서 로직이 정리되지 않거나, 도메인 클래스가 불필요하게 비대해지는 것 같다면 분리를 고민하시면 될 것 같아요!

삭제된 사용자님의 프로필 사진

삭제된 사용자

2024년 02월 10일

dto에 담아서 사용하면 됩니다 dto는 요청과 응답때만 쓰이는게 아니라 계층간에 데이터를 전달할 용도로 사용하는 객체입니다.

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!