MicroService와 Serverless가 무엇인지, 둘은 어떤 관계가 있는지를 알아보겠습니다.
모놀리식(Monolithic)
모놀리식은 기존에 많이 쓰이는 전형적인 ‘애플리케이션 구조’ 입니다. 모놀리식은 위의 사진과 같이 다양한 로직을 하나의 서비스로 구성하기 때문에 모든 로직들이 결합도와 의존성을 강하게 가집니다.
그렇기 때문데 각 로직들 간 호출이 빠르고, 시스템 메모리 및 리소스 사용이 좀 더 효율적으로 이루어진다는 장점을 가지게 됩니다.
하지만 로직들이 하나로 결합되어 있기 때문에, 이 중에서 특정 로직만 업데이트를 진행하고자 하는경우 업데이트 하고자하는 로직이 아니어도 영향을 받게됩니다. 그렇기 때문에 업데이트 시 고려해야 할 사항이 많아지게 된다는 단점도 존재합니다.
마이크로서비스(MicroService)
이러한 모놀리식의 문제를 해결하기 위해 제안된 대용량 분산형 아키텍처가 바로 마이크로서비스 입니다.
마이크로서비스는 각 로직을 독립적인 작은 서비스 단위로 배포 및 업데이트를 진행하도록 구성이 되어 있으며, 이들은 각각 느슨한 결합(Loosely Coupled)로 연결되어있습니다.
마이크로 서비스가 가지는 장점 및 단점은 다음과 같습니다.
- 장점
- 개별 서비스를 소규모의 모듈로 구성이 가능합니다.
- 개별 서비스들도 각각 다양하게 구현이 되기 때문에 장애에 강해집니다.
- 각각의 서비스가 다른 언어, 프레임워크 등을 자율적으로 선택하여 배포하는 것이 가능하기 때문에 기술에 대한 빠른 적용이 가능하다.
- 단점
- 여러 서비스로 나누고 각각 배포를 진행하여야 하므로 배포과정을 수동으로 진행하기 복잡합니다. -> 배포 자동화가 필수적입니다.
- 각각의 서비스를 배포하기위해 서비스 뿐만아니라 환경 또한 따로 구축하여야 하므로 시스템의 메모리 소요가 상대적으로 높아집니다.
서버리스(Serverless)
개인 및 조직에 물리적인 서버가 존재하지 않더라도 AWS EC2와 같이 일정 금액을 지불하고 빌려서 서버를 구성할 수 있습니다. 하지만 이렇게 구성한 서버의 소프트웨어도 보안, 업데이트, 백업과 같은 많은 관리 과정이 필요하게 됩니다. 서버리스는 이러한 어려움을 해결하기 위해 등장하게 된 개념입니다.
서버리스하는 것은 '서버가 없다'는 것이 아니라, 별도의 서버를 구축할 필요 없이 애플리케이션의 개발과 배포를 지원하는 클라우드 컴퓨팅 서비스를 의미합니다.
이러한 서비리스의 아키텍처는 크게 2가지로 나누어집니다.
- FaaS(Function as a Service)
- BaaS(Backend as a Service)
여기서 우리가 일반적으로 서버리스 라고 하면 FaaS를 가리킵니다.
✅ Baas 란?
BaaS는 애플리케이션 개발 시 요구되는 복잡한 백엔드 기능들을 개발자가 직접 개발하지 않고 클라우드 공급자가 제공하는 서비스를 이용해 쉽고 안정적으로 구현하는 것을 의미합니다.
Faas(Function as a Service)
Faas는 프로그램을 함수 단위로 클라우드에 배포하고, 이벤트가 발생하면 함수가 실행되는 서비스 방법입니다. 이벤트가 발생하면 함수가 실행되기 때문에 사용자는 함수가 실행된 횟수 및 시간에 따른 비용만을 지불합니다.
여기서 이벤트는 요청이 들어올 경우 발생하게 됩니다. -> 특정 주기로 이벤트를 발생시키거나 직접 호출하는 것도 가능합니다.
이러한 Faas가 가지는 특징은 다음과 같습니다.
- Stateless : FaaS는 함수가 실행되는 동안에만 자원을 할당하게 되고, 함수가 실행되는 위치가 항상 같은 곳에서 실행된다는 보장이 없습니다. 따라서 함수 실행시 로컬에서 어떠한 상태가 유지될 수 없습니다.
- Ephemeral : 특정 이벤트가 발생했을 경우에만 컨테이너로 배포가 되고, 끝나면 자원이 회수되기 때문에 일시적으로만 배포된다고 할 수 있습니다.
💡 서버리스와 마이크로서비스의 연관성
서버리스 컴퓨팅은 마이크로서비스 구조의 개발을 구성하기 위해 매우 적합한 형태의 서비스입니다.
모든 마이크로서비스가 function 단위로 구성되는 것은 아니지만 (마이크로서비스≠서버리스) 서버리스는 function 단위로 구성을 하고, 각각의 서비스는 독립적인 API 형태로 구성하여 배포를 진행하면 마이크로서비스 형태의 애플리케이션이 될 수 있기 때문에 연관성이 있고 적합한 형태의 서비스라고 할 수 있습니다.
'DevOps 부트캠프 > etc.' 카테고리의 다른 글
쿠버네티스(Kubernetes)란? + workload (0) | 2022.04.25 |
---|---|
IaC(Infrastructure as Code)란? _ Terraform (0) | 2022.04.24 |
API Gateway와 Lambda를 이용한 서버리스 애플리케이션 (0) | 2022.04.17 |
Cloud Computing 이란? (0) | 2022.03.15 |
DevOps란?_DevOps와 CI/CD (0) | 2022.02.08 |
댓글