일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JoinColumn
- 스프링부트오류
- Unsatisfied dependency
- 인텔리제이
- Error creating bean with name
- JPA주의사항
- REST API 규칙
- 스프링 부트 공식 문서
- Q 클래스
- github
- jpa회원가입
- jwt메서드
- Spring Spring boot 차이
- REST란
- @IdClass
- 1차캐시
- 스프링 부트 기능
- jpa에러
- json
- 복합키
- json gson 차이
- 최종 프로젝트
- 빈생성안됨
- queryDSL
- git
- uncheck Exception
- ERD 작성
- spring서버
- JPA
- Filter
- Today
- Total
Everyday Dev System
Spring Boot 블로그 서버 구현 본문
서비스 요구사항
- 전체 게시글 목록 조회 API
- 제목, 작성자명, 작성 내용, 작성 날짜를 조회하기
- 작성 날짜 기준 내림차순으로 정렬하기
- 게시글 작성 API
- 제목, 작성자명, 비밀번호, 작성 내용을 저장하고
- 저장된 게시글을 Client 로 반환하기
- 선택한 게시글 조회 API
- 선택한 게시글의 제목, 작성자명, 작성 날짜, 작성 내용을 조회하기 (검색 기능이 아닙니다. 간단한 게시글 조회만 구현해주세요.)
- 선택한 게시글 수정 API
- 수정을 요청할 때 수정할 데이터와 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
- 제목, 작성자명, 작성 내용을 수정하고 수정된 게시글을 Client 로 반환하기
- 선택한 게시글 삭제 API
- 삭제를 요청할 때 비밀번호를 같이 보내서 서버에서 비밀번호 일치 여부를 확인 한 후
- 선택한 게시글을 삭제하고 Client 로 성공했다는 표시 반환하기
1. UseCase 작성
2. API 명세서
https://docs.google.com/spreadsheets/d/1JZmNS89s8zFramK_9xyLxhH-iz1DUxvwZ1-F8a9hHng/edit#gid=0
Method | URL | Request | Response | 기능 |
GET | /api/posts | - | { { "id" : " ", "title" : " ", "name" : " ", "contents" : " ", "create_date" : " ", "modified_date" " " }. { "id" : " ", "title" : " ", "name" : " ", "contents" : " ", "create_date" : " ", "modified_date" " " } } |
전체 게시글 목록 조회 |
GET | /api/posts/{id} | - | { "id" : " ", "title" : " ", "name" : " ", "contents" : " ", "create_date" : " ", "modified_date" " " } |
선택한 게시글 조회 |
PUT | /api/posts/{id} | { "title" : " ", "name" : " ", "contents" : " ", "password" : " " } |
{ "id" : " ", "title" : " ", "name" : " ", "contents" : " ", "create_date" : " ", "modified_date" " " } |
선택한 게시글 수정 |
DELETE | /api/posts/{id} | { "password" : " " } |
{ "success": true } |
선택한 게시글 삭제 |
POST | /api/posts | { "title" : " ", "name" : " ", "contents" : " ", "password" : " " } |
{ "id" : " ", "title" : " ", "name" : " ", "contents" : " ", "create_date" : " ", "modified_date" " " } |
게시글 작성 |
시행착오들
2023.06.15 - [내일배움캠프 공부/TIL : Today I Learned] - 스프링 오류 : Error creating bean with name
해당 프로젝트 gitHub 주소 :
https://github.com/Chaeyounglim/myBlog
프로젝트를 마친 후에 질문들
1. 어떤 상황에 어떤 방식의 request를 써야하나요?
[데이터 보안에 따른 분류]
1. 데이터 노출이 상관이 없을 경우
데이터를 url에 명시하여 이를 통해 값을 전달할 경우 get방식을 활용합니다.
데이터가 url에 노출되어 보안이 필요하지 않은 데이터의 경우에 활용하면 됩니다.
개인정보가 포함되지 않는 상황에서 캐싱을 하여 속도를 높힐수 있다는 장점이 있습니다.
예시1) http://localhost:8082/api/posts/id
Controller 내에 해당 API 메서드 파라미터에 해당 어노테이션 기재 : @PathVariable
예시2) http://localhost:8082/api/posts?id=sally
Controller 내에 해당 API 메서드 파라미터에 해당 어노테이션 기재 : @RequestParam
2. 데이터 노출을 원치 않을 경우
데이터를 Body에 포함시켜 url에 노출시키지 않고 요청할 경우에는 Post 방식을 활용합니다.
password 같은 경우는 url에 노출시키면 보안상 문제가 있습니다.
예시)
{
"title" : "sds",
"contents" : "sd",
"name" : "ff",
"password" : "password"
}
위 데이터를 request할 때
Controller 내에 해당 API 메서드 파라미터에 해당 어노테이션 기재 : @RequestBody
또한 메서드앞에 @ResponseBody를 기재하거나 Controller 앞에 @RestController 기재
[데이터 용도에 따른 분류]
1. 데이터 조회
데이터를 조회하거나, 특정 조건에 맞는 데이터를 조회할 경우에는 get 방식을 활용합니다.
특정 조건에 대한 데이터는 url을 통해 전달받아서 sql 쿼리문에 조건을 주어 조회하여 가져옵니다.
2. 데이터 수정
수정할 데이터를 json 타입의 데이터로 전달하여 put 방식을 활용합니다.
서버는 전달받은 json 타입 데이터의 key 값과 Entity Class의 멤버 변수명이 일치할 경우, 이를 Controller에서 맵핑하여 Service에 데이터를 update 역할을 하는 메서드로 전달합니다.
3. 데이터 저장
저장할 데이터를 json 형태의 데이터로 전달하여 post 방식을 활용합니다.
서버는 전달받은 json 타입 데이터의 key 값과 Entity Class의 멤버 변수명이 일치할 경우, 이를 Controller에서 맵핑하여 Service에 데이터를 insert 역할을 하는알맞는 메서드로 전달합니다.
4. 데이터 삭제
삭제할 데이터의 식별자 값을 json 형태로 받아옵니다. delete 방식을 활용합니다. 받아온 식별자 값을 Service에서 데이터를 삭제하는 역할을 하는 메서드에 전달하여 데이터를 삭제 합니다.
2. RESTful한 API를 설계했나요? 어떤 부분이 그런가요? 어떤 부분이 그렇지 않나요?
찾아보니 REST API의 설계 규칙을 올바르게 지킨 시스템을 RESTful하다 말할 수 있다고 한다는 것을 새로 알게되었습니다. 그럼 REST API의 설계 규칙이 뭔지 먼저 알아야 할 것 같습니다.
1. URI는 동사보다는 명사를, 대문자보다는 소문자를 사용하여야 한다.
- 해당 규칙을 잘 준수하였습니다.
2. 마지막에 슬래시 (/)를 포함하지 않는다.
- 해당 규칙을 잘 준수하였습니다.
3. 언더바 대신 하이폰을 사용한다.
- 해당 언더바와 하이픈은 사용하지 않았습니다.
4. 파일확장자는 URI에 포함하지 않는다.
- 확장자는 기재하지 않았습니다.
5. 행위를 포함하지 않는다.
- 행위는 HTTP Method를 통해 구분하였습니다.
해당 규칙에 맞게 설계를 했습니다. 또한, 데이터에 대한 처리를 알맞은 HTTP Method를 적절히 잘 선택하여 프로젝트를 마쳤습니다.
3. 적절한 관심사 분리를 적용하였나요? (Controller, Repository, Service)
클라이언트로 부터 데이터를 전달 받고, 데이터를 반환하는 역할은 Controller에서 수행합니다. 또한, 데이터를 가공 등 변환하는 처리 등은 Service에서, 가공된 데이터를 전달받아 DB에 반영 하는 역할을 하는 Repository로 3개의 계층으로 잘 분리하여 작성하였습니다.
자세한 설명은 아래 글 참조.
2023.06.13 - [내일배움캠프 공부/Spring 입문] - @Service와 @Repository
'내배캠 주요 학습 > Spring 입문' 카테고리의 다른 글
Spring Boot 기능 (0) | 2023.06.30 |
---|---|
스프링 및 스프링 부트 서버 동작 원리 (1) | 2023.06.16 |
JPA 활용시 _(언더바)의 예약어 역할 (0) | 2023.06.15 |
영속성 컨텍스트의 기능 - 3가지 (0) | 2023.06.14 |
영속성 컨텍스트 활용 - persist() , find() , remove() (0) | 2023.06.14 |