MVC 중 Model은 비즈니스 계층(Business Layer)과 퍼시스턴스 계층(Persistence Layer)로 구성된다. persistence layer은
Service, DAO, DTO로 나눌 수 있다.
DB에 접근하기 위해서는 다음과 같은 계층을 거치게 된다.
persistence Framework : JDBC 프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로 데이터베이스와 연동되는 프레임 워크. SQL Mapper, Object-Relational Mapping 으로 구분 됨.
SQL Mapper: SQL문장으로 직접 데이터베이스 데이터를 다룸. 예) Mybatis, Jdbc Templetes 등
ORM(Object-Relational Mapping): 객체를 통해 간접적으로 데이터베이스의 데이터를 다룸. 예) JPA, Hibernate 등
(Data Access Object)
특정 타입의 데이터베이스나 다른 지속적인 메커니즘에 추상 인터페이스를 제공하는 객체.
어플리케이션 호출을 데이터 저장부분(Persistence Layer)에 매핑함으로써 DAO는 데이터베이스의 세부내용을 노출하지 않고 특정 데이터 조작 기능을 제공한다.(단일 책임 원칙)
도메인모델은 UI에 필요하지 않은 정보까지 가지고 있기 때문에 도메인 모델을 캡슐화 하여 보호하기 위해 도메인 모델 대신 사용된다.
-> "DAO" 인터페이스와 "DAOImpl" 클래스를 따로 만드는 이유
: 기능이 많아 질 경우, 하나의 클래스에 구현할 경우 코드가 복잡해지고 수정하기가 어려움.
따라서 인터페이스를 통해 기능을 구현하고, 기능에 대한 자세한 코드를 "Impl"클래스에 작성함.
(Data Transfer Object)
프로세스 사이에서 데이터를 전송하는 객체.
대부분의 개별 호출이 클라이언트와 서버 간의 왕복 시간을 소모하기 때문에, 호출 횟수를 줄이는 방법 중 하나로 몇번의 호출에 의해 전송될 데이터를 모으는 DTO를 이용하여 한번만 호출 할 수 있다.
DTO는 DAO와 다르게 스스로 데이터를 저장(SET) 및 회수(GET)하는 기능을 제외하고 아무 기능도 갖고 있지 않다.
<유저가 입력한 데이터를 DB에 넣는 과정>
1. 유저가 자신의 브라우저에서 데이터를 입력하여 FORM에 있는 데이터를 DTO에 넣어저 전송.
2. 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣음.
(Value Object)
간단한 독립체(Entity)를 의미하는 작은 객체.
VO는 불변해야 하며, 이는 두 VO가 같은 값으로 생성되었으면 같은 값으로 남아 있어야 한다.
JAVA에서 VO는 작은 자바빈(JavaBean)이나 DTO 혹은 POJO(Plain Old Java Object) 등 을 의미한다. VO는 사용하는 도중에 변경이 불가능 하며 오직 읽기만 가능하다.
Controller가 Request를 받으면 적절한 Serivice에 전달하고, 전달받은 Service는 business logic을 처리함.
Service가 DB에 DAO로 접근하고, 데이터를 DTO로 전달받은 다음, 데이터를 필요에 맞게 가공하여 반환한다.