DAO와 DTO

오영선·2022년 7월 11일
0

javaSpring

목록 보기
1/6

우리가 웹 서버를 만들고 웹 서버에서 발생하는 데이터들을 저장, 조회 업데이트, 삭제하기 위해 가장 중요한 것은 MVC패턴을 작성하는 것이다. 오늘은 이 패턴 중 model 을 알아보도록 하자.

먼저 회원관리 페이지에서 user 모델을 작성해보자.
이 모델은 다양한 방법으로 구현될 수 있다.

public class User{ 
	String id;
    String name;
    String password;
    
    public String getId(){
    	return id;
    }
    public void SetId(String id){
    	this.id = id;
    }
    ...
    //get, set만 구현되어있음(BEAN)
}

DB에 저장될 USER 테이블은 다음과 같다.


실제 DB(mysql) 사용 모습

DAO

data Access Object : DB에 있는 데이터를 조회하거나 조작하기 위한 오브젝트.
보통 데이터 베이스와 연결할 Connection까지 설정되어 있다. DAO를 별도로 만드는 경우는 드물다.

public class UserDAO{	
...
public void insert(UserDto user){}
public ... read, update, delete, login..
}

우리가 DB에서 데이터를 가져오고자 하면 DAO에 요청을 넘겨주고 DAO는 해당 요청에 맞는 작업을 처리한다.

DTO

data transfer object : VO 라고도 하며 계층(서버->뷰) 간 데이터 교환을 위한 자바 빈즈(beans : 비지니스로직 단위)이다.

DB의 데이터들을 매핑하기 위한 데이터 객체이다.
따라서 연결할 테이블의 정보를 레코드 단위로 정의한다.
DAO와 달리 보통 로직을 가지지 않고 data와, data에 접근하기 위한 getter, setter를 가진다.

DTO는 DB에서 데이터를 가져와 Service, Controller로 보낼 때 사용하는 객체를 말한다.

VO

value object : 값 오브젝트. 값의 경우 불변이어야 하기 때문에 read only이다.
DTO와 공통점은 getter를 통해 데이터를 받아오지만
DAO(가변적)처럼 setter를 쓰지 않는다.

Entity

실제 DB 테이블과 1:1로 매핑되는 클래스.
상속받거나 impliments여서는 안되고, 테이블의 컬럼이 아닌 변수를 가져도 안된다. Domain Logic만 가져야 한다.

  • entity, DTO를 서로 분리하는 이유 : DB layer와 view layer의 역할 분리
    엔티티는 실제 테이블과 매핑되어 변경되면 안된다.
    그러나 dto는 view와 통신하며 자주 변경되므로 둘 사이에는 분리가 되어야한다. 즉, dto = presentation logic + domain model

정리하기 : DB와 소통하기 위한 자바 스프링 클래스로는 Dao, Dto, VO, entity등이 있고 담긴 로직에 따라 각자 특성이 있다.
dao : 데이터 처리 로직, db접근 interface
dto : 데이터 운반 용(only get+set)
vo : 읽기 전용 데이터 운반용(only get)
entity : DB테이블 매핑. (set 지양, builder 사용)

추가 : 로직의 범위

presentation : 보여주기(view)를 위한 로직.
bussiness : 특정값을 얻기 위해 데이터 처리를 수행하는 로직 (백엔드 내 각종 처리)

[참고]

[서적]토비의 스프링vo.1
[블로그]
https://m.blog.naver.com/cjhol2107/221757079506
https://wildeveloperetrain.tistory.com/101

0개의 댓글