Home > Backend > Spring > ๐Ÿƒ[Spring] ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ตฌ์กฐ์™€ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„.

๐Ÿƒ[Spring] ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ตฌ์กฐ์™€ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„.
Spring Framework

๐Ÿƒ[Spring] ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ตฌ์กฐ์™€ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„.

1๏ธโƒฃ ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ตฌ์กฐ.

  • Controller : ์›น MVC์˜ Controller ์—ญํ• .
    • ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ฐ›์•„ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง(์„œ๋น„์Šค ๋ ˆ์ด์–ด)์— ์ „๋‹ฌํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ตํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
      • ์ฃผ๋กœ HTTP ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์˜ฌ๋ฐ”๋ฅธ ์‘๋‹ต์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • ์ปจํŠธ๋กค๋Ÿฌ๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์•„ ํ•ด๋‹น ์ž…๋ ฅ์„ ์„œ๋น„์Šค ๋ ˆ์ด์–ด๋กœ ์ „๋‹ฌํ•˜๊ณ , ์„œ๋น„์Šค ๋ ˆ์ด์–ด์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
      • ์ด๋Š” ์ฃผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—”ํŠธํฌ์ธํŠธ(์˜ˆ: '/login', '/signup' ์™€ ๊ฐ™์€ URL)์— ๋Œ€์‘๋ฉ๋‹ˆ๋‹ค.
  • Service : ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„.
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
    • ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์‚ฌ์ด์—์„œ ์ค‘๊ฐ„ ์—ญํ• ์„ ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜๊ณ , ์ด๋ฅผ ๋‹ค์‹œ ์ปจํŠธ๋กค๋Ÿฌ์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์„œ๋น„์Šค ๊ณ„์ธต์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์œ„์น˜ํ•˜๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
      • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž ์ธ์ฆ, ๊ฒฐ์ œ ์ฒ˜๋ฆฌ, ์ด๋ฉ”์ผ ์ „์†ก ๋“ฑ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์ด ์ด ๊ณ„์ธต์—์„œ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
  • Repository: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ, ๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ.
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ, ๊ฒ€์ƒ‰, ๊ฐฑ์‹ , ์‚ญ์ œ ๋“ฑ์˜ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ง์ ‘์ ์ธ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ SQL ์ฟผ๋ฆฌ๋‚˜ ORM(Object-Relational Mapping) ์ž‘์—…์„ ๋‹ด๋‹นํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ๊ณ„์ธต์€ ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
  • Domain: ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ฐ์ฒด.
    • ์˜ˆ๋ฅผ ๋“ค์–ด ํšŒ์›, ์ฃผ๋ฌธ ์ฟ ํฐ ๋“ฑ๋“ฑ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ๋จ.
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ์—”ํ‹ฐํ‹ฐ(Entity)์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์ •์˜ํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
      • ๋ณดํ†ต ๊ฐ์ฒด๋กœ ํ‘œํ˜„๋˜๋ฉฐ, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์˜ ์ผ๋ถ€๋ฅผ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๋„๋ฉ”์ธ ๊ณ„์ธต์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ค‘์š”ํ•œ ๊ฐ์ฒด๋“ค(์˜ˆ: 'User', 'Product', 'Order' ๋“ฑ)์„ ์ •์˜ํ•˜๊ณ , ์ด ๊ฐ์ฒด๋“ค์ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
      • ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์–ด๋–ค ๋น„์ฆˆ๋‹ˆ์Šค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ชจ๋ธ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

2๏ธโƒฃ ํด๋ž˜์Šค ์˜์กด๊ด€๊ณ„.

  • ํšŒ์› ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์—๋Š” ํšŒ์› ์„œ๋น„์Šค๊ฐ€ ์žˆ๋‹ค.
    • ํšŒ์›์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์€ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์„ค๊ณ„ ๋˜์–ด์žˆ๋‹ค.
      • ๊ทธ ์ด์œ ๋Š” ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์•˜์Œ์„ ๊ฐ€์ •ํ•˜๊ณ  ์„ค๊ณ„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
      • ๊ทธ๋ฆฌ๊ณ  ๊ตฌํ˜„์ฒด๋ฅผ ์šฐ์„ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด๋กœ ๋งŒ๋“ค๊ฒƒ์ด๋‹ค.
        • ๊ทธ ์ด์œ ๋Š” ์ผ๋‹จ ๊ฐœ๋ฐœ์€ ํ•ด์•ผํ•˜๋ฏ€๋กœ ๊ต‰์žฅํžˆ ๋‹จ์ˆœํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด๋กœ ๋งŒ๋“ ๋‹ค.
          • ํ–ฅํ›„์— ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด๋ฅผ ๊ตฌ์ฒด์ ์ธ ๊ธฐ์ˆ ์ด ์„ ์ •์ด ๋˜๋ฉด(RDB, NoSQL ๋“ฑ) ๊ต์ฒดํ•  ๊ฒƒ์ด๋‹ค.
            • ๊ต์ฒดํ•˜๋ ค๋ฉด Interface๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ Interface๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค.
  • ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์•„์„œ, ์šฐ์„  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ตฌํ˜„ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„
  • ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋Š” RDB, NoSQL ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•œ ์ €์žฅ์†Œ๋ฅผ ๊ณ ๋ฏผ์ค‘์ธ ์ƒํ™ฉ์œผ๋กœ ๊ฐ€์ •
  • ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ดˆ๊ธฐ ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” ๊ตฌํ˜„์ฒด๋กœ ๊ฐ€๋ฒผ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ ์‚ฌ์šฉ