[TIL] Spring Cloud를 활용한 MSA 기초 - 2강 MSA 이해

GuruneLee·2020년 9월 26일
0

MSA란?

시스템을 여러개의 독립된 서비스로 나눠서, 이 서비스를 조합함으로서 기능을 제공하는 아키텍쳐 디자인 패턴
ex. 넷플릭스, 트위터, 아마존 등등

AMAZON에서 시작된 MSA ( 제프 베조스, 아마존의 CEO )

  • 모든 팀들은 데이터와 기능들을 서비스 인터페이스로 연결해라
    팀들은 인터페이스로만 연락해야한다
  • 다른 어떤 커뮤니케이션 방법도 안된다. 직접링크를 보내거나 다른 팀의 스토리지에 직접 엑세스 하는건 안된다. 공유메모리, 백도어도 안된다.
  • 어떤 기술을 쓰든 상관없다. HTTP, Cobra, Pubsub, 독자 프로토콜... 그건 상관없다
  • 모든 서비스 엔터페이스는 예외없이 외부에서 이용가능하게 만들어져야 한다. 외부 개발자들이 인터페이스를 이용할 수 있게 해야한다
    ( MSA의 가장 본질적인 부분... )

2006년 아마존 웹 서비스(AWS) 릴리즈 - 내부에서 사용한 것과 똑같은 플랫폼

넷플리스조차 AWS를..

  • 2008년 데이터 베이스에 문제 발생 ( DVD를 고객에게 보낼 수 없음 )
  • scale-up 확장만 가능한 인프라 스트럭쳐와 단일 장애지점 (SPOF)이라는 한계에서 벗어나길 선언
  • 그 시작은 아파치 카산드라 데이터베이스
    2009년 AWS로 이관 시작
  • 확장성(Scalability), 성능(Performance), 가용성(Availability) 세가지 목표에 집중
    '자체 보유 인프라와 솔루션으로는 이렇게 급증한 트래픽을 감당할 수 있는 확장성을 확보할 수 없었을 것'

MSA의 공통점

MSA는 공식적인 정의는 없다.
단지 다음과 같은 공감대가 있다

  • 서비스간 Network를 통해 (보통 HTTP)
  • 독립된 배포 단위
  • 각 서비스는 쉽게 교체 가능
  • 각 서비스는 기능중심으로 구성됨 ( ex. 프론트 엔드, 추천, 정산, 상품 등 )
  • 각 서비스에 적합한 프로그래밍 언어, 데이터 베이스, 환경 으로 만들어짐 ( 만들어져도 상관 없음 )
  • 서비스는 크기가 작고, 상황에따라 경계를 정하고, 자율적으로 개발되고, 독립적으로 배포되고, 분산되고, 자동화 된 프로세스로 구축되고 배포된다
  • 마이크로 서비스는 한 팀에 개발할 수 있는 크기가 상한선

마이크로 서비스는 아직까지 아이디어 수준에서 크게 벗어나 있지 않다. 다양한 산업 분야에서 폭넓게 적용되고 있지만 그것이 좋은지 나쁜지 시간이 더 지나봐야 알 수 있다
_ 조쉬 롱, 케니 바스타니, 피보탈

monolithic에서 MSA로

  • 각 MS별로 DB를 가짐 (공유되는 상태가 없음) - DB를 분리해야한다는 의미
  • REST API인터페이스 외엔 호출할 방법이 없음

실습 ( 인텔리J ) - 공부필요

@RestController -> 스프링부트의 문법인가/ java의 문법인가... 무엇을 의미하는가 < annotation ????
@RestTemplate가 뭔지 알아보자
@Autowired ? final -> alt+enter -> add constructor parameter ? 뭐가 기능은 같은데 다르나보다
dependency injection??
ctrl + shift + A : action 검색기능
-> implement interface ( 인터페이스는 이걸 해서 impl머시기를 만들고 거기서 써야하나바... 아, 함수를 정의하는 파트를 따로 만드는건가? 아 그런갑다 )
-> constant 어쩌고 => 해당 값을 const 변수로 선언해주는 기능

DB 분리..? - 공부필요

  • DB는 정말 분리하기 힘들다. 따라서 큰 DB를 각 MS로 분리하는게 사실 제일 어렵다 ( 이벤트 드리븐, 분산 트레젝션 등등 ... )
profile
Today, I Shoveled AGAIN....

0개의 댓글