티스토리 뷰
[마이크로서비스] 아키텍처 구축하기
마이크로서비스는 서비스를 작게 나누는 것부터 시작한다. 이렇게 서비스를 작게 나누게 되면 여러가지 장점이 있는데 [이 글]에서 마이크로서비스 아키텍처를 이해할 수 있다. 가볍고 탄력적인 서비스를 구축이 필요한 곳에서 이 아키텍처를 도입하고 있다.
물론 장점만 있는 것은 아니다. 그 중에서 단연 러닝커브가 높은 기술적 구현 측면과 요구사항이 바로 그것이다. 아시다시피 서비스가 작게 나눠지면서 개발/네트워킹/보안/배포/모니터링에 이르기까지 해결해야 할 과제가 생긴다.
이 아티클은 개발 영역에 초점을 맞추어 예제 코드가 작성 되었다. 개발 영역을 마이크로서비스화 할 때 적지 않은 부분의 변화가 필요한데, 그 기법과 라이브러리 등도 함께 살펴보면 도움이 될 것 같다.
[https://github.com/powerumc/microservice-architecture-quick-start]
위 소스 코드는 마이크로서비스의 기술적인 측면을 강조하여 예제가 작성이 되었고, 아직 구현되지 않은 부분도 있으니 아래의 체크리스트를 참고하자.
인프라스트럭쳐
오케스트레이션
[ ] Kubernetes
잘 알려진 오케스트레이션 도구인 쿠버네티스다. Yaml 파일을 만들어 제공되지만, 쿠버네티스 환경에서 구동하려면 마스터(master)와 노드(nodes) 머신이 구성되어야 하고, 깃헙으로 예제를 제공하기엔 적절하지 않다고 판단했다. 추후에 기회가 되면 [vagrant] 환경과 [ansible] 을 적용한 코드를 예제로 제공할 예정이다. (그게 언제가 될지…)[x] Docker
잘 알려진 컨테이너 기술이며 가능하다면 이 도구를 필히 마스터 할 필요가 있다.[x] Docker-Compose
여러 개의 Docker 컨테이너를 띄우기 위한 도구이다.
인프라스트럭쳐
[ ] Ocelot
ASP.NET Core 기술로 개발된 API Gateway 이다. 작게 쪼개진 API 서비스를 개발하다 보면 서로 종속적인 관계가 발생할 수 있는데, 그런 관계를 하나의 API Gateway 를 통과하게 함으로써 관리적으로 용이하다. API 관리와 함께 접근제어, 인증/권한, 로깅, 트래픽 제어 등의 역할을 수행한다.[x] NLog
로깅 라이브러리이다.[x] Swagger Integration (Swashbuckle) 코드로 정의한 API 를 문서화 하는 도구이다.
[x] Entity Framework Core Code First
자바의 JPA 의 닷넷 버전이다. 자바의 JPA 가 세상에 나오기 훨씬 전부터 마이크로소프트 주도하에 개발되어온 프레임워크인데, JPA 비해 훨씬 사용성이 좋다. 물론 JPA 만큼 고급 옵션이 준비되어 있지는 않지만, 어지간한 비즈니스 플로우는 모두 구현할 수 있다.[x] TraceId about Request
필자가 개발한 ASP.NET Core 미들웨어이다. 마이크로서비스는 서비스간에 트랜잭션의 추적이 필요한데, 그 트랜잭션을 추적하기 위한 용도로 개발되었다.[x] Guard
간단한 코드 스니펫이다. 보통 new 키워드를 통해 Exception 을 발생하는데, Guard 라는 static class 를 이용하여 인자와 로직을 검증하게 만들었다. 더 고급 개발자라면 [Jetbrains.Annotations] 라이브러리를 이용하는 것도 좋은 선택이다.[ ] AutoMapper
이 라이브러리에는 호출호가 참 많다. 그래서 사용하지 않았는데 앞으로도 사용할 일은 거의 없을 것 같다.[x] Data Protection
먼저 MSDN 의 [이 문서]를 참고해 보면 좋다. 말도 안되게 기계 번역된 페이지를 보면 현기증이 나지만 그래도 끝까지 한번 읽어보자. 결론만 말하자면 개발된 웹 서비스를 분산하고 특정 기능(ASP.NET Core Session 과 같은) 을 사용하려면 데이터 보호 기능을 사용해야 한다. 가령, 웹 서비스를 분산하기 위해 분산 세션 기능을 사용하게 되면 ASP.NET Core 내부적으로 암호화 작업을 하게 되는데 이 때 데이터 보호 기능이 필요하다.[x] Polly
마이크로서비스는 항상 작동하지 않을 수 있다라는 전제가 필요하다. 서비스가 뻗을 수도 있고 응답이 느릴 수도 있다. 이 때 정책적으로 여러 번 재호출 하거나, 일정한 간격을 두고 재시도 하는 등의 정책을 설정할 때 필요하다.
도메인 기반 개발
[x] Aggregate Root
하나의 웹 서비스의 도메인을 분류 하였다면 도메인의 루트가 있을텐데, 이 루트 개체를 총칭하는 용어이다.[ ] ValueObject
DDD 에서는 고유 ID 를 가지지 않는 불변객체를 지칭하는 용어이다.[x] CQRS
필자가 설명하긴 여전히 스터디 단계이므로, 이규원님 블로그의 [이 아티클]을 참고하면 잘 설명되어 있다.[x] Event Sourcing
위 아이클 참고.[x] Event Bus
이벤트 버스는 이벤트가 발생하면 특정 대상으로 이벤트롤 전달하는 패턴을 말한다. 일반적으로 구독/발행 패턴의 구현체가 되는데, 이 패턴을 사용하게 되면 복잡성을 피하고, 컴포넌트간에 커뮤니케이션을 간단하게 구현할 수 있다.[ ] EventBus by RabbitMq
이벤트가 발생하면 RabbitMq 큐(Queue) 로 전달하는 기능이다.[ ] Unit Of Work
마틴 파울로의 [이 글]을 참고한다. 마틴 파울러는 이 패턴은 비즈니스 트랜잭션을 비즈니스 트랜잭션을 관리하고, 동시성 문제를 해결한다고 정의하였다. 일종의 Dispatcher 역할을 한다고 볼 수 있다.
모니터링
[x] Health Check
기본적으로 서버가 살아있는지 상태를 알기 위한 API 이다.[x] App.Metrics
서버의 행동/행위를 측정하기 위한 라이브러리이다.[ ] Grafana
App.Metrics 의 측정 항목을 가시화하기 위한 도구이다.
'Enterprise Architecture > Architecture' 카테고리의 다른 글
AOP 프레임워크 이해와 개발 (0) | 2018.08.28 |
---|---|
개발자도 알아야 할 응용 프로그램 모델링 7/7 - 결론 및 저자 소개 (1) | 2012.08.02 |
개발자도 알아야 할 응용 프로그램 모델링 6/7 - 모델링 확장 (SDK) (0) | 2012.08.02 |
개발자도 알아야 할 응용 프로그램 모델링 5/7 - Visualization & Features Pack (0) | 2012.08.02 |
개발자도 알아야 할 응용 프로그램 모델링 4/7 - 모델링 다이어그램 (0) | 2012.08.02 |
- Total
- 2,841,419
- Today
- 40
- Yesterday
- 71
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
- 엄준일
- Visual Studio 2008
- Team Foundation Server
- .NET Framework 4.0
- github
- MEF
- Visual Studio 2010
- 비주얼 스튜디오 2010
- Visual Studio
- mono
- test
- 땡초
- Silverlight
- .NET
- POWERUMC
- Managed Extensibility Framework
- LINQ
- Team Foundation Server 2010
- Windows 8
- 비주얼 스튜디오
- umc
- TFS
- Visual Studio 11
- 팀 파운데이션 서버
- monodevelop
- ALM
- ASP.NET
- testing
- TFS 2010
- c#
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 |
- 2020/05 (1)
- 2019/10 (3)
- 2018/11 (1)
- 2018/08 (2)
- 2017/04 (1)
- 2017/01 (2)
- 2016/11 (2)
- 2016/08 (1)
- 2016/05 (1)
- 2016/04 (2)
- 2016/02 (2)
- 2016/01 (1)
- 2015/05 (1)
- 2015/04 (2)
- 2015/03 (1)
- 2015/02 (1)
- 2015/01 (1)
- 2014/11 (1)
- 2014/09 (2)
- 2014/08 (2)
- 2014/05 (2)
- 2014/04 (3)
- 2014/03 (2)
- 2014/02 (2)
- 2014/01 (4)
- 2013/12 (2)
- 2013/11 (1)
- 2013/10 (2)
- 2013/09 (6)
- 2013/08 (3)