기본 콘텐츠로 건너뛰기

1월, 2016의 게시물 표시

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 Cloud :  Angel

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. 포트 바인딩 포트 바인딩을 사용해서 서비스를 공개함 VIII. 동시성(Concurrency) 프로

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 Principle : 객체