Architecture

Layered Architecture μ•Œμ•„λ³΄κΈ°

hyunki.Dev 2023. 11. 2. 11:27

πŸ“Œ λ“€μ–΄κ°€λ©°

μ‹œμŠ€ν…œμ„ 섀계할 λ•Œ ν•„μˆ˜μ μœΌλ‘œ κ³ λ €ν•˜κ²Œ λ˜λŠ” 뢀뢄이 μ•„ν‚€ν…μ²˜μΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ΄λ•Œ λ§Žμ€ μ‚¬λžŒλ“€μ΄ μžμ‹ μ΄ μ„€κ³„ν•˜λŠ” μ‹œμŠ€ν…œμ„ ν‘œν˜„ν• λ•Œ Layered Architectureλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

이번 ν¬μŠ€νŒ…μ—μ„œλŠ” ν•΄λ‹Ή μ•„ν‚€ν…μ²˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄λŠ” μ‹œκ°„μ„ 갖도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.


πŸ“Œ Software Architecture

λ¨Όμ € 'μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜'λž€ 무엇인지 정리해 보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

μ†Œν”„νŠΈμ›¨μ–΄ μ•„ν‚€ν…μ²˜λŠ” λͺ¨λ“  μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ˜ κΈ°λ³Έ ꡬ쑰λ₯Ό λ§ν•˜λ©° μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ˜ ꡬ성방법에 λŒ€ν•œ

μ€‘λŒ€ν•œ 결정사항을 λͺ¨μ•„ 놓은 것이라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

  • μ‹œμŠ€ν…œ ꡬ성 및 λ™μž‘ 원리
  • ꡬ성 μš”μ†Œ κ°„μ˜ 관계 및 μ‹œμŠ€ν…œ μ™ΈλΆ€ ν™˜κ²½κ³Όμ˜ 관계λ₯Ό λ¬˜μ‚¬
  • μ‹œμŠ€ν…œ ꡬ성 μš”μ†Œμ— λŒ€ν•œ 섀계 및 κ΅¬ν˜„μ„ μ§€μ›ν•˜λŠ” μˆ˜μ€€μ„ μ‹œμˆ 
  • μš”κ΅¬ 사양 및 μ‹œμŠ€ν…œ 수λͺ… μ£ΌκΈ°λ₯Ό κ³ λ €

 

λ˜ν•œ, μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ—μ„œμ˜ μ•„ν‚€ν…μ²˜λŠ” 물리적 섀계가 μ•„λ‹Œ 각 μ»΄ν¬λ„ŒνŠΈ κ°„ ꡬ성 μš”μ†Œμ˜ 섀계, ꡬ성 μš”μ†Œ κ°„μ˜ 관계, μ‚¬μš©μž μƒν˜Έ μž‘μš© 및 μ‹œμŠ€ν…œμ— λŒ€ν•œ μ‚¬μš©μžμ˜ μš”κ΅¬λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. λŒ€ν‘œμ μΈ μ˜ˆμ‹œλ‘œλŠ” Microservices, client-server, layered architecture λ“±μ˜ ꡬ쑰듀이 μžˆμŠ΅λ‹ˆλ‹€.

 


πŸ“Œ Layered Architecture

μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ 일반적으둜 κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” μ•„ν‚€ν…μ²˜μž…λ‹ˆλ‹€.

Layer의 μˆ˜μ— 따라 N Layered Architecture라고 λΆˆλ €μ§€λŠ”λ°

단일 μ†Œν”„νŠΈμ›¨μ–΄ λ‹¨μœ„λ‘œ ν•¨κ»˜ κΈ°λŠ₯ν•˜λŠ” μ—¬λŸ¬ κ°œλ³„ μˆ˜ν‰ Layer둜 κ΅¬μ„±λœ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μž…λ‹ˆλ‹€.

즉, 각 LayerλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄μ—μ„œμ˜ νŠΉμ • μ—­ν• κ³Ό 관심사 λ³„λ‘œ κ΅¬λΆ„λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

 

https://tinkerbellbass.tistory.com/9

 

 

κ°€μž₯ 많이 μ‚¬μš©λ˜λŠ” 3Layered ArchitectureλŠ” μœ„μ˜ 사진과 같은 ꡬ쑰λ₯Ό κ°–κ³  μžˆμŠ΅λ‹ˆλ‹€.

Presentation Layer, Business Layer, Data Access Layer 총 3κ°€μ§€μ˜ Layer둜 κ΅¬μ„±λ˜μ–΄ 있으며

2 Layered Architectureλ₯Ό κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ νƒ„μƒν–ˆκ³  μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ ν™˜κ²½κ³Ό 데이터 베이슀 관리 ν™˜κ²½ μ‚¬μ΄μ˜ 쀑간측이 μΆ”κ°€λœ κ΅¬μ‘°μž…λ‹ˆλ‹€. 쀑간측인 Application Layerμ—μ„œλŠ” νŠΈλžœμž­μ…˜ 처리/λͺ¨λ‹ˆν„°, λ©”μ‹œμ§€ μ„œλ²„, μ‘μš© μ„œλ²„ λ“± λ‹€μ–‘ν•œ λ°©λ²•μœΌλ‘œ ꡬ좕될 수 μžˆμŠ΅λ‹ˆλ‹€.

 

1. Presentation Layer

μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œκ³Ό μ‚¬μš©μž μƒν˜Έ μž‘μš©μ„ λ‹΄λ‹Ήν•˜λŠ” Layerμž…λ‹ˆλ‹€.. μ£Όμš” λͺ©μ μ€

정보λ₯Ό ν‘œμ‹œν•˜κ³  μ‚¬μš©μžλ‘œλΆ€ν„° 정보λ₯Ό μˆ˜μ§‘ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ‚¬μš©μž 데이터λ₯Ό κ°€μ Έμ™€μ„œ Application Layer둜 μ „λ‹¬ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ”λ° μ‚¬μš©λœλ‹€. 예λ₯Ό λ“€μ–΄ μ›Ή λΈŒλΌμš°μ €, λ°μŠ€ν¬νƒ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ˜λŠ” GUIμ—μ„œ 싀행될 수 μžˆλ‹€.

2. Business Layer

κΈ°λŠ₯ μš”κ΅¬ 사항 달성과 κ΄€λ ¨λœ 츑면을 μ²˜λ¦¬ν•©λ‹ˆλ‹€. Presentation Layerμ—μ„œ μˆ˜μ§‘λœ 정보λ₯Ό λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ μ‚¬μš©ν•˜μ—¬ μ²˜λ¦¬ν•˜λŠ”λ° λ•Œλ‘œλŠ” Data Access Layerμ—μ„œ μ‘°νšŒν•œ 정보듀과 λΉ„κ΅ν•΄μ„œ μ²˜λ¦¬ν•©λ‹ˆλ‹€. (μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λͺ¨λ“  λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— 따라 데이터λ₯Ό μ²˜λ¦¬ν•¨.) 또 Data Access Layer의 데이터λ₯Ό μΆ”κ°€, μ‚­μ œ λ˜λŠ” μˆ˜μ •ν•  수 μžˆλ‹€.

 

μ„œλΉ„μŠ€κ°€ 점점 μ»€μ§€κ²Œ λœλ‹€λ©΄ ν•΄λ‹Ή Layerμ—μ„œ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ•„λ‹Œ 둜직 듀이 혼재 λ˜λŠ” κ²½μš°κ°€ λ°œμƒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ•Œλ¬Έμ— λ‘œμ§μ„ μˆ˜μ •ν• λ•Œ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§λ§Œμ„ μˆ˜μ •ν•  수 μ—†κ³  λ‹€λ₯Έ λ‘œμ§λ“€λ„ ν•¨κ»˜ μˆ˜μ •λ˜μ–΄μ•Ό ν•˜λŠ” κ²½μš°λ“€μ΄ μƒκΉλ‹ˆλ‹€.

κ·Έλž˜μ„œ μ΅œκ·Όμ—λŠ” Layerλ₯Ό ν•˜λ‚˜ 더 λ‚˜λˆˆ 4 Tier μ•„ν‚€ν…μ²˜ ( Presentation - Service - Domain - InfraStructure )κ°€ λ“±μž₯ν•˜κ²Œ λ©λ‹ˆλ‹€. (μ΄λŠ” DDD (Domain Driven Design) 같은 κ³³μ—μ„œ μ‚¬μš©ν•œλ‹€κ³  ν•œλ‹€. )

 

3. Data Access Layer

λ°μ΄ν„°λ² μ΄μŠ€μ™€ 그것에 μ•‘μ„ΈμŠ€ν•΄μ„œ μ½κ±°λ‚˜ μ“°λŠ” 것을 κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ ν¬ν•¨ν•œλ‹€. Application이 μ²˜λ¦¬ν•˜λŠ” λͺ¨λ“  정보λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.

 

 

μ΄λŸ¬ν•œ 3Layered Architecture μ—λŠ” 

 

https://velog.io/@jhp1115/3-tier-Layered-Architecture와-MVC

 

 

 λ‹€μŒκ³Ό 같이 MVC νŒ¨ν„΄μ΄ κ·Έ κ΅¬μ„±μš”μ†Œλ‘œμ¨ λ“€μ–΄κ°ˆ 수 있게 λ©λ‹ˆλ‹€.

Model은 데이터와 κ΄€λ ¨λœ λΆ€λΆ„μœΌλ‘œ. 데이터와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΄€λ¦¬ν•©λ‹ˆλ‹€. κ·Έλ ‡λ‹€λ©΄ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ— λ§žμΆ°μ„œ 데이터λ₯Ό μ²˜λ¦¬ν•˜λŠ” Business(Domain) Layer에 μ†ν•œλ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ViewλŠ” μ‚¬μš©μžμ—κ²Œ λ³΄μ—¬μ§€λŠ” 뢀뢄이닀. 그렇기에 μ‚¬μš©μžμ™€μ˜ μƒν˜Έμž‘μš©μ„ ν†΅ν•΄μ„œ 정보λ₯Ό ν‘œμ‹œν•΄μ£Όκ³  정보λ₯Ό κ°€μ Έμ˜€λŠ” Presentation Layer에 μ†ν•œλ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

 

ControllerλŠ” μ‚¬μš©μžμ˜ μž…λ ₯된 Domain을 DTO둜 λ³€ν™˜ν•˜λŠ” λ“±μ˜ μ²˜λ¦¬ν•˜κ³  Modelκ³Ό Viewλ₯Ό μ΄μ–΄μ€˜μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— Presentation Layer에 μ†ν•œλ‹€κ³  λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€

 

 

πŸ“Œ Layered Architecture의 μž₯단점

μž₯점

  • κ΄€μ‹¬μ‚¬μ˜ 뢄리 - 각 κ°œλ³„ ꡬ성 μš”μ†Œμ˜ 단일 μ±…μž„μ„ 보μž₯. ( 쒅속성 μ €ν•˜ )
  • ν…ŒμŠ€νŠΈκ°€ 쉬움 - λͺ¨λ“  Layerκ°€ κ°œλ³„μ μœΌλ‘œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ‘œ 컀버될 수 있고 νŠΉμ • Layer에 μ†ν•œ κ΅¬μ„±μš”μ†Œλ„ λΆ„λ¦¬λ˜μ–΄ μžˆμ–΄ κ°œλ³„μ  ν…ŒμŠ€νŠΈκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€.
  • 격리 - 각 Layerκ°€ λ‹€λ₯Έ Layer와 λ…λ¦½μ μ΄μ–΄μ„œ λ³€κ²½ 사항이 λ‹€λ₯Έ Layer둜 영ν–₯을 λΌμΉ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

단점

  • ν™•μž₯μ„± - μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ³΅μž‘λ„κ°€ μ¦κ°€ν•˜κ³  ν”„λ‘œμ νŠΈμ— 더 λ§Žμ€ κΈ°λŠ₯을 μΆ”κ°€ν•΄μ•Όν•˜λŠ” 경우 ν™•μž₯ν•˜λŠ”λ° λΉ„μš©μ΄ ν½λ‹ˆλ‹€. (λͺ¨λ†€λ¦¬μ‹ κ΅¬ν˜„ κ²½ν–₯)
  • μƒν˜Έ μ˜μ‘΄μ„± - ν•˜λ‚˜μ˜ 계측이 데이터 μˆ˜μ‹ μ„ μœ„ν•΄μ„  μƒμœ„ Layer에 μ˜μ‘΄ν•˜κΈ°μ— μƒν˜Έ μ˜μ‘΄μ„±μ΄ μ‘΄μž¬ν•©λ‹ˆλ‹€.
  • 배포 - νŠΉμ • Layer에 λŒ€ν•œ 변경은 전체 μ‹œμŠ€ν…œμ„ μž¬λ°°ν¬ν•΄μ•Ό 함을 μ˜λ―Έν•©λ‹ˆλ‹€. ( 큰 Application의 경우 더 λ¬Έμ œκ°€ λ©λ‹ˆλ‹€. )
  • μ„±λŠ₯ - λΉ„μ¦ˆλ‹ˆμŠ€ μš”μ²­μ„ μ΄ν–‰ν•˜κΈ° μœ„ν•΄ Architecture의 μ—¬λŸ¬ Layerλ₯Ό 거쳐야 ν•˜λŠ” λΉ„νš¨μœ¨μ„±μœΌλ‘œ 인해 κ³ μ„±λŠ₯ Appication에 μ ν•©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. (λ³‘λ ¬μ²˜λ¦¬κ°€ λΆˆκ°€λŠ₯)

 

 

 

 

 

좜처 : 

https://gnuoyus.tistory.com/70