<책 정리> 도메인 주도 설계로 시작하는 마이크로서비스 개발 (2)

2023. 9. 29. 15:07·개발 공부

리액티브 선언 : 현대 애플리케이션이 갖춰야 할 바람직한 속성들

소프트웨어 아키텍쳐 : 소프트웨어를 구성하는 요소와 그 구성 요소간의 관계를 정의한 것. 아키텍처를 정의하는 과정은 시스템 구축을 위한 여러가지 비기능 요견(성능, 가용성, 보안, 유지보수성, 확장성 등)을 만족하는 다양한 해결 방법을 찾는 과정이다

 

마이크로서비스 아키텍처는 클라우드라는 가상화된 인프라를  활용하기 때문에 인프라의 특징을 고려해서 설계해야 한다.

리액티브 선언문 : 현대 애플리케이션에 대한 기대를 표현한 문서, 응답성, 탄력성, 유연성, 메시지 기반이라는 특성을 가지고 있음. 

이러한 요건을 만족하는 시스템을 리액티브 시스템이라고 한다.

 

응답성 : 사용자에게 신뢰성 있는 응답을 빠르고 적절하게 제공하는 것을 의미한다.

탄력성 : 장애 발생 혹은 부분적인 고장으로 전체 시스템이 고장나지 않고 빠르게 복구하는 능력을 의미한다.

유연성 : 시스템의 사용량에 변화가 있더라도 균일한 응답성을 제공하며 사용량에 비례해 자원을 늘리거나 줄이는 능력을 의미한다.

메시지 기반 : 비동기 메시지 전달을 통해 위치 투명성, 느슨한 결합, 논 블로킹 통신을 의미한다.

 

즉 급현하는 상황에 적응할 수 있는 시스템이 리액티브 시스템

 

리액티브 시스템이 여러 변수에 대응하기 위해서는 아키텍처 유연성을 가져야 하는데 시스템을 구성하는 요소 간의 관계들이 느슨하게 맺어져 있어 언제든지 대체되거나 추가 확장될 수 있는 특성을 말한다

 

강 결합에서 느슨한 결합의 아키텍처로의 변화

예전에는 아키텍처의 구성요소들을 각 기업이나 특정 벤더의 제품에 전적으로 의존해 제품이 변경될 경우 애플리케이션의 많은 부분을 바꿔야하는 불편함이 있었다. 최근의 아키텍처는 필요한 영역에 적절할 솔루션을 선택하고 조합하는 개방적인 방식이다. 

 

마이크로서비스의 외부 아키텍처와 내부 아키텍처

외부 아키텍처 : 마이크로서비스가 운영되는 환경을 정의한다.인프라, 플랫폼, 애플리케이션 영역에 있는 구성요소 및 관계를 정의하는 것을 의미한다. 

내부 아키텍처 : 마이크로서비스가 제공하는 API, 비즈니스 로직, 이벤트 발행, 데이터 저장 처리 등을 어떻게 구조화해야 하는가에 관한 내용

 

MSA 구성요소 및 MSA 패턴

아키텍처는 문제 영역에 대한 솔루션을 제공하는 것인데 이에 대해 여러 사람들에 의해 검증되어 정리된 해법을 아키텍처 스타일 , 아키텍처 패턴이라고 부른다. 마이크로서비스 아키텍처 패턴은 인프라 패턴, 애플리케이션 인프라 패턴, 애플리케이션 패턴 등으로 분류해서 정의할 수 있다. 

 

인프라 구성요소

IT 업계에서 인프라의 의미는 엔터프라이즈 IT 환경을 운여하고 관리하는 데 필요한 근간이 되는 하드웨어, 소프트 웨어, 네트워킹 구성요소, 운영체제, 데이터 스토리지 등을 모두 포괄한다. 

 

VM과 컨테이너

마이크로서비스 같이 독립적으로 배포되고 수정되기 위한 환경은 가상머신 보다는 컨테이너가 더 적절하다. 가장 대표적인 기술로는 도커가 있다. 

 

컨테이너 오케스트레이션

컨테이너 기술을 선택했다면 컨테이너를 관리하기 위한 기술 또한 필요하다. 컨테이너가 많아지면 그에 따라 컨테이너의 자동 배치 및 복제, 장애 복구, 확장 및 축소, 컨테이너 간 통신, 로드 밸런싱 등 컨테이너 관리를 위한 기능이 필요해진다. 이러한 기술을 컨테이너 오케스트레이션이라고 하는데 최근에는 쿠버네티스가 인기를 끌고 있다.

 

쿠버네티스는 다음과 같은 기능을 제공한다.

자동화된 자원 배정 : 각 컨테이너가 필요로 하는 CPU와 메모리를 쿠버네티스에 요청하면 컨테이너를 노드에 맞춰 자동으로 배치한다.

셀프 치유 : 컨테이너의 이상 유무를 점검해서 실패한 경우 자동으로 교체하고 재 스케줄링한다.

수평 확장 : 일정 CPU 및 메모리 사용량을 초과하면 자동으로 확장한다

 

마이크로서비스 운영과 관리를 위한 플랫폼 패턴

애플리케이션을 빌드하고 인프라에 배포할 수 있는 환경이 중요하다. 이를 지원하는 환경을 데브옵스라고 한다. 자동화된  빌드나 배포 작업을 CI/CD라고 하며 CI는 지속적 통합 CD는 지속적 배포라고 한다.

 

스프링 클라우드 : 스프링 부트 + 넷플릭스 OSS

스프링 클라우드는 스프링 프레임워크를 개발하고 있는 피보탈에서 넷플릭스가 공개한 줄, 유레카, 히스트릭스 , 리본 등의 넷플릭스 오픈소스를 스프링 부트 프레임워크 기반으로 사용하기 쉽게 통합한 것이다. 

줄, 리본 : 라우팅과 로드밸런싱 담당

히스트릭스 : 모니터링

유레카 : 서비스 등록

 

비즈니스를 구현한 마이크로서비스와 스프링 클라우드 서비스의 연계 흐름

1. 모든 마이크로서비스는 인프라에 종속되지 않도록 데이터베이스, 파일 등에 저장된 환경 설정 정보를 형상관리 시스템에 연계된  'Config 서비스'에서 가져와 설정 정보를 주입한 후 클라우드 인프라의 개별 인스턴스로 로딩된다.

2. 로딩과 동시에 '서비스 레지스트리'에 자신의 서비스 명과 클라우드 인프라부터 할당받은 물리적 주소를 매핑해서 등록한다. 

3. 클라이언트가 'API 게이트웨이'를 통해 마이크로서비스에 접근하고, 이때 API 게이트웨이는 적절한 라우팅 및 로드밸런싱을 수행한다.

4. API 게이트웨이에서 클라이언트가 마이크로서비스에 접근하기 위한 주소를 알기 위해 '서비스 레지스트리' 검색을 통해 서비스의 위치를 가져온다

5. 동시에 API 게이트웨이는 클라이언트가 각 서비스에 접근할 수 있는 '권한 서비스'와 연계해 인증/인가 처리를 수행한다. 

6. 모든 마이크로서비스 간의 호출 흐름은 '모니터링 서비스' 와 '추적 서비스'에 의해 모니터링되고 추적된다.

 

'개발 공부' 카테고리의 다른 글

<책 정리> 도메인 주도 설계로 시작하는 마이크로서비스 개발 (3)  (0) 2023.10.13
<책 정리>도메인 주도 설계로 시작하는 마이크로서비스 설계 (1)  (0) 2023.09.21
#5 JAVA Getter, Setter 메소드  (0) 2022.08.30
#4 JAVA Overloading  (0) 2022.08.23
#3 JAVA Break, Continue 문  (0) 2022.08.22
'개발 공부' 카테고리의 다른 글
  • <책 정리> 도메인 주도 설계로 시작하는 마이크로서비스 개발 (3)
  • <책 정리>도메인 주도 설계로 시작하는 마이크로서비스 설계 (1)
  • #5 JAVA Getter, Setter 메소드
  • #4 JAVA Overloading
코딩숙
코딩숙
개발이라는 끝이 없는 바다 묵묵히 꾸준히 항해하기
  • 코딩숙
    코딩숙
    코딩숙
  • 전체
    오늘
    어제
    • 분류 전체보기 (63)
      • CS 공부 (17)
        • 클라우드 (3)
        • 네트워크 (3)
      • 개발 공부 (40)
        • 오류 해결 (4)
        • 알고리즘 (12)
        • Spring (3)
        • JPA (2)
        • TIL(오늘 내가 배운 것) (9)
        • 코드복습 (1)
        • 디자인 패턴 (1)
      • IT 관련 영상 메모 (1)
      • 데일리피드백 (0)
      • Tools (1)
      • Wishy (이력서 평가 프로젝트) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    백준
    프로그래머스
    java
    인프런
    user mode
    innodb
    HTTP BODY
    개발자
    게임 맵 최단거리 자바
    isAfter()
    http
    getter method
    데이터 타입
    JPA
    자바
    변수
    programmers #정수 내림차순으로 배치하기
    프로그래머스 네트워크 자바
    setter method
    마이크로서비스
    도메인설계
    개발공부
    isBefore()
    데이터베이스 백업
    데이터베이스 손상
    키 페어 변경
    404 Not Found
    302 Found
    appsmith
    키 페어 분실
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
코딩숙
<책 정리> 도메인 주도 설계로 시작하는 마이크로서비스 개발 (2)
상단으로

티스토리툴바