마이크로서비스 소개


마이크로서비스 장점

  1. 확장성, 유연성, 독립적 배포
  2. 상대적으로 작은 프로젝트의 규모
    • 새로운 개발자가 이해하기 쉽다.
    • 하나의 비즈니스 영역만 구현하기 때문에 코드 변경 시 영향도가 적다.
    • 코드의 품질을 유지하기 쉽다.

스프링 프레임워크로 마이크로서비스 만들기

스프링 프레임워크를 사용하는 이유

    • Service Registry, Configuration Server, Circuit Breaker, Cloud Bus, Oauth2 패턴, API 게이트웨이 같은 검증된 패턴을 구현한다.
    • 강력한 커뮤니티를 기반으로 유지가 잘 되고 있다.
    • 많이 사용되고 있는 프레임워크다.
    • 문서화가 잘 되어 있고 많은 예제들을 쉽게 찾을 수 있다.

클라우드 개발의 장점

    • 확장성과 신뢰성, 낮은 유지보수 비용
    • 유연한 확장, 변하지 않는 배포, 폐기 가능한 인스턴스
    • 즉 시간과 비용 절감

모놀리식(전통적) 개발 방식의 단점

    • 코드 베이스 증가
    • 수정과 유지보수 복잡
    • 새로운 기능, 프레임워크, 기술 적용의 어려움
    • 새로운 아이디어를 적용하고 혁신하는데 부정적인 영향을 미침
"네이티브 클라우드 애플리케이션이란 단순히 클라우드로 이전한 프로그램이 아니라 클라우드 환경을 위해 잘 설계된 프로그램이다."


마이크로서비스 아키텍처 배우기

API 게이트웨이

    • 특정 서비스 호출 숨김(복잡도 숨김)
    • 동적 라우팅
    • 시스템으로의 진입점으로 다음과 같은 일을 한다.
      • 중요한 데이터 추적
      • 요청 메트릭 수집
      • 통계
      • 어플리케이션에서 사용될 부가 정보 삽입을 위한 요청 및 응답 헤더 조작

서비스 디스커버리의 필요성 이해하기

서비스 디스커버리

    • 필수 메커니즘
    • 컴퓨터 네트워크상의 디바이스가 제공하는 디바이스와 서비스를 자동으로 감지하는 서비스
    • 모든 서비스는 시작 후 다른 중앙 장소에 자신을 등록
    • 등록 키는 전체 시스템에서 유일한 서비스이거나 유일한 식별자여야 한다.
      • 이름을 통해 서비스를 찾고 호출하기 위함
      • 모든 개별 키에는 할당된 값이 있다.(서비스의 네트워크 위치를 나타냄)
      • 하나의 키에 같은 서비스의 여러 인스턴스가 등록될 수 있다.
    • 서비스는 특정 디스커버리 서버에 등록된 다른 서비스의 전체 목록을 얻는다.
    • 등록 목록의 변경 사항을 알기 위해 마이크로서비스가 원격 디스커버리 서버에 의해 이전에 수집된 컨피규레이션을 주기적으로 갱신한다.

서비스 디스커버리를 서버 컨피규레이션 기능과 함께 사용 가능


서비스 간 통신

시스템의 신뢰성 보장을 위해 최소 두 개의 인스턴스를 실행하는 것이 좋다.

    • 최적의 성능을 위해 인스턴스의 수는 적게 유지한다.
    • 부하 분산기는 대개 API 게이트웨이에 내장되어 있다.
    • 분산기는 디스커버리 서버에 등록된 인스턴스 목록을 가져와야 한다.
    • 라운드 로빈 규칙을 적용하여 트래픽을 50/50으로 분배한다.
    • 같은 규칙으로 마이크로서비스 측의 부하 분산기에 적용된다.

장애와 서킷 브레이커

    • 장시간 응답을 기다려서 스레드를 점유하게 하는 대신 에러 응답을 보내는 것이 좋다.

서킷 브레이크 패턴

    • 성공 및 실패 요청의 횟수를 센다.
    • 에러의 비율이 가정된 임계치를 넘으면 차단이 발생하고 이후의 시도는 즉시 실패한다.
    • 지정된 기간이 지난 후 다시 요청을 다시 시작하고 성공하면 서킷을 닫고 정성화 시킨다.
    • 다수의 인스턴스 중에 일부가 다른 것보다 느리게 동작하면 해당 인스턴스는 무시된다.

폴백(fallback)

    • 요청이 실패했을 때 수행되는 로직
    • 캐싱된 데이터나 기본값, 빈 결과 목록을 반환할 수 있다.
    • 캐싱된 데이터나 기본값을 반환하는 것보다 에러 코드를 전파하는 것이 확실하고 좋은 방법이다.


+ Recent posts