[SpringBoot] MVC패턴 + REST API + JPA 프로젝트 설계
MVC + JPA 프로젝트 설계
Form을 사용한 웹 설계는 아래와 같습니다.
REST API를 사용하지 않는다면 응답을 뷰 템플릿으로 하게 됩니다.
MVC + REST API + JPA 프로젝트 설계
REST API를 사용하면 요청과 응답 데이터가 대표적으로 JSON을 사용하여 통신하게 됩니다.
클라이언트와 서버 간 처리 흐름은 크게 4가지로 나눌 수 있습니다.
- MVC (Model-View-Controller) : 서버 역할을 분담해 처리하는 기법
- JPA (Java Persisitence API) : 서버와 DB간 소통에 관여하는 기술
- SQL (Structured Query Language) : DB데이터를 관리하는 언어
- HTTP (HpyterText Transfer Protocol) : 데이터를 주고 받기 위한 통신 규약
MVC패턴을 적용하기 위해 아래의 파일 구조처럼 controller, dto, entity, responsitory, service로 나누어서 진행합니다.
[java.com.example.firstproject]
│
├─controller
│ ├─exampleController.java
│ │
├─dto
│ ├─exampleDto.java
│ │
├─entity
│ ├─example.java
│ │
├─responsitory
│ ├─exampleRepository.java(Interface)
│ │
├─service
│ ├─exampleService.java
├───
Controller
클라이언트의 요청을 받아 처리하는 곳
- Controller
: 뷰 페이지 반환, @Controller ( Get, Post )
- REST Controller
: JSON 데이터 반환, @RestController (Get, Post, Patch, Delete)
- ResponseEntity
: REST Controller반환형, 즉 REST API응답을 위해 사용하는 클래스.
(응답시 클래스에 HTTP상태코드, 헤더, 본문을 실어 보낼 수 있습니다.)
DTO
Data Transfer Object
클라이언트에서 보낸 데이터는 서버의 컨트롤러가 객체에 담아 받습니다.
이 객체를 DTO라고 합니다. DTO로 받은 데이터는 최종적으로 DB에 저장됩니다.
Entity
서버와 DB간에 데이터 매핑 및 로직 처리
DB데이터를 담는 자바 객체로 엔티티를 기반으로 테이블 생성, 리파지터리가 DB속 데이터를 조회하거나 전달할 때 사용.
Repository
DB에게 CRUD요청을 보내는 JPA인터페이스
엔티티를 관리하는 인터페이스로 데이터 CRUD등의 기능 제공, 서비스로 부터 CRUD등의 명령을 받아 DB에 보내고 응답받음
Service
컨트롤러와 리파지터리 사이에서 처리 흐름 및 트랜잭션 관리
예외 상황이 발생했을 때 @Transactional로 변경된 데이터 롤백
웹 화면 입력은 DTO로 받고!
DB내용은 Entity로 받는다!
아래에는 각 역할에 필요한 어노테이션을 적었습니다. 어노테이션은 필요한 곳에 사용하면 됩니다.
[java.com.example.firstproject]
│
├─controller
│ ├─exampleController.java
│ │ ├───@Controller
│ │ ├───@RestController
│ │ │ ├───@GetMapping
│ │ │ ├───@PostMapping
│ │ │ ├───@PatchMapping
│ │ │ ├───@DeleteMapping
│ │ ├───@Autowired
│ │ ├───@PathVariable
├─dto
│ ├─exampleDto.java
│ │ ├───@Getter
├─entity
│ ├─example.java
│ │ ├───@Entity
│ │ ├───@Id
│ │ ├───@GeneratedValue
│ │ ├───@Column
│ │ ├───@Getter
├─responsitory
│ ├─exampleRepository.java(Interface)
│ │ ├───@Override
├─service
│ ├─exampleService.java
│ │ ├───@Service
│ │ ├───@Autowired
│ │ ├───@Transactional
├───
참고 자료
코딩 자율학습 스프링부트3 자바 백엔드 개발 입문 (길벗)