오늘 배운 것
- MSA
MSA란?
- MSA = MicroServices Architecture
- 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하는 것이다.
- 분리해서 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일이다.
특징
- 독립적인 서비스는 특정 비즈니스 기능을 수행한다.
- 독립적인 서비스 간의 통신은 HTTP/HTTPS, 메시지 큐 등을 통해 이루어진다.
- 서비스가 독립되어 있어 각각 배포 가능하다.
- 서비스가 독립되어 있어 다른 서비스에 영향 없이 업데이트, 확장 가능하다.
- 서비스가 독립되어 있어 기술 스택 자유롭게 선택할 수 있다. (한 서비스는 Spring로 개발, 한 서비스는 Django로 개발)
MicroServices Architecture VS Monolithic Architecture
MicroServices Architecture Monolithic Architecture
장점 | 단점 | 장점 | 단점 |
확장성 | 복잡성 | 간단한 배포 | 확장성 부족 |
유연성 | 운영비용 | 단일 데이터베이스 | 유연성 부족 |
독립적 배포 | 데이터 관리 | 테스트 간소화 | 긴 개발 주기 |
작은 팀 구성 | 네트워크 지연 | 간편한 디버깅 | 기술 채택의 장벽 |
Monolithic Architecture는 처음에 강의나 팀 프로젝트를 진행할 때 하는 방식이라고 생각하면 된다.
모든 기능이 하나의 애플리케이션에 있는 방식이다.
Spring Cloud
Spring Cloud는 MSA 개발 위해 다양한 도구와 서비스를 제공하는 스프링 프레임워크의 확장이다.
다양한 도구와 서비스를 제공하는데 주요한 것은 아래와 같다.
주요 기능
- 서비스 등록 및 디스커버리: Eureka, Consul, Zookeeper
- 로드 밸런싱: Ribbon, Spring Cloud LoadBalancer
- 서킷 브레이커: Hystrix, Resilience4j
- API 게이트웨이: Zuul, Spring Cloud Gateway
- 구성 관리: Spring Cloud Config
- 분산 추적: Spring Cloud Sleuth, Zipkin
- 메시징: Spring Cloud Stream
각각의 하는 일을 그림으로 표현하면 아래와 같다.
- Ribbon : 어떤 서비스로 요청을 보낼지 결정하는 로드 밸런서 역할 하는 것
- Eureka : 어떤 서비스 호출할 때 어디에 있는지 (IP, port 등) 알고 있어 호출에 도움주는 것
- API gateway : 각 서비스 호출 시 호스트 다른 번거로움 해소하기 위해 요청 적절한 서비스로 보내주는 것
- 서킷 브레이커 : 장애 전파를 막기 위한 것
- config 서버 : 각 서비스의 config 파일 관리해 쉽게 수정할 수 있게 해주는 것
- Zipkin : 직관적으로 보이지 않는 호출 흐름 분산 추적을 통해 보여주는 것
정리
늘 들어만 보던 MSA에 대해서 알아보니 굉장히 배울 것이 많았다.
그냥 개발하고 배포하면 된다 생각했는데 MSA 같은 아키텍처 스타일에 여기에서 파생된 다양하고 좋은 기술들이 많이 있음을 알았다.
이런 기술들을 사용해야 더 좋은 애플리케이션을 개발할 수 있고 진정한 백엔드 고수가 되겠구나 생각했다.
'TIL' 카테고리의 다른 글
24.08.08 TIL - 스프링 소셜 로그인 코드 리팩토링 (0) | 2024.08.09 |
---|---|
24.08.07 TIL - C++ 코딩 테스트 유용한 함수들 (0) | 2024.08.08 |
24.08.05 TIL - Java 람다 기초 (0) | 2024.08.06 |
24.08.04 TIL - 윈도우 스프링 프로젝트 AWS 초 간단 배포 (0) | 2024.08.05 |
24.08.03 TIL - Effective Java Item 55 (0) | 2024.08.04 |