Spring Boot는 목적에 따라 여러 패키지를 생성하여 코드를 관리하고있다.
- controller
- repository
- dto
- domain (entity)
- service
📌 domain (entity)
DB 테이블과 직접 mapping 되는 클래스
jpa 사용 시 여러 어노테이션을 사용하여 테이블, 필드, 필드 옵션 등을 설정한다.
domain 과 client를 직접 연동하지않고 dto를 두어 분리하는 이유
- Client 쪽과 연결된 부분은 잦은 변경 사항이 있을 수 있는데, Domain과 연결되어 자주 변경되게 된다면, 여러 클래스에 영향을 미치기 때문에 분리 한다.
- DTO는 Domain Model을 복사한 형태로 다양한 Presentation Logic을 추가한 정도로 사용하며 Domain Model 객체는 Persistent 만을 위해서 사용한다.
- View 단과 DB 단을 확실하게 분리하기 위해
📌 controller
HTTP 요청과 응답을 위한 클래스
@Controller 어노테이션을 붙여주면 스프링 빈에 등록되고, 스프링에서 관리하는 객체가 된다.
@GetMapping("주소") 와 같이 http 메서드 명과 함께 주소를 작성해주게 되면, 해당 주소로 요청을 받을 수 있게 된다.
Service를 사용하여 db에 접근하게 되고, model을 사용하여 파라미터를 view 단으로 넘길수 있고, template 이름만 문자열로 반환하게 되면 View Resolver가 자동으로 해당 template를 찾아 사용자에게 페이지를 보여주게 된다.
📌 repository
db에 접근하는 코드를 모아 둔 Interface
JPA를 사용하면 JpaRepository 인터페이스를 상속받아 제네릭을 통해 관리하고자 하는 클래스, ID필드 타입을 <Posts, Long> 와 같이 넣어주게 되면 자동으로 db와 CRUD 연결을 할 수 있는 메서드를 생성해 준다.
Creat, Update, Delete와 같은 경우에는 다른 테이블 간의 조인을 잘 수행하지 않기때문에 그대로 사용하지만, Read와 같은 경우엔 여ㅓㄹ 테이블과 조인 연산이 필요한 경우가 많기 때문에 @Query 어노테이션으로 직접 쿼리를 작성하여 사용하거나 qureydsl과 같은 동적 쿼리를 생성해주는 라이브러리를 같이 사용하게 된다.
📌 dto (data transfer object = 데이터 전송 객체)
Service나 Controller에서 DB에 접근할 때 사용하는 클래스
해당 테이블에서 실제로 CRUD를 할 필드를 정의해 둔것
domain과 dto를 나누어 사용하는 이유는 코드 작성 중에 db에 접근 할 필드의 변경이 생겼을때, domain을 변경하여 db에 접근하는 경우 db 테이블 설정을 직접 접근하는 상황이 발생하여 문제를 일으킬 수 있기때문
이때문에 테이블에 대한 정보를 작성하는 domain 클래스와 db에 접근하는 필드에 관한 클래스를 작성하는 DTO 클래스를 따로 구현한다.
view에서 controller 로 넘어오는 데이터를 담거나, controller에서 service로 넘기는 데이터를 담거나 할때 사용할수있다.
로직을 가지지 않고, 데이터 객체에 대한 정보만 담고있다.
📌 service
Repository와 DTO를 통해 db에 접근하여 CRUD의 각각의 프로세스 관리와 에러 처리 등을 담당하는 역할을 한다.
@Service 어노테이션을 붙여주게 되면 스프링 빈에 등록되고 스프링에서 관리하는 객체가 된다.
db와 실제적인 접근을 명령하는 소스코드를 작성하는 클래스 이다.
DTO에 작성된 메서드를 기반으로 소스코드를 작성하게 된다.
'Framework > Spring' 카테고리의 다른 글
[Spring] 파라미터 접근법, 화면 연결 형태 (0) | 2023.05.16 |
---|---|
[Spring] 홈페이지만들기 2 - MySQL 연결하기 (0) | 2023.05.16 |
[Spring Boot] 홈페이지 만들기 1 (0) | 2023.05.12 |
[Spring] 이클립스 스프링 실행 오류 (0) | 2023.05.12 |
[Spring /Tomcat] localhost:8080/ 경로 설정 하는 방법 (0) | 2023.05.02 |