기본 콘텐츠로 건너뛰기

Hystrix, Hystrix dashboard, Turbine 의 구성

서론 Hystrix 는 Netflix 에서 제공하는 Circuit breaker 모듈이다. Circuit breaker는 차단기를 의미하는데, 전자회로에서 이상 전류의 발생을 중간에서 차단하는 장치이다. 비슷한 의미로 소프트웨어 애플리케이션에서도 사용되는데, 이상 현상이 있는 서비스에 대한 요청을 일시적으로 차단하여 이상 동작을 최소화하도록 처리하는 것을 말한다. 소프트웨어 애플리케이션의 Circuit breaker에 대한 내용은  http://martinfowler.com/bliki/CircuitBreaker.html 에서 확인이 가능하다. 마이크로서비스 아키텍처에서는 Circuit breaker의 역할이 중요하다. 아키텍처 구조상 다양한 통신채널(Rest API 또는 Message bus 등)로 서로 통신을 하게 되는데, 이 과정에서 네트워크 문제 등으로 서로 간의 통신할 수 없는 경우가 많이 있다. 이럴 경우 연쇄적인 오류를 방지한다거나, 문제가 있는 서비스에 계속해서 요청하고 대기하는 등의 작업을 최소화할 필요가 있다. Spring cloud에서는 Ribbon Loadbalancer와 함께 Hystrix를 이용한 Circuit breaker 를 사용하여 이러한 문제를 최대한 단순하게 처리할 수 있도록 제공하고 있다. 이번 포스트는 이 내용을 정리해보고자 한다. 이번 포스트에서 참고한 내용은 아래와 같다. Calistaenterprise 블로그 :  http://callistaenterprise.se/blogg/teknik/2015/04/15/building-microservices-with-spring-cloud-and-netflix-oss-part-2/ Josh Long의 Devoxx 2015 :  https://www.youtube.com/watch?v=SFDYdslOvu8&list=WL&index=3 이번 포스트를 준비하면서 테스트한 환경은 아래와 같다. Configurati...

Edge server와 Ribbon, 그리고 API 구성

서론 여기서 말하는 Edge Server는 다양한 API 서버들을 연결하는 Gatekeeper와 비슷한 역할을 그 주요 기능으로 한다. 이 외에 구성에 따라서는 외부 클라이언트와의 연결에서 Security의 진입점 같은 역할도 하기는 하지만, 그 부분은 다른 포스트에서 정리해볼까 한다. 이번 포스트를 정리할 때 사용한 예제는 대부분을 Calista 블로그의  Building microservices with Spring Cloud and Netflix OSS, part 1 에서 참고하였다. 사실 위 블로그의 내용을 거의 똑같이 따라 하면서 정리했다고 보는 것이 맞을 것 같다. 이 포스트보다 정리가 잘 되어있는 만큼 영어에 어려움이 없는 개발자라면 Calista 블로그의 내용을 보는 것이 더 나을지도 모르겠다. 한가지 참고할 수 있는 자료가 더 있는데 다른 포스트에서도 소개했던 적이 있는 Devoxx 2015 의 동영상 자료가 있다. 제목은  Getting started with Spring Cloud by Josh Long 으로 1시간 정도 라이브 코딩으로 Josh Long이 열정적으로 설명해준다. 영어를 못하는 나도 어느 정도 따라갈 수 있었던 동영상으로 강추하고 싶은 동영상이다. 시작하기에 앞서서 좋은 블로그 자료를 공개해줘서 샘플을 만들고 정리하는 데 도움을 준 Calista 블로그에 감사의 마음을 전하며, 자료를 함부로 가져다 쓰게 된 점에 대해 매우 미안한 마음을 전한다. 이번 포스트를 정리하기 위해 사용한 샘플은 아래와 같은 조건으로 작업이 되었다. Configuration Server 와 Discover Server : 이전 포스트 참고 JDK 8 : 1.8.0_65 Intellij 15.0.3 Gradle build : 2.10 Spring IO : 2.0.1  Spring Boot : 1.3.2 (이전 포스트 작성후에 버전이 1.3.1에서 1.3.2로 업그레이드됐다) Spring ...

Service Discovery Server와 Git을 이용한 Configuration Server

서론 이제 실제로 Spring-cloud 를 이용해서 마이크로서비스 아키텍처 스타일의 애플리케이션을 만드는 방법에 대해서 정리를 할까 한다. 우선은 전체 구조에서 가장 근간이 될 Service Discovery Server와 Cofiguration Server 로 시작해 보자. Configuration Server 는 이전 포스트 에서 한 번 정리를 한 적이 있으니 이번에는 Git을 이용해서 설정하는 법에 대해서만 정리할 예정이다. 이 포스트에서 사용된 소스를 실행하기 위한 부분이나 필요사항은 아래와 같다. gradle에 대한 기본 사용법 (버전 2.9와 2.10에서 확인했다) IDEA 15(이클립스에서도 될 것으로 보이나 테스트는 못해봤다) spring-io dependency-management-plugin : 0.5.4.RELEASE spring-io : 2.0.1.RELEASE spring-boot : 1.3.1.RELEASE git(local git, github) 에 대한 기본 지식 git repository :  https://github.com/roadkh/blog-cloud-sample.git Gradle 과 Git은 나도 능숙하게 쓰는 편은 아니므로 혹시 문제가 있으면 알려주시기를... 전체 소스는 아래와 같이 확인이 가능하다. git clone https://github.com/roadkh/blog-cloud-sample.git git checkout blog_01 프로젝트 Gradle 구성 설정하는 부분에 대한 설명은 이전 포스트 를 참고하기 바란다. 해당 포스트와 전체적으로 같다. 다만 settings.gradle 파일만 아래와 같이 변경되었다. rootProject.name = 'blog-cloud' ['client', 'server', 'api'].each { def projectDir = ...

Spring-Cloud 프로젝트와 Netflix OSS를 이용한 Microservice 구성

서론 그동안 정리했던 포스트의 내용은 마이크로서비스 아키텍처에 대한 기반에 대한 내용이었다. 일련의 마이크로서비스 아키텍처에 대한 정리의 시작은 사실 몇 달 전 Netflix OSS 를 보게 된 것이 그 계기가 됐다. Netflix 는 국내에서는 그리 유명하지는 않지만, 세계적으로는 2014년 기준으로 5,000만 명 이상의 가입자를 소유하고 있는 유명한 동영상 월정액 스트리밍 서비스를 제공하는 회사다. 이렇게 간단히 정리하기엔 좀 미안한 회사지만, Netflix 를 소개하는 포스트가 아닌 만큼 자세한 설명은 생략하겠다. (최근에 한국서비스가 시작됐다고 한다) 서비스 적으로도 유명하지만, 다양한 기술 기반을 가지고 있는 회사로도 유명하다. 서비스 특성상 클라우드를 가장 활발하게 이용하고 있는 회사 중 하나이면서, 그에 따른 다양한 솔루션들을 제작하는 회사이기도 하다. 특히 Netflix OSS(Open Source Software) 를 Netflix Open Source Center  를 통해서 공개하고 있기도 하다. 여기에는 마이크로서비스를 구성하는 다양한 솔루션은 물론 빅데이터/보안/사용자 인터페이스 등 다양한 모듈들이 공개되어있다. 그동안 그 모듈들의 설명이나 내용을 봐도 사실 거의 이해를 하지 못하고 있었다. 마이크로서비스 아키텍처에 대해서는 약간의 지식만 있을 뿐이었고, 또 변형된 아키텍처 하나가 나왔나 보네 하면서 넘어갔던 때였으니 말이다. 겨우 공부 겸 진행하던 프로젝트에서 Zuul proxy 정도 사용해 보면서 편리한 솔루션이라고 생각했을 뿐이었다. 이 때 Netflix OSS 중 일부 솔루션이 Spring-Cloud 프로젝트에 포함된 것을 알게 되었고, 그 내용을 보다가 마이크로서비스 아키텍처에 매력을 느끼게 돼서 다시 마이크로서비스 아키텍처 패턴부터 보게 되었다. 최근에는 따로 진행하는 사이드 프로젝트에서 클라우드를 이용해야 할 필요성이 있어 Spring-cloud 프로젝트를 이용하게 되었고, 이 과정에서 몇 가지 ...

The Twelve-Factor App 란 무엇인가?

서론 공식 사이트인  http://12factor.net/ 의 내용을 기반으로 해서 정리를 해 볼 까 한다. 처음 이 사이트를 방문했을 때는 한국어가 없었는데, 어떤 고마운 분이 한국어 번역판을 올려주신 듯 하다. 한국어는  http://12factor.net/ko/ 에서 확인할 수 있다. the Twelve-Factor App이 지향하는 특성을 원문의 서문에 나온 굵은 긁씨의 단어들로 정리하면 다음과 같다. declarative,  clean contract,  maximum portability,  deployment,  cloud platforms,  Minimize divergence,  continuous deployment,  scale up 많은 단어가 있지만, 결국 지향점은 클라우드 환경에서 쉽게 확장가능한 애플리케이션이라는 것으로 귀결되지 않을까 생각한다. 즉, the Twelve-Factor App은 클라우드 환경에 적합한 애플리케이션의 특성을 12가지 요소로 정리한 내용이다. 각 특성을 자세히 보면 이전 포스트에서 정리했던 마이크로서비스의 개념과도 통하는 부분들이 많은것을 볼 수 있을 것이다. 이것이 마이크로서비스 포스트를 작성하다가 12 Factor App을 정리한 이유이다. The Twelve-Factor 란? 사이트 첫페이지에 나오는 12개의 요소를 요약해 놓은 것을 그대로 옮겨보았다. I. 코드베이스 버전 관리되는 하나의 코드베이스와 다양한 배포 II. 종속성 명시적으로 선언되고 분리된 종속성 III. 설정 환경(environment)에 저장된 설정 IV. 백엔드 서비스 백엔드 서비스를 연결된 리소스로 취급 V. 빌드, 릴리즈, 실행 철저하게 분리된 빌드와 실행 단계 VI. 프로세스 애플리케이션을 하나 혹은 여러개의 무상태(stateless) 프로세스로 실행 VII. 포트 바인딩 포트 바인딩...

Microservice 에 대한 나만의 정리 2

서론 원래 이번 포스트는 12 Factors App에 대해 정리를 해 보려고 했다. 저번 포스트가 좀 힘들어 이번엔 간단한 거로 해볼까 하는 생각과 최근 개발 방향을 요약해서 정리할 수 있지 않을까 싶어서였는데, 이전 포스트의 정리가 워낙 엉망이었던 것 같아서 다시 한 번 정리해볼까 하는 생각을 하게 되었다. 저번 포스트는 마틴 파울러 씨의 블로그 포스트를 기반으로 해서 정리를 해 보았는데, 한 달 전쯤 봤던 Devoxx 2015 세션 중 하나였던 Refactor your Java EE application using Microservices and Containers를 진행하셨던 Couchbase의 Vice President인 Arun Gupta 씨의 동영상이 기억이 났다. 해당 세션을 정리할 생각은 아니고 거기서 소개된 대부분 내용이 그보다 이전에 Dzone 에서 받아 놓았던 Getting Started with Microservices 라는 pdf에 정리되어있었던 것이 기억나서 그것을 정리해 보고자 한다. 참고로 Arun Gupta 씨의 위 동영상은 [여기] 에서 볼 수 있다. (본문에서는 씨라는 존칭은 생략하고 정리하겠다.) What are microservices? 마이크로서비스는 하나의 커다란 서비스를 느슨하게 결합 돼 있는 하나의 목적을 가지는 여러 개의 서비스로 나누고, cross-functional team에 의해 개발하고 운영을 하여, 최근 디지털 비즈니스에 있어 요구되는 빠르게 개발/유지보수 되면서도 품질이 우수한 시스템을 개발하자는 아키텍처적 접근 방식이다. Key Characteristics of microservices 이전 포스트에서 봤던 특성들을 Arun Gupta 는 아래와 같이 정리하고 있다. DDD(Domain-Driven Design) : 마이크로서비스를 위해 기능을 분리해내는 데는 DDD가 많은 도움이 된다. Single Responsibility Princ...

Microservice에 대한 나만의 정리

서론 이글을 쓰고 있는 나는 마이크로서비스의 전문가가 아니다. 마이크로서비스는 커녕 마이크로서비스 이전에 나왔던 Service-Oriented Architecture(SOA) 조차도 설계하거나 구현하거나 적용해 본적이 없다. 그저 최근 1~2년간 뉴스리더나 각종 컨퍼런스에서 마이크로서비스라는 말을 들었고 흥미로운 접근 방식이라 생각했으며, 최근 springframework의 spring-cloud 프로젝트를 가지고 파일럿을 진행하는 과정에서 좀 더 관심이 생겼을 뿐이다. 파일럿을 진행하다보니 개념적으로 정립이 안되어있어서 그런지 혼란이 올때가 많이 있다. 그래서 생각을 좀 정리할 겸 마틴파울러의 2014년 마이크로서비스에 대한 글을 참고로하여 그 개념을 정리하려고 이 글을 쓰게 되었다. [원문 : Microservices - a definition of this new architectural term] 전문가는 커녕 굉장히 얕은 지식으로 이해를 하다보니 잘 못 이해한 부분도 있고, 영어실력이 그리 뛰어나지 않아 오해한 부분이 있을지도 모르겠다. 마지막으로 이 글은 일부 마틴파울러의 글을 번역해서 사용했지만, 전문 번역을 한 글이 아님을 밝힌다. 마이크로서비스란 무엇인가? 마이크로서비스 패러다임은 아래와 같다. 작은 기능을 하는 독립된 작은 서비스를 독립된 어플리케이션으로 개발한 것이다. 독립된 어플리케이션들은 다른 어플리케이션과 통신하여 좀 더 복잡한 서비스를 만들 수 있다. 어플리케이션간의 통신은 경량 매커니즘으로 된 통신 방법을 이용해야 한다. 독립적인 비즈니스 기능을 가지고 있어야 하고 독립적이면서 자동화된 방식으로 배포가 가능해야 한다. 최소한의 중앙집중식 관리시스템에 의해서 관리가 가능해야 한다. 서로 다른 기술로 만들어질 수 있어야 하고 독립된 저장소를 가질수도 있다. 뭔가 좋아는 보이지만 개념이 확 와닿지 않는다(최소한 나 같은 경우는 그랬다). Monolithic service 와 비...