TIL

23/12/03 TIL __ 3계측 아킀텍쳐

GABOJOK 2023. 12. 3. 23:29

 

 

🐣 상황

3계측 아킀텍쳐.. 말만 λ“€μ–΄μ™”λŠ”λ°,

λ“œλ””μ–΄ 이뢀뢄에 λŒ€ν•΄ μ•Œκ²Œλ˜μ–΄ μ •λ¦¬ν•œλ‹€. 

 

 


 

🀍  3계측 아킀텍쳐

 

          1. mvc νŒ¨ν„΄

          2. 클린 아킀텍쳐 νŒ¨ν„΄

          3. 마이크둜 μ„œλΉ„μŠ€ 아킀텍쳐 νŒ¨ν„΄

          4. κ³„μΈ΅ν˜• 아킀텍쳐 νŒ¨ν„΄

 

 

일단 μ΄μ •λ„λ‘œ κ°„λž΅νžˆ μ‚΄νŽ΄λ³΄κ³ , κ·Έμ€‘μ—μ„œ κ³„μΈ΅ν˜• 아킀텍쳐 νŒ¨ν„΄μ— λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄μž. 

 

 

 

 

🚍   MVC νŒ¨ν„΄

  • μ†Œν”„νŠΈμ›¨μ–΄ λ””μžμΈ νŒ¨ν„΄ 쀑 ν•˜λ‚˜
  • λͺ¨λΈ: λ°μ΄ν„°λ² μ΄μŠ€μ™€ λΉ„μ§€λ‹ˆμŠ€ 둜직
  • λ·° : μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ UI λ‹΄λ‹Ή
  • 컨트둀러 : ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ λͺ¨λΈκ³Ό 뷰둜 전달해 μ£ΌλŠ” μ—­ν• .

 

  • μ»¨νŠΈλ‘€λŸ¬λŠ” μ‚¬μš©μžμ˜ μš”μ²­μ„ ν•΄μ„ν•˜κ³  그에 λ”°λ₯Έ 행동을 κ²°μ •ν•˜λŠ” 역할을 μˆ˜ν–‰
  • μ»¨νŠΈλ‘€λŸ¬λŠ” λͺ¨λΈκ³Ό λ·° 사이 쀑간 맀개체 μ—­ν• 
  • μ˜ˆμ „μ— ν”„λ‘ νŠΈμ™€ 백이 ν•˜λ‚˜μ˜ νŒŒμΌμ—μ„œ κ΄€λ¦¬λ˜λ˜ λ•Œ λ‚˜μ˜΄.
  • λ°±μ—”λ“œ 아킀택쳐 이긴 ν•˜μ§€λ§Œ 백만 μžˆλŠ”κ±° μ•„λ‹˜.
 
 

πŸ“·   ν΄λ¦° 아킀텍쳐 νŒ¨ν„΄( the clean Architecture)

  • μ˜μ‘΄μ„±μ΄ μ™ΈλΆ€μ—μ„œ λ‚΄λΆ€λ‘œ ν˜λŸ¬κ°„λ‹€.
  • μ΅œμ’… 핡심
  • λ‘œμ§μ€ 제일 μ•ˆμͺ½μž„.
  • ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­ 처리, λ°μ΄ν„°λ² μ΄μŠ€ μ‘°μž‘, μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Όμ˜ 톡신은 μ™ΈλΆ€ κ³„μΈ΅μ—μ„œ 처리
  • μ†Œν”„νŠΈμ›¨μ–΄μ˜ μœ μ§€λ³΄μˆ˜μ„±κ³Ό ν™•μž₯성을 ν–₯μƒμ‹œν‚€λŠ” 것이 μ£Όμš” λͺ©ν‘œ
  • κ³„μΈ΅ν˜• 아킀텍쳐 μ‚¬μš©ν•˜λ©΄μ„œ λ§Œλ‚œ λ¬Έμ œλ“€μ„ 클린 아킀텍쳐 νŒ¨ν„΄μœΌλ‘œ μ’‹μ•„μ§ˆ 수 μžˆλ‹€κ³  ν•œλ‹€. 

클린 아킀텍쳐 νŒ¨ν„΄κ³Ό, κ³„μΈ΅ν˜• 아킀텍쳐 νŒ¨ν„΄μ˜ 차이점.

클린 아킀텍쳐 νŒ¨ν„΄
    > κ³ μˆ˜μ€€ λͺ¨λ“ˆμ΄ μ €μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , λ‘˜λ‹€ 좔상화에 μ˜μ‘΄ν•˜λ„λ‘ μž₯λ €
    > μ™ΈλΆ€λ‘œλΆ€ν„° λ‚΄λΆ€λ‘œμ˜ μ˜μ‘΄μ„± μ΅œμ†Œν™”. μ™ΈλΆ€ μš”μ†Œμ— 독립적 λ‚΄λΆ€ ꡬ쑰λ₯Ό λ§Œλ“œλŠ”λ° 초점.
    > λ‚΄λΆ€μš”μ†Œμ™€ μ™ΈλΆ€μš”μ†Œ μ‚¬μ΄μ˜ 경계λ₯Ό 관리. μΈν„°νŽ˜μ΄μŠ€λ₯Ό 톡해 뢄리.
    > 즉 μ™ΈλΆ€ μš”μ†Œμ˜ 변화에 덜 λ―Όκ°ν•œ 내뢀ꡬ쑰 λ§Œλ“ λ‹€.
    > 경계λ₯Ό λͺ…ν™•νžˆ. 
    > μ™ΈλΆ€λ³€ν™”κ°€ 내뢀ꡬ쑰에 λ―ΈμΉ˜λŠ” 영ν–₯을 μ΅œμ†Œν™”.
    

κ³„μΈ΅ν˜• 아킀텍쳐 νŒ¨ν„΄
    > λͺ¨λ“ˆν™” 되고, λΆ„λ¦¬λœ μ‹œμŠ€ν…œμ„ λ§Œλ“œλŠ”λ° 쀑점.
    > κ·ΈλŸ¬λ‚˜ κ³ μˆ˜μ€€ λͺ¨λ“ˆμ΄ μ €μˆ˜μ€€ λͺ¨λ“ˆμ— μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , λ‘˜λ‹€ 좔상화에 μ˜μ‘΄ν•˜λ„λ‘ μž₯λ € ν•˜μ§„ μ•ŠμŒ.
    > 순차적 μ˜μ‘΄κ΄€κ³„. μœ„κ³„μΈ΅μ΄ λ°”λ‘œ μ•„λž˜ 계측에 의쑴. κ·ΈλŸ¬λ‚˜ μœ„λ‘œλŠ” μ˜μ‘΄ν•˜μ§€ μ•Šλ„λ‘. 
    > 각 계측이 νŠΉμ •ν•œ μ—­ν• κ³Ό μ±…μž„μ„ 가짐.
    > κ³„μΈ΅κ°„μ˜ μƒν˜Έ μ˜μ‘΄μ„±μ„ λͺ…ν™•ν•˜κ²Œ μ„€μ •ν•˜λŠ”λ° μ΄ˆμ μ„ 맞좀.
    > μ™ΈλΆ€ λ³€ν™”μ‹œ 내뢀에 λ³€ν™”κ°€ μ „νŒŒλ˜λŠ” κ²½ν–₯ 있음.

 

 

 

🐣   λ§ˆμ΄ν¬λ‘œ μ„œλΉ„μŠ€ 아킀텍쳐 νŒ¨ν„΄ (Microservices Architecture Pattern)

  • MSA 라고도 뢈림.
  • μž‘κ³  독립적인 μ„œλΉ„μŠ€λ‘œ λΆ„ν™œ. 각 μ„œλΉ„μŠ€λŠ” νŠΉμ • λΉ„μ§€λ‹ˆμŠ€ κΈ°λŠ₯ λ‹΄λ‹Ή, 독립적 배포 ν™•μž₯ 관리..
  • μ‹œμŠ€ν…œμ„ μž‘κ³ , λ…λ¦½μ μœΌλ‘œ 배포 κ°€λŠ₯ν•œ μ„œλΉ„μŠ€λ‘œ λΆ„ν• ν•˜λŠ” νŒ¨ν„΄
  • μƒν˜Έ μ˜μ‘΄μ„± μ΅œμ†Œν™”.
  • 각 μ„œλΉ„μŠ€λ“€μ΄ λ‹€λ₯Έ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•΄λ„ 상관 μ—†μŒ.
  • 각 μ„œλΉ„μŠ€κ°€ μ„œλ‘œ λ‹€λ₯Έ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 선택해도 상관 μ—†μŒ.
  • μ„œλΉ„μŠ€κ°€ λ…λ¦½μ μœΌλ‘œ μ„ νƒν•œ 졜적의 κΈ°μˆ μ„ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•œλ‹€.
  • ν•˜λ‚˜μ˜ μ‹œμŠ€ν…œμ—μ„œ λ‹€μ–‘ν•œ 언어와 ν”„λ ˆμž„μ›Œν¬λ₯Ό λ„μž…ν•  수 μžˆλŠ” νŒ¨ν„΄
  • λΉ„λŒ€ν•œ μ„œλΉ„μŠ€λ₯Ό μž‘κ²Œ μž‘κ²Œ μœ μ§€ν•˜κΈ°μ— μ•„μ£Ό 쒋은 νŒ¨ν„΄μž„.
  • μ„œλΉ„μŠ€ κ°„μ˜ 톡신은 API λ˜λŠ” 이벀트 기반 μ•„ν‚€ν…μ²˜(EDA, Event Driven Architecture)λ₯Ό 톡해 톡신.
  • μ–΄λ–€ μ–Έμ–΄λ₯Ό μ‚¬μš©ν•˜λ˜ 각각 μ„œλΉ„μŠ€ λ§ˆλ‹€ μž‘κ²Œ μž‘κ²Œ κ΅¬ν˜„λ˜λŠ” μž₯점이 있음.

 

 


 

 

 

πŸš—   κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜ νŒ¨ν„΄(Layered Architectur Pattern)

 

  • ν˜„μž¬ κ°€μž₯ 널리 μ±„νƒλ˜κ³  μžˆλŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄.
  • λ‹¨μˆœν•˜λ©΄μ„œ λŒ€μ€‘μ , λΉ„μš©λ„ 적게 λ“€μ–΄μ„œ  ν‘œμ€€ 아킀텍쳐 라고 ν•  수 있음.
  • μ–΄λ–€ μ–Έμ–΄λ₯Ό μ“°λ˜, μ–΄λ–€ ν”„λ ˆμž„ μ›Œν¬λ₯Ό μ‚¬μš©ν•˜λ˜ 이 νŒ¨ν„΄μ„ μ‚¬μš©ν•˜λ©΄, ν•΄λ‹Ή μ½”λ“œκ°€ λŒ€λž΅μ μœΌλ‘œ μ–΄λ–€ 역할을 ν•˜λŠ”μ§€ 인지할 수 있게 됨.
  • κ³„μΈ΅ν™”μ˜ 핡심 __ 각 계측이 높은 응집도λ₯Ό κ°€μ§€λ©΄μ„œ, λ‹€λ₯Έ κ³„μΈ΅κ³ΌλŠ” 결합도λ₯Ό μ΅œμ†Œν™” ν•˜λŠ” 것.
  • 각 계측을 λͺ…ν™•ν•˜κ²Œ 뢄리해 μœ μ§€ν•¨.
  • 각 계측이 μžμ‹ μ˜ λ°”λ‘œ μ•„λž˜ κ³„μΈ΅μ—λ§Œ μ˜μ‘΄ν•˜κ²Œ λ§Œλ“œλŠ”κ²Œ λͺ©ν‘œμž„.
  • 각 계측은 λ°”λ‘œ μ•„λž˜ κ³„μΈ΅κ³Όλ§Œ μƒν˜Έμž‘μš© ν•˜λ©°, μœ„ κ³„μΈ΅μ—λ§Œ μ„œλΉ„μŠ€ 제곡.
  • μƒμœ„κ³„μΈ΅μ€ ν•˜μœ„κ³„μΈ΅ μ‚¬μš© κ°€λŠ₯
  • ν•˜μœ„κ³„μΈ΅μ€ μžμ‹ μ΄ μ–΄λ–€ μƒμœ„ 계측에 μ†ν•˜λŠ”μ§€ μ•Œ ν•„μš” 없이 λ…λ¦½μ ‘μœΌλ‘œ λ™μž‘ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€. 
  • 이런 뢄리 κ΅¬μ‘°λŠ” μ‹œμŠ€ν…œμ„ 더 λͺ¨λ“ˆν™” ν•˜κ³ ,
  • 변경사항 λ°œμƒμ‹œ, 영ν–₯을 μ΅œμ†Œν™” ν•΄ μœ μ§€λ³΄μˆ˜μ™€ ν™•μž₯성을 높인닀.
  • μ•„λž˜ κ³„μΈ΅μ—λŠ” μ˜μ‘΄ν•˜λ©°, μœ„λ‘œλŠ” 의쑴 ν•˜μ§€ μ•ŠλŠ”λ‹€. 즉 순차적 μ˜μ‘΄μ„± 관계.
  • 각 계측이 νŠΉμ •ν•œ μ—­ν• κ³Ό μ±…μž„μ„ 가지도둝 함.
  • 각 κ³„μΈ΅λ³„λ‘œ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆμ–΄ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό 쒀더 μš©μ΄ν•˜κ²Œ ꡬ성 κ°€λŠ₯.

 

 

 

1. ν‘œν˜„κ³„μΈ΅ Presentation Layer  __ 컨트둀러

  • μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ UIλ₯Ό 처리.
  • μ‚¬μš©μžμ™€ μ‹œμŠ€ν…œκ°„ μƒν˜Έμž‘μš© λ‹΄λ‹Ή.
  • μ›Ή λΈŒλΌμš°μ €λ‚˜ μ•±μ˜ UI 뢀뢄이 여기에 ν•΄λ‹Ή
  • μž…λ ₯을 받아듀이고, 정보λ₯Ό ν‘œμ‹œν•˜λŠ” μ—­ν• .
  • μš”μ²­ μˆ˜μ‹ ν›„ κ²°κ³Ό λ°˜ν™˜ν•˜λŠ” μ—­ν• μž„.
  • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ κ°€μž₯ 처음 λ§Œλ‚˜κ²Œ λ˜λŠ” λΆ€λΆ„
  • λΌμš°ν„°λ„ 여기에 ν•΄λ‹Ήν•œλ‹€ λ³Ό 수 μžˆλ‹€.
    • λΌμš°ν„°λŠ” 주둜 ν‘œν˜„ 계측(Presentation Layer)에 μ†ν•˜λ©°, ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ„ 받아듀이고 μš”μ²­λœ URL 및 HTTP λ©”μ†Œλ“œμ— 따라 μ μ ˆν•œ 컨트둀러둜 λΌμš°νŒ…ν•˜λŠ” 역할을 μˆ˜ν–‰ν•©λ‹ˆλ‹€. λΌμš°ν„°λŠ” μš”μ²­μ„ λ°›μ•„λ“€μ—¬ 이λ₯Ό ν•΄λ‹Ήν•˜λŠ” 컨트둀러둜 μ „λ‹¬ν•˜μ—¬ λΉ„μ¦ˆλ‹ˆμŠ€ 둜직이 μ‹€ν–‰λ˜λ„λ‘ ν•˜λ©°, κ·Έ κ²°κ³Όλ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • ν•˜μœ„ κ³„μΈ΅μ˜ 내뢀ꡬ쑰에 λŒ€ν•΄ 신경쓰지 μ•ŠλŠ”λ‹€.
  • 외뢀에 곡개된 λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•˜κΈ°λ§Œ ν•˜λ©΄ 됨.
  • 이게 κ°€λŠ₯ν•œ μ΄μœ λŠ” μΆ”μƒν™”μ˜ νŠΉμ„± 덕뢄.
  • μ„œλΉ„μŠ€ κ³„μΈ΅μœΌλ‘œ μ „λ‹¬λ§Œ ν•˜λ©΄ 됨.
  • μ„œλΉ„μŠ€ 계측이 μ–΄λ–€ λ‚΄λΆ€κ΅¬μ‘°λ‘œ λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ„ μˆ˜ν–‰ν•˜λŠ”μ§€λŠ” 컨트둀러 κ³„μΈ΅μ—κ²Œ μ€‘μš”ν•˜μ§€ μ•ŠμŒ
  • ν•˜μœ„κ³„μΈ΅μΈ μ„œλΉ„μŠ€ 계측, μ €μž₯μ†Œ κ³„μΈ΅μ—μ„œ λ°œμƒν•˜λŠ” μ˜ˆμ™Έλ₯Ό 처리.
  • ν΄λΌμ΄μ–ΈνŠΈκ°€ μ „λ‹¬ν•œ 데이터에 λŒ€ν•œ μœ νš¨μ„± 검증 κΈ°λŠ₯ μˆ˜ν–‰.
  • μš”μ²­ μ²˜λ¦¬ν›„ μ„œλ²„μ—μ„œ 처리된 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•¨.

 

 

2.  μ„œλΉ„μŠ€ 계측 Business Layer __ μ„œλΉ„μŠ€

  • Application Layer(μ‘μš©κ³„μΈ΅) κ³Ό , Domain Layer(도메인 계측)을 ν¬κ΄„ν•˜κ±°λ‚˜ 단일화 ν•˜λŠ” μš©μ–΄λ‘œ Business Layerκ°€ μ‚¬μš©
  • 핡심 둜직이 μž‘μ„±λ˜λŠ” λΆ€λΆ„
  • νšŒμ›κ°€μž… 및 λ‘œκ·ΈμΈμ„ 예둜 λ“€μžλ©΄ μ‚¬μš©μž 인증등
  • μ„œλΉ„μŠ€ 계측 ν•΅μ‹¬ λΉ„μ§€λ‹ˆμŠ€λ‘œμ§, μ •λ ¬, 받은 데이터 κ°€κ³΅ν•΄μ„œ μ€‘μš”ν•œ μ •λ³΄λ…ΈμΆœ μ•ˆλ˜λ„λ‘ ν•˜λŠ”κ²ƒλ„ λΉ„μ§€λ‹ˆμŠ€ 둜직 쀑 ν•˜λ‚˜.
  • λΉ„μ§€λ‹ˆμŠ€ μ˜μ—­κ³Ό κ΄€λ ¨λœ λͺ¨λ“  둜직과 ν”„λ‘œμ„ΈμŠ€λ₯Ό λ‹΄λ‹Ήν•œλ‹€.
  • ν”„λ ˆμ  ν…Œμ΄μ…˜ 계측과 데이터 μ—‘μ„ΈμŠ€ 계측 사이에 쀑간닀리 역할이며, μ„œλ‘œ λ‹€λ₯Έ 두 계측이 직접 ν†΅μ‹ ν•˜μ§€ μ•Šλ„λ‘ λ§Œλ“€μ–΄ μ€€λ‹€.
  • 근데 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 규λͺ¨κ°€ 컀질수둝 μ„œλΉ„μŠ€ κ³„μΈ΅μ˜ μ—­ν• κ³Ό μ½”λ“œμ˜ λ³΅μž‘μ„±λ„ 점점 더 μ»€μ§€κ²Œ λœλ‹€. μ„œλΉ„μŠ€ 계측이 점점 λΉ„λŒ€ν•΄ 질 수 있음.!

 

  • μ„œλΉ„μŠ€ κ³„μΈ΅μ˜ μž₯점
    • μ‚¬μš©μž μœ μ¦ˆμΌ€μ΄μŠ€μ™€ μ›Œν¬ν”Œλ‘œμš°λ₯Ό λͺ…ν™•νžˆ μ΄ν•΄ν•˜κ³ , 이해할 수 μžˆλ„λ‘ λ„μ™€μ€Œ.
    • 즉 κ²Œμ‹œκΈ€ μž‘μ„±λΆ€λΆ„μ˜ μ½”λ“œλ₯Ό 보렀면 클래슀만 보면 됨.
    • λ˜ν•œ λΉ„μ§€λ‹ˆμŠ€ 둜직이 api 뒀에 숨겨져 있음으둜 μ„œλΉ„μŠ€ κ³„μΈ΅μ˜ μ½”λ“œ 자유둭게 μˆ˜μ •ν•˜κ±°λ‚˜ λ¦¬νŽ™ν„°λ§ κ°€λŠ₯.__ λΉ„μ§€λ‹ˆμŠ€ 둜직 μ°ΎκΈ° 쉽고, μˆ˜μ •λ„ κ°„νŽΈν•˜λ‹€λŠ” λ§μž„.
    • ν•˜μœ„κ³„μΈ΅μ— μ €μž₯μ†ŒνŒ¨ν„΄ (Repository Pattern)및 κ°€μ§œ μ €μž₯μ†Œ(Fake Repository)와 μ‘°ν•©ν•˜λ©΄, 높은 μˆ˜μ€€μ˜ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

 

 

  • μ„œλΉ„μŠ€ κ³„μΈ΅μ˜ 단점.
    • μ„œλΉ„μŠ€ 계측 λ˜ν•œ λ‹€λ₯Έ 좔상화 κ³„μΈ΅μž„μœΌλ‘œ 잘λͺ» μ‚¬μš©ν•˜λ©΄ μ½”λ“œμ˜ λ³΅μž‘μ„±μ„ μ¦κ°€μ‹œν‚¬ 수 μžˆλ‹€
    • λ©”μ†Œλ“œλͺ… λͺ…ν™•ν•˜κ²Œ μž‘μ„±ν•΄μ•Όν•¨.
    •  
    • ν•œ μ„œλΉ„μŠ€ 계측이 λ‹€λ₯Έ μ„œλΉ„μŠ€ 계측에 μ˜μ‘΄ν•˜λŠ” 경우 μ˜μ‘΄μ„± 관리가 λ³΅μž‘ν•΄ 진닀.
    • μ˜μ‘΄μ„± 관리에 λŒ€ν•œ λΆ€λΆ„ κ³ λ―Ό
    •  
    • ν•œ μ„œλΉ„μŠ€ 계측에 λ„ˆλ¬΄ λ§Žμ€ κΈ°λŠ₯을 λ„£μœΌλ©΄, λΉˆμ•½ν•œ 도메인 λͺ¨λŒˆκ³Ό 같은 μ•ˆν‹° νŒ¨ν„΄μ΄ 생길 수 μžˆλ‹€.
    • κ³Όν•˜μ§€ μ•Šκ³  적지 μ•Šκ²Œ μ½”λ“œ κ΅¬ν˜„ν•˜κΈ°

 

 

 

 μ’€λ” λ”₯ν•˜κ²Œ λ“€μ–΄κ°€ 보자.

μ‘μš©κ³„μΈ΅ κ³Ό , 도메인 계측에 λŒ€ν•΄ μ‚΄νŽ΄λ³΄μž. 

 

 

 

  • μ‘μš©κ³„μΈ΅ (Application Layer) _ ui와 도메인계측 μ‚¬μ΄μ˜ 맀개체 _
    • μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ UI와 도메인 계측 μ‚¬μ΄μ˜ 맀개체 역할을 ν•œλ‹€.
    • 즉 μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€ UI와 λ°μ΄ν„°λ² μ΄μŠ€ λ˜λŠ” μ™ΈλΆ€ μ‹œμŠ€ν…œ 사이에 μ€‘κ°„κ³„μΈ΅μœΌλ‘œ λ™μž‘.
    • μ‚¬μš©μž μš”μ²­ 받아듀이고, ν•΄λ‹Ή μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•œ 도메인 κ°μ²΄λ‚˜ μ„œλΉ„μŠ€ ν˜ΈμΆœν•˜λŠ” μ—­ν• .
    • 그리고 κ·Έ κ²°κ³Όλ₯Ό μ‚¬μš©μžμ—κ²Œ ν‘œμ‹œν•˜λŠ” 역할을 ν•œλ‹€.
    • λΉ„μ§€λ‹ˆμŠ€ κ·œμΉ™κ³Ό κ΄€λ ¨λœ κΈ°λŠ₯듀을 μ œκ³΅ν•˜λ©°, μ‚¬μš©μž μž…λ ₯에 따라 μ μ ν•œ 도메인 λ‘œμ§μ„ ν˜ΈμΆœν•˜κ±°λ‚˜ μ œμ–΄.

 

  • 도메인 계측 ( Domain Layer)
    • λΉ„μ§€λ‹ˆμŠ€μ˜ 핡심 κ°œλ…μ΄ μ •μ˜λœλ‹€.
    • λΉ„μ§€λ‹ˆμŠ€ 둜직 μ‹€ν–‰, μƒνƒœμœ μ§€, λΉ„μ§€λ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­ 좩쑱을 μœ„ν•œ 둜직 κ΅¬ν˜„.
    • μ£Όλ¬Έ, 고객, μ œν’ˆ 같은 핡심 도메인 객체λ₯Ό 닀루며, μƒν˜Έμž‘μš© μ •μ˜.
    • 데이터 μ—‘μ„ΈμŠ€ 계측(Persistence Layer) λ₯Ό 톡해 λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•˜κΈ° λ•Œλ¬Έμ— μ§μ ‘μ μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€.
    • λ˜ν•œ 도메인 계측 ν…ŒμŠ€νŠΈ μ‹œμ—, λ°μ΄ν„°λ² μ΄μŠ€μ— 직접 μ˜μ‘΄ν•˜μ§€ μ•Šκ³ , κ°€μ§œ λ°μ΄ν„°λ‚˜ λͺ©μ—… 데이터λ₯Ό μ‚¬μš©ν•΄ ν…ŒμŠ€νŠΈ ν•˜κΈ° μ‰¬μ›Œμ§„λ‹€. 

 

 

 

 

λΉ„μ§€λ‹ˆμŠ€ λ‘œμ§μ΄λž€

  • μ†Œν”„νŠΈμ›¨μ–΄κ°€ λΉ„μ§€λ‹ˆμŠ€ μš”ꡬ사항을 μΆ©μ‘±ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” κ³„μ‚°, κ·œμΉ™, ν”„λ‘œμ„ΈμŠ€λ“± μΆ”상적 λΆ€λΆ„ μ˜λ―Έ

    • 1. κ·œμΉ™ λ° μ‘°κ±΄. : νŠΉμ • μ‘°κ±°μ— λ”°λΌ μ‹œμŠ€ν…œ μ–΄λ–»κ²Œ λ™μž‘할지 μ— λŒ€ν•œ κ·œμΉ™. 
      > 예λ₯Όλ“€λ©΄, ꡬ맀 주문이 νŠΉμ • 가격 이상이면, 할인을 μ μš©ν•˜λŠ” κ·œμΉ™ 등이 μžˆκ² λ‹€.

    •  2. μ—°μ‚° 및 계산. : λ°μ΄ν„°λ‚˜ μž…λ ₯에 κΈ°μ΄ˆν•΄ 값을 κ³„μ‚°ν•˜κ±°λ‚˜ μ²˜λ¦¬ν•˜λŠ” 둜직 μ •μ˜.
      > 예λ₯Όλ“€μ–΄ μ‡Όν•‘μΉ΄νŠΈμ—μ„œ μ΄ μ£Όλ¬Έκ°€κ²©μ„ κ³„μ‚°ν•˜λŠ” κ²ƒμ΄ μ—¬κΈ°μ— ν•΄λ‹Ή

    • 3. μ˜ˆμ™Έ μ²˜λ¦¬. : μ˜ˆμƒν•˜μ§€ λͺ»ν•œ μƒν™©μ— λŒ€λΉ„ν•΄μ„œ μ˜ˆμ™Έλ₯Ό μ²˜λ¦¬ν•˜λŠ” κ·œμΉ™ μ •μ˜ν•œλ‹€. 
      >  μ£Όλ¬Έ μ²˜λ¦¬μ€‘ μž¬κ³ λΆ€μ‘±μ΄λ‚˜ 결제였λ₯˜ 같은 상황을 λ‹€λ£¨λŠ” 둜직이 이에 ν•΄λ‹Ή.μ†Œν”„νŠΈμ›¨μ–΄κ°€ λΉ„μ§€λ‹ˆμŠ€ μš”κ΅¬μ‚¬ν•­μ„ μΆ©μ‘±ν•˜κΈ° μœ„ν•΄ μˆ˜ν–‰ν•˜λŠ” 계산, κ·œμΉ™, ν”„λ‘œμ„ΈμŠ€λ“± 좔상적 λΆ€λΆ„ 의미

 

 

3.  μ €μž₯μ†Œ 계측 Persistence Layer (데이터 μ—‘μ„ΈμŠ€ 계측)

  • μ˜μ†μ„± 계측, μ €μž₯μ†Œ 계측
  • λ°μ΄ν„°λ² μ΄μŠ€λ‚˜ μ™ΈλΆ€ μ‹œμŠ€ν…œκ³Όμ˜ μƒν˜Έμž‘μš© λ‹΄λ‹Ή.
  • 데이터 영ꡬ μ €μž₯ 및 검색 처리
  • 데이터 λ² μ΄μŠ€μ— μžˆλŠ” λ‚΄μš©μ— μ ‘κ·Όν•˜κΈ° μœ„ν•΄ db λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” λΆ€λΆ„.
  • μ €μž₯μ†Œ 계측 : 데이터 μ ‘κ·Όκ³Ό κ΄€λ ¨λœ 세뢀사항을 μˆ¨κΈ°λŠ” λ™μ‹œμ—, λ©”λͺ¨λ¦¬ 상에 데이터가 μ‘΄μž¬ν•˜λŠ” κ²ƒμ²˜λŸΌ κ°€μ •ν•˜μ—¬ μ½”λ“œλ₯Ό κ΅¬ν˜„ν•œλ‹€.
  • μ €μž₯μ†Œ 계측을 λ„μž…ν•˜λ©΄, 데이터 μ €μž₯ 방법을 λ”μš± μ‰½κ²Œ λ³€κ²½ κ°€λŠ₯ν•˜λ©°, ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±μ‹œ κ°€μ§œ μ €μž₯μ†Œ(Mock Repository) λ₯Ό μ œκ³΅ν•˜κΈ° 더 μ‰¬μ›Œμ§„λ‹€. μ–˜λ§Œ κ°ˆμ•„λΌμš°λ©΄ λ˜λ‹ˆκΉ.
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‹€λ₯Έ 계측은 μ €μž₯μ†Œμ˜ μ„ΈλΆ€ κ΅¬ν˜„λ°©μ‹μ— λŒ€ν•΄ μ•Œμ§€ λͺ»ν•˜λ”라도 ν•΄λ‹Ή κΈ°λŠ₯을 μ‚¬μš© ν•  수 μžˆλ‹€. 즉 μ €μž₯μ†Œ κ³„μΈ΅μ˜ λ³€κ²½ 사항이 λ‹€λ₯Έ 계측에 영ν–₯을 주지 μ•ŠλŠ”λ‹€.
  • 이건 객체지ν–₯의 κ°œλ…μ€‘ 좔상화와 관련이 μžˆλ‹€.
  • λ˜ν•œ μ €μž₯μ†Œ 계측은 데이터 μ €μž₯μ†Œλ₯Ό κ°„λ‹¨νžˆ 좔상화 ν•œκ²ƒ. 이 계측을 톡해 λͺ¨λΈ 계측과 데이터 계측을 λͺ…ν™•νžˆ 뢄리할 수 μžˆλ‹€.

 

    - μ €μž₯μ†Œ κ³„μΈ΅μ˜ μž₯점
        - 데이터 λͺ¨λΈκ³Ό 데이터 처리 인프라에 λŒ€ν•œ 사항을 뢄리.
        - λ”°λΌμ„œ λ‹¨μœ„ ν…ŒμŠ€λ₯Ό μœ„ν•œ κ°€μ§œ μ €μž₯μ†Œ(Mock Repository)λ₯Ό μ‰½κ²Œ λ§Œλ“€κΈ° κ°€λŠ₯
        - 도메인 λͺ¨λΈ 미리 μž‘μ„±, μ²˜λ¦¬ν•΄μ•Ό ν•  λΉ„μ§€λ‹ˆμŠ€ λ¬Έμ œμ— 더 잘 집쀑할 수 있음.
        - 겍체λ₯Ό ν…Œμ΄λΈ”μ— λ§€ν•‘ν•˜λŠ” 과정을 μ›ν•˜λŠ”λŒ€λ‘œ μ œμ–΄ν•  수 μžˆμ–΄μ„œ db μŠ€ν‚€λ§ˆλ₯Ό λ‹¨μˆœν™” ν•  수 μžˆλ‹€.
        - μ €μž₯μ†Œ 계측에  ORM을 μ‚¬μš©ν•˜λ©΄ μ–΄λ–€κ±Έ μ‚¬μš©ν•˜λ˜ λ‹€λ₯Έ 데이터 베이슀둜 μ‰½κ²Œ μ „ν™˜ κ°€λŠ₯ν•˜λ‹€. 

    - μ €μž₯μ†Œ κ³„μΈ΅μ˜ 단점.
        - μ €μž₯μ†Œ 계측이 없더라도 ORM 은 λͺ¨λΈκ³Ό μ €μž₯μ†Œμ˜ 결합도λ₯Ό μΆ©λΆ„νžˆ μ™„ν™” μ‹œν‚€κΈ° κ°€λŠ₯.
        - orm이 μ—†λ˜ λ•Œμ—λŠ” λŒ€λΆ€λΆ„ μ½”λ“œκ°€ raw query둜 μž‘μ„±λ˜μ—ˆκΈ° λ•Œλ¬Έ.
        - orm 맀핑을 μˆ˜λ™μœΌλ‘œ ν•˜λ €λ©΄ 개발 μ½”μŠ€νŠΈ 더 μ†Œλͺ¨λ¨.

 

 

 


슀파λ₯΄νƒ€ μΈ‘μ—μ„œ μ œκ³΅ν•œ κ°•μ˜μžλ£Œμ— 이런 글이 μžˆμ—ˆλŠ”λ°, 정리가 잘 λ˜μ–΄ κ°€μ Έμ™”λ‹€. 

μ΄ν•΄ν•˜κΈ° 쒀더 쉬웠닀. 

 

 

κ³„μΈ΅ν™”μ˜ 핡심은 κ° 계측이 높은 응집도(Cohesion)λ₯Ό κ°€μ§€λ©΄μ„œ, λ‹€λ₯Έ κ³„μΈ΅κ³ΌλŠ” κ²°ν•©λ„(Coupling)λ₯Ό μ΅œμ†Œν™” ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ μƒμœ„ 계측은 ν•˜μœ„ 계측을 μ‚¬μš©ν•  μˆ˜ μžˆμ§€λ§Œ, ν•˜μœ„ 계측은 μžμ‹ μ΄ μ–΄λ–€ μƒμœ„ 계측에 μ†ν•˜λŠ”μ§€ μ•Œ ν•„μš”μ—†μ΄, λ…λ¦½μ μœΌλ‘œ λ™μž‘ν•  수 μžˆμ–΄μ•Όν•©λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, λ°μ΄ν„° μ—‘μ„ΈμŠ€ 계측 (Data Access Layer)은 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 계측 (Business Logic Layer)에 μ–΄λ–€ μ½”λ“œλ“€μ΄ μžˆλŠ”μ§€ μ•Œ 수 μ‘°μ°¨ μ—†κ³ , μ‚¬μš©ν•˜λ©΄ μ•ˆλœλ‹€λŠ” κ±°κ² μ£ ?

일반적으둜 κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ˜ 경우 κ·œλͺ¨κ°€ μž‘μ€ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 경우 3개의 계측, ν¬κ³  λ³΅μž‘ν•œ κ²½μš°λŠ” κ·Έ μ΄μƒμ˜ κ³„μΈ΅μœΌλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

 

3-Layered Architectureμ—μ„œλŠ” μ•„λž˜μ˜ ν”Œλ‘œμš°.

1️⃣ ν΄λΌμ΄μ–ΈνŠΈ(Client) μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ— μš”μ²­(Request)을 λ³΄λƒ…λ‹ˆλ‹€.
2️⃣ μš”μ²­(Request)을 URL에 μ•Œλ§žμ€ 컨트둀러(Controller)κ°€ μˆ˜μ‹  λ°›μŠ΅λ‹ˆλ‹€.
3️⃣ 컨트둀러(Controller)μš”μ²­μ„ μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄ μ„œλΉ„μŠ€(Service) ν˜ΈμΆœν•©λ‹ˆλ‹€.
4️⃣ μ„œλΉ„μŠ€(Service)λŠ” ν•„μš”ν•œ 데이터λ₯Ό κ°€μ Έμ˜€κΈ° μœ„ν•΄ μ €μž₯μ†Œ(Repository)μ—κ²Œ 데이터λ₯Ό μš”μ²­ν•©λ‹ˆλ‹€
5️⃣ μ„œλΉ„μŠ€(Service)λŠ” μ €μž₯μ†Œ(Repository)μ—μ„œ κ°€μ Έμ˜¨ 데이터λ₯Ό κ°€κ³΅ν•˜μ—¬ 컨트둀러(Controller)μ—κ²Œ 데이터λ₯Ό μ „λ‹¬ν•©λ‹ˆλ‹€.
6️⃣ 컨트둀러(Controller)λŠ” μ„œλΉ„μŠ€(Service)의 κ²°κ³Όλ¬Ό(Response)을 ν΄λΌμ΄μ–ΈνŠΈ(Client)μ—κ²Œ μ „λ‹¬ν•΄μ€λ‹ˆλ‹€.