ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [SpringBoot] MVC패턴 + REST API + JPA 프로젝트 설계
    Programming/SpringBoot 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

    'Programming > SpringBoot' 카테고리의 다른 글

    [SpringBoot] Lombok 롬복  (1) 2023.12.07
    [SpringBoot] JPA  (0) 2023.12.07
    [SpringBoot] Spring Container  (0) 2023.12.02
    [SpringBoot] MVC패턴  (1) 2023.12.02
    [SpringBoot] 스프링 vs 스프링부트  (0) 2023.12.02

    댓글

© 2022. code-space ALL RIGHTS RESERVED.