도메인 주도 설계로 시작하는 마이크로서비스 개발 - 4장 마이크로서비스와 애자일 개발 프로세스
4. 마이크로서비스와 애자일 개발 프로세스
애자일 프로세스는 마이크로서비스와 가장 잘 맞는 프로세스이다. 지속적인 개선을 추구하는 애자일 방식이 가장 효과적이라고 많은 곳에서 언급이 되는데, 이는 국내의 현실과는 맞지 않는 부분이 존재한다. 애자일을 추구한다고 말하며 설계 없이 프로젝트 개발을 시작하는 것이 그러한데, 이러한 부분은 실제 애자일이 추구하는 것과는 맞지 않다. 애자일은 설계가 필요 없는 것이 아닌, 산출물을 최소화하는 것이라고 볼 수 있다.
4. 1. 도메인 주도 설계와 마이크로서비스
DDD는 마이크로서비스의 설계와 개발을 위한 주요 가이드로 사용되고 있다. 다음 내용들을 통해 DDD, 애자일을 이용한 MSA를 설명한다.
4. 2. 기민한 설계/개발 프로세스
4. 2. 1. 점진/반복적인 스크럼 생명주기
기본적으로 스크럼의 스프린트를 사용한다. 스프린트는 보통 1~4주간 실행된다. 백로그라는 개발 목록을 각 스프린트로 나눠서 처리하며, 매 스프린트마다 배포하고 피드백을 진행한다.
- 스크럼 팀: 스프린트가 진행되는 팀
- 스크럼 미팅: 매일 아침 각자의 일을 공유하는 짧은 스탠드업 미팅
- 스프린트 계획 수립: 스프린트동안 백로그를 어떻게 분배할 지에 대한 계획 수립
- 시연: 스프린트 내 일들이 모두 구현되었는지 확인
- 회고: 팀원들 스스로 돌아보며 피드백하는 과정
4. 2. 2. 아키텍처 정의와 마이크로서비스 도출
원활한 스프린트 진행을 위해서는 "아키텍처 청의"와 "마이크로서비스 도출"이 필요하다
- 아키텍처 정의: 마이크로서비스 외부/내부 아키텍처를 정의하는 과정
- 마이크로서비스 도출: 개발할 전체 마이크로서비스들을 파악하는 작업
4. 2. 3. 스프린트 내 개발 공정
스프린트 내 작업은 주로 백엔드와 프론트엔드 개발로 나뉜다.
백엔드 설계 및 개발
백엔드 개발은 보통 API 설계, 도메인/데이터 모델링 순으로 진행된다.
API 설계는 프론트엔드와 초기에 API 사양에 대해 협의하여 이를 통해 백엔드와 프론트엔드가 각각 기능을 개발하게 된다.
도메인/데이터 모델링에서는 UML 등을 이용해 설계 후 소스코드로 변환하는 작업이 아닌 간단한 화이트보드 같은 것으로 로 공유하여 개발하는 것이다. 기존의 MDD(Model Driven Development)에서는 모델과 코드가 단절되는 구조지만 DDD에서는 코드가 곧 모델이고 모델이 곧 코드가 된다. 역공학 도구를 이용해 코드로부터 UML 모델을 만들어 낼 수 있다.
프런트엔드 영역 설계와 개발
프런트엔드 개발은 보통 UI 흐름 정의, UI 레이아웃 정의, UI 이벤트 및 액션 정의, UI 개발 순으로 이뤄진다.
- UI 흐름 정의: 시나리오에 따른 UI 흐름 정의. 산출물은 스토리보드라고도 한다.
- UI 레이아웃 정의: UI를 정의하는 활동으로 사용자 경험을 고려하여 설계한다. ppt나 목업 등이 많이 이용된다.
- UI 이벤트 및 액션 정의: 클릭 또는 터치를 했을 때의 액션을 정의한다. 백엔드 API와 연계되는 경우도 많아 같이 정의한 사양을 기준으로 개발한다.
- UI 개발: 위에서 정의한 내용에 맞춰 개발하는 활동.
빌드 및 배포
좋은 품질의 코드를 위해서는 빌드 및 배포가 자동화되어야 한다. 자동화 과정은 보통 프로젝트 초기단계에서 미리 설정을 하며 지속적으로 변경이 될 수 있다. 이를 위한 활동은 다음과 같다.
- 소스코드 리포지토리 구성: 코드를 위한 리포지토리 구성. Gitlab, GitHub, SVN 등이 이용된다.
- 통합 빌드 잡 구성: 리포지토리의 코드들을 통합 후 컴파일 및 테스트하는 것을 자동화하는 활동. Jenkins가 주로 이용되며, Github Actions로도 구성 가능하다.
- 컨테이너 생성 파일 작성: 컨테이너 환경을 위한 컨테이너 생성 파일을 작성하는 활동. 도커의 경우 Dockerfile로 작성한다.
- 배포 스크립트 작성: 빌드된 결과물을 자동으로 배포하는 스크립트를 작성하는 활동. Jenkins, Github Actions를 이용하여 구성 할 수 있다.