๋๋ง์ ๋ฌํฝ์ด์ง ๋ง๋ค๊ธฐ! ๐จโ๐ป
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ผ ํ ๋ ํ๋ก์ ํธ๋ฅผ ์์ํ๊ธฐ ์ํ ์ ๋ฐ์ ์ธ ์ค์ ์ ์ด๋ป๊ฒ ํด์ผ ํ ์ง, ํจํค์ง ๊ตฌ์กฐ๋ ์ด๋ป๊ฒ ์ก์์ผ ํ๋์ง, ๋๊ตฐ๊ฐ ๋ ๋์ ๊ฐ๋ฐ์ ๋ฐ๋ก ํ ์ ์๊ฒ ํ๋ก์ ํธ ์ค์ ์ ํด์ฃผ์์ผ๋ฉด ์ข๊ฒ ๋ค๊ณ ์๊ฐํด ๋ณด์ ์ ์์ผ์ ๊ฐ์? ๋ง์ฝ ๊ธฐ์กด์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ํ ๋ ์์ฑํ ์ฝ๋๊ฐ ์์ผ์๋ค๋ฉด ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๊ธฐ์กด์ ๋ง๋ค์ด๋ ๋ก์ง๋ค์ [CTRL+C], [CTRL+V]๋ก ๋ณต์ฌํ๋ ์์ ์ ๋ชจ์ต์ ๋ฐ๊ฒฌํ์
จ์ ์๋ ์์ต๋๋ค.
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ํ์ํ ์ค์ ๋ค๊ณผ ํญ์ ๊ณตํต์ผ๋ก ๋ค์ด๊ฐ๋ ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ๊ตฌํ์ ํ์ฌ ํ
ํ๋ฆฟ ํ๋ก์ ํธ๋ก ๋ง๋ค์ด๋๊ณ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ํ
ํ๋ฆฟ ํ๋ก์ ํธ ๊ธฐ๋ฐ์ผ๋ก ์์์ ํ๋ค๋ฉด ํ๋ก์ ํธ ์์๊ณผ ๋์์ ํด๋น ํ๋ก์ ํธ์์ ํ์ํ API๋ค๋ง ๊ฐ๋ฐํ๋ฉด ์์ฐ์ฑ์ ๊ทน๋ํํ ์ ์๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์ ๋ ์ด๋ฌํ ๊ณผ์ ์ ์์ ๋ง์ ๋ฌํฝ์ด์ง์ ๋ง๋๋ ๊ณผ์ ์ด๋ผ๊ณ ๋งํฉ๋๋ค. ์ด ๊ฐ์๋ฅผ ํตํด์ ๊ธฐ๋ณธ์ ์ธ ๋ฌํฝ์ด์ง์ ๋ง๋ค๊ณ ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ ์ฉํ ๊ธฐ๋ฅ๊ณผ ์ค์ , ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํ๋์ฉ ์ถ๊ฐํด๋๊ฐ๋ ๊ฒ์ด์ฃ . ๋ฌํฝ์ด์ง์ ๋ด๋ถ๋ฅผ ๊ณ์ํด์ ๋ฆฌ๋ชจ๋ธ๋งํ๋ ๊ฒ์
๋๋ค. ๋ฌํฝ์ด์ง์ ์ ์ ํจ๊ป ์ฑ์ฅ์ ํ๋ ๊ฒ์ด์ฃ !
๋ํ ์
์ฌ๋ฅผ ํ๊ณ ๋๋ฉด ์ด๋ ์ ๋ ์ค์ ์ด ๋ ํ๋ก์ ํธ๋ฅผ ์ ์ง ๋ณด์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ด๋ฒ ๊ฐ์๋ฅผ ๋ค์ผ๋ฉด "์ ๋ฐ์ ์ผ๋ก ํ๋ก์ ํธ๊ฐ ์ด๋ ๊ฒ ๊ตฌ์ฑ์ด ๋์ด์๊ฒ ๊ตฌ๋!" ๋ผ๊ณ ์ดํด๋ฅผ ํ์ค ์ ์์ ๊ฒ์
๋๋ค. ๋ง์ฝ ์ ๊ท ํ๋ก์ ํธ๋ฅผ ์ฒ์๋ถํฐ ๊ตฌ์ถํ๊ฒ ๋๋๋ผ๋ ์ด๊ธฐ ์ธํ
๋ถํฐ ๊ฐ๋ฐ๊น์ง ๋ฌด๋ฆฌ ์์ด ํด๋๊ฐ๋ ์์ ์ ๋ฐ๊ฒฌํ ์ ์์๊ฒ๋๋ค.
์ด๋ฐ ๋ถ๋ค์๊ฒ ์ถ์ฒํด์ ๐
API ์๋ฒ๋ฅผ ๋ง๋ค ๋ ํ๋ก์ ํธ
์ ๋ฐ์ ์ค์ ์ ์๊ณ ์ถ์ ๋ถ
ํ
ํ๋ฆฟ ๊ธฐ๋ณธ ํ์ ์ก๊ณ ๋๋ง์
ํ๋ก์ ํธ๋ฅผ ๋ฐ์ ํ๊ณ ์ถ์ ๋ถ
API ์๋ฒ์์ JWT ๊ธฐ๋ฐ ์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๊ณ ์ถ์ ๋ถ
์ด ๊ฐ์๋ง์ ํน์ง โจ
- ์ต๋ํ ์ค๋ฌด์งํฅ์ ์ผ๋ก ๊ฐ์๋ฅผ ์ ์ํ์๊ณ , ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋ฐ๋ผ ํ์ ๋ค๋ฉด ๊ฐ์ข
์ค์ ๋ฐ ํ๋ก์ ํธ ๊ตฌ์กฐ๋ฅผ ์ก๋๋ฐ ์์ ๊ฐ์ด ๋ถ์ ๊ฒ์
๋๋ค.
- ์ค์ ์ ์งํํ๊ธฐ ์ ์ ํด๋น ์ค์ ์ ๋ํ ๊ฐ๋จํ ๊ฐ๋
์ ์ค๋ช
๋๋ฆฌ๊ณ ์งํํฉ๋๋ค.
- ์์ธํ ์ค๋ช
์ ์ํด์ 100ํ์ด์ง ๊ฐ๊น์ด ๋๋ ๊ฐ์ ์๋ฃ๋ฅผ ์ ๊ณตํด ๋๋ฆฝ๋๋ค.
ํ์ตํ ๋ด์ฉ โ๏ธ
CORS์ ๋ํด์ ์์๋ณด๋ฉฐ ๋ค๋ฅธ origin์์๋
API ํธ์ถ์ด ๊ฐ๋ฅํ๋๋ก ์ค์ ์ ์งํํฉ๋๋ค.
API๋ฅผ ์ํํ๋ค๊ฐ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ๊ฐ๊ฐ๋ง๋ค
์์ธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ ์๋๋ผ ์ ์ญ์ ์ผ๋ก
์์ธ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ฒ๋ฆฌํ๋ ๋ฒ์ ๋ฐฐ์๋๋ค.
์นด์นด์ค ๊ฐ๋ฐ์ ์ผํฐ์์ ์ ๊ณตํ๋ ๋ฌธ์๋ฅผ ๋ณด๋ฉฐ ์นด์นด์ค ํ ํฐ ๋ฐ๊ธ์ ์งํํฉ๋๋ค.
๋ฌธ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก API๋ฅผ ๊ตฌํํ๋ ๊ณผ์ ์ ๊ฐ์๋ฅผ ํตํด ์ตํ์ค ์ ์์ต๋๋ค.
๋ฐ๊ธ๋ฐ์ ์นด์นด์ค์ ACCESS TOKEN์ ์ด์ฉํ์ฌ
์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๊ณ
์ ํฌ๊ฐ ๋ง๋๋ API์์ ์ฌ์ฉํ JWT๋ฅผ ๋ฐ๊ธํฉ๋๋ค.
๊ฐ๋ฐํ API๋ค์ Swagger๋ฅผ
์ด์ฉํ์ฌ ๋ฌธ์ ์๋ํ๋ฅผ ์งํํฉ๋๋ค.
์น ๋ณด์์ ๊ฐ์ฅ ๊ธฐ์ด์ธ XSS(ํฌ๋ก์ค ์ฌ์ดํธ ์คํฌ๋ฆฝํ
)๋ฅผ
๋ฐฉ์ดํ๊ธฐ ์ํ ์ค์ ์ ์ถ๊ฐํฉ๋๋ค.
๊ตฌํํ ํ
ํ๋ฆฟ ํ๋ก์ ํธ๋ฅผ ๊นํ๋ธ์์
Template Repository๋ก ๋ฑ๋กํ์ฌ
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํ ๋
ํด๋น ํ
ํ๋ฆฟ ๊ธฐ๋ฐ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์๋ก ๋ง๋ค์ด๋ด
๋๋ค.
๊ฐ์ ์๋ฆฌ๊ฐ ์๊ฒ ๋ค๋ฆฐ๋ค๋ ์๊ฒฌ์ด ์์ด์ ๊ฐ๋ฅํ๋ฉด ์ด์ดํฐ์ผ๋ก ์ฒญ์ทจ ๋ถํ๋๋ฆฝ๋๋ค.
Q&A ๐ฌ
Q. Spring Data JPA๋ฅผ ์ฌ์ฉ์ ์ํด๋ดค๋๋ฐ ๊ฐ์๋ฅผ ๋ค์ด๋ ๋ ๊น์?
Spring Data JPA ๊ธฐ๋ฐ์ผ๋ก ์ํฐํฐ ์ค๊ณ, ์ง์ฐ ๋ก๋ฉ, ๋ณ๊ฒฝ ๊ฐ์ง, ์ฟผ๋ฆฌ ๋ฉ์๋๊ฐ ๋ฌด์์ธ์ง ์ ๋์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ์ง์์ด ์์ผ์
์ผ ๊ฐ์๋ฅผ ์์ํ๊ฒ ๋ค์ผ์ค ์ ์์ต๋๋ค.
Q. ์คํ๋ง์ ๋ํด์ ์์ธํ ๋ชจ๋ฅด๋๋ฐ ๊ฐ์๋ฅผ ๋ค์ด๋ ๊ด์ฐฎ์๊น์?
์คํ๋ง ์์ฒด์ ๋ํ ๊ฒฝํ์ด ์๋ค๋ฉด ๊ฐ์๋ฅผ ๋ฃ๊ธฐ๊ฐ ํ๋์ค ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์คํ๋ง ๊ธฐ๋ฐ์ผ๋ก API๋ฅผ ๋ง๋ค์ด๋ณด์ ๊ฒฝํ์ด ์์ผ์๋ค๋ฉด ์์ํ๊ฒ ๊ฐ์๋ฅผ ๋ค์ผ์ค ์ ์์ต๋๋ค.
์ง์๊ณต์ ์ ์๊ฐ โ๏ธ
์๋
ํ์ธ์! ํ์ฌ ์ด์ปค๋จธ์ค ๊ธฐ์
์์ ์ผํ๊ณ ์๋ ๊ฐ๋ฐ์์
๋๋ค. 2022๋
4~5์ ๋์ "๋ฉ์์ด ์ฌ์ X ์ด์คํธ์ํํธ" ์ต์คํด์ญ ๋ฉ์ธ ๊ฐ์ฌ๋ก ํ๋ํ์๊ณ , 2021๋
9์์ "์คํ๋ง ๋ถํธ ์ผํ๋ชฐ ํ๋ก์ ํธ with JPA"๋ผ๋ ์ฑ
์ ์ถํํ์์ต๋๋ค.