๋ ๋ฒ์งธ ๋์ ํ๋ก์ ํธ์๋ KB ํด์ปคํค์ด ๋๋์ง ์ฝ ์ธ ๋ฌ๋ง์ ์์๋ ์ธ ๋ฒ์งธ ํ๋ก์ ํธ์ด๋ค.
์ธ ๋ฌ๊ฐ ํผ์์ ๋งค์ผ ์๋ฐ์ ์ฝ๋ฉ ํ ์คํธ ์ค๋น๋ฅผ ํ์ง๋ง ์์ง ๋ง์ด ๋ชจ์๋ฅธ ๋๋์ด๋ค.
ํ์ง๋ง ๊ทธ๋๋ ์ง๋ ํ๋ก์ ํธ๋ณด๋ค๋ ์ฝ๋ ํ์ค ํ์ค์ ์๋ฏธ๋ฅผ ๋ ๋ง์ด ํ์ ํ ์ ์๊ธฐ ๋๋ฌธ์
ํฌ๋ง์ ๊ฐ์ง๊ณ ์ด์ฌํ ๋ถ๋ชํ ๋ณด๋ ค๊ณ ํ๋ค!
์ด๋ฒ ํ๋ก์ ํธ์์๋ Java Spring Boot๋ฅผ ํ์ฉํด์ ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ ๊ฐ์ ์์ ๋ฐฐ๋ฌ ์ฑ์ ๋ฐฑ์๋๋ฅผ ๊ฐ๋ฐํ๊ฒ ๋์๋ค.
๋จ์ํ API ๊ตฌํ์ด ์๋๋ผ ์ค์ ์๋น์ค์์ ๋์ํ๋ ์์คํ ์ ๋ง๋ ๋ค๋ ์ ์์ ๊ฝค ํฅ๋ฏธ๋กญ๊ณ ๋์ ์ ์ธ ํ๋ก์ ํธ์ผ๊ฒ ๊ฐ๋ค.
์ด ๋ธ๋ก๊ทธ๋ฅผ ํตํด ํ๋ก์ ํธ ์งํ ๊ณผ์ ์์ ๊ฒช์ ์ํ์ฐฉ์ค, ๋ฐฐ์ด ์ , ๊ณ ๋ฏผํ๋ ๋ถ๋ถ๋ค์ ๊ธฐ๋กํ๋ ค๊ณ ํ๋ค.
๋์ค์ ๋ค์ ๋์๋ดค์ ๋, “์, ์ด๋ ์ด๋ฐ ๊ฑธ ๊ณ ๋ฏผํ์์ง!” ํ๋ฉด์ ์ฑ์ฅํ ๋ชจ์ต์ ๋ณผ ์ ์๋๊ฑด ์๋ฏธ ์๋ ์ผ์ด๋๊น!
1. ํ๋ก์ ํธ ๊ฐ์
์ด๋ฒ ํ๋ก์ ํธ์ ํต์ฌ ๋ชฉํ๋ Spring Boot๋ฅผ ํ์ฉํ ์์ ๋ฐฐ๋ฌ ์๋น์ค ๋ฐฑ์๋ ๊ตฌ์ถ์ด๋ค.
๊ธฐ๋ฅ์ ํ๋์ฉ ๊ตฌํํ๋ฉด์ ์ด๋ค ์ ์ ๊ณ ๋ คํด์ผ ํ๋์ง, ์ด๋ป๊ฒ ํจ์จ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ์ ์์์ง ๊ณ ๋ฏผํด๋ณผ ๊ณํ์ด๋ค.
2. ํ๋ก์ ํธ ์๊ตฌ์ฌํญ ๋ถ์ - ๋ฌด์์ ๋ง๋ค ๊ฒ์ธ๊ฐ?
์ด๋ฒ ํฌ์คํ ์์๋ ๋ฐฐ๋ฌ ์ฑ ๋ฐฑ์๋ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ์ ๋ถ์ํ๋ ๊ณผ์ ์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๊ฐ๋ฐ์ ์์ํ๊ธฐ ์ ์ ๋ช ํํ ์๊ตฌ์ฌํญ์ ์ ๋ฆฌํ๋ ๊ฒ์ด ์ผ๋ง๋ ์ค์ํ์ง ๋ค์๊ธ ๊นจ๋ซ๋ ์๊ฐ์ด์๋ค.
2.1 ํ๋ก์ ํธ ๋ชฉํ
• ๋ฐฐ๋ฌ์ ๋ฏผ์กฑ๊ณผ ์ ์ฌํ ์์ ๋ฐฐ๋ฌ ์๋น์ค ๋ฐฑ์๋ ๊ฐ๋ฐ
• Spring Boot + MySQL์ ํ์ฉํ์ฌ ์๋ฒ ๊ตฌ์ถ
• RESTful API ์ค๊ณ ๋ฐ ์ ์ , ๊ฐ๊ฒ, ์ฃผ๋ฌธ, ๊ฒฐ์ ๊ธฐ๋ฅ ๊ตฌํ
3. ์๊ตฌ์ฌํญ ๋ถ์ ๊ณผ์ - ํต์ฌ ๊ธฐ๋ฅ ์ ์
ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ๊ฐ์ฅ ๋จผ์ ํด์ผ ํ ์ผ์ ์ด๋ค ๊ธฐ๋ฅ์ด ํ์ํ์ง ์ ๋ฆฌํ๋ ๊ฒ์ด๋ค.
์ฃผ์ด์ง ๊ณผ์ ๋ฌธ์๋ฅผ ๋ถ์ํ๋ฉด์
ํต์ฌ์ ์ผ๋ก ๊ตฌํํด์ผ ํ ๊ธฐ๋ฅ์ ๋๋ ๋ดค๋ค.
1) ์ฌ์ฉ์ ๊ด๋ จ ๊ธฐ๋ฅ (ํ์ & ์ธ์ฆ ์์คํ )
- ๋ฐฐ๊ฒฝ: ๊ณ ๊ฐ, ์ฌ์ฅ๋, ๊ด๋ฆฌ์ ๋ฑ ๋ค์ํ ์ฌ์ฉ์ ์ ํ์ด ์กด์ฌ
- ํต์ฌ ๊ธฐ๋ฅ:
• ํ์๊ฐ์ & ๋ก๊ทธ์ธ (JWT ์ธ์ฆ)
• ์ฌ์ฉ์ ์ ๋ณด ์กฐํ & ์์
• ์ญํ (Role) ๊ธฐ๋ฐ ์ ๊ทผ ์ ์ด
์ ๋ฆฌ: ๋ฐฐ๋ฌ ์๋น์ค์ด๋ฏ๋ก ๊ณ ๊ฐ๊ณผ ์ฌ์ฅ๋์ ์ญํ ์ด ๋ค๋ฆ!
→ ๋ฐ๋ผ์, “์ ์ ๊ถํ(ROLE)” ์ ๋ฐ๋ผ ์ ๊ทผ ๊ฐ๋ฅํ API๋ฅผ ๊ตฌ๋ถํด์ผ ํ๋ค.
2) ๊ฐ๊ฒ ๋ฐ ๋ฉ๋ด ๊ด๋ฆฌ ๊ธฐ๋ฅ
- ๋ฐฐ๊ฒฝ: ๋ฐฐ๋ฌ ์๋น์ค์ ํต์ฌ์ ๋ค์ํ ๊ฐ๊ฒ์ ๊ทธ ์์ ๋ฉ๋ด๋ค
- ํต์ฌ ๊ธฐ๋ฅ:
• ๊ฐ๊ฒ ๋ชฉ๋ก ์กฐํ & ์์ธ ์กฐํ
• ์ฌ์ฅ๋์ด ์์ ์ ๊ฐ๊ฒ๋ฅผ ์ถ๊ฐ/์์ /์ญ์
• ๋ฉ๋ด ์ถ๊ฐ & ์์ & ์ญ์ ๊ธฐ๋ฅ
์ ๋ฆฌ:
• ์ผ๋ฐ ๊ณ ๊ฐ์ ๊ฐ๊ฒ ๋ชฉ๋ก์ ์กฐํํ ์ ์์ง๋ง,
• ์ฌ์ฅ๋์ ์์ ์ ๊ฐ๊ฒ & ๋ฉ๋ด๋ง ์์ ๊ฐ๋ฅํ๋๋ก ๊ตฌํํด์ผ ํ๋ค.
3) ์ฃผ๋ฌธ ๋ฐ ๊ฒฐ์ ์์คํ
- ๋ฐฐ๊ฒฝ: ์ฌ์ฉ์๊ฐ ์ํ๋ ๋ฉ๋ด๋ฅผ ์ฅ๋ฐ๊ตฌ๋์ ๋ด๊ณ ์ฃผ๋ฌธ & ๊ฒฐ์ ๊น์ง ์งํํด์ผ ํจ
- ํต์ฌ ๊ธฐ๋ฅ:
• ์ฃผ๋ฌธํ๊ธฐ & ์ฃผ๋ฌธ ๋ด์ญ ์กฐํ
• ์ฌ์ฅ๋์ด ์ฃผ๋ฌธ ์ํ ๋ณ๊ฒฝ (์ฃผ๋ฌธ ์ ์, ์๋ฆฌ ์ค, ๋ฐฐ๋ฌ ์ค, ์๋ฃ ๋ฑ)
• ๊ฒฐ์ ๊ธฐ๋ฅ (๊ฒฐ์ ์์ฒญ & ๊ฒฐ์ ์ทจ์)
์ ๋ฆฌ:
• ์ฃผ๋ฌธ์ด ๋ค์ด์ค๋ฉด ์ฌ์ฅ๋์ด ์ฃผ๋ฌธ์ ์๋ฝํ๊ฑฐ๋ ๊ฑฐ๋ถํ ์ ์์ด์ผ ํจ
• ์ฃผ๋ฌธ ์ํ๋ฅผ ๋จ๊ณ๋ณ๋ก ๋ณ๊ฒฝํ ์ ์๋๋ก ๊ด๋ฆฌ ํ์
• ๊ฒฐ์ ๊ธฐ๋ฅ์ ์ค์ ๊ฒฐ์ ์์คํ ๊ณผ ์ฐ๋ํ๋ ๊ตฌ์กฐ๋ก ํ์ฅ ๊ฐ๋ฅํ๊ฒ ์ค๊ณ
4) ๋ฐฐ๋ฌ ๋ฐ ๋ฆฌ๋ทฐ ์์คํ
- ๋ฐฐ๊ฒฝ: ๋ฐฐ๋ฌ ์ฃผ์๋ฅผ ๊ด๋ฆฌํ๊ณ , ๊ณ ๊ฐ์ด ๋ฆฌ๋ทฐ๋ฅผ ๋จ๊ธธ ์ ์์ด์ผ ํจ
- ํต์ฌ ๊ธฐ๋ฅ:
• ๋ฐฐ๋ฌ ์ฃผ์ ๊ด๋ฆฌ (์ถ๊ฐ, ์์ , ์ญ์ )
• ๊ณ ๊ฐ์ด ๊ฐ๊ฒ ๋ฆฌ๋ทฐ ์์ฑ & ์์ & ์ญ์
• ์ฌ์ฅ๋์ด ๋ฆฌ๋ทฐ์ ๋ต๊ธ ์์ฑ ๊ฐ๋ฅ
์ ๋ฆฌ:
• ๋ฆฌ๋ทฐ ์์คํ ์ ๋จ์ CRUD ๊ตฌํ์ด์ง๋ง,
• ์ฌ์ฅ๋์ ์์ ์ ๊ฐ๊ฒ ๋ฆฌ๋ทฐ๋ง ๊ด๋ฆฌ ๊ฐ๋ฅํด์ผ ํ๋ค!
• ๋ฐฐ๋ฌ ์ ๋ณด๋ ๊ณ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ ์ ์ฅ ๊ฐ๋ฅํ๋๋ก ์ค๊ณ
4. ์๊ตฌ์ฌํญ ๋ถ์์ ํตํด ์ป์ ์ธ์ฌ์ดํธ
1) ์ญํ (Role) ๊ธฐ๋ฐ์ ์ ๊ทผ ์ ์ด ์ค๊ณ๊ฐ ํ์
→ ์ผ๋ฐ ๊ณ ๊ฐ, ์ฌ์ฅ๋, ๊ด๋ฆฌ์ ๋ฑ ๋ค์ํ ์ฌ์ฉ์ ์ ํ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์,
→ Spring Security + JWT ๊ธฐ๋ฐ์ผ๋ก API ์ ๊ทผ์ ๊ตฌ๋ถํด์ผ ํจ.
2) ์ฃผ๋ฌธ์ “์ํ ๊ด๋ฆฌ”๊ฐ ์ค์ํ๋ค
→ ๋จ์ํ ์ฃผ๋ฌธ์ ์ ์ฅํ๋ ๊ฒ ์๋๋ผ,
→ ์ฃผ๋ฌธ์ด “์๋ฆฌ ์ค” → “๋ฐฐ๋ฌ ์ค” → “๋ฐฐ๋ฌ ์๋ฃ” ๋จ๊ณ๋ก ๋ณํํ๋ ์์คํ ์ ์ค๊ณํด์ผ ํจ.
3) ๊ฒฐ์ ์์คํ ์ ํ์ฅ์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค
→ ํ์ฌ ํ๋ก์ ํธ์์๋ ๋จ์ํ ๊ฒฐ์ ๋ก์ง์ ๊ตฌํํ์ง๋ง,
→ ์ดํ ์ค์ ๊ฒฐ์ ์๋น์ค(PG์ฌ)์ ์ฐ๋ํ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฏ๋ก,
→ “๊ฒฐ์ ์์ฒญ → ์น์ธ → ๊ฒฐ์ ์๋ฃ” ๊ฐ์ ํ๋ฆ์ ๋ฏธ๋ฆฌ ์ค๊ณํด์ผ ํจ.
4) ERD ์ค๊ณ๊ฐ ์ค์ํ๋ค
→ ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ(1:N, N:M)๋ฅผ ๋ฏธ๋ฆฌ ์ ๋ฆฌํ์ง ์์ผ๋ฉด,
→ ๋์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ก์ง์ด ๊ผฌ์ผ ๊ฐ๋ฅ์ฑ์ด ๋์.
5. ๋ค์ ๋จ๊ณ - API ์ค๊ณ & ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
์๊ตฌ์ฌํญ์ ์ ๋ฆฌํ์ผ๋, ๋ค์์ผ๋ก ํ ์ผ์ API ์ค๊ณ & ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ๋ง์ ๋๋ค.
โ API ์๋ํฌ์ธํธ ์ ์ (Swagger ํ์ฉ)
โ ERD ๊ธฐ๋ฐ์ผ๋ก MySQL ํ ์ด๋ธ ๊ตฌ์กฐ ์ค๊ณ
โ Spring Boot ํ๋ก์ ํธ ๊ธฐ๋ณธ ์ธํ (Gradle, JPA ๋ฑ)
๋ง๋ฌด๋ฆฌํ๋ฉฐ…
์ฌ์ค ๊ฐ๋ฐ์ ํ ๋๋ ๋ฐ๋ก ์ฝ๋ฉ์ ์์ํ๊ณ ์ถ์ ๋ง์์ด ๋ค์ง๋ง,
์๊ตฌ์ฌํญ ๋ถ์์ ์ ๋๋ก ํ์ง ์์ผ๋ฉด ๋์ค์ ํฐ ํผ๋์ด ์จ๋ค๋ ๊ฑธ ๋ค์ ํ ๋ฒ ๊นจ๋ฌ์๋ค.
์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ฒ์๋ถํฐ ๊ผผ๊ผผํ๊ฒ ๊ธฐํ & ์ค๊ณํ๊ณ ๊ฐ๋ฐ์ ์งํํ๋ ค๊ณ ํ๋ค!
๋ค์ ํฌ์คํ ์์๋ API ์ค๊ณ & ERD ๋ถ์ ๊ณผ์ ์ ์ ๋ฆฌํ ์์ ์ด๋ค.