본문 바로가기
해피 코딩/Today I Learned

[TIL 2] MSA와 Spring Cloud

by happy-coding 2024. 8. 1.

Today I Learned

오늘은 알고리즘을 2문제를 풀고, MSA, Spring Cloud에 대하여 공부하였다.
알고리즘은 이제 처음 시작한 만큼, 쉬운 문제부터 하나씩 차근차근 풀어나갈 예정이다.
Spring Cloud를 처음 공부하는 코린이🧑‍💻 입장에서 신기했던 것은 넷플릭스가 Eureka, Ribbon, Hystrix, Zull 을 개발했다는 것이었다. 
넷플릭스가 Spring Cloud를 개발한 이유에 대해서는 블로그 중간에서 알려주기 때문에 블로그를 끝까지 읽어줘야 한다. 

[ MSA ]

MicroService Architecture의 줄임말로, 애플리케이션을 작고 독립적으로 배포 가능한 서비스로 분할하는 설계 방식이다. 하나의 애플리케이션을 여러 개의 독립적인 서비스로 분리하여 개발, 배포, 유지보수를 용이하게 하는 소프트웨어 아키텍처 스타일이며, 각 서비스는 특정 비즈니스 기능을 수행하고, 서로 독립적으로 배포되고 확장될 수 있다.

모놀리식 서비스와 달리 애플리케이션이 여러 개의 독립적인 서비스로 분리되어 있는 모습을 볼 수 있다


[ MSA의 장점 및 단점 ]

  • 장점
    • 확장성: 각 서비스는 독립적으로 확장이 가능하며, 특정 기능에 대한 성능 최적화가 용이하다.
    • 유연성: 다양한 기술 스택을 사용하여 각가의 서비스별 최적화가 가능하다.
    • 독립적 배포: 서비스별로 독립적 배포가 가능하여 배포 주기를 단축할 수 있다.
    • 작은 팀 구성: 서비스별 작은 팀으로 구성되어 민첩한 개발이 가능하다.
  • 단점
    • 복잡성: 서비스 간 통신, 데이터 일관성 유지, 트랜잭션 관리 등의 복잡성이 증가
    • 운영비용: 각 서비스의 모니터링, 로깅, 장애 대응 등을 개별적으로 관리해야 하므로 운영 비용이 증가
    • 데이터 관리: 분산된 데이터베이스로 인해 데이터 일관성 유지가 어려울 수 있음
    • 네트워크 지연: 서비스 간의 통신이 네트워크를 통해 이루어지므로 지연 시간이 발생할 수 있음

아마존과 넷플릭스 아키텍처를 도식화한 그림

 

아마존과 넷플릭스에서 MSA 방식을 채택했다고 하여 무조건 MSA방식을 사용해야 하는것은 아니다. 

마이크로서비스 아키텍처와 모놀리식 아키텍처는 서로 다른 특성과 장점을 갖고있기 때문에 아키텍처를 선택할 때는 프로젝트의 규모나 팀의 여건, 비즈니스 요구사항 등 여러 요인을 고려해야 한다. 즉, 비즈니스에 가장 적절한 아키텍처가 무엇인지 판단하고 적용하는 게 가장 중요하다고 할 수 있다. [ infcon-2023-tech-msa 참고 ] 

[ 넷플릭스가 Spring Cloud를 개발한 이유 ]

넷플릭스가 모놀리식 아키텍처에서 클라우드 서비스와 MSA 환경으로 바꾸게 되는 흥미로운 글이 있어서 주소를 남겨본다.

https://blog.naver.com/c-platform/222693128572

 

넷플릭스 사례로 보는 '마이크로 서비스vs레거시'

왜?! IT 기업들은 레거시 환경을 버리고 마이크로 서비스 환경을 선택하고 있을까요? 몇 년 전부터 수많...

blog.naver.com

2007년 넷플릭스는 DB에 심각한 장애가 발생해 3일간 DVD 배송 지연 이라는 문제를 발생하게 된다. 이 문제를 계기로 8년에 걸처 모놀리식 아키텍처 방식에서 MSA 방식으로 전환하게 되는데, 그 과정에서의 노하우와 문제 해결 방법을 오픈소스로 공개하게 되는데. 이것이 Spring Cloud Netfilx이다.


[ Spring Cloud ]

Spring Cloud는 마이크로서비스 아키텍처를 구축하고 운영하는 데 필요한 다양한 도구와 프레임워크를 제공하는 Spring Framework의 확장이다. Spring Cloud는 분산 시스템 개발을 단순화하고, 구성 관리, 서비스 등록 및 디스커버리, 로드 밸런싱, 서킷 브레이커 등의 주요 기능을 제공한다.
  • 주요 기능
    • 서비스 등록 및 디스커버리: Eureka, Consul, Zookeeper
    • 로드 밸런싱: Ribbon, Spring Cloud LoadBalancer
    • 서킷 브레이커: Hystrix, Resilience4j
    • API 게이트웨이: Zuul, Spring Cloud Gateway
    • 구성 관리: Spring Cloud Config
    • 분산 추적: Spring Cloud Sleuth, Zipkin
    • 메시징: Spring Cloud Stream

MicroService Architecture, Spring Cloud에 대하여 처음 접하게 됐는데, 모놀리식 아키텍처만 사용하던 나에게 MSA는 매우 흥미롭고 새로운 미지의 세계처럼 느껴졌다. 스프링을 공부하고 배움에 있어서 한 층 더 성장하고 깊이 있는 단계에 들어선 느낌이다.

 

읽어 주셔서 감사합니다 😊