๋‘ ๋ฒˆ์งธ ๋‚˜์˜ ํ”„๋กœ์ ํŠธ์˜€๋˜ 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 ๋ถ„์„ ๊ณผ์ •์„ ์ •๋ฆฌํ•  ์˜ˆ์ •์ด๋‹ค. 

 

 

 

 

 

 

 

+ Recent posts