본문 바로가기
카테고리 없음

DTO/ DAO/ VO의 개념 정리

by 샤샤샤샤 2023. 1. 29.

DTO/DAO/VO는 모두 객체, 즉 클래스이다. MVC와 비슷한 개념이 많아 햇갈려서 이해하는데 시간이 좀 걸렸다. 둘 모두 프로그램 설계와 관련된 개념이나 차이점이 존재한다.

 

기본개념

1.DTO(Data Transfer Object)

이름을 직역하면 데이터 변환 오브젝트로, 실제로 이름 그대로의 역할을 수행한다.

이에 대해 검색해보면 대부분 "각 계층간 데이터 교환을 위한 객체"라는 설명과 레이어 계층 사진을 넣고 설명을 끝낸다.

그러나 나는 최대한 이해하기 쉽게 정리하려고 한다. 때문에 개념을 완벽하게 이해하는데 있어 약간의 미흡함이 존재할지는 모르나, 무슨 역할을 하는 객체인지는 이해할수 있을 것이다.

 

DTO란 쉽게 이해하자면 DB에서 가져온 데이터 중, 필요한 정보만 빼온 객체를 따로 만든 것이다. 만약 쇼핑몰에서 어떤 상품의 후기를 보여주는데, 구매자의 구매 일자도 보여준다고 생각해보자. "구매일자" 라는 데이터는 구매자의 주소, 전화번호, 결제수단 같은 구매자의 개인정보와 함께 DB의 "결제 정보"만 따로 모아둔 테이블에 저장되어 있을 것이다. 그러나 쇼핑몰이 리뷰에서 필요한 정보는 오직 "아이디"와 "구매일자" 뿐이기에, 나머지 민감한 정보들도 포함된 "결제 정보"가 통째로 담긴 객체를 건내주는 것은 불필요한 행위일뿐만 아니라 개인정보 유출의 단초가 될수도 있다.

그렇기에 개발자는 필요한 데이터만 담을수 있는 클래스를 따로 만들고, 필요한 데이터를 담은 인스턴스(객체)를 생성한 다음, 그 인스턴스를 건내주는 방식으로 단계를 나눠둔 것이다. 이렇게 하면 외부의 DB에 대한 간섭을 최소화시킬수 있을 뿐만 아니라, 보안 유지에도 효과적이 된다.

 

2. VO( Value Object )

DTO처럼 어떤 값을 가지고 있는 객체로, DTO와 비슷한 개념이라고 보면 된다. 다만 DTO가 값을 수정할수 있는 것과, VO는 오직 조회만 가능하고 수정은 불가능한 불변 객체다(setter 가 없다). 따라서 만약 값을 바꾸고 싶다면 재할당 이외의 방법이 없기에, 오류를 막기에 효과적이다.

 

3. DAO( Data Access Object )

데이터 접근 객체. 

CRUD(create, read, update, delete)를 전담하는 객체. 즉, DB에 접근하는 객체를 의미한다.

컨트롤러와 혼동할수도 있는데, 컨트롤러는 DB와 관련없는 Request까지 처리하지만, DAO는 DB에 접근해야 하는 요청만 처리한다는 차이점이 존재한다. 굳이 따지자면 컨트롤러가 더 큰 개념이라고 봐도 된다.

만약 CRUD에 대한 요청과 다른 요청을 구분해놓지 않으면 매번 DB로부터 데이터를 얻어오기 위해 Driver를 로드하고 Connection객체를 생성하게 됨으로 부담이 커지게 됨으로, 이를 막고자 DB만 전담하는 DAO를 따로 만드는 것이다.