๊ฐ์
์ด๋ฒ์๋ ๋ฉํ ๋ง ํ๋ก์ ํธ ๊ฐ๋ฐ์ ํ๋ฉฐ ๋ง์ฃผ์น ์ด์์ ๋๋ค. ์ด๋ฒ์๋ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฌ ๋ฒ ํ๋ฉด์ ๋ณ๋ก ๊ฒช์ง ์์์์ง๋ง, ํ๋ก์ ํธ๋ฅผ ์ค๋๋ง์ ํ๋ค ๋ณด๋ ์ ํ๊ฒ ๋ ์ค์์ ๊ฐ๊น์ ์ต๋๋ค. ๊ทธ๋ผ์๋ ๋ค์ ๊ฐ์ ์ค์๋ฅผ ํ์ง ์๊ธฐ ์ํด ๊ณต์ ํด๋ณด๋ ค ํฉ๋๋ค!
๋ฌธ์ ์ํฉ
์ด์ฉ๋ฉด ์์ ์๋ฐ๋ก ๊ฐ๋ฐํ๋ค๊ฐ ์คํ๋ง์ผ๋ก ๋์ด๊ฐ ๋ ํ ๋ฒ์ฏค์ ์ ํ์ จ์ ์ค์์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐ์ด ๋ญ๋๋ค.
๊ธ (Board) ์ฐ๊ธฐ ์ฝ๋๋ฅผ ์์ฑํ๋ฉฐ, ๊ธ ์์ฑ์ ์ฌ์ฉ๋๋ ์์ฒญ dto๋ ์๋์ฒ๋ผ ๋ ์ฝ๋๋ก ์์ฑํ์์ต๋๋ค. (์๋ต dto๋ ์ฌ๊ธฐ์ id๋ ์ถ๊ฐํ์ต๋๋ค.)
public record BoardCreateRequest(String title, String content) {
}
๊ทธ๋ฆฌ๊ณ ์์ฑ ์ฝ๋๋ ์๋์ฒ๋ผ ์์ฑํ์์ต๋๋ค.
@PostMapping
public ResponseEntity<BoardCreateResponse> create(final BoardCreateRequest request) {
Long newBoardId = boardService.save(request);
BoardCreateResponse response = BoardCreateResponse.from(newBoardId);
URI newBoardURI = URI.create("/boards" + newBoardId);
return ResponseEntity.created(newBoardURI)
.body(response);
}
}
ํด๋น ์ฝ๋๋๋ก ์คํํด ๋ณด๋, id๋ ์ ๋์ค๋ ๋ฐ๋ฉด (auto-increment), ์ ๋ชฉ๊ณผ ๊ธ ๋ด์ฉ์ ์ ๋๋ก ๋์ค์ง ์์์ต๋๋ค.
์์ธ
์์ธ์ ์์์ ์์ฑํ๋ฏ @RequestBody๋ฅผ ์ฌ์ฉํ์ง ์์ ๋ฒ์ด์ง ์ผ์ด์์ต๋๋ค. ์คํ๋ง ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋ฉด, ์คํ๋ง MVC์์ @RequestBody๋ฅผ ์ฌ์ฉํด์ผ HttpMessageConverter๋ฅผ ํตํด ์์ฒญ์ ํ์ ์ ๋ฉ์๋ ์ธ์๋ก ํด๊ฒฐํด ์ค๋ค๊ณ ๋์์์ต๋๋ค.
๊น์ํ ๋์ ์คํ๋ง MVC 1ํธ์์๋ ๊ด๋ จ๋ ๋ด์ฉ์ด ์์ต๋๋ค.
@RequestBody
@RequestBody๋ฅผ ์ฌ์ฉํ๋ฉด HTTP ๋ฉ์์ง ๋ฐ๋ ์ ๋ณด๋ฅผ ํธ๋ฆฌํ๊ฒ ์กฐํํ ์ ์๋ค. ์ฐธ๊ณ ๋ก ํค๋ ์ ๋ณด๊ฐ ํ์ํ๋ค๋ฉด HttpEntity๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ @RequestHeader๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
ํด๊ฒฐ ์ดํ
๊ทธ๋์ BoardCreateRequest ์ , @RequestBody๋ฅผ ๋ถ์๋๋ ๋คํ์ค๋ฝ๊ฒ ์ ์ ์ฅ๋ ์ ์์์ต๋๋ค.
์ถ๊ฐ์ ์ผ๋ก ์๊ฒ ๋ ์ฌ์ค
๋ณดํต ๋ค๋ฅธ ๊ธ๋ค์ ๋ณด๋ฉด, DTO๋ฅผ ๋ ์ฝ๋๋ก ์ ์ํ์ง ์์์ ๋๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์์ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐ์ํจ์ ํ์ธํ ์ ์์์ต๋๋ค.
๊ทธ๋์ Lombok์ @NoArgsConstructor๋ฅผ ๋ง๋ถ์ธ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์๋๋ฐ์, ์ ๋ DTO๋ฅผ ๋ ์ฝ๋๋ก ์ค์ ํด์ ์ด๊ฒ์ ํ์ง ์์๋ ๋ฌธ์ ๊ฐ ๋ฐ์๋์ง ์์์ต๋๋ค.
์ด ์ ์ ์ฐ์ํํ ํฌ์ฝ์ค ํ๋ฆฌ์ฝ์ค๋ฅผ ํ๋ฉฐ ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ธ์์๋ ์์ง ๋ชปํ๋ ๋ด์ฉ์ธ๋ฐ, ๋ ์ฝ๋์ ๋ํ ์ฝ๋๋ฅผ ๊น๋ณด๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ protected๋ก ์ ์ธ๋์ด ์์์ ํ์ธํ ์ ์์์ต๋๋ค.
์ด๊ฒ์ ์๊ฒ ๋์ด ๋ DTO๋ฅผ ์ฌ์ฉํ ๋๋ ์๋ฐ ๋ฒ์ ์ด ๊ฐ๋ฅํ๋ค๋ฉด ๋ ์ฝ๋๋ก ๊ด๋ฆฌํ๋ ๊ฒ ๋ ํธํ ๊ฒ์์ ์๊ฒ ๋์์ต๋๋ค. ์งง์ ๊ณผ์ ์ด์์ง๋ง ์ด๋ฒ์๋ ์๋กญ๊ฒ ๋ชฐ๋๋ ์ฌ์ค์ ์๊ฒ ๋์ด ํฅ๋ฏธ๋ก์ ์ต๋๋ค ๐
Reference
- ์คํ๋ง ๊ณต์ ๋ฌธ์ - ๋ ์ฝ๋
- [Spring Boot] Post ๋ฐฉ์์ผ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ ๋ ๊ฐ์ด null์ธ ๊ฒฝ์ฐ
- DTO์ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ํ์ํ ์ด์
- JDK16์์ ์ ์์ผ๋ก ๋์จ "๋ ์ฝ๋"์ ๋ํด ์์๋ณด์ - ์ด์ ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค!
- ๊น์ํ ๋์ ์ค์ ! ์คํ๋ง MVC 1ํธ
'๐ฃ ์ด์ ํด๊ฒฐ ๊ธฐ๋ก' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring Data JPA] ์คํ๋ง ๋ฐ์ดํฐ JPA ๊ตฌํ์ฒด๋ฅผ ์์ฑํ ๋ ์ฃผ์ํ ์ ! (feat. ์ํ ์ฐธ์กฐ) (1) | 2024.01.19 |
---|