Programming/SpringBoot

[SpringBoot] MVC패턴 + REST API + JPA 프로젝트 설계

owls 2023. 12. 7. 14:09
728x90

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 자바 백엔드 개발 입문 (길벗)

 

 

 

 

728x90