티스토리 뷰

업무를 하다보면 DTO와 VO와 MODEL의 경계선이 모호하다고 느낄때가 있다.
그래서 자문자답 식으로 풀어서 써봤다.

질문 1
자바 스프링에서 dto, vo, model의 차이점은 무엇인가요?

답변 1
Java Spring의 맥락에서 DTO(데이터 전송 개체), VO(값 개체) 및 모델이라는 용어는 응용 프로그램의 데이터를 나타내는 데 사용되는 다양한 개체를 나타내는 데 종종 사용됩니다. 이 용어들 사이에는 약간의 중복이 있지만, 각각 다른 의미를 가지고 있습니다: - 데이터 전송 개체(DTO): DTO는 응용 프로그램의 계층 간에 데이터를 전송하는 데 사용되는 개체입니다. 일반적으로 지속성 계층에서 프레젠테이션 계층으로 또는 프레젠테이션 계층에서 서비스 계층으로 데이터를 전송 하는 데 사용됩니다. DTO는 특정 목적에 필요한 데이터만 포함하는 단순하고 가벼운 개체입니다. 여기에는 비즈니스 논리나 행동이 포함되어 있지 않습니다.
- VO(Value Object): VALUE Object는 DTO와 유사하지만 일반적으로 서비스 계층의 다른 부분 간에 데이터를 전송하는 데 사용됩니다. VO는 고객 또는 주문과 같은 특정 도메인 개념과 관련된 데이터를 포함하는 개체입니다. 간단한 검증 논리 또는 동작을 포함할 수 있지만 일반적으로 데이터를 유지하는 데 사용되지 않습니다.
- Model: Model은 특정 컨텍스트에서 사용되는 데이터의 표현입니다. 여기에는 여러 가치 개체 또는 DTO의 데이터가 포함될 수 있으며 특정 사용 사례와 관련된 비즈니스 논리 및 동작이 포함될 수 있습니다. Java Spring의 맥락에서 "Model"이라는 용어는 렌더링을 위해 서비스 계층에서 프레젠테이션 계층으로 전달되는 데이터를 가리키는 데 자주 사용됩니다.
요약하면 DTO, VO 및 Model은 응용 프로그램의 데이터를 나타내는 데 사용되는 서로 다른 개체입니다. DTO는 계층 간에 데이터를 전송하는 데 사용되고, VO는 서비스 계층의 부분 간에 데이터를 전송하는 데 사용되며, Model은 특정 컨텍스트에서 데이터를 나타내는 데 사용됩니다. 요약하자면,
- DTO에는 비즈니스 로직이 있으면 안된다. Layer 를 이동할때 사용하면 좋다.
- Vo는 DTO 와 Model의 중간 정도 역할이지만, 가벼운 로직 정도가 좋다. Layer 내부에서 데이터를 이동할때 쓰면 좋다.
- Model은 비즈니스 로직을 포함하기 좋으며, 프레젠테이션 계층에서 사용하기 좋다.

그럼 Layer를 이동한 다음엔 dto를 vo 또는 model로 변환해서 사용해야하는데, 이것 또한 어떻게 하는게 적절한 방법일지 고민이 될때가 많다. 질문 2
DTO를 VO 또는 Model로 변환하는 방법에는 어떤 것들이 있나요?

답변 2
DTO(데이터 전송 개체)를 VO(값 개체) 또는 Model로 변환하려면 다음 기술을 사용할 수 있습니다:

- 수동 매핑: DTO의 속성을 VO 또는 Model에 수동으로 매핑할 수 있습니다.
- 개체 매핑 라이브러리: MapStruct, Orika 또는 Dozer와 같은 개체 매핑 라이브러리를 사용하여 매핑 프로세스를 자동화할 수 있습니다. 이러한 라이브러리는 주석 또는 구성 파일을 사용하여 개체 간의 매핑을 지정합니다.
- Model 매핑 프레임워크: ModelMapper 또는 AutoMapper와 같은 Model 매핑 프레임워크를 사용할 수 있습니다. 이러한 프레임워크는 객체 간에 매핑하는 편리한 방법을 제공하며, 종종 유형 변환, 검증 및 사용자 지정 매핑 로직과 같은 기능을 포함합니다.
- Model 대 Model 매핑: 대상 유형의 새 인스턴스를 생성하고 소스 유형에서 속성을 복사하여 DTO를 VO 또는 Model로 변환하는 사용자 지정 코드를 작성할 수 있습니다.
개체 매핑 라이브러리 또는 Model 매핑 프레임워크를 사용하는 것이 좋습니다. 시간과 노력을 절약하고 코드를 보다 유지 관리 가능하고 확장 가능하도록 만들 수 있습니다.

4가지 방법이 있겠다.
그 중 첫번째와 네번째는 손으로 직접 만들라는 귀찮은 방법이다.
필드가 적은 경우엔 간단히 끝나서 문제가 없지만, 필드가 많다면 귀찮을 것 같다.
역시 라이브러리나 프레임워크를 사용하는 것을 추천한다.

본인도 MapStruct 밖에 써보지 않았는데, 기회가 된다면 Mapper 프레임워크를 배워보면 좋겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함