Spring Framework의 MVC에서 Model은 Service, DAO, DTO로 나눌 수 있다.
DAO
- Data Access Object의 줄임말.
- DB를 사용해 데이터를 조회하거나 조작 기능을 담당
- Domain Logic (비즈니스 로직이나 DB와 관련 없는 코드들)을 Persistence Mechanism과 분리하기 위해 사용 됨
Persistence Layer: Database에 data를 CRUD(Create, Read, Update, Drop)하는 계층
위와 같이 따로 분리해놓은 이유는 HTTP Request를 Web Application이 받게 되면 Thread를 생성하게 되는데 비지니스 로직이 DB로부터 데이터를 얻어오기 위해 매번 Driver를 로드하고 Connection 객체를 생성하게 되면 너무 많은 커넥션이 일어나게 되기 때문에 DAO를 하나 만들어 DB 전용 객체로만 사용하는 것이다.
위와 같은 개념은 DBCP(Datbase Connection Pool)로 부터 착안했다고 한다. WAS(Web Application Server)가 실행되면, 일정량의 DB Connection 객체를 Pool에 저장해 두고, HTTP Request에 따라 필요할 때 마다 Pool에서 Connection 객체를 가져다 사용하고 반환하는 것이다.
일반적으로, Connection Pool은 요청으로 생기는 Thread보다 적게 만든다. 왜냐하면 모든 Request가 DB에 관련된 것은 아니기 때문이다.(?)
그렇다면 Spring에서는? DAO를 어떻게 만들까?
-> 우선 Spring에서는 Singleton 패턴을 권장한다. Spring에서 관리되는 Singleton 패턴은 Bean으로 관리된다. Spring에서 DAO는 @Repository Annotation으로 정의한다. class 선언 시 바로 @Repository Annotation을 사용해도 되지만 참조한 글에 따르면 메소드 헤더만 정의한 interface를 정의하고 이것을 구현한 class에 Annotation을 붙여 사용한다고 한다. 이유는 interface로 구성하면 확장성과 유연성이 높아지기 때문이다. 참조한 글 외에도 여러 잘하는 프로그래머 글에서도 이 방법으로 구현했다고 한다. ????
-> DAO와 DAOImpl을 구분하자
DTO
Data Transfer Object의 줄임말이다. VO(Value Object)라고도 표현하는데, 계층간 데이터 교환을 위한 자바빈즈(Java Beans)다.
이 객체는 데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체를 말한다. DTO는 보통 로직을 가지고 있지 않고 data와 그 data에 접근을 위한 getter, setter만 가지고 있다.
정리하면 DTO는 Database에서 Data를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다. 위 코드에서도 DAO가 Database로부터 Data를 얻은 뒤 List에 담아서 보내주고 있다.
'Spring > Spring Web MVC' 카테고리의 다른 글
Dispatcher-servlet.xml (0) | 2020.10.14 |
---|---|
Spring MVC란 (0) | 2020.10.14 |
Spring MVC (0) | 2020.10.14 |
Servlet?? (0) | 2020.05.11 |
스프링 웹 MVC (1) | 2020.05.08 |