ํด๋น ํฌ์คํธ๋ ์ฌ๋ฌ ํธ์ผ๋ก ๋๋์ด์ ธ ํ๋์ ๊ฐ๋ ์ ์ด๋ฃจ๊ณ ์์ต๋๋ค. ๋ณด๋ค ์์ธํ ํ์ต๊ณผ ์ดํด๋ฅผ ์ํด ๋ค๋ฅธ ํฌ์คํธ๋ ์ฐธ๊ณ ํด์ฃผ์ธ์ :)
- 1 Jpa์ Entity ์ค์ ๋ฐ Repository ์ค์
- 2 create๋ฉ์๋๋ก ํ์๊ฐ์ ์๋น์ค ๋ง๋ค๊ธฐ-๊ผญ ํ์ธํ์ ์ผํด์!!
- 3 read ๋ฉ์๋๋ก ํ์ ๊ฒ์ ์๋น์ค ๋ง๋ค๊ธฐ
- 4 update ๋ฉ์๋๋ก ๊ฐ์ธ์ ๋ณด ์์ ์๋น์ค ๋ง๋ค๊ธฐ
- 5 delete ๋ฉ์๋๋ก ํ์ ํํด ์๋น์ค ๋ง๋ค๊ธฐ
์ ์๊ฐ์ ์ฐ๋ฆฌ๋ create๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ POST๋ฐฉ์์ผ๋ก ํ์๊ฐ์ ์ ๋ณด๋ฅผ ์๋ฒ์๊ฒ Requestํ์๋ค. ์ด๋ฒ์ CRUD์ Read๋ฅผ ํ์ตํด๋ณด์. ํ์ต์ ์ด์ ์ ๋์ผํ๊ฒ ํ ์คํธ ์ฝ๋๋ฅผ ๋จผ์ ์์ฑํ๊ณ , ์๋น์ค๋ฅผ ๋ง๋๋ ์์๋ก ์ด๋ฃจ์ด์ง ์์ ์ด๋ค.
์ ๋ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก CRUD๋ฅผ ์ํด Controller์ ํ ์คํธ๋ฅผ ์ค๋นํด๋ณด์.

์ ๋ฒ์ create๋ฉ์๋๋ฅผ ๋ง๋ค์์ ๋์ ๋์ผํ๊ฒ Repository์ ๋ํ Read๋ฅผ ํ ์คํธํ ๊ฒ์ด๋ฏ๋ก
test/java/repository/UserRepositoryTests ํด๋์ค์ read() ํ
์คํธ ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ฃผ์.
Read๋ ํน์ ๊ฐ์ ์ํ ์ ๋ณด๋ฅผ ์ฝ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ฏ๋ก ํน์ ์ ๋ณด๋ฅผ ๊ฒ์ํ์์ ๊ฐ์ ํ์ฌ ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
findById() ๋ฉ์๋
findById()๋ฉ์๋๋ ๋งค๊ฐ๋ณ์์ ํด๋นํ๋ ๊ฐ์ ํ ๋๋ก DB์์ ๊ฐ์ ์กฐํํด์ค๋ ์ญํ ์ ์ํํ๋ค. ์๋์์ ๋ณด๋ฉด ์๊ฒ ๋ฏ
์ด findById() ์ default ๋งค๊ฐ๋ณ์๋ Long ํ์
id ์ด๋ค. id๊ฐ์ด ์๋ ๋ค๋ฅธ ๊ฐ์ผ๋ก Read๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์๋ ์ถ
ํ์ ์ค๋ช ํ๋๋ก ํ๊ฒ ๋ค.

findById()์ ๋ฐํํ Optional<T>
์ฐ๋ฆฌ๋ id๊ฐ์ ์ฃผ๋ฉด ํด๋น id์ ๊ด๋ จ๋ Data๋ฅผ Jpa๊ฐ ๊บผ๋ด์จ๋ค๊ณ ํ๋๋ค. ๊ทธ๋ ๋ค๋ฉด User ์ ๋ณด๋ฅผ ์ป๊ณ ์ถ์ผ๋ฏ๋ก findById() ์ return ๊ฐ์ User๋ก ๋ฐ์ผ๋ฉด ๋๋๊ฑฐ ์๋๊ฐ? ํ ๋ฒ ํด๋ณด์

๊ทผ๋ฐ ๋ญ๊ฐ ์ด์ํ๋ค.. ๋นจ๊ฐ ์ค์ด ๋จ๋ฉด์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋์จ๋ค... ํ ๋ฒ findById() ๋ฉ์๋๋ฅผ ํ๊ณ ๋ค์ด๊ฐ๋ณด์.

๋ณด๋ findByid()๋ฉ์๋๋ ์กฐํํ๋ ค๋ ๊ฐ์ด ์กด์ฌํ ์๋, ์กด์ฌํ์ง ์์ ์๋ ์์ด์ null์ ์ํ ์ค๋ฅ๋ฅผ ์ต์ํ ํ๊ธฐ ์ํด ๋ฆฌํด์ผ๋ก Optional<T>๋ฅผ ๋ฐ๋๋ค.
Optional<User>์ ifPresent() ๋ฉ์๋์ isPresent()๋ฉ์๋
Optional์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ์ค ํ๋๊ฐ ifPresent() ๋ฉ์๋์ isPresent()๋ฉ์๋ ์ด๋ค. ๊ทธ ํน์ง๊ณผ ์ฐจ์ด์ ์ ๊ฐ๋จํ๊ฒ ์ค๋ช
ํ์๋ฉด
ifPresent()
- ํน์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๋๋ค.
- Optional์ ๊ฐ์ด ์กด์ฌํ ๊ฒฝ์ฐ์๋ง ์คํ๋ ๋ก์ง์ด ํจ์์ ์ธ์๋ก ์ ๋ฌ๋๋ค.
- ํจ์ํ ์ธ์๋ก ๋๋ค์์ด ๋์ด์ฌ ์ ์๋ค.
isPresent()
- ํน์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ์ง ์๋๋ค.
- ํ์ฌ optional์ ๊ฐ์ด null์ธ์ง ํ์ธํ๋ค.
if-else๋ฌธ์ ์ฌ์ฉํ์ง ์๊ณ ๋ null๊ฐ ์กด์ฌ ๊ฒ์ฌ๋ฅผ ํ ์ ์๋ค.
๊ณผ ๊ฐ์๋ฐ ์ฐ๋ฆฌ๋ user.ifPresent()์์ ๋๋ค์์ผ๋ก select sql๋ฌธ๋ฒ์ด ์งํ๋ ํ๋ฅผ ๊ฐ์ ํ์ฌ selectUser๋ก Optional ๊ฐ์ด ์์ ๋๋ง ํจ์ ๋ก์ง์ ์คํ์ํฌ ๊ฒ์ด๋ค.
๊ทธ๋ผ ๋ค์ ํ ์คํธ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ปดํ์ผ๋ฌ์๊ฒ ์ ์ถํด๋ณด์

์ปดํ์ผ ์์๋ 9L์ด ์๋๋ผ 1L์ผ๋ก ์์ ํ์์ต๋๋ค..

๋ค์๊ณผ ๊ฐ์ด ์ ์๋ํ๋ ๊ฒ์ ์ ์ ์๋ค.
์๋น์ค๋ฅผ ๋ง๋ค์ด๋ณด์!
์ด์ test ์ฝ๋๊ฐ ์๋ ์๋น์ค ์ฝ๋๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋ณด์.

1. controller ํจํค์ง ์๋์ UserController์์ String์ returnํ๋ findUser() ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ค๋ค.
์ ๋ฒ์ ์ฐ๋ฆฌ๊ฐ ํ์๊ฐ์ ์ ๋ง๋ค ๋๋ Post ๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ํต์ ์ ์งฐ์ง๋ง ์ด๋ฒ์๋ ์๋ฃ์ ๊ฒ์์ด ๋ชฉ์ ์ด๋ฏ๋ก Get๋ฉ์๋๋ฅผ ์ด์ฉํ์ฌ ํต์ ์ ์ง๋ณด์.
@GetMapping()์ ํตํด์ Get ๋ฉ์๋๋ก ์ ๋ณด ๊ฒ์์ ํ๋ค.
- Test์ ๋ง์ฐฌ๊ฐ์ง๋ก
Optional์ ์ด์ฉํ์ฌfindById()์ ๋ฆฌํด๊ฐ์ ๋ฐ์์ฃผ๊ณget()์ผ๋ก Json ํ์ ์ ์ ๋ณด๋ฅผ ๋ฐ์์ ํ๋ฉด์ ์ถ๋ ฅํด์ค๋ค.

๊ทธ๋ผ ๋ค์๊ณผ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ ์ถ๋ ฅ๋๋ ๊ฒ์ผ๋ก ์ ์ ์๋ค.

๋๊ธ