본문 바로가기

IT Book Summary/스프링 마이크로 서비스 코딩공작소

(9)
Chapter 10 마이크로서비스의 배포 빌드 및 파이프라인 구축은 실제로 마이크로서비스 아키텍처에서 핵심 부분 중 하나다. 코드를 빌드하고 배포하는데 사용할 메커니즘 자동화 automated 빌드와 배포 프로세스에서 사람이 개입하지 않아야 한다. 빌드 및 머신이미지 프로비저닝, 이후 서비스의 배포 프로세스가 모두 자동화되어야 하며, 소스 저장소에 코드를 커밋하는 동작에서 시작되어야 한다. 반복성 repeatability 빌드 배포 프로세스는 반복가능하고 동일한 작업으로 수행해야 한다. 완전성 complete 배포된 산출물 결과는 서비스를 위한 완전한 런타임 환경을 포함하는 가상머신 컨테이너 이미지 여야 한다. 불변성 immutability 서비스를 포함한 머신 이미지를 빌드하고 배포한 후 런타임 구성을 건드리거나 변경해서는 안됨. 변경이 필요..
Chapter 09 스프링 클라우드 슬루스와 집킨을 이용한 분산추적 분산 디버깅을 할 수 있는 방법 상관관계 ID를 사용해 여러 서비스 사이 트랜젝션 연결 여러 서비스 사이 로그 데이터를 검색가능한 단일소스로 수집 여러 서비스 사이 사용자 트랜잭션 흐름을 시각화 하고 특성을 이해 사용할 수 있는 세가지 기술 스프링 클라우드 슬루스 상관관계 ID 사용해 HTTP호출을 측정하는 스프링 클라우드 프로젝트 페이퍼트레일 여러 데이터소스 로그 데이터를 검색 가능항 단일 데이터서비스로 수집하는 freemium 서비스 집킨 여러 서비스 사이 트랜젝션 흐름 보여주는 오픈소스 기반 데이터 시각화 도구 9.1 스프링 클라우드 슬루스와 상관관계 ID 상관관계ID는 임의로 생성되는 고유한 숫자 또는 문자열로 트랜잭션을 시작할 때 주입됨. 6장에서 주울 필터를 사용해 유입되는 HTTP 요청을 검..
Chapter 08 스프링 클라우드 스트림을 사용한 이벤트 기반 아키텍처 이번에는 비동기 메시지를 사용해 다른 마이크로서비스와 통신하는 스프링기반 마이크로서비스를 설계하고 구현한다. 새로운 점은 메시지를 사용해 상태변화를 표현하는 이벤트로 통신한다는 개념. -> 이벤트 기반 아키텍처 EDA, 메시지 기반 아키텍처 MDA 8.1 메시지와 EDA, 마이크로서비스의 사례 두가지 서비스 라이선싱 서비스와 조직서비스중 운영환경에서 조직 정보를 조회하는 라이선싱 서비스 호출이 오래걸린다. 데이터베이스 액세스 하지않고 조직 데이터 읽기를 캐싱할 수 있으면 응답시간을 줄일 수 있음. 캐싱솔루션 구현 핵심 요구사항 캐싱된 데이터는 라이선싱 서비스의 모든 인스턴스에 일관성이 있어야 함 - 어떤 인스턴스에 접근하더라도 동일한 조직데이터 읽기가 보장되어야 한다 라이선싱 서비스를 호스팅하는 컨테이너..
Chapter 07 마이크로서비스의 보안 사용자를 적절히 통제해 사용자 본인 여부를 확인하고 작업에 대한 권한 여부를 검증. 서비스가 실행되는 인프라스트럭처를 꾸준히 패치하고 최신 상태로 유지해 취약점의 위험을 최소화 서비스는 명확히 정의된 포트로만 접근하고 소수의 인가된 서버만 접근할 수 있도록 네트워크 접근을 통제. 첫번째 항목 마이크로서비스를 호출하는 사용자가 본인인지 인증하는 방법. 특정 마이크로서비스에서 요청한 작업을 수행할 수 있는 권한을 부여받았는지 확인하는 방법. OAuth2는 토큰 기반 보안 프레임워크 스프링 부트와 스프링 클라우드 모두 OAuth2 서비스의 기본구현을 제공 7.1 OAuth2 소개 OAuth2를 구성하는 4개의 컴포넌트 보호자원 적절한 권한을 부여받은 인증된 사용자만 액세스 할 수 있는 자원(마이크로서비스) 자..
Chapter 05 나쁜상황에 대비한 스프링 클라우드와 넷플릭스 히스트릭스의 클라이언트 회복성 패턴 서비스하나가 충돌할때 그것을 감지하기는 쉽지만 느려질때 성능 저하를 감지하고 우회하는 것이 어려운 이유 서비스 저하는 간헐적으로 발생 확산 가능 원격서비스 호출은 대개 동기식이며 오래 걸리는 호출을 중단하지 않음 애플리케이션은 대개 부분적 저하가 아닌 원격 자원의 완전한 장애를 처리하도록 설계됨 (서비스가 완전히 실패하지 않으나 기능이 저하된채로 동작하게 됨) 5.1 클라이언트 회복성 패턴이란? -> 원격 서비스가 에러를 던지거나 제대로 동작하지 못해 원격 자원의 접근 실패시, 원격자원을 호출하는 클라이언트의 충돌을 막는데 초점을 맞춘다. 회복성 패턴의 네가지 1 - 클라이언트 측 부하분산 client-side load balancing -> 클라이언트가 넷플릭스 유레카 같은 서비스 디스커버리 에이전트를..
Chapter 04 서비스 디스커버리 4.1 서비스 위치 찾기 클라우드가 아닌 환경에서 서비스 위치 확인은 대개 DNS와 네트워크 로드 밸런서로 해결하였다. 정적서버 그룹에서 실행되는 소수 서비스의 경우 - 서비스 소비자에게 요청 - 로드밸런서는 액서스 경로를 기반으로 라우팅 테이블에서 물리적 주소 찾음 - 해당 서비스를 호스팅하는 서버목록에서 하나를 선택해 요청 전달 - 보조 밸런서가 유휴상태로 대기. 주 로드 밸랜서가 정상인지 핑으로 확인 - 정상이 아니면 보조 로드밸런서가 활성화. 두 로드 밸런서의 IP 주소를 인수해 요청을 처리. 클라우드 기반의 마이크로서비스 앱에서 잘 작동하지 못하는 이유 단일 장애 지점 - 하나의 로드밸런서에 의존, 병목지점이 될 가능성 수평 확장의 제약성 - 하드웨어 제약으로 수평확장 제약 정적관리 - 신속히 ..
Chapter 03 스프링 클라우드 컨피그 서버로 구성 관리 구성정보를 저장하기 위해 저수준의 프로퍼티 파일 (YAML, JSON, XML)을 이용한다. 대부분 구성파일을 소스 관리 시스템에 넣거나 애플리케이션 일부로 배포하는 일 외에는 애플리케이션 구성을 위한 운영작업은 하지 않는다. 하지만 많은 마이크로서비스가 운영되는 상황에서는 어떤 구성파일을 어디에 배치할지가 중요한 문제가 된다. 배포되는 실제 코드에서 애플리케이션 구성을 완전히 분리 서버 및 애플리케이션을 빌드하고 배포환경에 따라 바뀌지 않는 불변이미지를 빌드 서버를 시작할 때 환경변수나 애플리케이션의 마이크로서비스가 읽어 올 수 있는 중앙저장소를 이용해 애플리케이션 구성정보를 주입 3.1 구성(그리고 복잡성) 관리 마이크로서비스 인스턴스는 사람이 최소한으로 개입해 신속하게 시작해야 한다. 따라서 사람이..
Chapter 02 스프링 부트로 마이크로 서비스 구축 대규모 프로젝트에서 전통적으로 폭포수 waterfall 개발 방법론을 따르는 경향이 있었지만, 실제 개발과정에서 고객과 소통하을 반복하는 진화 과정을 따르므로 절저한 명세를 따르는 개발 방법론을 사용하기 어려워지며 여러가지 단점 또한 발생 하였다. 강한 결합 비지니스 로직 호출이 프로그래밍 언어 수준에서 이루어지므로 약간의 수정의 여파가 큼. 누설 같은 데이터 저장소 안에서 같은 데이터 모델을 유지하는 방식은 쉽게 데이터 접근이 가능해 의존성이 생겨나 데이터베이스 구조를 변경하기 쉽지 않다. 모놀리식 여러 팀에서 공유되는 단일 코드 베이스에 저장되므로 추가 수정사항에도 전체 컴파일과 배포를 해야한다. 반면 마이크로 서비스 기반 아키텍처의 특성은 제한 하나의 책임을 가지며 범위가 좁다. 느슨한 결합 MSA..