KyungHwan's etc.

스프링프레임워크 - DAO, DTO ,VO 본문

Java/스프링프레임워크

스프링프레임워크 - DAO, DTO ,VO

KyungHwan_0 2018. 5. 30. 16:15

DAO, DTO ,VO

1. DAO(Data Access Object)

DAO(Data Access Object)는 실질적인 DB에 접근하는 객체를 말한다. DAO를 사용하는 이유는 효율적인 커넥션 관리와 보안성 때문이다.

모든 데이터베이스에 공통적으로 접속 할 수 있는 ODBC가 나왔지만 여전히 로우 레벨의 API를 포함하고 있었기 때문에 개발 장벽이 높았다. 이런 이유 때문에 개발자들은 정작 데이터베이스에 들어 있는 데이터를 어떻게 이용할지에 초점을 맞추기 보다, 어떻게 데이터베이스에 접속해서 데이터베이스와 교류하는지에 더 초점을 기울였다.

즉, 데이터를 활용하는 논리적 고민보다 기술적 고민에 더 많은 신경을 썼었다. 이런 이유로 DAO란 대안이 나오게 되었다.

DAO는 특정 타입의 데이터베이스나 다른 지속적인 메커니즘( Persistence Mechanism )에 추상 인터페이스를 제공하는 객체이다. 어플리케이션 호출을 데이터 저장 부분( Persistence Layer )에 매핑함으로써 DAO는 데이터베이스의 세부 내용을 노출하지 않고 특정 데이터 조작 기능을 제공한다. 이 고립성은 단일 책임 원칙( Single Responsibilty Principle )에 기반한다.

단일 책임 원칙 : 객체 지향 프로그래밍에서 모든 컨텍스트( 클래스, 기능, 변수 등 )은 하나의 책임만 가져야 한다는 것이며, 이는 컨텍스트에 의해 완전히 캡슐화 되어야 한다는 것이다. 그리고 모든 서비스들은 해당 책임에 맞춰 조정되어야 한다.

다른 말로는 "클래스를 수정해야 할 이유는 오직 하나여야 한다"고 한다

사용자는 자신이 필요한 interface를 DAO에게 던지고 이 인터페이스를 구현한 객체를 사용자에게 편리하게 사용 할 수 있도록 변환해준다. DB에 대한 접근을 DAO가 담당하도록 하여 데이터베이스 액세스를 DAO에서만 하게 되면 다수의 원격 호출을 통한 오버헤더를 VO나 DTO를 통해 줄일 수 있고, 다수의 DB 호출 문제를 해결할 수 있다. 또한 단순히 읽기만 하는 연산이므로 트랜젝션 간의 오버헤드를 감소할 수 있다.

DAO 예제 -> 데이터베이스를 연결하는 객체

clip_image002

2. DTO(Data Transfer Object)

DTO(Data Transfer Object)는 계층간 데이터 교환을 위한 자바빈즈를 말한다. 여기서 말하는 계층간의 컨트롤러, 뷰, 비즈니스 계층, 퍼시스턴스 계층을 말하며 각 계층간 데이터 교환을 위한 객체를 DTO 또는 VO라고 부른다. (VO**는 DTO와 동일한 개념이지만 Read only 속성을 가짐)**

Data란 일반적인 Database도 될 수 있고, 파일도 될 수 있으며, 메모리도 될 수 있고, 기타 다른 저장소도 될 수 있다.

DTO를 이용하는 이유는 프로세스 간의 커뮤니케이션이 주로 개별 호출이 부담스러운 작업일 경우가 많은 원격 인터페이스(예:웹서비스)에 의해 이루어지기 때문이다. 대부분의 개별 호출이 클라이언트와 서버 간의 왕복 시간을 소모하기 때문에, 호출 횟수를 줄이는 방법 중 하나는 몇번 의 호출에 의해 전송될 데이터를 모으는 DTO을 이용해서 한번만 호출하게 하는 것이다.

DTO와 VO의 차이

VO(Value Object)는 DTO와 동일한 개념이지만 Read only 속성을 갖는다.

VO는 관계 데이터 베이스의 레코드에 대응되는 자바 클래스이다. 형태는 DB 레코드를 구성하는 필드들을 VO의 Attribute로 하고 해당 변수에 접근 할수 있는 Getter,Setter 메소드의 조합으로 클래스가 형성되어진 클래스이다. 특성을 대체로 불변성이고 equlas()로 비교할 때 객체의 모든 값을 비교 해야 한다

DTO예제

1527664365287

Comments