Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- prisma
- Date
- java
- 구현
- 흐름 모드
- SESSION
- prisma 시간
- javascript
- 자바스크립트 시간 조절
- node.js
- servlet
- jsp
- 스트림
- Spring
- 일시정지 모드
- prisma timezone
- 동영상 스트리밍
- nodejs
- 자바스크립트 시간
- Stream
- node stream
- node js
- 노드 스트림
- 번역
- node
- javascsript
- tomcat
- node 스트림
- 스트리밍
Archives
- Today
- Total
벤권의 개발자 이야기
DTO와 VO 둘다 필요할까? (ModelMapper) 본문
DTO 와 VO
개발자의 성향이나 프로젝트 구조 혹은 여러 가지 이유로 DTO 와 VO를 둘 다 만들어야만 하는가에 대한 논쟁은 존재합니다. DTO와 VO를 별도로 작성하는 경우 코드의 양이 많아지고 불편하다는 의견도 많고 DTO를 VO로 변환하거나 반대일 때도 역시 상당히 번거로워 보이기 때문입니다.
그럼 어떤 방식이 맞는가?
위에서 말했다 시피 개발자마다 다르지만, DTO와 VO를 구분해서 만드는 방식이 더 나은 방법이라고 생각한다. 우선은 나중에 사용하게 될 JPA에서는 필수적이기 때문에 스프링에서도 DTO는 검증이나 변환에서 전혀 다른 애노테이션들이 필요하다.
항상 프로그래밍은 확정성을 염두하지 않으면 지금은 편해지지만 항상 생각해야하는 것이 확장성이라고 생각한다. 현재 서비스가 간단해서 DTO와 VO를 구분하지 않는 것이 맞아 보일 수는 있지만 나중에 어떻게 될지 모르니깐.. 근데 이 책에서 글 쓴 사람은 JPA에서 필수적이라고 하는데 이말은 그냥 구분하는게 필수라는 말이랑 같다고 생각한다.
ModelMapper
번거로운 DTO↔VO 변환 작업은 ModelMapper 라이브러리를 이용해서 처리하면 된다.
ModelMapper는 getter/setter등을 이용해 객체의 정보를 다른 객체로 복사하는 기능을 제공한다.
아래 처럼 싱글 인스턴스로 ModelMapper 객체를 이용할 수 있는 enum 객체를 하나 만들고 사용 하면 된다.
import org.modelmapper.ModelMapper;
import org.modelmapper.config.Configuration;
import org.modelmapper.convention.MatchingStrategies;
public enum MapperUtil {
INSTANCE;
private ModelMapper modelMapper;
MapperUtil() {
this.modelMapper = new ModelMapper();
this.modelMapper.getConfiguration()
.setFieldMatchingEnabled(true)
.setFieldAccessLevel(Configuration.AccessLevel.PRIVATE)
.setMatchingStrategy(MatchingStrategies.STRICT);
}
public ModelMapper get() {
return modelMapper;
}
}
아래 코드는 사용 예제
public MemberDTO login(String mid, String mpw) throws Exception {
MemberVO memberVO = dao.getWithPassword(mid, mpw);
MemberDTO memberDTO = MapperUtil.INSTANCE.get().map(memberVO, MemberDTO.class);
return memberDTO;
}