etc/book

Book 마이크로서비스 아키텍처 구축 (Building Microservices)

C/H 2017. 5. 15. 08:30

Building Microservices

  • ISBN 978-89-6848-341-7
  • 프로토콜 버퍼 : 구글에서 가발한 구조화된 데이터직렬화 방법으로, 네트워크 통신과 데이터 저장에 사용된다. 데이터 구조(메시지)와 서비스를 proto 정의파일에 저장하고 다양한 언어로 인/디코딩하여 이기종간 호환이 가능하다. 유사한 기술로는 아파치 쓰리프트와 아브로가 있다.
  • 규칙은 바보에겐 복종이지만 현자에겐 지침이다. _더글러스 베이더 Douglas Bader - 2차 세계대전 당시 활약했던 영국 공군의 에이스 조종사.
  • dropwizard.io 드롭위자드 JVM 마이크로 컨트롤러
  • bit.ly/1JtA6KK 카욘 JVM 마이크로 컨트롤러
  • bit.ly/1wxQtwW 하스트릭 회로차단 라이브러리
  • bit.ly/1yVt4LN 드롭위자드 측정지표
  • goo.gl/CeGWAI 넷플릭스 프라나Prana 상이드카 서비스 Sidecar service
  • 거버넌스 givernance : 거버넌스는 기업의 목적이 이해관계자의 요구, 조건, 선택을 평가함으로써 달성 할 수 있음을 보장한다. 우선순위 및 의사결정을 통해 방향을 설정하고, 합의된 방향과 결정에 대한 성과, 준수 Compliance, 고정을 모니터링 한다. _COBIT5 58p
  • COBIT Control Objectives for Information and Related Technology : IT 관리와 거버넌스를 위해 ISACA에서 개발한 프레임워크로, 관리인이 통제요건, 기술이슈, 비즈니스 위험간의 간격을 줄이는 도구모음을 제공한다. 58p
  • 아키텍트는 개발을 이끌수 있는 일련의 원칙을 정하고, 원칙들이 조직의 전략과 일치할 수 있도록 보장할 뿐만아니라 이 원칙들로 인해 개발자를 비참하게 만드는 실천사항을 만등지 않도록 해야한다. 최신 기술을 유지하고, 올바른 트레이드오프를 결정해야 한다. 이는 실로 엄청난 책임이다. 59p
  • 나와 반대 논리를 펼치는 이교도가 "이 세상을 떠 받치고 있는 존재가 눗구인가?" 라는 질문에 대답한 것이 생각난다. 그는 대답했다. "세상은 큰 거북이가 떠 받치고 있다네, 하지만 그 거북이를 또 다른 거북이가 떠 받치고 있지." _조셉 바커 Joseph Barker(1854) 63p
  • 유비쿼터스 랭귀지 ubiqitous languge : 에릭 에반스 DDD. 보편언어. 도메인 모델에 따라 구조화되고 모든 팀원이 팀의 모든 활동을 소프트웨어와 연결하는데 사용하는데 사용하는 언어. 66p
  • 경계가 있는 컨텍스트 bounded context : 특정 모델에 대해 경계가 정해진 적용 가능성. 컨텍스트를 제한하는것은 팀원들로 하여금 무엇에 대해 일관성을 유질하고, 무엇을 독립적으로 개발할 수 있을지 명확하게 공유할 수 있게 한다.
  • 경계가 있는 컨텍스트 : 명료한 경계에 의해 강제된 구체적인 책임. goo.gl/KRIcUx
  • snap-ci.com : CI
  • gi.cd : CI
  • 시스템을 마이크로 서비스로 성급하게 분하면 막대한 비용이 소요될 수 있다. 특히 도메인에 대한 경험이 없다면 더더욱 그렇다. 여러므로 기존 코드베이스를 마이크로 서비스로 분해하는 것이 처음부터 마이크로 서비스로 가는 것보다 훨씬 쉽다. 69p
  • 스텁 Stub : 메스드 스텁(method stub)이라고도 하며, 다른 프로그래밍 기능을 대리하는 코드다. 스텁은 기존 코드(예를 들면 원격 머신의 프로시저)를 흉내 내거나 아직 개발되지 않은 코드를 임시로 대치하는 역활을 한다. 따라서 스텁은 일반 소프트웨어 개발과 테스팅을 포함해서 특히 리식과 분산 컴퓨팅에 유용하다. 71p
  • 호환성을 깨트리는 변경(breaking change)은 소프트웨어 시스템의 한 부분의 변경이 다른 컴포넌트를 동작 못 하게 만드는 변경을 뜻한다. 다수 애플리케이션에서 사용하는 공유라이브러리에서 자주 발생한다. 76p
  • 호환성을 깨트리는 변경 피하기 : 마이크로 서비스가 데이트 일부분에 새로운 필드를 추가해서 노출을 하더라도 기존 소비자 서비스에는 영향을 미치지 않아야 한다. 76p
  • 기술 중립성 technology-agnostic : agnostic은 그리스의 without을 의미하는 a와 knowledge를 의미하는 gnosis에서 유래한 without knowing을 뜻한다. IT세상에서는 하부 기술을 몰라도 상호 호환할 수 있는 능력을 의미한다. 여기서는 API에 사용된 기술에 종속적이지 않고 호환성을 유지하라는 의미. 76p
  • 마샬링 mashalling : 한 객체의 메모리에서의 표현 방식을 저장 또는 전송에 적합한 다른 데이터 형식으로 변환하는 과정으로 마샬링은 직렬화(serialization)와 유사한 면이 있다. 프로세스 간 또는 쓰레드 간 데이터 전송에 필요한 RPC 메커니즘 구현에 주로 사용된다. 86p
  • 언마샬링 unmarshalling
  • 취성 brittleness : 외부의 힘과 변화에 물체가 소성 변형을 거의 보이지 아니하고 파괴되는 현상으로 '메짐성'이라고도 하며 쉽게 깨지거나 부서지는 성질이다. 85p
  • bit.ly/1fh2AGt 리처드슨의 성숙모델 Richardson Maturity Model
  • HATEOAS 애플리케이션 상태 엔진으로서의 하이퍼미디어 hypermedia as a engine of application state 89p
  • bit.ly/hal-spec HAL 하이퍼텍스트 애플리케이션 언어 hypertext application language 92p
  • 페이로드 : 페이로드(payload)는 전송의 근본적인 목적이 되는 데이터의 일부분으로, 해당 데이터와 함께 전송되는 헤더와 데이터등의 데이터는 제외된다. 93p
  • 웹소켓Websocket : 단일 TCP연결을 통한 양방향 통신 채널을 제공하는 프로토콜. HTTP헤더에 업그레이드 요청을 사용하여 핸드셰이킹 되면 별도의 TCP연결을 만들지 않고 80포트를 사용하여 소켓으로 통신한다. 웹 브라우즈와 웹 서버가 더욱 상호작용할 수 있어 동적 콘텐트의 업데이트 및 실시간 게임등이 가능해진다. 95p
  • 햔드셰이크Handshake : 두 개체 간의 정상 통신 전에 통신채널의 퍼라미터를 설정하는 자동화된 협상과정. 95p
  • 페이로드 소비 Payload consumption : 페이로드를 읽고 해석하는 것을 의미한다. 95p
  • 관대한 독자 Tolerant reader : 서비스 디자인 패턴중 하나로, 서비스 공급자가 제공한 메시지 포멧은 변경 될 수 있음을 염두에 두고 메시지의 필요한 데이터만 추출하여 관련없는 데이터는 무시해서 변경 결함을 피하게 한다. 예를 들어 XML 메시지의 경우 XPath 검색을 사용할 수 있다. 95p
  • RabbitMQ : AMQP 프로토콜을 구현한 오픈소스 메시지 중계자 소프트웨어. 얼랭 언어 기반으로 구현하여 클러스터링 등의 고급 기술과 다양한 언어의 클라이언트 라이브러리를 지원한다. 96p
  • 메시지 브로커 : 생산자는 API을 사용하여 브로커에 이벤트를 발생하고 중재자Broker는 이벤트가 도착하면 소비자에게 알릴 수 있도록 구독을 처리한다. 중재자는 심지어 소비자 상태도 처리하는데, 예를 들면 소비자가 이전에 확인했던 메시지를 추적할 수 있도록 돕는다. 96p
  • 미들웨어를 멍청하게, 엔드포인트를 지능적으로 만들어라. : 미들웨어/인프라스트럭처에 메시지를 비 동기적으로 라우팅할 수 있을 정도로 단순하게 구현하고, 엔드포인트 서비스에 메시지를 생성하고 소비하는 복잡하게 구현하는 방식. goo.gl/HRhY5v
  • 아톰 ATOM : 자원의 피드를 게시하기 위해 의미semantics를 정의한REST 호환 사양. 웹 로그나 최신 소식과 같은 웹 콘텐트의 신디케이션을 위한 XML기반 문서 포멧니자, 웹로그 편집을 위한 HTTP기반 프로토콜. 96p
  • 매몰 비용 오류 sunk-cost fallacy : 이미 지출하여 회수가 불가능한 매몰 비용에 대한 불 합리한 집착을 의미한다. 97p
  • 재앙적 대체 작동 catastrophic failover : 대체 작동 또는 장애 극복을 의미하는 failover은 1차 시스템 장애 또는 유지 보수 등의 이유로 가용한 상태가 아닐 때 2차 시스템이 임무를 넘겨받아 중단 없이 유지되는 백업 운전 모드를 말한다. 재앙적 대체 작동은 장애를 초래하는 요청이 다른 서버로 전파되어 모든 서버를 다운시키는 계단식 시스템 장애 현상을 말한다. 이를 완화하기 위해 실패한 요청 트랜젝션의 세심한 관리 및 이질적인 기술을 사용할 수 있다. 98p
  • 상관관계ID : 여러 시스템에서 개체를 고유하게 식별할 수 있는 UD를 의미하며, 추적 및 모니터링을 위해 각 호출에 대한 ID를 생성하여 하위 시스템에서 호출 흐름을 파악할 수 있다. 99p
  • 기업 통합 패턴 Enterprise Intergration Patterns : 에이콘 출판사 2014. 99p
  • RX 반응형 확장 reactive extension : 반응형 확장 라이브러리(Rx)는 관찰자 패턴(observer pattern)에 기반을 두고 설계되었다. 관찰 대상 순서를 이용하여 비 동기 이벤트 기반의 프로그래밍을 지원하는 라이브러리다. reactive.io/intro.html 100p
  • 강한 타입 언어 strongly typed language : 함수에 전달되는 매개변수가 기대와 다를 경우 에러를 발생하거나 컴파일ㅇ르 거부할 가능성이 높은 반면 , 약한 타입 언어는 암시적인 형변환으로 인해 예상치 못한 결과를 야기할 수 있다. 105p
  • 관대한 독자 Tolerant Reader : 관대한 독자 패턴은 메시지 내의 알 수 없는 데이터는 무시하고 필요한 데이터만을 추출하며, 데이터 구조의 변경을 예상하도록 클라이언트 또는 서비스를 설계하는 패턴이다. goo.gl/YrLYhq, bit.ly/1yISOdQ 105p
  • 포스텔의 법칙(견고성의 원칙) : bit.ly/1Cs7dfR
  • 소비자 주도계약 consumer-driven contract(CDC) : 시비스를 진화하ㅣ 위한 패턴으로, 각 소비자는 서비스 공급자에게 기대하는 사항을 개별 계약으로 캡처하고 곱급자와 공유한다. 이 계약을 통해 공급자는 각 소비자를 위해 수행해야 할 의무를 인식하고 검증할 수 있는 테스트를 구현할 수 있다. goo.gl/Y1ay 106p
  • 유의적인 버전 관리 semantic versioning : semver.org/lang/ko/ MAJER.MINOR.PATCH 형태 106p
  • 확장 축소 패턴 : 병렬 변경이라고도 한다. 변경을 확장, 이동, 수축의 3단게로 구분한 안전한 방식으로, 하위 호환되는 인터페이스의 변경을 구현한 패턴이다. goo.gl/KYTq2K - 호환성을 깨뜨리는 변경을 단계적으로 적용해서, 어떤 작업을 수행하는 구식과 신식 방법을 모두 지원하면서 우리가 제공하는 기능을 확장한다. 구 소비자들이 신식 방법을 따른다면 이전 기능을 제거하고 API를 축소한다. 108p
  • API 케이트 웨비 : 클라이언트에 개별 서비스를 액세스할 수 있는 단일 접근 지점이 되어 클라이언트의 요청을 적절히 해당 서비스로 라우팅하거나 다양한 서비스로 분배한다. 클라이언트에 최적화된 API를 제공하고, 클라이언트의 인증 및 접근 제어를 가능하게 한다. goo.gl/bgTeO 113p
  • 교살자 애플리케이션 패턴 Strangler Application Patter : 교살자를 통해 구 버전 시스템에 대한 호출을 잡아내어 가로챈다. 교살자는 이 호출을 기존의 레거시 코드 또는 새롭게 작성한 새로운 코드로 바로 경유할지 결정할 수 있다. 그리고 엄청난 분량의 코드 재작성 없이도 한번에 기능을 교체하게 해준다. bit.ly/1v71DOH 123p
  • 스키마스파이 SchemaSpy schemaspy.sourceforege.net 데이터를 시각화 하기 위한 도구로 테이블 관계를 그래픽으로 표현가능. 131p
  • SKU Sotock Keeping Unit : 개별 상품에 대해 재고 관리 목적으로 추적이 쉽도록 하기 위해 사용하는 실별 관리 코드를 말한다. 131p
  • 리팩토링 데이터베이스 (위키북스 2007) 137p
  • 최종적 일관성 eventual consistency : 일관성 수준에 있어 최종적인 일관성은 동시 업데이트가 결여된 약한 일관성의 하나로, 장기간 업데이트가 없다면 일관성을 유지하는 상태가 되는것을 말한다. 일관성 모델에 대해서는 en.wikipedia.org/wiki/Consistency_model 참고하다. 140p
  • 컬럼지향 데이터베이스 column-oriented database : 데이터를 열(column)단위로 저장하며 데이터 웨어하우스, 고객 관리 시스템, 도서 카드 목록 등 유사한 대용량 데이터를 처리하는 특정 질의 시스템에 적용하기 유리하다. 144p
  • 하루에 한번 메인 브랜치에 체크인 하는가? 여러분은 자신의 코드를 통합하는지 확인할 필요가 있다. 여러분 코드는 물론 다른 사람들이 변경한 코드 또한 자주 사용하지 않는다면 향후의 통합이 더 어려워진다. 여러분이 변경을 위해 단기 브랜치를 사용하고 있더라도 가능한 한 자주 메인 브랜치에 통합하다. 154p
  • 변경을 확인할 테스트 집합이 있는가? 테스트를 하지 않는다면 통합해서 작동하는지 구문상으로만 알 수 있으며, 시스템의 동작을 중단시키는 것까지는 알 수 없다. 코드가 기대한 대로 동작하는지 검증하지 않는 CI는 CI가 아니다. 155p
  • 빌드가 깨졌을 때 팀이 그것을 최우선으로 해결 하는가? 녹색 빌드는 변경한 것이 안전하게 통합되었고, 적샐 빌드는 마지막 변경이 통합되지 않았을을 의미한다. 우리는 빌드 문제의 해결과 관련 없는 추가적인 체크인을 중단해야 한다. 변경이 많이 적체되면 그 빌드를 해결할 시간이 급격히 늘어난다. 필자는 수일 동안 빌드가 깨어진 채로 방치한 팀원과 함께 작업했었는데, 결국 빌드를 통과하는 데 엄청난 노력이 들었다. 155p
  • 수동 사용자 인수 테스트 user acceptance test(UAT) : 사용자를 위해 솔루션을 검증하는 과정으로 구성되어 있다. 이것은 소프트웨어에 오류가 발생하지 않는거, 요구 사항을 만족하는 것을 보장하는 시스템테스틍보다 솔루션이 사용자를 위해 잘 동작하는지 보장한다. 159p
  • 콜렉트디 collectd : 시스템 성능 통계를 주기적으로 수집하고, 다양한 방식으로 저장 할 수 있는 메커니즘(에를 들면 PRD 파일 포멘처럼)을 제공하는 데몬이다. collected.org 162p
  • 로그스태쉬 logstash : 이벤트와 로그를 관리하기 위한 도구로, 일반적으로 사용될 때는 로그의 수집, 처리, 저장, 검색 활동을 하는 더 큰 시스템을 의미한다. logstash.net 163p
  • 구성 불일치 configuration drift : 패키지 이미지를 만ㄷ르고 프로비저닝한 후 임시로 수정한 것들로 인해 구성의 차이가 발생하는 것. 163p
  • 다운타임 downtime : 시스템에 장애가 발생하여 시스템의 주요 기능을 제공하거나 수행이 불가한 기간. 163p
  • 쿠버네티스 Kubernetes : 구글이 고안한 호스트 클러스터들의 경계를 넘어 애플리케이션 컨테이너의 자동 배로, 확장, 운영을 위한 오픈소스 플랫폼이다. kubernetes.io 182p
  • 데이스 Deis : 애플리케이션의 배포와 관리를 쉽게 해주는 오픈소스 PasS다. 헤포쿠에 영향을 받은 워크플로우와 함께 경량의 PasS를 제공하기 위해 도커와 CoreOS 상에서 동작한다. deis.io 182p
  • 패브릭 Fabric : 배포를 위한 도구 fabfile.org 183p
  • 테라폼 Terraform : 인프라스트럭처를 안전하고 효율적으로 구축, 변경하고 버저닝하기 위한 도구다. 이것은 AWS와 Azure 같은 대중적인 서비스 프로바이더뿐만 아니라 커스텀 내부 솔루션도 관리할 수 있다. www.terraform.io 186p
  • 하시코프 Hashcorp : 하시코프 사는 베이그런트와 패커를 만든 미첼 하시모토(Mitchell Hashimoto)가 설립한 회사다. 자동화를 생각한다면 그(mitchellh.com)와 하시코프 사(hashcorp.com)에 관심을 갖길 권한다. 186p
  • 애자일 테스팅: 테스터와 애자일 팀을 위한 실용가이드(정보문화사 2012) : Fit(Framwork for Integrated tests)은 워드 커닝햄(Ward Cunningham)이 창안한 의사소통과 협업을 촉진하는 오픈 소스 테스팅 프레임워크다. 고객, 개발자, 테스터 모두가 올바른 소프트웨어 제품을 만드는 데 도움을 준다. fit.c2.co 참고. FitNesses는 Fit을 기본으로 한 웹 서버, 위키, 자동화된 테스팅 도구다. Fit과의 주요 차이점은 HTML대신 위키 마크업으로 테스트를 작성한다는 것이다. 자세한 내용은 fitnesse.org 참고. 190p
  • 단위 테스트 : 테스트 주도 설계 test-driven design(TDD)의 부산물로 생성된 테스트는 이 범주에 속한다. 이 테스트는 개발자를 돕는 테스트이므로 비즈니스 business=facing 이기보다는 기술 중심 technology-facing 이라 할 수 있다. 191p
  • 서비스 테스트 : 사용자 인터페이를 우회해서 서비스를 테스트한다.
  • 엔드 투 엔드 테스트 : 시스템 전체에 대해 수행하는 테스트. 대게 브라우즈를 통해 GUI를 접하지만, 파일 업로드와 같은 다른 종류의 사용자 상호작용을 쉽게 흉내 낼 수 있다. 194p
  • 안티패턴 anti-pattern : 실제 많이 사용되는 소프트웨어 패턴이지만 비효율적이거나 비생산적인 패턴을 의미한다. 1995년 앤드류 퀘이니그(Andrew Koenig)가 디자인 패턴을 참고하여 처음 사용한 이 후 "Antipatterns: Refactoring Sorfware, Architectures, and Projects in Crisis"(John Wiley & Sons Inc, 1998) 책을 통해 이 용어가 널리 알려지게 되었다. 196p


반응형