[Spring Cloud로 개발하는 MSA] Microservice와 Spring Cloud 소개

유호빈·2024년 3월 25일
0

MSA

목록 보기
1/10

인프런의 "Spring Cloud로 개발하는 마이크로서비스" 강의를 보고 작성되었습니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4

다음에 진행할 프로젝트에 MSA를 도입하기 위해 스터디를 진행하게 됐습니다.
평소에 궁금하고 관심있었던 내용이라 잘 익혀서 프로젝트에 적용해보려 합니다.

1.소프트웨어 아키텍처

IT 시스템의 발전에 있어서 2010년 이후로 Anti-Fragile과 Cloud Native의 아키텍처가 발전되어 DevOps와 같은 IT 문화가 생기게 됐습니다.

Antifragile 특징

Antifragile의 특징에는 크게 4가지가 있습니다.

  1. Auto scaling (확장성)

사용량에 따라 자동으로 인스턴스를 증가, 감소 시킬 수 있습니다.

  1. Microservices

세분화된 서비스를 의미합니다.

위의 그림은 넷플릭스의 마이크로서비스를 보여주며 저는 이러한 개념을 처음봐서 이해가 안됐는데 이 그림을 보고 조금은 이해할 수 있었습니다.
파란색은 서비스 간 연동, 통신을 의미하고, 연두색 부분은 넷플릭스 전체 서비스를 구축하는 각 마이크로서비스를 의미한다고 합니다.

  1. Chaos engineering

예측 불가의 상황을 견디게 하는 소프트웨어 등의 실행 규칙을 의미합니다.

  1. Continuous Deployments

    CI/CD 같은 파이프 라인을 통해 자동화하여 배포하는 것을 의미합니다.

2. Cloud Native Architecture

로컬 환경에서 구축하던 시스템을 클라우드 환경으로 전환하기 위해 이해해야할 아키텍처

특징

  1. 확장 가능한 아키텍처

확장에 유연하기 때문에 부하 분산에 용이하고 가용성이 좋습니다.

  1. 탄력적 아키텍처

CI/CD 를 통해 서비스의 생성, 통합, 배포의 시간을 단축시킵니다.
각 서비스들은 분리되어 있으며 종속성을 최소화시켜야합니다.
무상태(Stateless) 통신의 서비스를 제공합니다.

  1. 장애 격리

오류가 다른 서비스에 영향을 주지 않습니다.

3. Cloud Native Application

구성

  1. Microservice

  2. CI/CD

  3. DevOps : 수정이나 변경 후 바로 배포가 가능

  4. Containers

Cloud Native Application 고려사항

고려사항 12가지에 대해 간단하게 살펴보면 다음과 같습니다.

  1. 코드 베이스 : 버전 제어, 형상 관리가 목적으로 통일적인 관리
  2. 종속성 : 전체 시스템에 영향을 주면 안된다.
  3. Configurations : 코드 외부에서 마이크로서비스 제어
  4. 서비스 지원 : DB 등 보조 서비스 추가 시 코드 의존성을 갖지 않도록 한다.
  5. 빌드, 릴리즈, 실행 환경의 분리
  6. Stateless 프로세스 : 프로세스의 독립적인 실행
  7. 포트 바인딩
  8. 동시성
  9. 삭제 가능성
  10. 개발 및 프로덕션 단계 구분 : 다른 작업과 종속되지 않도록 한다.
  11. 로깅 시스템 : 로깅을 이벤트 스트림으로 처리
  12. 프로세스 : 리소스 관리 도구

위의 12가지에 더해 피보탈 회사에서 추가한 3가지는 다음과 같습니다.

  1. API - first
  2. Telemetry : 지표 시각화
  3. Authentication / Authorization

4. Monolithic vs. Microservice

Monolithic

커다란 소프트웨어 안에 애플리케이션 실행을 위해 필요한 요소를 전부 포함하는 것을 의미합니다. 따라서 서로 의존성을 갖습니다.


위의 그림과 같은 아키텍처이고 COPY 와 같이 일부 기능 수정 시 전체 애플리케이션을 다시 빌드하고 배포해야 합니다.

Microservice

각 구성요소가 분리되어 있습니다.
따라서 유지보수 및 변경 사항을 적용하기에 유리합니다.

Microservice 특징

  1. 작은 시스템의 경계
  2. RESTful API 통신
  3. 환경 설정 정보 외부 관리
  4. Cloud Native 기술 사용
  5. 시각화 도구 필요

Microservice 필요성에 대한 고민

이러한 Microservice가 무조건 도입되어야 할까? 라는 고민에 다음과 같은 생각을 해봐야 합니다.

  1. 비용적으로 얼마나 변화가 생길 것인가
  2. 서비스의 경계가 잘 만들어져 있는가
  3. 서비스의 확장성이 가능한가
  4. 오류 사항이 독립적인가
  5. 외부 종속성과의 상호작용이 단순화 되어있는가
  6. 여러 프로그램 언어, 스토리지 기술 등을 쓸 수 있도록 지원하는가

위의 사항이 잘 고려되어 있다면 도입을 고려할 수 있습니다.

5. SOA (Service-Oriented Architecture) vs MSA

제목의 둘은 서비스를 지향한다는 공통점을 같고 있습니다.
그렇다면 차이점에 대해 한 번 살펴보려 합니다.

SOA

재사용을 통해 비용을 절감합니다. 따라서 서비스의 공유를 최대화합니다.

이때, 공통으로 사용하는 서비스를 "서비스 버스" 라는 개념의 하나의 서비스 형태로 구성하여 서비스 간의 통신을 통해 공통으로 사용합니다.

MSA

MSA는 서비스 간의 결합도를 낮춰 능동적으로 대응합니다. 따라서 서비스 공유를 최소화합니다.

MSA에서는 REST API를 통해 리소스를 제공합니다.

6. Spring Cloud

Spring Cloud는 Microservice를 지원하여 MSA를 구현할 때 사용되는 스프링 프레임워크 기반의 프로젝트입니다.

Spring Cloud를 통해 애플리케이션 구축 시 필요한 내용을 살펴보면 다음과 같습니다.

  1. Spring Cloud Config Server : 환경 설정 관리 → 서비스의 환경 설정 정보

  2. Naming Server (Eureka) : 서비스 등록, 위치 정보 확인 등 서비스

  3. Ribbon (Client Side) , Spring Cloud Gateway : 로드 밸런싱 기능, 게이트웨이 역할

  4. FeignClient : 데이터 통신

  5. Zipkin, Netflix API gateway : 시각화, 모니터링

  6. Hystrix : 장애 복구


첫 강의에서는 위와 같이 개념에 대해 알아보았습니다.
저는 MSA에 대해 궁금했던 것이 어떻게 구현하는 지 궁금했었는데 Spring에서 Spring Cloud를 통해 구현이 가능한 것을 알게 되었습니다.

얼른 구현하면서 익혀야 개념도 더 잘 이해가 될 것 같습니다.

profile
시작하자

0개의 댓글