Home > Backend > Spring > ๐Ÿƒ[Spring] ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture), 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜(Three-Tier Architecture)

๐Ÿƒ[Spring] ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture), 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜(Three-Tier Architecture)
Spring Framework

๐Ÿƒ[Spring] ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture), 3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜(Three-Tier Architecture)

  • Controller๋ฅผ ํ†ตํ•ด ์™ธ๋ถ€์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ , Service์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, Repository์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ํŒจํ„ด์€ โ€œ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)โ€ ๋˜๋Š” โ€œ3๊ณ„์ธต ์•„ํ‚คํ…์ฒ˜(Three-Tier Architecture)โ€ ๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

1๏ธโƒฃ ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜(Layered Architecture)

  • ์ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์—ฌ๋Ÿฌ ๊ณ„์ธต์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ๊ณ„์ธต์ด ํŠน์ •ํ•œ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋„๋ก ๊ตฌ์กฐ์™€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด ๋ฐฉ์‹์€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ๋ณต์žก์„ฑ์„ ์ค„์ด๊ณ , ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋ฉฐ, ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.
  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ด ํŒจํ„ด์€ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

2๏ธโƒฃ ๊ฐ ๊ณ„์ธต๋ณ„ ์—ญํ• .

  • 1. Presentation Layer(ํ”„๋ ˆ์  ํ…Œ์ด์…˜ ๊ณ„์ธต) - Controller
    • ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
    • ์™ธ๋ถ€์˜ ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์Šคํ”„๋ง์—์„œ๋Š” ์ฃผ๋กœ @Controller ๋˜๋Š” @RestController ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • 2. Business Logic Layer(๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ณ„์ธต) - Service
    • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ ์ฒ˜๋ฆฌ, ๊ณ„์‚ฐ, ๊ฒ€์ฆ ๋“ฑ ํ•ต์‹ฌ์ ์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์ด ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค.
    • ์Šคํ”„๋ง์—์„œ๋Š” ์ฃผ๋กœ @Service ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • 3. Data Access Layer(๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต) - Repository
    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ์˜ CRUD(Create, Read, Update, Delete) ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    • ์Šคํ”„๋ง์—์„œ๋Š” ์ฃผ๋กœ @Repository ์• ๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ณ„์ธต์„ ๊ตฌํ˜„ํ•˜๋ฉฐ JPA, MyBatis, Hibernate ๋“ฑ์˜ ORM(Object-Relational Mapping) ๋„๊ตฌ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

3๏ธโƒฃ ์ด ํŒจํ„ด์˜ ์ฃผ์š” ์žฅ์ .

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

์ด ๊ณ„์ธตํ˜• ์•„ํ‚คํ…์ฒ˜๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๋ถ€๋ถ„์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ฑ„ํƒํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ตฌ์กฐ์ด๋ฉฐ, ์†Œํ”„ํŠธ์›จ์–ด ์„ค๊ณ„์˜ ๋ฒ ์ŠคํŠธ ํ”„๋ž™ํ‹ฐ์Šค ์ค‘ ํ•˜๋‚˜๋กœ ๋„๋ฆฌ ์ธ์ •๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.