2. 스프링 부트 마이크로 서비스 구축

2. 스프링 부트 마이크로 서비스 구축

1. 아키텍트 역할 : 마이크로서비스 아키텍처 설계

REST, URL, JSON, HTTP 상태 코드

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

애플리케이션의 마이크로서비스가 대화하는 방식을 정의

각 서비스가 특정 도메인의 테이블만 액세스할 수 있어야 함

데이터베이스 테이블을 서비스에 따라 정리하고 각 서비스가 특정 도메인의 테이블만 액세스할 수 있어야 함

데이터베이스 테이블을 서비스에 따라 정리하고 각 서비스가 특정 도메인의 테이블만 액세스할 수 있어야 함

데이터베이스 테이블을 서비스에 따라 정리하고 각 서비스가 특정 도메인의 테이블만 액세스할 수 있어야 함

데이터베이스 테이블을 서비스에 따라 정리하고 각 서비스가 특정 도메인의 테이블만 액세스할 수 있어야 함

서로 독립적 빌드 배포 가능한 자체 완비형 유닛을 추출

단순화한 데이터 모델을 근거로 서로 독립적 빌드 배포 가능한 자체 완비형 유닛을 추출

단순화한 데이터 모델을 근거로 서로 독립적 빌드 배포 가능한 자체 완비형 유닛을 추출

단순화한 데이터 모델을 근거로 서로 독립적 빌드 배포 가능한 자체 완비형 유닛을 추출

단순화한 데이터 모델을 근거로 서로 독립적 빌드 배포 가능한 자체 완비형 유닛을 추출

조직, 라이선스, 계약, 자산

예) 조직, 라이선스, 계약, 자산

예) 조직, 라이선스, 계약, 자산

주요 명사를 물리적 데이터 모델의 테이블로 매핑

비즈니스 문제 기술 후 주요 명사를 물리적 데이터 모델의 테이블로 매핑

비즈니스 문제 기술 후 주요 명사를 물리적 데이터 모델의 테이블로 매핑

비즈니스 문제를 각 활동 영역을 대표하는 덩이들로 분해

비즈니스 문제를 각 활동 영역을 대표하는 덩이들로 분해

2. 개발자 역할 : 스프링 부트와 자바로 마이크로서비스 생성

서비스의 엔드포인트를 노출하고 유입되는 HTTP 요청 데이터를 이 요청을 처리할 자바 메서드와 매핑

서비스의 엔드포인트를 노출하고 유입되는 HTTP 요청 데이터를 이 요청을 처리할 자바 메서드와 매핑

서비스의 엔드포인트를 노출하고 유입되는 HTTP 요청 데이터를 이 요청을 처리할 자바 메서드와 매핑

서비스의 엔드포인트를 노출하고 유입되는 HTTP 요청 데이터를 이 요청을 처리할 자바 메서드와 매핑

스프링 부트 컨트롤러 작성

스프링 부트 컨트롤러 작성

스프링 부트 컨트롤러 작성

기본 디렉터리 구조 생성

기본 골격 프로젝트로 생성

3. 데브옵스 역할 : 양산(실운영) 이후의 서비스 관리에 관한 설계

(Spring Actuator) 모듈은 이러한 엔드포인트 제공

스프링부트의 스프링 액추에이터 (Spring Actuator) 모듈은 이러한 엔드포인트 제공

스프링부트의 스프링 액추에이터 (Spring Actuator) 모듈은 이러한 엔드포인트 제공

스프링부트의 스프링 액추에이터 (Spring Actuator) 모듈은 이러한 엔드포인트 제공

JSON 페이로드와 HTTP 상태코드를 반환하는 HTTP 엔드포인트를 노출하는 것

상태 확인 인터페이스를 만드는 가장 단순한 방법은 JSON 페이로드와 HTTP 상태코드를 반환하는 HTTP 엔드포인트를 노출하는 것

상태 확인 인터페이스를 만드는 가장 단순한 방법은 JSON 페이로드와 HTTP 상태코드를 반환하는 HTTP 엔드포인트를 노출하는 것

문제있는 인스턴스를 발견하면 정지시키거나 새로운 서비스를 추가하는 등 조치 취함

문제있는 인스턴스를 발견하면 정지시키거나 새로운 서비스를 추가하는 등 조치 취함

해당 서비스가 가용한지 확인하기 위해 상태 확인 인터페이스(health check interface)를 계속 모니터링하고 핑(ping) 날림

서비스 디스커버리 에이전트는 등록된 각 서비스 상태를 모니터링

서비스 디스커버리 에이전트는 등록된 각 서비스 상태를 모니터링

서비스 모니터링 (service monitoring)

서비스 클라이언트는 디스커버리 에이전트와 통신해 서비스 위치를 찾을 수 있음

서비스 클라이언트는 디스커버리 에이전트와 통신해 서비스 위치를 찾을 수 있음

인스턴스의 물리적인 IP 주소 또는 도메인 주소와 애플리케이션이 서비스 검색에 사용할 논리적인 서비스 이름, 이 두 가지 정보를 에이전트에 전달

인스턴스의 물리적인 IP 주소 또는 도메인 주소와 애플리케이션이 서비스 검색에 사용할 논리적인 서비스 이름, 이 두 가지 정보를 에이전트에 전달

마이크로서비스 인스턴스는 제3자 에이전트에 스스로 등록

마이크로서비스 인스턴스는 제3자 에이전트에 스스로 등록 해야 함. 이 과정을 서비스 디스커버리 라고 한다.

클라우드 기반 환경에서 서버는 일시적(ephemeral)

소비자 관점에서 마이크로서비스는 위치 투명성 을 가져야 함. 클라우드 기반 환경에서 서버는 일시적(ephemeral) 이기 때문.

서비스 등록 및 디스커버리

서비스 등록 및 디스커버리 (service registration/discovery)

단순한 키-값 데이터 저장소를 사용

단순한 키-값 데이터 저장소를 사용

단순한 키-값 데이터 저장소를 사용

단순한 키-값 데이터 저장소를 사용

서비스 외부 데이터 저장소에 구성 정보 데이터를 저장

서비스 외부 데이터 저장소에 구성 정보 데이터를 저장

서비스 외부 데이터 저장소에 구성 정보 데이터를 저장

마이크로서비스가 처음 가동할 때 시작하며 애플리케이션 구성 정보를 로드

마이크로서비스가 처음 가동할 때 시작하며 애플리케이션 구성 정보를 로드

서비스 부트스트래핑 (service bootstrapping)

내장형 런타임 엔진을 포함한 단일 산출물로 배포하여 구성 편차 문제를 상당 부분 제거 가능

내장형 런타임 엔진을 포함한 단일 산출물로 배포하여 구성 편차 문제를 상당 부분 제거 가능

내장형 런타임 엔진을 포함한 단일 산출물로 배포하여 구성 편차 문제를 상당 부분 제거 가능

여러 인스턴스를 신속하게 배포하기 위해 필요한 의존성을 모두 담은 단일 산출물로 패키징 후 배포

여러 인스턴스를 신속하게 배포하기 위해 필요한 의존성을 모두 담은 단일 산출물로 패키징 후 배포

일관된 구축, 패키징 및 배포하는 과정

일관된 구축, 패키징 및 배포하는 과정

서비스 어셈블리 (service assembly)

은 다음 운영상의 수명 주기 단계로 대응됨

네 가지 원칙 은 다음 운영상의 수명 주기 단계로 대응됨

※ 마이크로서비스를 사용하지 않아야 하는 경우

분산 시스템은 복잡성이 높음.

따라서 높은 운영 성숙도를 갖출 투자가 되어있지 않다면 마이크로서비스를 고려하지 말것.

마이크로서비스 기반 애플리케이션은 구축 및 관리가 필요한 서버나 컨테이너가 50~100개 있을 수 있음.

따라서 클라우드에서 이들 서비스를 실행하는 데 드는 비용은 저렴하더라도 서버를 관리하고 모니터링하는 운영 작업은 엄청나게 복잡해질 수 있음 .

소형 애플리케이션이나 소수 사용자를 위한 애플리케이션 개발 시 마이크로서비스와 같은 분산 모델로 구축한다면 , 얻게될 가치보다 구축에 따른 복잡성이 더 클 수 있음.

여러 데이터 소스에서 복잡한 데이터를 취합하고 변환해야 할 경우 마이크로서비스의 분산적 특성 때문에 작업이 어려워짐.

from http://mungyu.tistory.com/12 by ccl(A) rewrite - 2021-12-28 18:01:27