기록이 힘이다.

4. 마이크로서비스와 애자일 개발 프로세스 본문

IT서적/도메인 주도 설계로 시작하는 마이크로서비스 개발

4. 마이크로서비스와 애자일 개발 프로세스

dev22 2023. 8. 13. 14:28
728x90

마이크로서비스를 만들기 위한 가장 효율적인 프로세스는 실제로 동작하는 제품 중심의 반복/점진적 애자일 개발 프로세스다. 피드백을 통한 지속적인 개선을 추구하는 애자일 프로세스는 가장 효율적인 의사소통 구조와 협업 체계를 가진 다기능 팀을 필요로 하고, 그러한 다기능 팀이 만들어내는 결과물이 '마이트로서비스'다. 2000년대 초반에 일어난 애자일 문화의 확산과 애자일 방법론의 중심 프랙티스(지속적 통합, 데브옵스 등). 그리고 클라우드 인프라, 마이크로서비스 생태계의 발전은 그 흐름을 함께한다고 볼 수 있다. 

그동안 대표적인 애자일 방법론으로 스크럼과 XP 등을 많이 활용해왔다. 그러나 스트럼이나 XP를 살펴보면 개발 문화 및 관리 프로세스에 대해서는 자세히 설명하지만 설계하고 개발하는 엔지니어링 공정에 대해서는 자세히 언급하지 않아 여러 오해를 낳기도 한다. 즉, 개발 문화가 미성숙된 조직에서는 애자일을 활용하면 설계나 관련 산출물을 아예 작성하지 않고 곧바로 개발을 진행할 수 있다고 생각하는 경향이 있다. 그것은 잘못된 생각이다. 

 

애자일에는 빨리, 그리고 자주 실패를 경험해 보는 것이 중요하기 때문에 단순한 설계를 통해 우선 최소한의 실제로 동작하는 제품(MVP)을 만들어 자주 배포하는 것이 중요하다. 또한 이러한 과정을 거치면서 각 개발팀에 맞는 최적의 개발 프로세스를 지속적으로 향상시킬 수 있다. 

 

도메인 주도 설계와 마이크로서비스

마이크로서비스를 도출하고 내부 구조를 설계하는 데 도메인 주도 설계 기법을 활용하는 것이 효과적이다. 

이 책에서는 이러한 DDD 기법을 중심으로 애자일 프로세스와 연계해서 마이크로서비스를 설계 및 개발하는 공정을 설명하고자 한다. 

 

기민한 설계/개발 프로세스

점진/반복적인 스크럼 생명주기

스프린트는 스크럼의 점진, 반복적인 생명주기이며, 보통 1~4주 동안 실행된다. 백로그라는 일감 목록을 기반으로 각 스프린트에 일감이 배분되어 진행되며, 매 스프린트마다 실제로 동작하는 소프트웨어를 시연하고 피드백을 얻는다. 

팀의 속도에 맞춰 스프린트를 진행하다 보면 일정 내에 완료해야 할 일의 우선순위를 정하는 것이 매우 중요해지고, 이는 가장 우선순위가 높은 시스템의 핵심 기능에 집중할 수 있게 해준다. 

 

아키텍처 정의와 마이크로서비스 도출

구현 스프린트를 본격적으로 진행하기 위해서는 준비하고 계획하는 활동이 필요하다. 바로 '아키텍처 정의'와 '마이크로서비스 도출'이다. 

 

스프린트 내 개발 공정

스프린트 내의 공정을 살펴보면 스크럼 팀 멤버인 백엔드 개발자와 프런트엔드 개발자의 역할대로 공정이 나뉜다. 두 영역의 접목은 두 영역 간의 계약인 'API 설계'를 통해 진행되고, 나머지 활동은 각각 내부적으로 진행하게 된다. 

 

백엔드 설계 및 개발

백엔드 설계의 시작은 API 설계다. 

 

이전의 OOAD(Object Oriented Analysis Design) 에서는 UML 등을 활용해 설계 모델을 작성하고 이를 소스코드로 변환하는 작업 등을 진행했으나 DDD를 적용하면 별도의 정형화된 모델을 만들지 않고, 간략히 도메인 모델 등을 화이트보드나 포스트잇 등의 단순한 도구로 작성해서 공유한 후 곧바로 소스코드로 도메인 모델을 개발한다는 것이다. 

 

프렌트엔드 영역 설계와 개발

프런트엔드 영역 설계는 UI 레이아웃을 정의하고 백엔드의 API를 호출해서 API가 보내준 데이터를 기반으로 UI에 어떻게 표현할 것인가를 정의하는 활동이다.