CS

[마이크로서비스 이해하기] 1. 마이크로서비스란?

서머스 2025. 2. 10. 00:12

DDD란?

 

마이크로서비스

시장변화에 빠르게 대처하고, 항상 안정적이며, 비용 최적화를 할 수 있는 제품/서비스를 제공한다.

- 서비스를 잘게 쪼갠 뒤, API로만 통신하도록 한다.

 

-> 마이크로서비스를 구현하기 위해 필요한 방법론 => DDD

- 서비스를 나누는 기준

 

마이크로서비스로 나누어서 설계하고 개발하는 방법론

비즈니스 도메인 중심으로 마이크로서비스를 나누고 설계하여 개발할 수 있는 일련의 방법론을 제공한다.

 

마이크로서비스를 개발, 배포, 운영할 수 있는 아키텍처 -> MSA(Microservice Architecture)

 

마이크로서비스를 운영할 시 발생할 수 있는 이슈를 해결하기 -> 마이크로서비스 패턴

 

마이크로서비스의 문제점

Complex

Consistency

 

 

 

DDD

Domain Driven Design의 준말

무엇을 기준으로 서비스를 나눌 것인가? -> Domain

도메인 주도 설계

비즈니스 도메인에 깊이 집중하여 이를 기반으로 소프트웨어를 설계하는 방법론

즉, 비즈니스 요구사항을 도메인 모델로 표현하고, 이를 통해 도메인의 책임과 역할을 명확히 반영하는 것을 목표로 한다.

 

 

Domain이란?

어플리케이션 내의 로직들이 관여하는 정보와 활동의 영역

비즈니스 도메인을 일컫는다.

 

비즈니스 도메인은 유사한 업무의 집합을 의미한다.

 

ex. 회원 도메인

-> 회원 가입, 회원 탈퇴..

회원과 관련한 일련의 작업들.

회원 == 도메인

 

DDD의 세가지 주요 원리

  1. 핵심 도메인과 그 기능에 집중하라.
  2. 도메인의 모델을 정교하게 구축하라.
  3. 어플리케이션 모델을 발전시키고 새롭게 생기는 도메인 관련 이슈를 해결하기 위해 도메인 전문가와 끊임없이 협력하라.

 

DDD의 핵심 목표

Loosely coupling

High cohesion

 

Strategic Design(전략적 설계)

도메인을 어떻게 나눌 것인가?

 

비즈니스 도메인을 매핑하고 도메인 모델에 대해 경계가 있는 컨텍스트 정의

Context에 대해 생각하고 이를 기준으로 디자인하는 것을 말한다.

같은 사물이나 행동 양상이 어떠한 상황에 벌어지냐에 따라 다른 것으로 간주될 수 있다. 이렇게 상황에 집중하여 디자인을 하는 것을 의미한다.

 

 

Tatical Design

개발을 위한 구체적 설계(전술적 설계)

더 상세하게 도메인 모델의 구현영역 정의

 

Ubiquitous Language

개발자, 비즈니스 담당자 등 참여자들이 동일한 의미로 해석하는 언어이다.

같은 언어여도 직군에 따라 그 의미가 다를 수 있기 때문에 오해를 최소화하기 위해 '공통 언어' 사용이 필요하다.

<- Event Storming 등을 통해 핵심 용어(Entity, Event, 명령)를 뽑아낸다.

 

-> 이러한 Ubiquitous Language를 적용하여 문서와 회의, 코드에서도 동일한 용어를 사용하도록 한다.

 

 

 

Event Storming

비즈니스 도메인 내에서 일어나는 것을 찾아 Bounded Context를 식별하는 방법론

 

 

Bounded Context

Biz Domain의 사용자, 프로세스, 정책/규정 등을 고유한 비즈니스 목적별로 그룹핑한 것이다.

전체 도메인 모델의 경계를 정의하고 관리하는 더 큰 단위

같은 '상품'이라는 개념도 하위 도메인마다 다른 의미를 가질 수 있다.

* 카탈로그 도메인에서의 '상품' -> 상품 이미지, 상품 설명, 가격 등 마케팅과 관련된 정보로 정의될 수 있다.

* 재고 관리 도메인에서의 '상품' -> 재고를 추적하기 위한 개별 객체로, 물리적으로 존재하는 상품을 관리하는 용어로 쓰일 수 있다.

이처럼 동일한 용어라도 서로 다른 하위 도메인에서 의미가 달라지기 때문에, Bounded Context는 각 도메인이 독립적으로 동작할 수 있도록 도메인간의 경계를 설정하고 관리하는 역할을 한다.

 

 

 

 

[ 참고 ]

 

https://steemit.com/kr/@frontalnh/domain-driven-design

 

Domain Driven Design 이란 무엇인가? — Steemit

Domain Driven Design 이란 무엇인가 먼저, 도메인이란 무엇일까요 도메인의 사전적 의미는 "정보와 활동의 영역" 을 말하며, 흔히 프로그래머들에게는 어플리케이션 내의 로직들이 관여하는 정보와

steemit.com

 

https://happycloud-lee.tistory.com/94

 

DDD 핵심만 빠르게 이해하기

마이크로서비스의 설계 방법론인 DDD(Domain Driven Design)에 대해 제가 가진 지식과 그간의 경험을 기반으로 정리하였습니다. 이 글을 읽기 전에 먼저 일하는 방식 변화를 이끌고 있는 애자일, 마이

happycloud-lee.tistory.com

https://strong-park.tistory.com/entry/DDD-%EC%9E%85%EB%AC%B8%EC%84%9C%EB%A5%BC-%EC%9D%BD%EA%B3%A0-%EB%82%98%EC%84%9C-%EB%8A%90%EB%82%80-DDD%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

DDD 입문서를 읽고 나서 느낀 DDD란 무엇인가?

최근 2달간 면접에서 DDD에 대한 질문을 받고나서, DDD에 대해 알아봐야겠다고 생각했습니다.카카오뱅크, 힐링페이퍼, 뉴플로이 회사에서 총 3번 정도 DDD 질문을 받고 나니 그 필요성을 느끼게 되

strong-park.tistory.com

 

'CS' 카테고리의 다른 글

SSL 인증서 체인이란?  (0) 2025.01.18
Base64란?  (1) 2024.09.27
Graph  (0) 2022.10.08
HTTP와 HTTPS  (0) 2022.10.08
Network 기본  (0) 2022.10.07