본문 바로가기
👨‍💻 프로그래밍/Architecture

마이크로서비스(MSA)를 쓰는 이유

by 개발자 진개미 2023. 3. 28.
반응형

초반에 프로그래밍을 공부하면서 틈틈히 IT 기업들의 발표회를 보곤 했는데, 거의 알아들을 수 없어서 충격을 받았던 적이 있습니다. 아직 갈 길이 멀구나 좌절하고, 반년 정도 열심히 공부한 후 다시 봤는데, 놀랍게도 똑같이 거의 알아들을 수 없었습니다. 나중에 알고 보니, 제가 알아듣지 못한 내용은 모두 MSA 관련 내용이였습니다.

 

MSA(마이크로서비스 아키텍처), 말 그대로 서비스를 작게(마이크로하게) 만든다는 것입니다.

대기업들은 굳이 왜 MSA를 사용할까요? MSA를 배워 보면 그 이유가 명확해 집니다. MSA에 관한 공부를 앞두고 계신다면, 그 전에 MSA가 정말 왜 필요한지 알려드리겠습니다.

 


크면 클 수록, 관리가 힘들고 예상치 못한 오류들이 많이 나온다

구글이나 마이크로소프트 같은 실리콘벨리의 큰 기업도 혁신적인 새로운 제품의 대부분이 스타트업을 인수한 것이라는 사실을 알고 계시나요? 회사의 사이즈나 커지면 어쩔 수 없이 기존에 있던 레거시 때문에 비효율이 생기고, 그래서 변화에 빨리 움직이기 힘들 수 밖에 없습니다.

 

소프트웨어도 똑같습니다. 아무리 SOLID 원칙을 지키고, 아무리 Clean Code를 엄수해도, 큰 시스템에는 큰 비효율이 따를 수 밖에 없습니다. 그래서 기존의 큰 하나의 시스템을 여러개의 작은 시스템으로 나누고, 이 시스템을 각각의 팀에서 관리해 비효율을 개선하는 것입니다.


비교적 자유롭게 확장(Scale) 할 수 있다

서버가 감당할 수 없는 요청보다 많은 요청이 오면 서버는 터져버립니다. 기존의 온프레미스(On-Premise) 환경에서는 갑자기 트레픽이 늘어난다고 서버를 증설할 수 없어 서버가 다운되는 일이 많았습니다.

 

그러다 클라우드(Cloud)의 시대가 되면서, 클릭 몇 번으로 비교적 자유롭게 서버의 성능을 늘리거나(Scale Up) 여러대의 서버를 만들 수 있게 (Scale Out) 되면서 서버가 터지는 일이 줄었습니다.

 

하지만 아직도 비효율이 있습니다. 모노리틱 아키텍처(하나의 큰 애플리케이션이 다 함)에서는 특정 서비스에 트래픽이 많다고 해서, 그 서비스만 확장할 수 없습니다.

 

하지만 MSA에서는 가능합니다. 갑자기 연예인이 우리 서비스를 쓰는게 화제가 되서 회원가입에 트래픽이 몰린다면, 회원가입 마이크로서비스만 확장 가능합니다. 그래서 MSA와 Cloud가 도입되고, 서버가 터지는 일이 훨씬 줄었습니다.


그렇다면 왜 모든 회사가 MSA를 쓰지 않을까

당연히 이런 장점만 있다면 모든 회사에서 MSA를 사용했겠지만, MSA는 치명적인 단점이 있습니다. 바로 관리, 운영하기가 힘들다는 것 입니다. 

 

MSA를 원활하게 운영하기 위해서 고려해야 할 것들 몇 가지만 보시면 왜 관리/운영이 힘든지 알게 되실 겁니다.

  • 여러개의 MS 인스턴스의 IP 주소를 관리하는 시스템이 있어야 함 (Service Discovery)
  • MS는 각자 중지없이 배포되야 함 (CI/CD)
  • 여러개의 MS 인스턴스 사이의 로드 밸런서 (Load Balancer)
  • 특정 서비스에 트래픽이 몰리면 자동으로 확장 가능하게 해야 함
  • 중간에 오류로 예상치 못하게 MS가 중지되도 데이터의 손실은 없어야 함
  • 여러개의 MS 사이의 트랜젝션(Transaction)을 지원해야 함
  • 여러개의 MS 사이의 보안을 지원해야 함
  • 여러개의 MS 사이의 통신이 비동기적이어야 함
  • 여러개의 MS 사이의 Log를 1개로 모아 검색 가능하게 해야 함 (Distributed Tracing)

MSA의 이런 관리/운영의 복잡함 때문에 DevOps라는, 관리/운영만 전문적으로 하는 개발자가 생겼을 정도입니다. 그렇기 때문에 MSA가 필요할 정도로 서비스가 복잡하지 않고, 트래픽이 많지 않은 회사는 굳이 MSA를 도입할 필요는 없는 것입니다.


MSA를 공부하기 위해서는?

저는 정보가 부족해 혼자 고통 받았지만, 만약 MSA를 배운다면 아래의 순서를 추천드립니다.

 

  1. 어떤 언어/프레임워크를 사용해서든 REST API로 CRUD 정도는 할 수 있게 한다
  2. 모든 언어/프레임워크에서 통용되는 MSA 지식을 배운다 (12 Factor, Service Discovery, Service Gateway, Messaging)
  3. 특정 언어/프레임워크의 MSA 관련 기능을 배운다 (Spring의 경우 Spring Cloud, Netflix OSS 등)
  4. Docker, Kubernetes를 배운다
  5. 클라우드 서비스(AWS, Google Cloud, MS Azure 등)을 배워 배포해 본다

반응형

댓글