반응형

- DAO란?

DAO는 Data Accecc Object, 즉  데이터의 접근에 대해 관련되어있어

이 말은, DB에 접근하기 위해서, Host, id, password, port 등을 설정하고 connect 시키는 작업을 하는데

조~금 예전에는 query문이 존재하는곳 쪽에 connection을 시도하기도 했었는데...

DB에 접근하여 데이터에 접근이 가능한 로직과, 비즈니스 로직을 서로 떼어내 관리하기 용이하도록 만든게 DAO라고 할 수 있지

또한 DB서버에 접근 했을때 연결에서 에러가 난다던지, 다양하나 오류가 발생될 때 처리가 가능한 코드가 포함이 되어있어.


- DTO란?

DTO는 주로 파일들을 보면 get, set으로만 이루어진 파일을 자주 봤을거야, 혹은 VO라고 적혀있는 경우도 있지

이것을 DTO라는건데 주로 VO와 혼용해서 많이 사용하기도 해, 하지만 다른점이 존재하니 바로 DTO 뒤에 설명할게

Data Transfer Object라는 뜻으로, 말 그대로 데이터의 교환하는 객체(Java Beans )를 통해서 작업을 하게 되는거야.

사실 DAO에서 유래된 관계이지만, DB처리 로직을 숨김으로 한 DTO가 나온것이지

 

여기서 getter와 setter만 있는 역할인데 무엇을 할 수 있을까?

자세히 들여봐도 대충봐도 있는것이라고는 변수가 선언되어있고, getter,setter를 통해 만들어져있는 코드들뿐인데

사실 DTO는 말 그대로 데이터를 담는 그릇일뿐, 다른 처리는 하지 않는다고 볼 수 있어.

 

이웃집에서 이사를 왔다고 그릇에 떡을 가지고 왔는데 나는 다른 그릇에 떡을 옮기고 그 그릇을 이웃집에 다시 돌려주는것과 같이

단지 데이터를 전달하는 역할인거지

 

서버측의 입장을 보면

서버 DB > DTO > API > 클라이언트 순으로 

 

클라이언트 입장에서 보면

서버 > API > DTO > VIEW 이런식인거야

 

데이터를 옮겨주는 그릇이라고 볼 수 있지?


- VO란?

VO는 사실 Value Object라는 뜻을 가졌어, DTO와의 공통점은 값을 가진다는 공통점이 존재하지만

다른점을 살펴보면 VO의 경우는 Read Only라는 한정적이고 명확한 속성을 가졌고 DTO와는 다르게 로직을 가질 수 있어.

VO는 Read Only를 보장해야하는데, 보존되어진 값 자체에 신뢰성을 부여하는 것이지

관계데이터 베이스에서 보면 이는 레코드에 대응이 되는 존재이기도 하고 신뢰성으로 인해 불변성을 가지고 있어

서로 다른 이름을 가진 vo 인스턴스의 경우 모든 속성이 같다면 당연히 똑같은 객체로 보겠지만.

이를 비교하기 위해서는 equals( ) or hashcode( )를 @Override 해서  비교를 해야한다는 점이 있어.


- Entity란?

Entity도 레이어간에 데이터 이동을 위해서 사용이 되고 @Controller 처럼 어노테이션 선언하듯

@Entity라고 선언을 해서 사용을 하게 되는데,  VO의 경우는 값을 온전하게 깨끗하게 가지고 있는 객체라고 설명을 한다면

Entity의 경우는 DB 테이블과 매핑을 해서 사용을 하게 되는거야. 또한 데이터의 이동이라는 기준이 조금 다른데 

테이블이 생성이되거나, 스키마의 변경이 되기때문에 단순히 요청이나 응답, 전달하는 값 자체를 담는 그릇은 아니라는거지

이 친구와 VO의 공통점을 보자면 로직을 가지고 있을 수 있고, 또한 불변성을 줄 수도 있어

다른점을 말하면 불변성을 줄수도 있지만, 가변성도 주어질 수 있어 그리고 값에 대한것이 아니라 DB 테이블과 매핑 시킨다는 다른점 이있는것이지


- 대충 정리

DAO : DB에 접근하기 위한 access 값을 관리하며 DB 접근 및 에러에 관련된 처리 로직을 가지고 있음

DTO : 레이어 간에 데이터를 전송하기 위한 객체며 가변,불변 속성을 동시에 가지고, 로직없이 getter와 setter로 구성

VO    :  값을 표현하기 위한 ReadOnly속성을 가진 객체로 불변성을 가지고있고 로직을 포함 할 수 있고 값의 비교는 equals( ) or hashcode( )를 @Override 해서  비교

Entity : DB테이블 매핑용 객체로 가변, 불변 속성을 동시에 가지며 데이터 전송용으로는 사용x  로직을 포함 할 수 있음

 

* 그나저나 DTO와 VO를 혼용하여 많이 사용하거나 똑같다고 생각하는 사람들이 생각보다 많은데.. 통상적으로 둘중 하나를 가지고 사용을 하고 있고

회사마다 규칙이 다르고 사용법이 다르다 보니 VO에 getter/setter가 포함되는 경우를 자주 볼 수있다. 심지어 eGovframework에서도 말이다..

그러니 이건 이런 개념인데요!! 라고 밀고 나가기 보다는 아~ 여기는 이렇게 쓰는구나~ 하고 약속을 정해 쓰는것이 맞는것 같다고 생각도 하고 막 그렇다 ?

반응형