All About Develop/springMVC

Controller/Service/Dao/Dto/Entity/Domain

lxexjx 2022. 8. 28. 20:02

 

 

 

 

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