스프링에서 사용하는 패키지(package)단위의 구분.
패키지 구조 설계는 프로젝트마다 그리고 개발자마다 다를 것이며, 사용되는 프레임워크나 서비스에 맞게 설계되는 것이 일반적이다.
정해진 답은 없다.
= controller
클라이언트의 요청이 진입하는 포인트. 요청에 따라 어떤 처리(수행할 비즈니스로직)를 할지 결정해주며 처리된 로직 및 데이터를 View 혹은 정의내린 포맷에 맞게 응답을 보내주는 중간 제어자이다. 우리가 흔히 알고있는 MVC패턴의 그 Controller가 맞다.
스프링에서는 @Controller 어노테이션을 선언하여 스프링 Bean에 등록한다.
= service
비즈니스 로직을 처리한다. controller에서 받은 요청을 처리할 때, 필요한 데이터를 dao객체(mapper, repository)를 통해 가져와서 dto 혹은 vo를 통해 전달받은 다음, 적절한 처리를 해서 전달해준다.
스프링에서는 @Service 어노테이션을 선언하여 Bean에 등록한다.
= dao(Data access Object)
DataBase에 접근하여 데이터를 조회하거나 조작하는 기능을 담당하는 객체이다. dao를 사용하는 이유는 효율적인 connection관리와 보안성(DB관련 mechanism을 은닉할 수 있음) 때문이다.
아래의 repository나 mapper package는 ORM 프레임워크 사용시에 정의하는 인터페이스를 가진다.
- repository : JPA 구현체를 이용하여 자바 객체로 접근할 수 있도록 한다.
- mapper : mybatis 프레임워크(3.0 ver 이상) 사용시, resources에서 SQL이 작성된 xm파일을 호출하기 위한 인터페이스이다.
스프링에서는 @Repository 어노테이션을 선언하여 Bean에 등록한다.
= dto(Data Transfer Object)와 vo(Value Object)
dto와 vo는 개념적으로 동일하다. 계층(controller, view, service 등)간의 데이터 교환을 위한 객체이다.
dto와 vo는 순수한 데이터 객체이며, 로직을 가지지 않는다. 속성과 그 속성에 접근하기 위한 getter와 setter 메소드만을 가진다.
(Object 클래스 메소드는 작성가능)
[dto]는, 데이터의 전송을 위한 객체이며, 비지니스 로직의 결과까지 담긴다.
- 사용용도: 클라이언트 요청, 응답 데이터/다른 서비스, 플랫폼 통신 데이터 포맷 등..
[vo]는, 데이터 그 자체로 의미 있는 것을 담고 있는 객체이며, 거의 불변성을 가진다.
- 사용용도: 데이터베이스의 레코드에 매핑하여 사용 / JPA의 Entity에 vo를 사용
(!) 반드시 dto, vo를 사용하라는 것은 아니다. 프로젝트 속성에 맞게 설계를 하면 된다.
'SpringFramework > Spring' 카테고리의 다른 글
Spring - ResponseEntity (0) | 2021.10.08 |
---|---|
Spring - Mybatis FrameWork 개념 및 설정 (0) | 2021.09.30 |
Jenkins를 이용한 서버 Spring Boot 배포 - pipeline (0) | 2021.09.15 |
Spring - 자주사용하는 Annotation 정리 (0) | 2021.02.24 |
Spring - 스프링 프레임워크 기본개념 정리 (0) | 2021.02.24 |