JiYoung Dev πŸ–₯

[κΈ°μ—…λž©μ‹€] 1일차. 도메인 μ΄ν•΄ν•˜κ³  ꡬ쑰 μ„€κ³„ν•˜κΈ° λ³Έλ¬Έ

full stack

[κΈ°μ—…λž©μ‹€] 1일차. 도메인 μ΄ν•΄ν•˜κ³  ꡬ쑰 μ„€κ³„ν•˜κΈ°

Shinjio 2023. 6. 29. 14:10

🎈 도메인

  • 사전적 의미 : 정보와 ν™œλ™μ˜ μ˜μ—­
  • μ†Œν”„νŠΈμ›¨μ–΄λ‘œ ν•΄κ²°ν•˜κ³ μž ν•˜λŠ” 문제 μ˜μ—­
  • κ°œλ°œν•˜κ³ μž ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ μš”κ΅¬μ‚¬ν•­, 문제 μ˜μ—­
  • ex. μ‡Όν•‘λͺ° νŽ˜μ΄μ§€λ₯Ό λ§Œλ“ λ‹€κ³  ν–ˆμ„ λ•Œ κ²Œμ‹œκΈ€, λŒ“κΈ€, 결제, μ •μ‚°, νšŒμ› 등을 도메인이라고 ν•  수 있음 
  • ν•˜λ‚˜μ˜ 도메인은 λ‹€μ‹œ ν•˜μœ„ λ„λ©”μΈμœΌλ‘œ λ‚˜λˆŒ 수 있음 

 

ν˜Όλ™ν•˜κΈ° μ‰¬μš΄ κ°œλ…λ“€

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” κ°œλ… λͺ¨λΈλ§κ³Ό μœ μ‚¬ν•œ κ°œλ…

- μš”κ΅¬μ‚¬ν•­μ„ λΆ„μ„ν•΄μ„œ 주제 μ˜μ—­μ„ λ„μΆœν•˜κ³  핡심 μ—”ν„°ν‹°λ₯Ό μΆ”μΆœν•˜κ³  κ·Έλ“€ κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜μ—¬ λ°μ΄ν„°μ˜ 골격을 μƒμ„±ν•˜λŠ” 것

 

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ§ν•˜λŠ” 도메인 

- μ†μ„±μ˜ κ°’, νƒ€μž…, μ œμ•½μ‚¬ν•­ 등에 λŒ€ν•œ κ°’μ˜ λ²”μœ„

 

MVCνŒ¨ν„΄μ—μ„œ λ§ν•˜λŠ” 도메인

- λͺ¨λΈμ΄λΌκ³ λ„ ν•˜λ©° ν”„λ‘œκ·Έλž¨μ΄ μž‘μ—…ν•˜λŠ” μ„Έκ³„κ΄€μ˜ μš”μ†Œλ“€μ„ κ°œλ…μ μœΌλ‘œ μ •μ˜ν•œ 것 

 

MVC νŒ¨ν„΄μ—μ„œμ˜ "도메인"은 주둜 λͺ¨λΈ (Model) μ»΄ν¬λ„ŒνŠΈλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
MVC νŒ¨ν„΄μ€ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ„Έ 가지 μ£Όμš” μ»΄ν¬λ„ŒνŠΈλ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€: λͺ¨λΈ(Model), λ·°(View), 컨트둀러(Controller).
μ—¬κΈ°μ„œ λͺ¨λΈμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‹΄λ‹Ήν•˜λ©°, λ„λ©”μΈμ˜ μƒνƒœμ™€ λ™μž‘μ„ ν¬ν•¨ν•©λ‹ˆλ‹€.
MVCμ—μ„œμ˜ "도메인"은 일반적으둜 λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°κ²°λ˜μ–΄ 데이터λ₯Ό μ €μž₯, μˆ˜μ •, κ²€μƒ‰ν•˜κ³ , λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™κ³Ό 도메인 λ‘œμ§μ„ κ΅¬ν˜„ν•˜λŠ” 객체λ₯Ό λ§ν•©λ‹ˆλ‹€. 도메인 λͺ¨λΈμ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 κ°œλ…κ³Ό λΉ„μ¦ˆλ‹ˆμŠ€ ν”„λ‘œμ„ΈμŠ€λ₯Ό ν‘œν˜„ν•˜λŠ” 객체이며, λ°μ΄ν„°λ² μ΄μŠ€μ™€μ˜ μƒν˜Έ μž‘μš©μ„ μ²˜λ¦¬ν•˜κ³  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ™μž‘μ„ μ œμ–΄ν•©λ‹ˆλ‹€.

λ°˜λ©΄μ— 도메인 주도 개발(Domain-Driven Design, DDD)μ—μ„œμ˜ "도메인"은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 μ˜μ—­μ„ λ‚˜νƒ€λ‚΄λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. DDDλŠ” λ³΅μž‘ν•œ 도메인을 μ΄ν•΄ν•˜κ³  λͺ¨λΈλ§ν•˜κΈ° μœ„ν•΄ 도메인 μ „λ¬Έκ°€μ™€μ˜ ν˜‘μ—…μ„ κ°•μ‘°ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ 개발 λ°©λ²•λ‘ μž…λ‹ˆλ‹€. DDDμ—μ„œμ˜ 도메인은 λΉ„μ¦ˆλ‹ˆμŠ€μ˜ 핡심 μ˜μ—­μ„ μ΄ν•΄ν•˜κ³  ν‘œν˜„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” μš©μ–΄μ΄λ©°, 도메인 주도 κ°œλ°œμ€ 도메인 λͺ¨λΈμ„ μ€‘μ‹¬μœΌλ‘œ κ°œλ°œμ„ μ§„ν–‰ν•©λ‹ˆλ‹€.
DDDμ—μ„œμ˜ 도메인 λͺ¨λΈμ€ 도메인에 λŒ€ν•œ 이해와 도메인 μ „λ¬Έκ°€μ™€μ˜ μ†Œν†΅μ„ λ°”νƒ•μœΌλ‘œ 개발되며, 도메인 주도 개발의 핡심 μ•„μ΄λ””μ–΄λŠ” 도메인을 μ€‘μ‹¬μœΌλ‘œ 섀계와 κ΅¬ν˜„μ„ μ΄λŒμ–΄λ‚΄λŠ” κ²ƒμž…λ‹ˆλ‹€. 도메인 주도 κ°œλ°œμ€ λΉ„μ¦ˆλ‹ˆμŠ€ λ„λ©”μΈμ˜ λ³΅μž‘μ„±μ„ ν•΄κ²°ν•˜κ³  도메인 λͺ¨λΈμ„ 효과적으둜 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 도ꡬ와 νŒ¨ν„΄μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

μš”μ•½ν•˜μžλ©΄, MVC νŒ¨ν„΄μ—μ„œμ˜ "도메인"은 λͺ¨λΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό 가리킀며, 주둜 데이터와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λ‹΄λ‹Ήν•©λ‹ˆλ‹€. λ°˜λ©΄μ— DDDμ—μ„œμ˜ "도메인"은 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 핡심 μ˜μ—­μ„ μ˜λ―Έν•˜λ©°, 도메인 주도 κ°œλ°œμ€ 도메인 λͺ¨λΈμ„ μ€‘μ‹¬μœΌλ‘œ 섀계와 κ°œλ°œμ„ μ§„ν–‰ν•©λ‹ˆλ‹€.

좜처 : chatGPT 

 

도메인 μ œμ•½μ‚¬ν•­

도메인 λͺ¨λΈμ— μ μš©λ˜λŠ” κ·œμΉ™κ³Ό μ œν•œ 사항을 μ˜λ―Έν•¨

 

1. 일관성 μ œμ•½μ‚¬ν•­(Consistency Constrains) 

λ„λ©”μΈμ—μ„œ μ •μ˜ν•œ κ·œμΉ™κ³Ό μ œμ•½μ— 따라 λ°μ΄ν„°μ˜ 일관성을 μœ μ§€ν•΄μ•Ό 함

ex. μ£Όλ¬Έ λ„λ©”μΈμ—μ„œ μ£Όλ¬Έ μƒνƒœμ™€ 결제 μƒνƒœκ°€ μΌμΉ˜ν•΄μ•Ό 함 

 

2. 무결성 μ œμ•½μ‚¬ν•­(Integrity Constraints) 

λ„λ©”μΈμ—μ„œ μ •μ˜ν•œ λ°μ΄ν„°μ˜ 무결성을 보μž₯ν•΄μ•Ό 함

ex. μ‚¬μš©μž λ„λ©”μΈμ—μ„œ 이메일 μ£Όμ†ŒλŠ” κ³ μœ ν•΄μ•Ό 함

 

3. λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™ μ œμ•½μ‚¬ν•­(Business Rule Constrains) 

λ„λ©”μΈμ˜ λΉ„μ¦ˆλ‹ˆμŠ€ κ·œμΉ™μ„ λͺ¨λΈμ— λ°˜μ˜ν•΄μ•Ό 함

ex. μ˜ˆμ•½ λ„λ©”μΈμ—μ„œ νŠΉμ • μ΄λ²€νŠΈμ—λŠ” μ΅œλŒ€ μ°Έμ„μž 수 μ œν•œμ΄ 있음

 

4. 도메인 객체 κ°„ 관계 μ œμ•½μ‚¬ν•­(Domain Object Relationship Constrains) 

도메인 객체 κ°„μ˜ 관계λ₯Ό μ •μ˜ν•˜κ³  μœ μ§€ν•΄μ•Ό 함 

ex. 고객 도메인과 μ£Όλ¬Έ 도메인 μ‚¬μ΄μ˜ 관계가 μ‘΄μž¬ν•˜κ³ , 이 관계에 λŒ€ν•œ μ œμ•½μ‚¬ν•­μ΄ μžˆμ„ 수 있음 

 

5. 도메인 이벀트 μ œμ•½μ‚¬ν•­ (Domain Evnet Constrains)

도메인 이벀트λ₯Ό μ •μ˜ν•˜κ³  μ²˜λ¦¬ν•˜λŠ” 규치λ₯Ό 지정해야 함

ex. 주문이 μ™„λ£Œλ˜μ—ˆμ„ λ•Œ 이벀트λ₯Ό λ°œμƒμ‹œν‚€κ³ , 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 도메인 이벀트 ν•Έλ“œλŸ¬λ₯Ό μ œμ•½μ‚¬ν•­μœΌλ‘œ μ •μ˜ν•  수 있음 

 

 

레퍼런슀

μŠ€ν”„λ§ λΆ€νŠΈμ™€ AWS둜 혼자 κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€ 

도메인 주도 개발 μ‹œμž‘ν•˜κΈ°