1.Controller - 사용자의 요청을 어떻게 처리할지 결정
- @RequestMappinf(value=" ",method= ) : Controller에 들어온 요청을 처리
- 클라이언트에 담긴 데이터(DTO)를 Service에 넘기고 Service에서 처리하고 반환된 데이터(DTO)를 클라이언트에 전달
- return 으로 뷰 명시(.다음의 jsp 파일을 호출하겠다)
2. Service - 사용자의 요청을 어떤 처리할지 결정
- Controller가 받은 요청을 Service에 전달해 알맞은 정보를 가공
- DAO로 DB에 접근하고 DTO로 데이터를 전달 받고 반환
3.DAO(Data Access Object) - DB의 data에 접근하기 위한 객체 =Repository
- Domain 로직과 persistence분리
DB에 접근하려면 sql이 필요한데 자바에서 sql을 사용하려면 connection셍성해서 쿼리를 작성해야 하지만
DAO는 DB로직 을 객체 하나에 메서드로 구현 하고 호출하도록 만든 것. DB Connection객체를 Pool에다 저장해두고 HTTP Request에 따라 필요시마다 Connection 객체를 가져다 사용.
- DB를 사용해 데이터를 조회, 조작 하는 기능 담당.
- DAO는 효율적인 커넥션 관리와 보안성 때문에
- DAO에는 연동할 DB의 세션과 Mybatis코드적용됨.
- 여러 DAO를 합친거라고 할 수 있음
※ Repository vs DAO의 차이점
DAO는 데이터 소스에 가깝, DB접근 관련 로직 모아둔 객체
Repository 는 도메인 객체에 가깝, 엔티티 객체의 상태를 보관하고 관리
4.DTO(Data Transfer Object) - 계층 간 데이터교환을 위한 Java Bean
- Data에 접근하기 위해 오직 getter/setter 메서드만 가짐.
- 다른 로직을 가지지 않음. 서비스나 컨트롤러에 보낼 때 사용하는 객체.
※ VO
- 특정한 비지니스 값을 담은 객체로 리터럴 개념
- 불변성을 가져 상태 변경이 일어나면 안됨(read only)
-
※ Entity
- DB테이블의 컬럼만을 필드로 가지는 클래스. 테이블에 존재하지 않은 컬럼을 가지면 안됨
- 상속 받거나 구현체이면 안됨
- @Entity. 테이블과 1:1 매핑. JPA에서 사용되는 개념(Mybatis에서는 사용하지 않음)
※Domain
- Entity클래스이 Getter를 사용하면 안됨
- 구현 로직은 주로 Service에서 사용
5.정리 @Controller → @Serviec → @Repository
컨트롤러에서 서비스 정보를 갖고 있는 클래스 선언 →
Service( @Service )에서 해당 서비스에 맞는 데이터를 불러오기 위해 DAO호출 →
리턴으로 DAO에서 불러온 값을 반환 →DTO 로 데이터를 주고 받음 →
※ Service, dao는 bean에 등록해줘야 싱글톤과 @Autowired사용 가능
참고 : https://jione-e.tistory.com/122 https://m.blog.naver.com/scw0531/220988401816