์ด๋ฒ ์์ ์์๋ Spring Boot ํ๊ฒฝ์์ ์ค์ ์๋น์ค๋ฅผ ๊ตฌ์ฑํ๋ฉฐ, JPA๋ฅผ ์ด์ฉํ ์ํ ๋ฑ๋ก/์กฐํ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํด ๋ณด์๋ค.
์ง๋ ์๊ฐ์ ํ๋ก์ ํธ์ ๋ผ๋๋ฅผ ์ธํ ํ๋ค๋ฉด, ์ด๋ฒ์๋ ๊ทธ ๋ผ๋ ์์ ์ค์ ๊ธฐ๋ฅ์ ์น์ด๋ณด๋ ์๊ฐ์ด์๋ค.
๐ ์ค๋ ๋ฐฐ์ด ๋ด์ฉ ์ ๋ฆฌ
๐ท JPA๋ฅผ ํ์ฉํ ์ํฐํฐ ์ค๊ณ์ ์ ์ฅ ๋ก์ง ๊ตฌํ
์ค๋์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ Item ์ํฐํฐ๋ฅผ ์ง์ ์ค๊ณํ๊ณ , ItemSellStatus์ ๊ฐ์ enum ํ์ ์ ํจ๊ป ์ฌ์ฉํด ๋๋ฉ์ธ ๋ชจ๋ธ์ ๊ตฌ์ฒดํํ๋ค.
Lombok์ ์ฌ์ฉํด ๋ถํ์ํ getter/setter, toString ๋ฑ์ ์ฝ๋๋ฅผ ์ค์๊ณ , JPA์ @Entity, @Id, @GeneratedValue, @Enumerated ๋ฑ์ ์ด๋ ธํ ์ด์ ์ ํตํด DB ํ ์ด๋ธ๊ณผ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ๋งคํํ ์ ์์๋ค.
์ฝ๋ ํ ์ค๋ก ํ ์ด๋ธ ๊ตฌ์กฐ๊ฐ ๋ง๋ค์ด์ง๊ณ , ๊ฐ์ฒด ์ ์ฅ๋ง์ผ๋ก DB์ ๋ฐ์ดํฐ๊ฐ ๋ฑ๋ก๋๋ ํ๋ฆ์ด ๊ฝค ์ธ์ ๊น์๋ค.
๐ถ Repository ํ ์คํธ๋ฅผ ํตํ JPA ์กฐํ ๊ธฐ๋ฅ ๊ฒ์ฆ
๋จ์ํ ์ ์ฅ๋ง ํด๋ณด๋ ๋ฐ์ ๋๋๋ ๊ฒ์ด ์๋๋ผ, JPA์ ๋ค์ํ ์กฐํ ๋ฐฉ์์ ํ ์คํธ ์ฝ๋๋ก ๊ฒ์ฆํด ๋ณธ ๊ฒ๋ ์ค๋์ ํต์ฌ์ด์๋ค.
- findByItemName, findByPriceBetween ๊ฐ์ ์ฟผ๋ฆฌ ๋ฉ์๋ ๊ธฐ๋ฐ ๊ฒ์
- @Query๋ฅผ ํ์ฉํ JPQL ์ง์ ์์ฑ
- ๋ฌธ์์ด ํฌํจ, ๋ฒ์ ์กฐ๊ฑด, ์ ๋ ฌ ๋ฑ ๋ค์ํ ๋ฐฉ์์ ์กฐํ ๋ก์ง ๊ตฌ์ฑ
ํ ์คํธ ๋ฉ์๋๋ฅผ ํตํด ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ฌ๋ฌ ๊ฐ ์์ฑํ ๋ค,
์ ์์ ์ผ๋ก ์ํ๋ ์กฐ๊ฑด์ ์ํ๋ค์ด ์กฐํ๋๋์ง ํ์ธํ๋ฉด์ Spring Data JPA์ ํธ๋ฆฌํจ๊ณผ ์๋ํ๋ ์ฟผ๋ฆฌ ์์ฑ ๋ก์ง์ ์ค์ ๋ก ์ฒด๊ฐํ ์ ์์๋ค.
๐ท ์ค์ ํ๋ก์ ํธ ๊ฐ๊ฐ์ ํค์์ค ํ ์คํธ ์ค์ฌ ๊ฐ๋ฐ ํ๋ฆ
์ค๋์ ๋จ์ํ ์ปจํธ๋กค๋ฌ๋ ํ๋ฉด์ ๊ตฌํํ๊ธฐ๋ณด๋ค๋, ๋๋ฉ์ธ ์ค์ฌ์ผ๋ก ์๋น์ค ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ๊ณ , ์ด๋ฅผ ๊ฒ์ฆ ๊ฐ๋ฅํ ์ฝ๋๋ก ํ ์คํธํ๋ ํ๋ฆ์ ๊ฒฝํํ ์ ์์๋ค๋ ์ ์์ ์๋ฏธ๊ฐ ์ปธ๋ค.
์ฒ์์๋ ํ ์คํธ ์ฝ๋๊ฐ ๋จ์ํ ๋ณด์กฐ ์๋จ์ฒ๋ผ ๋๊ปด์ก์ง๋ง, ์ค์ ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๊ณ ์กฐํํ๋ฉด์ “์ค๊ณํ ๋ก์ง์ด ์๋๋๋ก ๋์ํ๋์ง”๋ฅผ ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋ค๋ ์ ์์ ํ ์คํธ ์ฝ๋๊ฐ ๊ฐ๋ฐ์ ์ค์ฌ์ด๋ผ๋ ๊ฐ๋ ์ด ์กฐ๊ธ์ฉ ์๋ฟ๊ธฐ ์์ํ๋ค.
๐งก ๋๋ ์
์ค๋์ Spring Boot ์์์ JPA๋ฅผ ์ ๋๋ก ํ์ฉํด ๋ณด๋ฉฐ๋๋ฉ์ธ ์ค๊ณ๋ถํฐ ๋ฐ์ดํฐ ์ ์ฅ, ์กฐํ, ํ ์คํธ๊น์ง ํ๋์ ๊ธฐ๋ฅ ํ๋ฆ์ ์ฒ์๋ถํฐ ๋๊น์ง ๊ตฌํํด ๋ณผ ์ ์์๋ค.
ํนํ, ์ง์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ ์ ์์๋ ๊ฒฝํ์ด ์ ๊ธฐํ๊ณ , ๋ฐ๋๋ก ์๋ํ๋ ์ด ํ๋ฆ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ ํํ ์๊ณ ์์ด์ผ๋ง ์ ๋๋ก ํ์ฉํ ์ ์๋ค๋ ์ ๋ ๋๊ผ๋ค.
๋จ์ํ ‘๋์๊ฐ๊ธฐ๋ง ํ๋ ์ฝ๋’๋ฅผ ๋ง๋๋ ๊ฒ ์๋๋ผ, ๊ตฌ์กฐ์ ์ผ๋ก ์ ์ค๊ณ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋๋ ๋ฒ์ ์ฐ์ตํ๊ณ ์๋ค๋ ๊ฐ๊ฐ์ด ์ ์ ์๊ธด๋ค.