대빵's Blog

VO 와 DTO 의 차이점 본문

개발관련

VO 와 DTO 의 차이점

bigzero 2018. 10. 24. 16:05

프로젝트를 하다보면 본인들도 왜 그렇게 하는지 모르면서 습관적으로 설계 하거나 개발하는 것들이 상당히 많이 있다.

VO(Value Object) 와 DTO(Data Transfer Object) 도 아마 그러한 것들중 하나일 것 같다.

이것 개념들은 사실 예전에 Layered Architecture 가 유행하기 전에는 거의 사용되지 않던 개념인데 여러가지 Layered Architecture 들이 유행하면서 Data 를 서로 주고 받기 위해서 사용되었다고 생각하면 된다.

DTO 는 이름에서 알수 있듯이 각각의 Layer 또는 Client Server 간 데이터를 묶음으로 주고 받기 위한 용도이다.

여러개의 데이터들을 의미있는 구조로 설계하고 이를 묶음로 주고 받으므로서 생산성과 데이터무결성에 도움을 준다.


사실 항상 문제는 VO 에서 발생하는 경우가 많다. 문제라기 보다는 VO 를 DTO 로 정의하고 사용하는 경우들이 많다.

그럼 VO 는 무엇일까 Value Object 는 한글로 번역하기 좀 애매하다.(값 객체 ?)

VO 의 대표적인 예를 들어보면 돈(금액) 을 예로 들수 있다.

금액은 단순하게 숫자 한개의 컬럼만으로는 처리가 어려운 경우가 많다. 예를 들어 국제적인 쇼핑몰인 경우 금액은 최소한 [화폐단위, 금액, 시점] 이 세개의 정보를 포함해야 한다.

2018.10.10일 현재 달러로 1000달러 인 물건은 Price(2018/10/10, 1000, $) 이렇게 세개의 값을 묶어야 하나의 Value 로 처리가 가능하다.


이와 비슷한 정보로는 우편번호(숫자 , 국가정보, 적용시점), 일자(숫자, 음력/양력등 달력의 종류) 등이 존재한다.

국내환경에서만 개발하는 경우 여러가지 요소들 중에서 불변인 요소들이 있기 때문에 금액은 단순 숫자, 일자는 양력, 우편번호는 숫자 5자리 와 같이 Single Value 로 처리하는 경우가 많지만

소프트웨어의 특성상 VO 가 필요한 환경에서는 VO는 VO로 정확하게 설계/개발하고 DTO 는 DTO로 설계/개발하는 것이 차후 프로젝트가 망하지 않는 지름길이다.