본문 바로가기
2021 웹개발 101

[Spring Boot] REST API 예제: 1. CRUD 구현

by Senna 2021. 12. 7.

CRUD란..

Create, Read, Update, Delete (생성, 읽기, 수정, 삭제)의 이니셜로.. 기본적인 데이터 처리를 말한다.

 

 

0. 실행 환경

- Spring Boot (JPA, H2, lombok ...)

 

1. 기본 클래스 준비

- 기본적인 로그 관리를 위해 Service 클래스에 @slf4j 어노테이션을 붙여준다.

- Entity 클래스

Entity 설정..

- Repository 클래스

Repository 클래스 설정

- DTO 클래스

DTO 클래스 설정

 

2. Create

Service 의 Create 메소드

   Service 에서 entity를 검증할 (실제로 테이블에 있는 데이터인지, 혹은 userId가 유효한지) 메소드를 먼저 작성한다.

   Create 메소드는 매개변수로 받은 entity를 검증한 후, save(entity) 메소드로 repository에 저장한다.

   이 때, info레벨의 log로 기록을 남겨준다.

   이후 사용자의 모든 데이터들을 다시 return 한다.

Controller의 Create 메소드

POST 요청으로 DTO를 매개변수로 받았을 때 위와 같은 응답을 하게 된다.

request ==(DTO)==> Controller ==(Entity 변환)==>Service ==> ....

... ==> Service ==(Entity)==> Contoller ==(DTO 변환) ==> response

테이블의 스키마를 노출하지 않기 위해서? 또 캡슐화해서 비즈니스 로직을 숨기기 위해서... 이런 변환 과정이 필요하다.

Postman에서 테스트

"title"의 값을 넣어 POST 요청을 보내면, 캡처와 같이 '생성 후 모든 데이터 조회' 가 응답으로 온다.

 

 

 

3. Retrieve (Read)

Service 의 Retrieve
Controller의 Retrieve
Postman 실행 결과

GET 요청으로 아무 매개변수 없이 보내면,

Controller 에서 임의로 지정한 userId인 "temporary-user"로 검색되는 모든 데이터를 보여준다.

  ==> 아마도 이후에 로그인 인증을 통해서 로그인 정보를 이용하면 나의 정보만 볼 수 있을 것...

 

 

4. Update

Service의 Update

    update의 경우에는 해당 데이터가 정말 테이블에 있는 유효한 데이터인지도 꼭 확인을 해야한다. 

이후에 매개변수로 받은 값을 기반으로 Entity 값 수정 후 저장...

그리고 다시 사용자의 모든 데이터 리스트를 반환한다.

Controller의 Update
Postman 실행 결과

    Update 기능은 PUT 요청으로 수행하게 했고, 요청보내는 데이터에서 id (userId 아님!)를 명확히 해야한다. 

 

 

 

5. Delete

Service의 Delete 메소드

앞서 Update와 마찬가지로, 넘겨받은 데이터가 정말 테이블에 존재하는 유효 데이터인지 검증해야한다.

검증 이후 entity 삭제를 진행하고, 다시 사용자의 모든 데이터 리스트를 반환한다.

Controller의 Delete 메소드
Postman 실행 결과

DELETE 요청으로 delete 기능을 수행한다.

Update와 비슷하게 해당 데이터의 id값 (userId 아님!)이 필요하지만, 그 외의 내용 title이나 done은 필요하지 않다. 

 

 

------ 구현은 여기서 끝

 

6. HTTP 메소드

이런저런 형태의 요청이 있었는데(GET, POST, PUT, DELETE, ...)

이게 이름만 다른건지, 실제로 어떻게 다르길래 이름을 그렇게 붙인건지.... 궁금해서 찾아봤다.

(아... 비전공의 설움이 느껴진다..)

메소드 설명
GET 리소스 요청
POST 서버에 내용(파일 포함) 전송
HEAD 메세지 헤더(문서 정보) 요청
PUT 리소스 전체 수정 요청
DELETE 리소스 제거 요청
OPTIONS 서버에서 제공하는 메소드 목록 요청
TRACE 요청 리소스가 수신되는 경로를 보여줌
메세지 look-back 테스트 요청
CONNECT 프록시 서버와 같은 중간 서버 경유
PATCH 리소스 부분 수정 요청

(출처: https://noahlogs.tistory.com/34 )

위와 같이 구분해서,...

클라이언트가 서버에 요청을 보낼 때 '요청의 목적 및 종류를 알리는 수단'으로 사용된다고 한다.

주로 GET, POST, PUT, DELETE을 자주 사용한다는데...

 

 

그럼 PUT이랑 PATCH는 뭐가 다르지.. 뭐 그런 생각도 든다......

 

 

 

 

------- 본문 내용 끝!

 

 

같은 주소 (/todo)인데도 요청의 종류에 따라서 전혀 다른 응답이 오는게 재밌었다.

 

여태까지 거의 GET만 사용해서 프로젝트를 했었기 때문에, 요청을 이렇게 알뜰하게 쓸 수 있는 내용이 흥미롭다.

다음엔 웹 화면을 붙인다~!