이숭간 공부기록

[Spring] DAO(=Repository), DTO(VO) 란? 본문

공부공부/Spring Boot

[Spring] DAO(=Repository), DTO(VO) 란?

이숭간 2021. 5. 22. 14:30
728x90

DAO

DB에 접근하여 데이터의 조회 및 조작의 기능을 전담하는 객체

Data Access Object의 약자로 데이터베이스의 데이터에 접근하기 위해 생성하는 객체이다.

데이터베이스에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용한다.

 

즉, DB에 접속하여 데이터의 CRUD작업을 하는 클래스이다. 

Spring Data JPA에서는 JpaRepository를 상속받는 인터페이스가 DAO의 역할을 하게된다.

 

DTO

순수 데이터 객체 (데이터를 담고있는 객체)

Data Transfer Object의 약자로 계층간 데이터 교환을 위한 자바빈즈를 뜻한다. 

DTO는 VO(value object)와 혼용해서 사용하는데 VO는 읽기만 가능한 read only의 속성을 가져 DTO와 차이가 있다.

 

일반적으로 DTO는 로직을 가지고 있지 않은 순수한 데이터의 객체이며 객체의 속성과 (필드), 그 속성의 접근을 위한 getter/setter만 가지고있다.

 

정보로 묶여질 클래스내 멤버변수들은 private으로 외부접근을 제한하고 getter/setter를 생성한다(자바빈즈패턴)

 

 

자바 프로퍼티

자바는 프로퍼티가 문법적으로 제공되지 않는다.

 

자바에서 프로퍼티라는 개념을 사용하기 위해서는 지켜야할 규칙이 있는데 setter/getter에서 set과 get이후에 나오는 단어가 프로퍼티라고 약속하는것이다. 

중요한것은 프로퍼티가 멤버변수 로 결정되는것이 아닌 setter/getter에서의 뒤에나오는 것이 프로퍼티라는 것이다.

 

자바는 다양한 프레임워크에서 리플렉션 기법을 사용한다.

어떤 DTO클래스에서 프로퍼티가 nama, age라면 name, age의 키값으로 들어온 데이터는 리플렉션 기법으로 setter를 실행시켜 데이터를 넣을 수 있다. (이때 우리가 직접 setter를 요청시키는것이 아닌 프레임워크 내부에서 setter가 실행된다)

 

따라서 클라이언트 딴에서 JSON형태로 데이터를 넘겨줄 때 키값을 프로퍼티에 맞춰서 넘겨주면 받야아하는곳에서 일일히 처리하는것이 아니라 키값과 매칭되는 프로퍼티에 자동적으로 해당 DTO가 인스턴스화 되어 해당자료형으로 값을 받을수 있게되는것이다. 

 

그래서 key-value로 존재하는 데이터는 자동화처리된 DTO로 변환되어 쉽게 데이터가 set된 오브젝트를 받을 수 있게된다.

 

 

참고링크 :

https://lemontia.tistory.com/591

https://iri-kang.tistory.com/5#:~:text=%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4%EC%97%90%20%EC%A0%91%EA%B7%BC%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%9C,%EB%B6%84%EB%A6%AC%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EC%82%AC%EC%9A%A9%ED%95%9C%EB%8B%A4.&text=%ED%95%9C%20%EC%A4%84%20%EC%9A%94%EC%95%BD%20%3A%20DAO%EB%8A%94,%EC%9E%90%EB%B0%94%EB%B9%88%EC%A6%88%EB%A5%BC%20%EB%9C%BB%ED%95%9C%EB%8B%A4.