MSA(Micro Service Architecture) 대한 관심이 날로 높아지고 있는 가운데, Chris Richardson이 2015년 5월 19일에 오픈소스 웹서버인 nginx blog에 올린 MSA관련 Article을 정리해 보고자 합니다. 전체 7가지 에피소드로 구성되어 있습니다. 그 첫번째 이야기입니다. (www.nginx.com/blog/introduction-to-microservices)
<Introduction to Microservices>
Nginx Plus(오픈소스 웹서버 nginx를 이용하여 Enterprise Version으로 개발한 버전)를 사용하여 microservice를 구현하는 article과 information으로 이루어진 E-Book Microservices: From Design to Deployment를 다운로드 받을 수 있다.
Microservices는 article, blog, 소셜 미디어에서의 토론, 컨퍼런스 설명회 등을 통해서 오늘날 많은 주목을 받고 있다. Microservices는 가트너의 하이퍼 사이클 상에서 inflated expectation peak 지점을 향해 빠르게 진입하고 있다. 동시에 소프트웨어 커뮤니티 상에서는 Microservices가 전혀 새로운 것이 아니라는 시큰둥한 반응도 있다. Microservices 반대론자들은 단지 SOA의 다른 이름에 불과하다고 불평하기도 한다. 그러나, 옹호론자이건 회의론자이건 간에 Microservice Architecture Pattern은 특히 agile 개발 방법론과 복잡한 enterprise application을 delivery하는 경우에 굉장한 이점을 가지고 있다.
이 블로그에서 먼저 microservices를 design하고 building, deploying하는 7가지 article을 통해, microservices에 대한 접근법과 전통적인 Monolithic Architecture Pattern과 Microservices Architecture Pattern이 어떻게 다른지 배울 것이다.
7가지 시리즈에서는 microservices architecture의 다양한 요소들을 설명할 것이다. Microservices Architecture Pattern이 여러분의 프로젝트에 적합한지 아닌지와 상관없이 MSA의 장단점에 대해서, MSA를 어떻게 적용할 수 있는지를 배울 것이다.
먼저 첫번째로 왜 Microservice를 사용해야 하는지를 살펴보자.
Building Monolithic Applications (통짜 Application 개발)
Uber와 Hailo와 같은 새로운 택시 호출 서비스 브랜드를 구축하고자 하는 경우를 생각해 보자. 사전 미팅을 통해 요구사항들을 수집한 후에, 수동으로 신규 프로젝트를 생성하거나 Rails나 Spring Boot, Play, Maven을 통해서 자동으로 신규 프로젝트를 생성할 것이다. 이 Application은 다음 그림에서 보는 것처럼 6각형의 모듈 아키텍처를 가지고 있다.
Application의 Core에는 서비스, 도메인 오브젝트, 이벤트를 정의하고 있는 모듈로 구현된 비즈니스 로직이 있다. Core 주변에는 외부 세상과 연동할 수 있는 adapter들이 있다. 예를 들어 adapter들 중에는 database와 연결할 수 있는 adapter, 메시지를 처리할 수 있는 message 컴포넌트 adapter, API를 제공하거나 UI를 구현한 Web 컴포넌트들과 연동하는 adapter들이 있다.
논리적으로는 모듈화된 아키텍처이지만, 이 Application은 하나(monolith)로 패키지되어 배포된다. 실제 포맷은 application의 개발언어나 framework에 달려 있다. 예를 들어 많은 Java Application들은 WAR 파일로 패키지되고, Tomcat이나 Jetty와 같은 Application Server에 배포된다. 다른 Java Application들은 독립적으로 실행가능한 JAR파일로 패키지된다. 유사하게 Rails나 Node.js Application들은 디렉토리 계층 구조(directory hierarchy)로 패키지된다.
이런 형태로 개발된 Application이 거의 대부분이다. 왜냐하면 하나의 Application을 개발하는데 특화된 IDE나 다른 Tool을 이용하여 간단하게 개발할 수 있기 때문이다. 이러한 Application들은 또한 테스트하는 것도 간단하다. 간단히 Application을 실행하여 End-to-End 테스트를 할 수 있다. 그리고 Selenium을 이용하여 UI 테스트도 할 수 있다. Monolithic Application(하나로 만들어진 Application)은 또한 간단하게 배포할 수 있다. 단순히 Application을 복사하여 Server에 옮기기만 하면 된다. 또한 로드밸런서 뒤에 Application을 복사하여 여러 개를 실행함으로 Application을 확장할 수도 있다. 프로젝트 초창기에는 잘 동작할 것이다.
댓글을 달아 주세요
댓글 RSS 주소 : http://www.yongbi.net/rss/comment/745