일반 Spring Boot에서의 RESTful API 모듈

황제낙엽 2020.04.16 00:35 조회 수 : 216

sitelink1 https://blog.naver.com/sjc02183/221788777301 
sitelink2  
sitelink3  
extra_vars6  

RESTful API는 HTTP Request를 이용해 데이터를 GET, POST, PUT, DELETE할수 있는 API를 의미한다.

RESTful API는 보통 다음의 공통적인 기능을 수행한다.

GET - 데이터를 가져온다

POST - 데이터를 생성한다(생성하고 업데이트한다)

PUT - 데이터를 업데이트한다

DELETE - 데이터를 삭제한다.

이 기능을 구현하기 위해 어플리케이션 서버는 대체로 다음과 같은 구조를 가진다

image.png

3-tier model(JPA Repository 대신 DAO라고 생각하자)

여기서 어플리케이션 서버는 크게

1. 데이터를 데이터에서 받아오고 처리해서 브라우저에 출력한다.

2. 데이터를 브라우저에서 받아오고 처리해서 데이터베이스에 저장한다.

두 가지 일을 하게 되고, 그에 따라 데이터 클래스와 데이터 처리 클래스로 나눈다.

- 데이터 클래스

model, request, response는 데이터 클래스에 해당한다. 데이터 클래스는 아무런 행동도 하지 않고 데이터를 저장하고, 받고, 넘기기만 한다.

1. Model - 실제 비즈니스 모델을 위한 데이터를 보관하는 모듈이다.(은행이라면 잔액이나 계좌정보, 신용등급 등을 데이터베이스에서 뽑아서 들고있는 곳)

2. Request - http Request(클라이언트의 요청)에 포함되어 날아오는 데이터를 처리하는 곳. 모델 자체를 브라우저(http)와 접근시키기 전에 걸러주는 단계이다. 보통 보안 이슈를 처리하거나, 리퀘스트로 받아온 정보를 모델과 일치시키는 역할을 한다.

3. Response - 모델의 정보를 http Response(서버의 응답)에 포합시켜 보낸다. Request와 마찬가지로 모델을 직접 브라우저와 접근하지 않고 가운데서 데이터 등을 걸러준다. 여기서 보통 에러메시지 리스트를 장착하게 되는데, 모든 모델들이 Response를 통해서 에러메시지를 통해 전달하기 때문에 추상 클래스를 통해 에러 메세지 모듈을 넣으면 효율적으로 개발할 수 있다.

-> 보통 Request 모듈과 Response 모듈은 Controller 모듈에 포함되어있다.

package com.fsoftwareengineer.MySpringApp.ApiResponse; import lombok.*; import java.util.List; @Getter @Setter @RequiredArgsConstructor public abstract class ApiResponse<T> { @NonNull private T data; private List<String> errors; }

이런 식으로.

- 데이터처리 클래스

controller, service, DAO(jpa repository)는 데이터처리 클래스에 해당한다. 데이터처리 클래스는 데이터 클래스를 활용해 다양한 역할을 한다.

1. Controller - 컨트롤러는 사용자(Client)의 요청(Request)를 어떻게 할지(Handling) 결정하고, 응답(Response)해준다. 스프링 부트에서 제어를 담당한다. @Controller를 이용해 Controller의 역할을 한다고 명시해주거나 @RestController를 이용해 Restful API임을 스프링 부트에 알려주고, @RequestMapping을 이용해 Request가 들어오면 처리하는 기준점(URL)을 설정한다.

2. Service - 서비스는 사용자(Client)의 요청(Request)에 대해 올바른 정보를 제공하기 위한 처리를 한다.(이를 Business Logic이라 한다) 컨트롤러가 물리적으로 넘어온 요청을 처리하고 보내는 역할을 수행한다면, 서비스는 들어온 정보를 알맞게 가공하고 처리해 Controller에게 데이터를 넘기는 과정이라고 볼 수 있다.(요청/수행 분리) @Service를 이용해 Service의 역할을 한다고 명시한다.

3. DAO(JPA Repository)

Spring Boot에서는 JPA 또는 hibernate, Mybaits를 이용해 DAO를 처리하기 때문에 JPA Repository라고 쓴 것 같지만, 사실 JDBC를 쓰거나 생으로 접근하거나 데이터베이스에 저장하는 방법은 모두 들어갈 수 있다. 데이터베이스와 접근하는 부분을 모듈화한다.

 

번호 제목 글쓴이 날짜 조회 수
공지 (확인전) [2021.03.12] Eclipse에서 Spring Boot로 JSP사용하기(Gradle) 황제낙엽 2023.12.23 0
공지 [작성중/인프런] 스프링부트 시큐리티 & JWT 강의 황제낙엽 2023.12.20 6
81 [POST] Spring MVC 구조 분석 황제낙엽 2024.01.17 1
80 Spring Framework 에서 사용하는 annotation 황제낙엽 2024.01.17 1
79 Spring MVC configuration file 황제낙엽 2024.01.17 0
78 [스프링 시큐리티 OAuth2] 강의 자료와 학습용 소스 file 황제낙엽 2024.01.15 0
77 OAuth 2.0 Resource Server - Spring Security OAuth2.0 황제낙엽 2023.12.27 1
76 Spring, JSP, Gradle, Eclipse 환경 구축[2] - 샘플 프로젝트 file 황제낙엽 2023.12.24 0
75 Spring, JSP, Gradle, Eclipse 환경 구축[1] - 레퍼런스 조사 황제낙엽 2023.12.23 1
74 spring-security-samples 황제낙엽 2023.12.22 0
73 [Bard] Spring 과 Spring Boot의 차이 file 황제낙엽 2023.12.21 3
72 Spring Boot PetClinic Sample Application 황제낙엽 2023.12.21 0
71 Eclipse, Spring Boot, Gradle, SVN 레거시(2019) 시스템 유지보수 환경 구축 file 황제낙엽 2023.11.14 4
70 [시리즈 강좌] 스프링부트로 웹서비스 구축하기 황제낙엽 2023.07.13 3
69 Spring 과 Spring Boot의 차이 file 황제낙엽 2020.05.26 202
» Spring Boot에서의 RESTful API 모듈 file 황제낙엽 2020.04.16 216
67 Spring Security OAuth2.0 파헤치기 황제낙엽 2019.09.05 77
66 Spring Security OAuth2구현 file 황제낙엽 2019.09.05 462
65 Spring Security OAuth 황제낙엽 2019.09.05 435
64 [Spring3.1.1] ResponseBody 한글깨짐 해결법 황제낙엽 2018.08.08 140