Amenable
Amenable's Blog
Amenable
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (189)
    • ๐Ÿ“‚ JAVA (87)
      • ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” (65)
      • ์ฃผ์š” ๊ฐœ๋… (22)
    • ๐Ÿ“‚ ๊ฐœ๋ฐœ ์„œ์  (22)
      • ์‹ค์šฉ์ฃผ์˜ ํ”„๋กœ๊ทธ๋ž˜๋จธ (1)
      • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์‚ฌ์‹ค๊ณผ ์˜คํ•ด (2)
      • ํด๋ฆฐ ์ฝ”๋“œ (8)
      • ํ•จ๊ป˜ ์ž๋ผ๊ธฐ (1)
      • ๊ทธ๋ฆผ์œผ๋กœ ๋ฐฐ์šฐ๋Š” HTTP&Network Basic (10)
    • ๐Ÿ“‚ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (8)
      • ๊ฐœ๋… (8)
      • ๋ฌธ์ œํ’€์ด (0)
    • ๐Ÿ“‚ ๋„คํŠธ์›Œํฌ (14)
      • ๊ฐœ๋… (6)
      • ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” 1%์˜ ๋„คํŠธ์›Œํฌ ์›๋ฆฌ (8)
    • ๐Ÿ“‚ ์Šคํ”„๋ง (13)
      • ๊ธฐ๋ณธ ๊ฐœ๋… (13)
    • ๐Ÿ“‚ WEB (5)
    • ๐Ÿ“‚ ์ž๋ฃŒ๊ตฌ์กฐ (12)
      • ๊ฐœ๋… (2)
      • ์ •๋ ฌ (8)
      • ํŠธ๋ฆฌ (2)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (10)
      • ์ตœ์†Œ์‹ ์žฅํŠธ๋ฆฌ (2)
      • ์ตœ๋‹จ ๊ฒฝ๋กœ (2)
      • ๋ฌธ์ž์—ด (2)
      • ETC (4)
    • ๐Ÿ“‚ ์•Œ๊ณ ๋ฆฌ์ฆ˜_๋ฌธ์ œํ’€์ด (4)
      • BOJ_๋ฐฑ์ค€ (4)
    • ๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (3)
    • ๐Ÿ“‚ DevOps (2)
      • ๋ฐฐํฌ (2)
    • ๐Ÿ“‚ ํ›„๊ธฐ (8)
      • ์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค(ํ”„๋ฆฌ์ฝ”์Šค) (4)
      • 2023๋…„ (3)
      • 2024๋…„ (1)
    • ๐Ÿ“‚ ํšŒ๊ณ  (1)
      • 2023๋…„ (1)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿš€ GitHub

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
Amenable

Amenable's Blog

๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)
๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)

2023. 6. 27. 20:45

๐Ÿ“™ 1. ๊ฐœ๋…

  ๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜(Layered Architecture)๋Š” ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ(Separation of concerns)์— ๋”ฐ๋ผ ์‹œ์Šคํ…œ์„ ์œ ์‚ฌํ•œ ์ฑ…์ž„(๊ด€์‹ฌ)์„ ์ง€๋‹Œ Layer๋กœ ๋ถ„ํ•ดํ•˜๊ณ , ๊ฐ๊ฐ์˜ Layer๊ฐ€ ํ•˜์œ„ Layer์—๋งŒ ์˜์กดํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ด๋‹ค.

 

 

๐Ÿ“™ 2. ์‚ฌ์šฉ ๋ชฉ์ 

  Layered Architecture๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ ๋ ˆ์ด์–ด๋“ค์ด ํŠน์ • ๊ด€์‹ฌ์‚ฌ์™€ ๊ด€๋ จ๋œ ๊ฐœ์ฒด๋งŒ์„ ํฌํ•จํ•˜๋„๋ก ๋งŒ๋“ ๋‹ค. ์ด๋ฅผ ํ™œ์šฉํ•œ Layered Architecture์„ ํ†ตํ•ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชฉ์ ์„ ์ด๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.

  1. ์ „์ฒด์ ์ธ ์‹œ์Šคํ…œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.
    ํ•˜์œ„ ๊ณ„์ธต์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•จ์œผ๋กœ์จ ํ•ด๋‹น ๊ณ„์ธต์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ธ๋‹ค.
    ๊ฐ ๋ ˆ์ด์–ด์— ์„œ๋กœ ๋‹ค๋ฅธ ์ถ”์ƒํ™” ์ˆ˜์ค€์„ ๊ฐ€์ง„ ์ƒํƒœ์™€ ํ–‰๋™์„ ์œ„์น˜์‹œํ‚ด์œผ๋กœ์จ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
  3. ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.
    ํ•˜์œ„ ๊ณ„์ธต์˜ ์˜์กด์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ๊ณ„์ธต์˜ ๋ณ€๊ฒฝ์— ๋Œ€ํ•œ ์˜ํ–ฅ์ด ์ „ํŒŒ๋˜์ง€ ์•Š๋„๋ก ์ตœ์†Œํ™”ํ•œ๋‹ค.
  4. ๊ฐœ๋ฐœ์ž์˜ ์ธ์ง€ ๊ณผ๋ถ€ํ•˜๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค

 

 

๐Ÿ“™ 3. 4-Layered Architecture

  ๊ณ„์ธต์˜ ๊ฒฝ์šฐ, ๋น„๊ต์  ๋‹จ์ˆœํ•œ ์ƒํ™ฉ์—์„œ๋Š” 3 ๊ณ„์ธต(Presentation Layer, Application Layer Data Layer))์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” 4 ๊ณ„์ธต(Presentation Layer, Business Layer, Persistence Layer, DataBase Layer)์„ ๊ฐ€์ง„๋‹ค.

  4-Layered Architecture์˜ ๊ฐ๊ฐ์˜ ๋ ˆ์ด์–ด๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

 

๐Ÿš— 1. Presentation Layer

  • Presentation Layer๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ณ  ์‘๋‹ตํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์„ฑ์š”์†Œ๋Š” View์™€ Controller๊ฐ€ ์žˆ๋‹ค.

๐Ÿš— 2. Business Layer

  • Business Layer๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค.
  • Presentation Layer๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›์•„์˜ค๋ฉด Business Layer๋Š” ์‹ค์ œ ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•œ๋‹ค.
    ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์„ฑ์š”์†Œ๋กœ๋Š” Service๊ฐ€ ์žˆ๋‹ค.

๐Ÿš— 3. Persistence Layer

  • Persistence Layer๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ๊ณ„์ธต์ด๋‹ค.
  • Business์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ, ์กฐํšŒ, ์‚ญ์ œ ๋“ฑ์˜ ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์„ฑ์š”์†Œ๋Š” Repository์™€ DAO ๋“ฑ์ด ์žˆ๋‹ค.

๐Ÿš— 4. Database Layer

  • Database Layer๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์œ„์น˜ํ•œ ๊ณ„์ธต์„ ์˜๋ฏธํ•œ๋‹ค.
  • ๋Œ€ํ‘œ์ ์ธ ๊ตฌ์„ฑ์š”์†Œ๋กœ๋Š” MySQL, MariaDB, PostgreSQL, MongoDB ๋“ฑ์ด ์žˆ๋‹ค.

 

 

๐Ÿ“™ 4. Open And Closed Layer

  ๊ฐ ๋ ˆ์ด์–ด๋Š” ํ์‡„(Closed) ๋˜๋Š” ๊ฐœ๋ฐฉ(Open) ์ƒํƒœ๋ฅผ ๊ฐ€์ง„๋‹ค.

  ๊ฐœ๋ฐฉ ์ƒํƒœ๋ฅผ ์ด์šฉํ•˜์—ฌ '์—„๊ฒฉํ•œ ๋ ˆ์ด์–ด ์•„ํ‚คํ…์ฒ˜'์™€ '์™„ํ™”๋œ ๋ ˆ์ด์–ด ์•„ํ‚คํ…์ฒ˜'๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  ์—„๊ฒฉํ•œ ๋ ˆ์ด์–ด ์•„ํ‚คํ…์ฒ˜๋ž€ ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ๊ณ„์ธต๋งŒ์„ ์˜์กดํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์™„ํ™”๋œ ๋ ˆ์ด์–ด ์•„ํ‚คํ…์ฒ˜๋Š” ์ž์‹ ์˜ ํ•˜์œ„ ๋ ˆ์ด์–ด๋ผ๋ฉด ๋ชจ๋‘ ์˜์กดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

 

์ถœ์ฒ˜ : ๊ฒฝ๋ถ์ผ๋ณด

  ์—„๊ฒฉํ•œ ๋ ˆ์ด์–ด ์•„ํ‚คํ…์ฒ˜์—์„œ๋Š” ๋ณ„๋‹ค๋ฅธ ๋กœ์ง์ด ์—†๋”๋ผ๋„ ๋ฐ˜๋“œ์‹œ ์•„๋ž˜ ๊ณ„์ธต์„ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

  ์š”์ฒญ์„ ์ „๋‹ฌ๋ฐ›์€ ํ•˜์œ„ ๊ณ„์ธต์€ ์•„๋ฌด๋Ÿฐ ๋กœ์ง ์—†์ด ์š”์ฒญ์„ ๋‹ค์Œ ๊ณ„์ธต์œผ๋กœ ์ „๋‹ฌ๋งŒ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๊ฒƒ์„ '์‹ฑํฌํ™€ ์•ˆํ‹ฐ ํŒจํ„ด'์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚ญ๋น„ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค.

 

  ์‹ฑํฌํ™€ ์•ˆํ‹ฐํŒจํ„ด์ด ์—†๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š๋‹ค. ๊ทธ๋ž˜์„œ ์‹ฑํฌํ™€ ์•ˆํ‹ฐ ํŒจํ„ด์˜ ๋ฌธ์ œ ๋ฐœ์ƒ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ '80-20 RULE'์ด ์žˆ๋‹ค.

  ์ด๋Š” ์ „์ฒด ์š”์ฒญ์˜ 20%๊ฐ€ ์‹ฑํฌํ™€์ธ ์ •๋„๋ฉด ๊ทธ๋Ÿฐ๋Œ€๋กœ ๊ดœ์ฐฎ์€ ์ˆ˜์ค€์ด๋ผ๋Š” ๊ฒƒ์„ ๋งํ•ด์ค€๋‹ค.

 

 

๐Ÿ“™ 5. Layered Architecture์˜ ๋‹จ์ 

  • ํ™•์žฅ์„ฑ ๋ฌธ์ œ
      ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก ํ™•์žฅ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.
  • ๋„๋ฉ”์ธ ๋ณ€๊ฒฝ์˜ ์–ด๋ ค์›€
      ๋„๋ฉ”์ธ์„ ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด Presentation Layer, Business Layer, Persistence Layer, Database Layer๋ฅผ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค. (ํ•˜๋‚˜์˜ ๋„๋ฉ”์ธ์ด ๋ชจ๋“  ๋ ˆ์ด์–ด์— ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋‹ค.)
      ๋ ˆ์ด์–ด๋กœ ๋ถ„๋ฆฌ๋œ ๊ด€์‹ฌ์‚ฌ ์™ธ์— ๋‹ค๋ฅธ ๊ด€์‹ฌ์‚ฌ๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๊ฒฝ์šฐ, ํŒจํ‚ค์ง€ ๋ถ„๋ฆฌ ๋ฐ ์ฝ”๋“œ ๋ฐฐ์น˜๊ฐ€ ๋‚œ๊ฐํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋‚ฎ์€ ์‘์ง‘๋„
      ํ•˜๋‚˜์˜ ์ƒํ™ฉ ๋˜๋Š” ๊ฐœ๋…์ด ๋ ˆ์ด์–ด์˜ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

ํ•ด๋‹น ๊ธ€์€
oreilly ์˜ 'Chapter 1. Layered Architecture',
dzone ์˜ 'Layered Architecture Is Good',
์ฝ”๋”ฉ๋ฌด๋‹ˆ ๋‹˜์˜ 'Layered Architecture (๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜) ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?',
junhyunny ๋‹˜์˜ 'Layered Architecture',
gmtmoney2357 ๋‹˜์˜ '์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ - ๋ ˆ์ด์–ด๋“œ ์•„ํ‚คํ…์ฒ˜(Layered architecture)',
hudi ๋‹˜์˜ '๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜ (Layered Architecture)'
๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

'๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

CQS (Command Query Separation)  (0) 2023.06.27
๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ  (0) 2023.06.17
    '๐Ÿ“‚ ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • CQS (Command Query Separation)
    • ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ vs ์ ˆ์ฐจ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
    Amenable
    Amenable
    CS, ์ž๋ฐ”, ์ž๋ฃŒ๊ตฌ์กฐ, ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์Šคํ”„๋ง, ์Šคํ”„๋ง ๋ถ€ํŠธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋ฐœ์— ๊ด€ํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”