[SpringBoot] 블로그 백엔드 서버만들기

매림·2022년 7월 26일

myRecord

목록 보기
4/6

📌 요구사항

  1. GET 전체 게시글 목록 조회 API
    • 제목, 작성자명, 작성 날짜를 조회하기
    • 작성 날짜 기준으로 내림차순 정렬하기
  2. POST게시글 작성 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 입력하기
  3. GET게시글 조회 API
    • 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기
      (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
  4. POST게시글 비밀번호 확인 API
    • 비밀번호를 입력 받아 해당 게시글의 비밀번호와 일치여부 판단하기
  5. PUT게시글 수정 API
    • 제목, 작성자명, 비밀번호, 작성 내용을 수정되게 하기
  6. DELETE게시글 삭제 API
    • 글이 삭제되게 하기

1. USE CASE

  • 일반 User: 전체 게시글 목록 조회, 게시글 조회(상세조회) 가능
  • Author: 일반 User의 권한 + 비밀번호확인을 통한 게시글 작성, 수정, 삭제

2. API 개발과정

🔑 JSON 데이터 형식으로 Response 해주는 것이 핵심!

ResponseBody Custom Setting(JSON Response 커스텀 세팅)

  1. "success": 데이터가 요청한대로 응답했을 때(true)
    • boolean형태로 true 또는 false로 반환
  2. "data": 응답데이터를 담아주는 곳
    • 응답데이터 형태는 API마다 다를 수 있으므로 Generic Type으로 선언
  3. "error": 요청실패시 에러메시지 포함하여 응답
    • null 반환: 데이터가 문제없이 응답했을 경우
    • '404 NOT_FOUND' 응답시
    {
    	"code":"NULL_POST_ID"
      	"message":"post id does not exist."
    }
    • '400' BAD_REQUEST' 응답시
    {
    	"code","ACCESS_DENIED"
      	"message","password is wrong"
    }

첫번째_ 전체 게시글 목록 조회 API

🔒 응답 "data"에는 비밀번호와 작성내용을 제외하여 Response 해줘야함!
🔑 "Spring JPA Projection"
: 이 기능은 interface 기반으로 구현되며 Entity의 일부데이터만 가져올 수 있도록. 즉, 우리가 어떤 Entity에서 필요한 properties만을 선택적으로 가져올 수 있도록 해준다.관련 공식문서

중요!!!__ Interface에는 getter method만을 만들어주고, 이 method는 Aggregate root(여기서는 Board Class)의 것과 동일해야한다.

⬆️Projection기능 사용을 위한 Interface(비밀번호, 작성내용을 제외한 데이터만 가져오도록)
⬇️ 'ShowAllBoardList' 를 통해 가져온 Entity를 생성날짜 기준으로 정렬하도록함


두번째&세번째_ 게시글 작성, 게시글 상세조회 API

🔒 패스워드 field는 데이터에서 보이지 않도록
🔑 @JsonIgnore 라는 Annotaion을 통해 Json객체로 반환할 때 보여지지 않도록 함(무시)

⬆️@JsonIgnore를 password 필드에 적용
⬇️ ResponseBody에 password 필드가 보여지지 않는다.

네번째-여섯번째_ 비밀번호 확인 API + 게시글 수정, 삭제 API

🔒 RequestBody가 JSON의 형태일 경우일 때, int 값인 password를 추출하여 서버에 저장된 데이터와 동일한지 확인하는 방법은?
🔑 JSONObject 라이브러리 -> gradle import 필요!

⬆️ 구현코드

1) RequestBody에는 아래와 같이 JSON형태로 데이터가 담아져서 서버쪽으로 보내진다. (JSONObject을 통해 값을 추출하기 위해서는 String으로 받아야함)

	{
		"password":1234
    }

2) String값인 password를 JSONObject를 사용하여 Json객체화시킨다.
3) 그 후 getInt("password") 메서드로 int으로 값을 추출한다.
4) id를 통해 DB에 데이터를 찾아 저장된 비밀번호가 맞는지 확인한다.


완성 API 명세서
완성 코드 Github

0개의 댓글