AWS CLF-002 여러가지 컴퓨팅 서비스

윤따·2024년 9월 10일

AWS

목록 보기
5/19

서버리스

서버리스는 애플리케이션에 마치 서버가 없는 것처럼 (실제로는 있음)
관리할 필요가 없는 것을 말한다. 프로비저닝, 규모조정, 고가용성 및 유지 관리와 관련한 모든 기본적인 환경을 AWS가 대신 해준다.
대표적으로는 AWS Lambda 라는 서비스가 있다

Lambda 함수(Lambda Function):
사용자는 실행할 코드를 Lambda 함수로 작성하고, AWS Lambda에 업로드합니다. 이 Lambda 함수는 트리거가 발생할 때 실행됩니다.
함수는 AWS의 관리형 환경에서 실행되며, 사용자가 서버를 설정하거나 유지보수할 필요가 없습니다.

코드 실행: 사용자가 Lambda에 코드를 업로드하고, 특정 이벤트(트리거)가 발생하면 그 코드를 실행합니다. AWS는 코드를 실행하기 위해 자동으로 서버를 할당하고, 코드 실행이 끝나면 서버 자원은 자동으로 반환됩니다.
서버는 있지만 관리할 필요가 없음:
코드가 실행되는 동안에는 AWS가 서버를 자동으로 돌려줍니다. 사용자는 코드 실행을 위해 별도로 서버를 구동하거나 중지할 필요가 없습니다.
서버는 자동으로 할당되고, 사용자는 그저 코드를 작성하고 트리거가 발생했을 때 실행되도록 설정만 하면 됩니다.
자동 확장: 트리거가 발생할 때마다 Lambda는 자동으로 실행되며, 필요할 때는 자동으로 확장됩니다.
비용 효율성: 코드를 실행한 시간만큼 비용이 발생하므로, 상시 가동할 필요가 없는 간단한 작업에 적합합니다.

지속적인 서버가 이미 있는 경우에도 서버리스(Lambda)를 사용하는 것이 유리한 상황이 있을 수 있다.

왜 이미 있는 서버에서 Lambda를 사용할까?

비용 절감:

지속적인 서버는 24시간 작동하므로, 리소스를 항상 사용합니다. 반면, Lambda는 사용된 시간에만 비용이 발생하므로, 짧은 시간 동안 빈번하지 않은 작업에는 더 비용 효율적입니다.
예를 들어, 알림 기능처럼 비교적 간단한 작업이 빈번하게 발생하지 않는다면, 그 작업만 Lambda로 처리하면 서버의 부하를 줄이면서 비용을 아낄 수 있습니다. EC2 서버는 고정 비용이 발생하지만, Lambda는 실행 시간에만 비용이 부과됩니다.

자동 확장성:

Lambda는 자동으로 확장됩니다. 특정 이벤트가 동시에 여러 개 발생할 경우 Lambda는 자동으로 인스턴스를 생성해 각 이벤트를 처리할 수 있습니다.
반면, 지속적인 서버(EC2)는 동시에 처리할 수 있는 요청 수에 한계가 있습니다. 알림이 많이 발생하거나 동시에 여러 요청이 몰리는 경우, Lambda는 자동으로 스케일링되기 때문에 서버 과부하를 막을 수 있습니다.

유지보수 감소:

Lambda는 서버를 직접 관리할 필요가 없습니다. AWS가 서버 환경을 관리하므로, 개발자는 오직 비즈니스 로직에만 집중할 수 있습니다.
반면, 지속적인 서버에서는 서버의 보안 패치, OS 업데이트, 서버 리소스 관리 등을 직접 해야 합니다. Lambda를 사용하면 이런 서버 관리 작업을 AWS가 처리하므로, 개발자의 관리 부담이 줄어듭니다.

개별 컴포넌트 분리:

Lambda는 마이크로서비스 아키텍처의 일부로 사용할 수 있습니다. 특정 기능(예: 알림 처리)을 Lambda로 분리함으로써 애플리케이션의 구조를 더 모듈화할 수 있습니다.
애플리케이션의 다양한 기능을 분리하여 각각 Lambda 함수로 처리하면 각 기능을 독립적으로 관리 및 확장할 수 있으며, 개발 및 배포도 간편해집니다.

서버 과부하 방지:

웹 서버가 지속적으로 돌아가고 있다 하더라도, 서버에서 동시에 처리해야 하는 요청이 폭증할 경우 서버가 과부하 상태에 빠질 수 있습니다.
Lambda를 이용하면 서버가 부담해야 할 작업(예: 알림 전송, 백그라운드 작업 등)을 분리해서 처리할 수 있어, 서버의 리소스를 절약하고 서버 성능을 유지할 수 있습니다.

특정 이벤트 기반 작업에 적합:

Lambda는 이벤트 기반으로 동작하므로, 특정 작업이 간헐적으로 발생하는 경우(예: 알림, 파일 업로드 시 특정 처리)에는 Lambda가 더 적합할 수 있습니다.
EC2 같은 지속 서버는 항상 작동하지만, 알림 같은 이벤트는 항상 발생하지 않을 수 있습니다. 이런 이벤트 기반 작업은 Lambda에 맡기면 효율적으로 처리할 수 있습니다.

예시 시나리오:
지속 서버에서 API 요청 처리: 웹사이트가 계속 실행되고, 사용자는 24시간 서비스에 접근할 수 있습니다.
Lambda에서 알림 처리: 사용자가 댓글을 달면, Lambda가 호출되어 그때만 알림을 처리합니다. 이 작업은 독립적이므로, Lambda로 분리하면 서버 부하를 줄이고 비용을 절감할 수 있습니다.

언제 Lambda를 사용하지 않을까?

고정된 비용으로 충분히 커버 가능한 경우: 서버가 이미 여유 리소스를 가지고 있고, 해당 리소스가 알림 같은 추가 작업을 충분히 처리할 수 있다면 Lambda를 굳이 사용할 필요는 없습니다.
매우 빈번한 작업: 특정 작업이 너무 자주 발생하면, Lambda의 실행 횟수에 따른 비용이 EC2 같은 지속 서버를 운영하는 비용보다 높아질 수 있습니다. 이 경우 지속 서버에서 처리하는 것이 더 경제적일 수 있습니다.

요약:
Lambda를 굳이 사용하지 않아도 되는 경우도 있지만, 비용 절감, 자동 확장성, 유지보수 감소 등의 이유로 Lambda를 함께 사용하는 것이 더 효율적일 수 있습니다.
지속적인 서버에서 처리해야 할 작업량이 많아지거나, 서버 부하가 커질 가능성이 있을 때는 Lambda를 사용해 부하 분산 및 확장성을 얻을 수 있습니다.
결론적으로, 지속적인 서버와 Lambda를 함께 사용하는 것은 효율적인 자원 관리와 비용 절감을 가능하게 해줍니다.

컨테이너 관리 서비스

  1. Amazon Elastic Container Service(Amazon ECS)
    Amazon ECS는 Docker 컨테이너를 지원합니다

  2. Amazon Elastic Kubernetes Service(Amazon EKS)
    AWS에서 Kubernetes를 실행하는 데 사용할 수 있는 완전관리형 서비스입니다.

3.AWS Fargate

AWS Fargate(opens in a new tab)는 컨테이너용 서버리스 컴퓨팅 엔진입니다. Amazon ECS와 Amazon EKS에서 작동합니다.

AWS Fargate를 사용하는 경우 서버를 프로비저닝하거나 관리할 필요가 없습니다. AWS Fargate는 자동으로 서버 인프라를 관리합니다. 애플리케이션 혁신과 개발에 더 집중할 수 있으며, 컨테이너를 실행하는 데 필요한 리소스에 대해서만 비용을 지불하면 됩니다.

profile
윤따와더나은인생

0개의 댓글