์ค๋ ํ ๊ณต๋ถ
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ (Java) 1๋ฌธ์ ํ์ด & ๋ธ๋ก๊ทธ ์ ๋ฆฌ
- ์คํ๋ง 5์ฃผ์ฐจ ๊ฐ์ ๋ฃ๊ธฐ
- TIL ๋ธ๋ก๊ทธ ์์ฑ
์ค๋ ์ป์ ๋ด์ฉ ์ ๋ฆฌ
CRUD ์ค์ต
๋ฉ๋ชจ๋ฅผ CRUD ํ ์ ์๋ Web Application
1. ๋ฉ๋ชจ ์์ฑ ๊ธฐ๋ฅ C
2. ๋ฉ๋ชจ ๋จ๊ฑด ์กฐํ ๊ธฐ๋ฅ R
3. ๋ฉ๋ชจ ์ ์ฒด ์์ ๊ธฐ๋ฅ U
4. ๋ฉ๋ชจ ๋จ๊ฑด ์ญ์ ๊ธฐ๋ฅ D
1. ์๊ตฌ ์ฌํญ ๋ถ์ ๋ฐ ์ค๊ณ
๋ฉ๋ชจ์ฅ API ์๊ตฌ ์ฌํญ
- ํต์ ๋ฐ์ดํฐ ํํ๋ JSON์ด๋ค.
- ๊ฐ๊ฐ ๋ฉ๋ชจ๋ ์๋ณ์(id), ์ ๋ชฉ(title), ๋ด์ฉ(contents)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ๋ฉ๋ชจ CRUD ๊ธฐ๋ฅ์ด ํ์ํ๋ค.
HTTP API ์ค๊ณ
- ๋ก๊ทธ์ธ๊ณผ ๊ฐ์ ํน๋ณํ ๊ธฐ๋ฅ์ ์ ์ธํ ๋๋ถ๋ถ์ API๋ CRUD ์์ ์ ์ํํ๋ค.
- ์ค๊ณ ์์
- HTTP Method
- POST : CREATE
- GET : READ
- PUT, PATCH : UPDATE
- DELETE : DELETE
- Restful API → URL Mapping
- ์์ฒญ ๋ฐ ์๋ต๊ฐ ์ค๊ณ
- HTTP Method + URL๋ง์ผ๋ก ์ด๋ค API์ธ์ง ๊ตฌ๋ถํ ์ ์์ด์ผ ํ๋ค.
- HTTP Method
- ๋ฉ๋ชจ ์์ฑ
- POST
- /memos
- ๋ฉ๋ชจ ๋จ๊ฑด ์กฐํ
- GET
- /memos/{id}
- ๋ฉ๋ชจ ์์ (์ ์ฒด)
- PUT
- /memos/{id}
- ๋ฉ๋ชจ ์ญ์
- DELETE
- /memos/{id}
2. ํ๋ก์ ํธ ์์ฑ
ํ๋ก์ ํธ ์์ฑ
- IntelliJ๋ฅผ ์คํํ๋ค.
- New Project๋ฅผ ํด๋ฆญํ๋ค.
- ์ผ์ชฝ ๋ฉ๋ด์์ "Spring Boot"๋ฅผ ํด๋ฆญํ๊ณ ์๋์ ๊ฐ์ด ์ค์ ํ๋ค.
- ๋ค์ ์ฌํญ์ ๊ผญ ํ์ธํ๊ธฐ!!
- Name : memo
- Language : Java
- Build system : Gradle - Groovy
- JDK : 17
- Next๋ฅผ ํด๋ฆญํ๋ค.
- Dependencies๋ฅผ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์ถ๊ฐํด์ฃผ๊ณ Create๋ฅผ ํด๋ฆญํ๋ค.
- Spring Web
- Lombok
- Thymeleaf
ํธ์ ๊ธฐ๋ฅ ์ค์
- Auto Import
- Editor Zoom : Mouse Wheel
- Lombok
3. ํ๋ก์ ํธ ์์ฑ ๋ฐ ์ฐ๋
IntelliJ Git ์ฐ๋ ๋ฐฉ๋ฒ
- GitHub์์ Repository(Studt_memo)๋ฅผ ์๋ก ์์ฑํ๋ค.
- ๋ฉ๋ด์ VCS๊ฐ ์๋ค.
- VCS์์ Create Git Repository๋ฅผ ํด๋ฆญํ๊ณ ํ๋ก์ ํธ ํด๋์ OK์ ํด๋ฆญํ๋ฉด Git์ด ์ค์น๋๋ค.
- ๋ฉ๋ด์ Git์์ Manage Remotes๋ฅผ ์ ํํ๋ค.
- + ๋ฒํผ์ ๋๋ฅธ ๋ค GitHub Repository์ URL์ ์
๋ ฅํ๋ค.
- ์ ์์ ์ผ๋ก ์ฐ๋๋ ๊ฒ์ ํ์ธํ๋ค.
IntelliJ์์ Git Commit & Push ํ๊ธฐ
- ์ข์ธก Commit ํญ์ ํด๋ฆญํ๊ณ ๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ ํ ๋ณ๊ฒฝ์ฌํญ์ ๋ํ ๋ฉ์์ง๋ฅผ ์ ์ ํ Commit์ ํด๋ฆญํ๋ค.
- Commit์ ํ๋ค๋ฉด push๊น์ง ๋ง๋ฌด๋ฆฌํ ํ GitHub์ผ๋ก ๋์๊ฐ์ Commit & Push๊ฐ ์ ์์ ์ผ๋ก ๋๋์ง ํ์ธํ๋ค.

๋ธ๋ก๊ทธ์ ๋์์ ์ป์๋ค....
https://velog.io/@zerokick/IntelliJ-IntelliJ-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-GitHub-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0
4. ํด๋์ค ์ค๊ณ
Memo ํด๋์ค ์ค๊ณ
- ์๊ตฌ์ฌํญ ๋ถ์
- ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ ์๋ณ์(id), ์ ๋ชฉ(title), ๋ด์ฉ(contents)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- Memo ๊ฐ์ฒด ์์ฑ์ด ํ์ํ๋ค.
package com.example.memo.entity;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public class Memo {
// ์์ฑ (์๋ณ์)
/*
์๋ณ์ (id)
Long ํ์
์ ์ฐ๋ ์ด์ : int๋ณด๋ค ํจ์ฌ ๋ ํฌ๊ณ , ๋ํผ ํด๋์ค์ด๊ธฐ ๋๋ฌธ์ null ๊ฐ์ ํฌํจํ ์ ์๋ค.
๋ณดํต ์๋ณ์๋ ์์ ํ๊ฒ ๋ค๋ฃจ๊ธฐ ์ํด์ Long ํ์
์ ๋ง์ด ์ฌ์ฉํ๋ค.
*/
private Long id;
// ์ ๋ชฉ (title)
private String title;
// ๋ด์ฉ (contents)
private String contents;
}
DTO ์ค๊ณ
- ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก RequestDto๋ก ๋ช ๋ช ํ๋ค.
- ์๋ต ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฐ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ResponseDto๋ก ๋ช ๋ช ํ๋ค.
1. Client์ ์์ฒญ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค MemoRequestDto ํด๋์ค ์์ฑ
package com.example.memo.dto;
import lombok.Getter;
@Getter
public class MemoRequestDto {
/*
์์ฒญ๋ฐ์ ๋ฐ์ดํฐ๋ title, contents ์
๋๋ค. ๋ผ๊ณ ํ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
*/
// ์ ๋ชฉ (title)
private String title;
// ๋ด์ฉ (contents)
private String contents;
}
2. Client์ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ ๋ ์ฌ์ฉํ MemoResponseDto ํด๋์ค ์์ฑ
package com.example.memo.dto;
import lombok.Getter;
@Getter
public class MemoResponseDto {
/*
์ด ๋ถ๋ถ์ ์ ์ํ๊ธฐ ๋๋ฆ์ด๋ค. ์๊ตฌ์ฌํญ์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค!
*/
// ์๋ณ์ (id)
private Long id;
// ์ ๋ชฉ (title)
private String title;
// ๋ด์ฉ (contents)
private String contents;
}
5. ๋ฉ๋ชจ ์์ฑ ๊ธฐ๋ฅ
Memo ์์ฑ API ๊ตฌํ
1. ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ์ฉํ์ฌ ๋ฉ๋ชจ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํ MemoList ์์ฑ
- Map์ key, value ํํ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
/*
์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์ด๊ธฐํ๋ฅผ ํด์ฃผ๋ฉด memoList๋ผ๋ ๋น map ์๋ก๊ตฌ์กฐ๊ฐ ์์ฑ๋๋ค.
*/
private final Map<Long, Memo> memoList = new HashMap<>();
2. Memo ์์ฑ ๋ก์ง ์์ฑ
package com.example.memo.controller;
import com.example.memo.dto.MemoRequestDto;
import com.example.memo.dto.MemoResponseDto;
import com.example.memo.entity.Memo;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@RestController // ๋ฐ์ดํฐ๋ฅผ ํญ์ JSON ํํ๋ก ํต์ ์ ํ๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ์ @RestController๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
@RequestMapping ("/memos") // prefix URL์ ๋ง๋ค ๋ ์ฌ์ฉํ๋ค.
public class MemoController {
/*
์ค์ ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ์๋๋ผ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํด์ ์์๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค.
์ด๊ธฐํ๋ฅผ ํด์ฃผ๋ฉด memoList๋ผ๋ ๋น map ์๋ก๊ตฌ์กฐ๊ฐ ์์ฑ๋๋ค.
*/
private final Map<Long, Memo> memoList = new HashMap<>();
/*
์ค์ ํธ์ถํด์ ์ฌ์ฉํ Controller๋ฅผ ๋ง๋ค์ด์ค์ผ ํ๋ค.
๋ฐํ ํ์
์ ์ค์ ํ๊ธฐ ๋๋ฆ์ด๋ค. ์์ฑํ ๋ ๋ฐ์ดํฐ๋ฅผ ์ฃผ์ง ์์๋ ๋๊ณ ์ค๋ ๋๋๋ฐ, ๊ทธ๋ ResponseDto ํํ๋ก ์ ๋ฌํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ "์ฐ๋ฆฌ๋ MemoResponseDto๋ฅผ ์ ๋ฌํ ๊ฒ์ด๋ค."๋ผ๋ ์๋ฏธ์ด๋ค.
*/
@PostMapping // ์์ฑ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
public MemoResponseDto createMemo(@RequestBody MemoRequestDto dto) { // ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ก ๋ฐ์ธ๋ฉ ํ๋ ๋ฐฉ๋ฒ : @RequestBody
// ์๋ณ์๊ฐ 1์ฉ ์ฆ๊ฐํ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
Long memoId = memoList.isEmpty() ? 1 : Collections.max(memoList.keySet()) + 1; // MemoList.keySet() ์ค์์ ์ต๋๊ฐ์ ๋ฐํํด์ฃผ๋ ๊ฒ์ด๋ค. ์ต๋๊ฐ์์ 1์ฉ ์ฆ๊ฐํ๋๋ก ์ค์ ํ๋ค.
/*
์์ฒญ ๋ฐ์ ๋ฐ์ดํฐ๋ก Memo ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
MemoRequestDto ํํ๋ก ๋ฐ์๊ธฐ ๋๋ฌธ์ Memo ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค.
*/
Memo memo = new Memo(memoId, dto.getTitle(), dto.getContents());
// Inmemory(Map) DB์ Memo๋ฅผ ์ ์ฅํ๋ค.
memoList.put(memoId, memo);
/*
์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ MemoResponseDto ํํ๋ก ๋ฐ๊ฟ์ ์๋ตํด์ค๋ค.
์๋ตํ๋ ๋ฐ์ดํฐ : MemoResponseDto ํํ
์์ฒญํ๋ ๋ฐ์ดํฐ : MemoRequestDto ํํ
*/
return new MemoResponseDto(memo);
}
}
postman ํธ์ถ
- 200 OK, ์กฐํ๋ Memo ์๋ต

6. ๋ฉ๋ชจ ์กฐํ ๊ธฐ๋ฅ
Memo ์กฐํ API ๊ตฌํ
1. Memo ์กฐํ ๋ก์ง ์์ฑ
/**
* ๋ฉ๋ชจ๋ฅผ ์กฐํํ๋ ๋ฉ์๋
* @param id - ์๋ณ์
* @return MemoResponseDto(memo) - ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ MemoResponseDto ํํ๋ก ๋ฐ๊ฟ์ ์๋ตํด์ค๋ค.
*/
@GetMapping("/{id}") // ์กฐํ์ด๊ธฐ ๋๋ฌธ์ @GetMapping ์ฌ์ฉํ๋ค.
public MemoResponseDto findMemoById(@PathVariable Long id) { // ์๋ณ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ธ๋ฉํ ๋๋ @PathVariable์ ์ฌ์ฉํ๋ค.
// memoList๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ get()์ ํตํด์ key๊ฐ์ ์ ๋ฌํด์ฃผ๋ฉด ์ ์ฅ๋์ด ์๋ memo๋ฅผ ์กฐํํ ์ ์๋ค.
Memo memo = memoList.get(id);
// ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ MemoResponseDto ํํ๋ก ๋ฐ๊ฟ์ ์๋ตํด์ค๋ค.
return new MemoResponseDto(memo);
}
postman ํธ์ถ
- id์ ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฅผ ์๋ต๋ฐ์ ์ ์๋ค.
- 200 OK, ์กฐํ๋ Memo ์๋ต

7. ๋ฉ๋ชจ ์์ ๊ธฐ๋ฅ
Memo ์์ API ๊ตฌํ
1. Memo ์์ ๋ก์ง ์์ฑ
@PutMapping("/{id}") // ์ ์ฒด ์์ ์ ํ๊ธฐ ์ํด์ @PutMapping์ ์ฌ์ฉํ๋ค. ๋จ๊ฑด์ ์์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ๋ก ๋ณ์๊ฐ ํ์ํ๋ค.
public MemoResponseDto updateMemoById(
@PathVariable Long id, // @PathVariable๋ก id ๋ฐ์ธ๋ฉ
@RequestBody MemoRequestDto dto // ์ด๋ค ๋ฐ์ดํฐ๋ก ์์ ํ ์ง๋ ์์ฒญ์ ๋ฐ์์ผ ํ๋ค. ์ ๋ชฉ, ๋ด์ฉ์ ๋ชจ๋ ์์ ํ ์ ์๋ค.
) {
// ์ค์ ๋ก ๋์ํ ๋ก์ง
Memo memo = memoList.get(id);
// Memo ์์ ๋ฉ์๋ ์ฌ์ฉ
memo.update(dto);
// ๋ฐ๋ Memo๋ฅผ ํ์ธํ๊ธฐ ์ํด์ MemoResponseDto ํํ๋ก ๋ฐํํ๋ค. ์
๋ฐ์ดํธ๋ Memo๋ฅผ ์ ๋ฌํ๋ค.
return new MemoResponseDto(memo);
}
2. Memo ์์ ๋ฉ์๋ ์์ฑ
// update ๋ฉ์๋
public void update(MemoRequestDto dto) {
this.title = dto.getTitle();
this.contents = dto.getContents();
}
postman ํธ์ถ
- 200 OK, ์์ ํ ๋ฐ์ดํฐ ์๋ต

8. ๋ฉ๋ชจ ์ญ์ ๊ธฐ๋ฅ
Memo ์ญ์ API ๊ตฌํ
1. Memo ์ญ์ ๋ก์ง ์์ฑ
@DeleteMapping("/{id}") // ์๋ณ์๋ก id๊ฐ ํ์ํ๋ค.
public void deleteMemo(@PathVariable Long id) {
// memoList์ ์ ์ฅ๋์ด ์๋ ๊ฐ ์ญ์ -> id์ ๊ฐ์ ๋ฐ์ดํฐ ์ญ์
memoList.remove(id);
}
postman ํธ์ถ
- 200 OK, ์๋ต ๋ฐ์ดํฐ ์์
- ๋ฐํ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์๋ต ๋ฐ์ดํฐ๊ฐ ์์

๋ฌธ์ ์
- ์ค์ ๋ฌธ์ ์ ์์ธ์ ํ์
ํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๋ชป๋ ์ ๋ณด ์ ๋ฌ ๋ฐ ์ฒ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
- ์๋ต ์ฝ๋๊ฐ ์ธ๋ถํ๋์ด ์์ง ์๋ค. (์ฑ๊ณต ์ ๋ชจ๋ 200k)
- ์ ์ ํ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. (์คํจ ์ ๋ชจ๋ 500 Error ๋ฐ์ → 500๋ฒ๋ Error๋ ์๋ฒ Error์ด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ์ง ์๋ ๊ฒ์ด ๊ฐ์ฅ ์ข๋ค.)
- ์๋ฒ๊ฐ ์ข ๋ฃ๋ ํ ๋ค์ ์ผ์ง๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ด๊ธฐํ๋๋ค.
๋ฉ๋ชจ์ฅ ํ๋ก์ ํธ
๋ฉ๋ชจ์ฅ Use Case
๋ฉ๋ชจ๋ฅผ CRUD ํ ์ ์๋ Web Application
1. ๋ฉ๋ชจ ์์ฑ ๊ธฐ๋ฅ C
2. ๋ฉ๋ชจ ๋จ๊ฑด ์กฐํ ๊ธฐ๋ฅ, ์ ์ฒด ์กฐํ ๊ธฐ๋ฅ R
3. ๋ฉ๋ชจ ์ ์ฒด ์์ ๊ธฐ๋ฅ, ์ ๋ชฉ ์์ ๊ธฐ๋ฅ U
4. ๋ฉ๋ชจ ๋จ๊ฑด ์ญ์ ๊ธฐ๋ฅ D
1. ์๊ตฌ์ฌํญ ๋ถ์ ๋ฐ ์ค๊ณ
๋ฉ๋ชจ์ฅ API ์๊ตฌ์ฌํญ
- ํต์ ๋ฐ์ดํฐ ํํ๋ JSON์ด๋ค.
- ๊ฐ๊ฐ์ ๋ฉ๋ชจ๋ ์๋ณ์(id), ์ ๋ชฉ(title), ๋ด์ฉ(contents)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
- ์๋ต์ ๊ฐ๊ฐ์ API์ ์๋ง๊ฒ ํด์ผ ํ๋ค.
- ๋ฉ๋ชจ๋ฅผ ์์ฑํ ์ ์๋ค. (CREATE)
- ๋ฉ๋ชจ ์์ฑ ์ ์ ๋ชฉ, ๋ด์ฉ์ด ํ์ํ๋ค.
- ์์ฑ๋ ๋ฐ์ดํฐ(์๋ณ์, ์ ๋ชฉ, ๋ด์ฉ)๊ฐ ์๋ต๋๋ค.
- ๋ฉ๋ชจ ์ ์ฒด ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค. (READ)
- ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ํํ๋ก ํ ๋ฒ์ ์๋ตํ๋ค.
- ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๋น์ด์๋ ๋ฐฐ์ด ํํ๋ก ์๋ตํ๋ค.
- ๋ฉ๋ชจ ํ๋๋ฅผ ์กฐํํ ์ ์๋ค. (READ)
- ์กฐํํ memo์ ๋ํ ์๋ณ์ id ๊ฐ์ด ํ์ํ๋ค.
- ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ต๋๋ค.
- ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
- ๋ฉ๋ชจ ํ๋๋ฅผ ์ ์ฒด ์์ (๋ฎ์ด์ฐ๊ธฐ)ํ ์ ์๋ค. (UPDATE)
- ์์ ํ memo์ ๋ํ ์๋ณ์ id ๊ฐ์ด ํ์ํ๋ค.
- ์์ ํ ์์ฒญ ๋ฐ์ดํฐ(์ ๋ชฉ, ๋ด์ฉ)๊ฐ ๊ผญ ํ์ํ๋ค.
- ๋ฉ๋ชจ ํ๋์ ์ ๋ชฉ์ ์์ (์ผ๋ถ ์์ )ํ ์ ์๋ค. (UPDATE)
- ์์ ํ memo์ ๋ํ ์๋ณ์ id๊ฐ์ด ํ์ํ๋ค.
- ์์ ํ ์์ฒญ ๋ฐ์ดํฐ(์ ๋ชฉ)๊ฐ ๊ผญ ํ์ํ๋ค.
- ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ต๋๋ค.
- ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
- ๋ฉ๋ชจ๋ฅผ ์ญ์ ํ ์ ์๋ค. (DELETE)
- ์ญ์ ํ memo์ ๋ํ ์๋ณ์ id ๊ฐ์ด ํ์ํ๋ค.
- ์ญ์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
HTTP API ์ค๊ณ

API ๋ช ์ธ์๋ฅผ ์์ฑํ๋ ์ค์ํ ์ด์
- ๋ช ์ธ์๋ฅผ ํตํด์ API๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋(๋ค๋ฅธ ๊ฐ๋ฐ์)์ ๋ช ์ธ์๋ง ๋ณด๊ณ ๋ ์ค์ ๋ก API๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
- ์์ธํ๋ฉด ์์ธํ ์๋ก ์ข๋ค.
2. ๋ฉ๋ชจ ์์ฑ ๊ธฐ๋ฅ
์๊ตฌ์ฌํญ
- ๋ฉ๋ชจ๋ฅผ ์์ฑํ ์ ์๋ค. (CREATE)
- ๋ฉ๋ชจ ์์ฑ ์ ์ ๋ชฉ, ๋ด์ฉ์ด ํ์ํ๋ค.
- ์์ฑ๋ ๋ฐ์ดํฐ(์๋ณ์, ์ ๋ชฉ, ๋ด์ฉ)๊ฐ ์๋ต๋๋ค.
- ์๋ต ์ํ์ฝ๋๋ 201 CREATED๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ ์์ฑ API ๊ตฌํ(CREATE)
1. ๋ฉ๋ชจ ์์ฑ API ์์
@PostMapping // ์์ฑ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
public ResponseEntity<MemoResponseDto> createMemo(@RequestBody MemoRequestDto dto) { // ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ก ๋ฐ์ธ๋ฉ ํ๋ ๋ฐฉ๋ฒ : @RequestBody, ๋ฉ๋ชจ๋ฅผ ์์ฑํ๋ API์์ ์ํ ์ฝ๋๋ฅผ ๋ฐ๋ก ๋ฐํํ ์ ์๊ฒ ๋ง๋ค์ด์ฃผ๊ธฐ ์ํด ResponseEntity๋ฅผ ์ฌ์ฉํ๋ค.
// ์๋ณ์๊ฐ 1์ฉ ์ฆ๊ฐํ๋๋ก ๋ง๋ค์ด์ผ ํ๋ค.
Long memoId = memoList.isEmpty() ? 1 : Collections.max(memoList.keySet()) + 1; // MemoList.keySet() ์ค์์ ์ต๋๊ฐ์ ๋ฐํํด์ฃผ๋ ๊ฒ์ด๋ค. ์ต๋๊ฐ์์ 1์ฉ ์ฆ๊ฐํ๋๋ก ์ค์ ํ๋ค.
/*
์์ฒญ ๋ฐ์ ๋ฐ์ดํฐ๋ก Memo ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
MemoRequestDto ํํ๋ก ๋ฐ์๊ธฐ ๋๋ฌธ์ Memo ๊ฐ์ฒด๋ก ๋ฐ๊ฟ์ฃผ์ด์ผ ํ๋ค.
*/
Memo memo = new Memo(memoId, dto.getTitle(), dto.getContents());
// Inmemory(Map) DB์ Memo๋ฅผ ์ ์ฅํ๋ค.
memoList.put(memoId, memo);
/*
์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ MemoResponseDto ํํ๋ก ๋ฐ๊ฟ์ ์๋ตํด์ค๋ค.
์๋ตํ๋ ๋ฐ์ดํฐ : MemoResponseDto ํํ
์์ฒญํ๋ ๋ฐ์ดํฐ : MemoRequestDto ํํ
*/
return new ResponseEntity<>(new MemoResponseDto(memo), HttpStatus.CREATED);
/*
MemoResponseDto๋ง ๋ฃ์ด์ฃผ๋ ๊ฒ์ด ์๋๋ผ ์ค์ ๋ก ์๋ตํ HTTP Status ์ฝ๋๋ ํจ๊ป ๋ฃ์ด์ค๋ค.
HTTP Status๋ฅผ ํ์ธํด๋ณด๋ฉด 1xx, 2xx, 3xx, 4xx, 5xx๊น์ง ์ด๋ฏธ Enum ๊ฐ์ผ๋ก ๋ค ๋ง๋ค์ด์ ธ์๋ค.
์ฌ์ฉํ ์๋ต์ ์ ์ ํ ์ํ ์ฝ๋๋ฅผ ์ฐพ์์ ์ฌ์ฉํ๋ฉด ๋๋ค. ๋ง๋ค์ด์ง ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ๋ฐ๋์งํ๋ค.
*/
}
postman ํ ์คํธ
- ๋ฉ๋ชจ ์์ฑ
- HTTP ์ํ ์ฝ๋๋ ์ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.

3. ๋ฉ๋ชจ ๋ชฉ๋ก ์กฐํ ๊ธฐ๋ฅ
์๊ตฌ์ฌํญ
- ๋ฉ๋ชจ ์ ์ฒด ๋ชฉ๋ก์ ์กฐํํ ์ ์๋ค. (READ)
- ์ฌ๋ฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ํํ๋ก ํ ๋ฒ์ ์๋ตํ๋ค.
- ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ ๋น์ด์๋ ๋ฐฐ์ด ํํ๋ก ์๋ตํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 200 OK๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ ๋ชฉ๋ก ์กฐํ API ๊ตฌํ (READ)
- memoList๋ฅผ ์กฐํํ์ฌ return ํ์
์ธ List<MemoResponseDto>๋ก ๋ณํํ ํ ๋ฐํํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 200 OK๋ก ์ค์ ํ๋ค.
- ๋ชจ๋ ์๋ต์ ResponseEntity๋ก ํต์ผํ๋๊ฒ ๋์ฑ ์ข๋ค.
- ex) ResponseEntity<List<MemoResponseDto>>
@GetMapping // ๋ค์ ์๋ฌด๊ฒ๋ ์ ์ง ์๊ณ , ๊ดํธ๋ ์ ์ง ์์ผ๋ฉด ์๋จ์ @RequestMapping์ด Mapping๋๋ค.
public ResponseEntity<List<MemoResponseDto>> findAllMemos() { // ์ ์ฒด ์กฐํ์ด๊ธฐ ๋๋ฌธ์ ํ๋ผ๋ฏธํฐ๊ฐ ํ์์๋ค.
// init List ์ด๊ธฐํ
List<MemoResponseDto> responseList = new ArrayList<>(); // List๋ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ด๊ธฐํํด์ค์ผ ํ๋ค. ์ธํฐํ์ด์ค๋ new ํด์ ์ธ์คํด์คํ ํ ์ ์๋ค.
/*
HashMap<Memo> -> List<MemoResponseDto>
๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ Map์ผ๋ก ๋ง๋ค์ด์ ธ ์๋ค. -> HashMap์ Memo๊ฐ ์ ์ฅ๋๋ค.
์ ์ฒด ์กฐํํด์ List<MemoResponseDto> ํํ๋ก ๋ง๋ค์ด์ค๋ค.
*/
for (Memo memo : memoList.values()) { // memoList์ ๋ชจ๋ Memo๋ฅผ ๊บผ๋ธ๋ค. ๊บผ๋ด์ง Memo๋งํผ memo์ ๋ค์ด๊ฐ๋ค. ํ๋์ฉ ๋ค์ด๊ฐ๋ฉด์ ๋ฐ๋ณต๋ฌธ์ด ์คํ๋๋ค.
MemoResponseDto responseDto = new MemoResponseDto(memo); // memo๊ฐ MemoResponseDto ํํ๋ก ๋ฐ๋๋ค.
responseList.add(responseDto); // responseList์ ์์ฑ๋ MemoResponseDto๋ฅผ ํ๋์ฉ ์ถ๊ฐํ๋ค.
}
/*
Map To List
์คํธ๋ฆผ ์ฌ์ฉํด์ ์ข ๋ ๊ฐ๋จํ๊ฒ ๊ตฌํ
์์ ์๋ ์ฝ๋์ ๊ฒฐ๊ตญ ๊ฒฐ๊ณผ๋ ๋๊ฐ๋ค.
stream์ ์ฌ์ฉํ๋ ๊ฒ์ ์ต์ํด์ง๋ค๋ฉด ๊ทธ๋ ์ฌ์ฉํ ๊ฒ!
*/
//responseList = memoList.values().stream().map(MemoResponseDto::new).toList();
return new ResponseEntity<>(responseList, HttpStatus.OK); // ๋ชจ๋ ์๋ต๊ฐ์ ResponseEntity๋ก ํต์ผํ๋ ๊ฒ์ด ์ข๋ค!
}
postman ํ ์คํธ
- ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
- default ๋น ๋ฐฐ์ด์ด ์๋ต๋๋ค.
- ResponseEntity๋ฅผ ์ฌ์ฉํ์ง ์์๋, ์ฑ๊ณต์ Default 200 OK๋ก ์๋ตํ๋ค.

- ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ
- ๋ฐฐ์ด ํํ๋ก ์๋ต๋๋ค.

4. ๋ฉ๋ชจ ๋จ๊ฑด ์กฐํ ๊ธฐ๋ฅ
์๊ตฌ์ฌํญ
- ๋ฉ๋ชจ ํ๋๋ฅผ ์กฐํํ ์ ์๋ค. (READ)
- ์กฐํํ memo์ ๋ํ ์๋ณ์ id ๊ฐ์ด ํ์ํ๋ค.
- ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ต๋๋ค.
- ์๋ต ์ํ์ฝ๋๋ 200 OK๋ก ์ค์ ํ๋ค.
- ์กฐํ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 404 NOT FOUND๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ ๋จ๊ฑด ์กฐํ API ๊ตฌํ (READ)
- ์๋ณ์(id)๋ฅผ ํตํด Memo๋ฅผ ์กฐํํ๋ค.
/**
* ๋ฉ๋ชจ๋ฅผ ์กฐํํ๋ ๋ฉ์๋
* @param id - ์๋ณ์
* @return MemoResponseDto(memo) - ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ MemoResponseDto ํํ๋ก ๋ฐ๊ฟ์ ์๋ตํด์ค๋ค.
*/
@GetMapping("/{id}") // ์กฐํ์ด๊ธฐ ๋๋ฌธ์ @GetMapping ์ฌ์ฉํ๋ค.
public ResponseEntity<MemoResponseDto> findMemoById(@PathVariable Long id) { // ์๋ณ์๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ธ๋ฉํ ๋๋ @PathVariable์ ์ฌ์ฉํ๋ค.
// memoList๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ get()์ ํตํด์ key๊ฐ์ ์ ๋ฌํด์ฃผ๋ฉด ์ ์ฅ๋์ด ์๋ memo๋ฅผ ์กฐํํ ์ ์๋ค.
Memo memo = memoList.get(id);
// ResponseEntity๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ ์ผ๋ก ์๋ตํด์ค ์ ์๋ค.
if (memo == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
// ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ MemoResponseDto ํํ๋ก ๋ฐ๊ฟ์ ์๋ตํด์ค๋ค.
return new ResponseEntity<>(new MemoResponseDto(memo), HttpStatus.OK);
}
postman ํ ์คํธ
- ์๋ณ์๋ก ์กฐํ๋๋ Memo๊ฐ ์๋ ๊ฒฝ์ฐ

- ์๋ณ์๋ก ์กฐํ๋๋ Memo๊ฐ ์๋ ๊ฒฝ์ฐ

5. ๋ฉ๋ชจ ๋จ๊ฑด ์ ์ฒด ์์ ๊ธฐ๋ฅ
์๊ตฌ์ฌํญ
- ๋ฉ๋ชจ ํ๋๋ฅผ ์ ์ฒด ์์ (๋ฎ์ด์ฐ๊ธฐ)ํ ์ ์๋ค. (UPDATE)
- ์์ ํ memo์ ๋ํ ์๋ณ์ id ๊ฐ์ด ํ์ํ๋ค.
- ์์ ํ ์์ฒญ ๋ฐ์ดํฐ(์ ๋ชฉ, ๋ด์ฉ)๊ฐ ๊ผญ ํ์ํ๋ค.
- ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ต๋๋ค.
- ์๋ต ์ํ์ฝ๋๋ 200 OK๋ก ์ค์ ํ๋ค.
- ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 404 NOT FOUND๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ ๋จ๊ฑด ์ ์ฒด ์์ API ๊ตฌํ (UPDATE)
@PutMapping("/{id}") // ์ ์ฒด ์์ ์ ํ๊ธฐ ์ํด์ @PutMapping์ ์ฌ์ฉํ๋ค. ๋จ๊ฑด์ ์์ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ฒฝ๋ก ๋ณ์๊ฐ ํ์ํ๋ค.
public ResponseEntity<MemoResponseDto> updateMemoById(
@PathVariable Long id, // @PathVariable๋ก id ๋ฐ์ธ๋ฉ
@RequestBody MemoRequestDto dto // ์ด๋ค ๋ฐ์ดํฐ๋ก ์์ ํ ์ง๋ ์์ฒญ์ ๋ฐ์์ผ ํ๋ค. ์ ๋ชฉ, ๋ด์ฉ์ ๋ชจ๋ ์์ ํ ์ ์๋ค.
) {
// ์ค์ ๋ก ๋์ํ ๋ก์ง
Memo memo = memoList.get(id);
// ResponseEntity๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋์ ์ผ๋ก ์๋ตํด์ค ์ ์๋ค.
if (memo == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
// ํ์ ๊ฐ์ ๊ฒ์ฆํด์ค๋ค.
if (dto.getTitle() == null || dto.getContents() == null) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); // ํ์ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ BAD_REQUEST๋ฅผ ๋ฐํํด์ค๋ค.
}
// memo ์์
memo.update(dto);
// ๋ฐ๋ Memo๋ฅผ ํ์ธํ๊ธฐ ์ํด์ MemoResponseDto ํํ๋ก ๋ฐํํ๋ค. ์
๋ฐ์ดํธ๋ Memo๋ฅผ ์ ๋ฌํ๋ค.
return new ResponseEntity<>(new MemoResponseDto(memo), HttpStatus.OK);
}
postman ํ ์คํธ
- ์๋ณ์(id)๋ก ์์ฑ๋ ๋ฉ๋ชจ๊ฐ ์๋ ๊ฒฝ์ฐ

- ์๋ณ์(id)๋ก ์์ฑ๋ ๋ฉ๋ชจ๊ฐ ์๋ ๊ฒฝ์ฐ

- title๋ง ์ ์ก ๋๋ ๊ฒฝ์ฐ

- contents๋ง ์ ์ก ๋๋ ๊ฒฝ์ฐ

6. ๋ฉ๋ชจ ๋จ๊ฑด ์ ๋ชฉ ์์ ๊ธฐ๋ฅ
์๊ตฌ์ฌํญ
- ๋ฉ๋ชจ ํ๋์ ์ ๋ชฉ์ ์์ (์ผ๋ถ ์์ )ํ ์ ์๋ค. (UPDATE)
- ์์ ํ memo์ ๋ํ ์๋ณ์ id๊ฐ์ด ํ์ํ๋ค.
- ์์ ํ ์์ฒญ ๋ฐ์ดํฐ(์ ๋ชฉ)์ด ๊ผญ ํ์ํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 400 BAD REQUEST๋ก ์ค์ ํ๋ค.
- ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ต๋๋ค.
- ์๋ต ์ํ์ฝ๋๋ 200 OK๋ก ์ค์ ํ๋ค.
- ์์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 404 NOT FOUND๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ ๋จ๊ฑด ์ ๋ชฉ ์์ API ๊ตฌํ (UPDATE)
@PatchMapping("/{id}") // ์ผ๋ถ ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ @PatchMapping์ด ํ์ํ๋ค.
public ResponseEntity<MemoResponseDto> updateTitle(
@PathVariable Long id,
@RequestBody MemoRequestDto dto
) {
Memo memo = memoList.get(id);
// NullPointerException ๋ฐฉ์ง
if (memo == null) {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
// ํ์ ๊ฐ์ ๊ฒ์ฆํด์ค๋ค. ์ ๋ชฉ์ ํ์์ง๋ง ๋ด์ฉ์ ํ์๊ฐ ์๋๋ค.
if (dto.getTitle() == null || dto.getContents() != null) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); // ํ์ ๊ฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ฌํด์ฃผ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ BAD_REQUEST๋ฅผ ๋ฐํํด์ค๋ค.
}
// ์ ๋ชฉ๋ง ์์ ํ๋ค.
memo.updateTitle(dto);
// ๋ฐ๋ Memo๋ฅผ ํ์ธํ๊ธฐ ์ํด์ MemoResponseDto ํํ๋ก ๋ฐํํ๋ค. ์
๋ฐ์ดํธ๋ Memo๋ฅผ ์ ๋ฌํ๋ค.
return new ResponseEntity<>(new MemoResponseDto(memo), HttpStatus.OK);
}
postman ํ ์คํธ
- ์๋ณ์์ ๋ฉ๋ชจ๊ฐ ์๋ ๊ฒฝ์ฐ

- ์๋ณ์์ ๋ฉ๋ชจ๊ฐ ์๊ณ title์ด ์๋ ๊ฒฝ์ฐ

- ์๋ณ์์ ๋ฉ๋ชจ๊ฐ ์๊ณ contents๊ฐ ์๋ ๊ฒฝ์ฐ

7. ๋ฉ๋ชจ ์ญ์ ๊ธฐ๋ฅ
์๊ตฌ์ฌํญ
- ๋ฉ๋ชจ๋ฅผ ์ญ์ ํ ์ ์๋ค. (DELETE)
- ์ญ์ ํ memo์ ๋ํ ์๋ณ์ id๊ฐ์ด ํ์ํ๋ค.
- ์ญ์ ๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒฝ์ฐ Exception์ด ๋ฐ์ํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 404 NOT FOUND๋ก ์ค์ ํ๋ค.
- ์๋ต ๋ฐ์ดํฐ๋ ์์ด๋ ๋ฌด๋ฐฉํ๋ค.
- ์๋ต ์ํ์ฝ๋๋ 200 OK๋ก ์ค์ ํ๋ค.
๋ฉ๋ชจ ๋จ๊ฑด ์ญ์ API ๊ตฌํ (DELETE)
@DeleteMapping("/{id}") // ์๋ณ์๋ก id๊ฐ ํ์ํ๋ค.
public ResponseEntity<Void> deleteMemo(@PathVariable Long id) { // ๋๋ฌธ์ Void๊ฐ ๋ค์ด๊ฐ๋ค.
// memoList์ key๊ฐ์ id๋ฅผ ํฌํจํ๊ณ ์๋ค๋ฉด ์ญ์ ํ๋ค.
if (memoList.containsKey(id)) {
memoList.remove(id); // memoList์ ์ ์ฅ๋์ด ์๋ ๊ฐ ์ญ์ -> id์ ๊ฐ์ ๋ฐ์ดํฐ ์ญ์
return new ResponseEntity<>(HttpStatus.OK);
}
// id ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ์์ ๊ฒฝ์ฐ NOT_FOUND๋ฅผ ๋ฐํํ๋ค.
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
postman ํ ์คํธ
- ์ญ์ ํ Memo๊ฐ ์กด์ฌํ๋ ๊ฒฝ์ฐ

- ์ญ์ ํ Memo๊ฐ ์๋ ๊ฒฝ์ฐ

ํด๊ฒฐํ ๋ฌธ์ ์
- ์ค์ ๋ฌธ์ ์ ์์ธ์ ํ์
ํ๊ธฐ ์ด๋ ต๊ฑฐ๋ ์๋ชป๋ ์ ๋ณด ์ ๋ฌ ๋ฐ ์ฒ๋ฆฌ๊ฐ ๋ ์ ์๋ค.
- ์๋ต ์ฝ๋๊ฐ ์ธ๋ถํ๋์ด ์์ง ์๋ค. (์ฑ๊ณต ์ ๋ชจ๋ 200 OK)
- ์ ์ ํ ์์ธ๊ฐ ๋ฐ์ํ์ง ์๋๋ค. (์คํจ ์ ๋ชจ๋ 500 Error ๋ฐ์)
๋ฌธ์ ์
- Controller์ ์ฑ ์์ด ๋๋ฌด ๋ง๋ค. (์์ฒญ, ๋น์ฆ๋์ค ๋ก์ง, ์๋ต, ์์ธ ์ฒ๋ฆฌ ๋ฑ)
- ์๋ฒ๊ฐ ์ข ๋ฃ๋ ํ ๋ค์ ์ผ์ง๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ชจ๋ ์ด๊ธฐํ๋๋ค.
์ค๋ ํ๋ฃจ ์ ๋ฆฌ
์คํ๋ง 5์ฃผ์ฐจ ๊ฐ์๋ฅผ ๋ฃ๋๋ค๊ณ ์๊ฐ์ด ๋ค ๊ฐ ํ๋ฃจ์๋ค...
์ค์ต ๋ถ๋ถ์ ๋์น์ง ์๊ณ ๋ฃ๊ธฐ ์ํด์ ๋ธ๋ก๊ทธ์ ์ ๋ฆฌ์ ํจ๊ป ์งํํ๋๋ฐ ์๊ฐ์ด ์๊ฐ๋ณด๋ค ๋๋ฌด ์ค๋ ๊ฑธ๋ ค์ ์ค๋ ํ๋ฃจ๋ฅผ ์คํ๋ง ๊ฐ์ ๋ฃ๊ณ ์ ๋ฆฌํ๋๋ฐ ๋ค ์ฌ์ฉํ๋ค. ๋ฌผ๋ก ์ ๋ฆฌ์ ํจ๊ป ํ๋ฉด์ ์ดํด๋๋ ๋ถ๋ถ๋ ๋ง์ด ์๊ฒผ๊ณ ๋ญ๊ฐ ์ด์ง ์คํ๋ง์ ๋ํ ๋๋์ด ์กํ๋ ๊ฒ ๊ฐ์๋ค.
๋ด์ผ 6์ฃผ์ฐจ ๊ฐ์๊น์ง ๋ชจ๋ ๋ฃ๊ณ ๋๋ฉด ์คํ๋ง ๊ฐ์ธ ๊ณผ์ ๋ฅผ ์์ํ ์ ์์ง ์์๊น ํ๋ ์๊ฐ์ด ๋ค์๋ค. ๋ฌด์กฐ๊ฑด ๋ด์ผ 6์ฃผ์ฐจ ๊ฐ์๋ฅผ ๋ค ๋ฃ๊ณ ์ ๋ฆฌ๊น์ง ์๋ฃํ ํ์ ๋ชฉ์์ผ๋ถํฐ๋ ๊ฐ์ธ ๊ณผ์ ๋ฅผ ์์ํ ์ ์๋๋ก ์ค๋นํ๊ณ ์ถ๋ค!! ๊ทธ๋์ผ ๋ค์ ์ฃผ ํ์์ผ๊น์ง ์ด๋ ์ ๋ ์๋ฒฝํด์ง ๊ณผ์ ๋ฌผ์ ์ ์ถํ ์ ์์ ๊ฒ ๊ฐ๋ค!
์ค๋์ ๋ญ๊ฐ ํ์๋ณด๋ค ์ง์ค์ด ๋ ์๋ ํ๋ฃจ์ฌ์ ์๊ฐ ๊ฐ๋ ์ค ๋ชจ๋ฅด๊ณ ํ๋ฃจ๋ฅผ ๋ณด๋๋๋ฐ ๋ด์ผ๋ ๊ฐ์์ ์ง์คํด์ ์ค์ต๊ณผ ์ ๋ฆฌ๋ฅผ ํจ๊ป ํ๋ค ๋ณด๋ฉด ํ๋ฃจ๊ฐ ๊ธ๋ฐฉ ์ง๋๊ฐ ๊ฒ ๊ฐ์ ๋๋์ด๋ค.
๋ด์ผ ํ๋ฃจ๋ ์ด์ฌํ ๊ณต๋ถํด ๋ณด์!!!!! ์คํ๋ง.. ๊ฐ์ ์ก๊ณ ๋ง๋ค!!
๋ด์ผ ๊ณํ
- ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ (Java) 1๋ฌธ์ ํ์ด & ๋ธ๋ก๊ทธ ์ ๋ฆฌ
- ์คํ ๋ค๋๋ฐ ์์ค๋ณ ํ์ต ๋ฃ๊ธฐ
- ์คํ๋ง 6์ฃผ์ฐจ ๊ฐ์ ๋ฃ๊ธฐ
- TIL ๋ธ๋ก๊ทธ ์์ฑ
+ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ ๊ณํ์ด ์๊ธธ ์ ์์ต๋๋ค~~
'โ๏ธ Today I Learned(TIL) > ๐ฑ ์คํ๋ฅดํ ๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๊ธฐ์ ์ ์ฉ (0) | 2024.12.04 |
---|---|
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_3 Layer Architecture (1) | 2024.12.04 |
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 4 (2) | 2024.12.02 |
์ฃผํน๊ธฐ ์ ๋ฌธ/์๋ จ_Day 2 (4) | 2024.11.30 |
ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ด_Day 17 (1) | 2024.11.28 |