제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(5년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
similar chart finder
내 종목의 차트는 상승하는 차트일까요?
3.35.36.208
서버리스 아키텍처의 이해
최근에 서버리스는 비용이 거의 들지 않는다는 말을 우연히 들었습니다. 그래서 서버리스 아키텍처도 제 프로젝트에 적용할 수 있을지 계속 알아보고 있습니다. 오늘은 그 일환으로 서버리스 아키텍처에 대해 정리해 보겠습니다.
서버리스 아키텍처란?
서버리스 아키텍처는 서버 관리의 필요성을 최소화하고, 개발자가 애플리케이션의 핵심 기능에 집중할 수 있도록 하는 클라우드 컴퓨팅의 한 형태입니다. 서버리스라는 이름에도 불구하고, 실제로는 서버가 없는 것이 아니라, 서버의 관리와 운영을 클라우드 제공자가 대신 처리해 주는 것을 의미합니다.
서버리스 아키텍처의 핵심 요소
서버리스 아키텍처는 크게 백엔드 서비스(BaaS)와 함수-서비스(FaaS)라는 두 가지 핵심 요소로 구성됩니다.
1. 백엔드 서비스(BaaS)
백엔드 서비스는 개발자가 필요로 하는 다양한 백엔드 기능을 서비스 형태로 제공합니다. 예를 들어, 데이터베이스, 메시지 큐, 인증, 검색 등의 기능을 API로 제공하여, 개발자가 이러한 기능을 직접 구현할 필요 없이 사용할 수 있게 합니다.
2. 함수-서비스(FaaS)
함수-서비스는 개발자가 작성한 함수를 클라우드 환경에서 실행시켜 주는 서비스입니다. 함수는 이벤트에 의해 트리거 되며, 이벤트는 HTTP 요청, 데이터베이스 변경, 메시지 큐의 메시지 등 다양한 형태가 될 수 있습니다.
서버리스 아키텍처의 장점
서버리스 아키텍처는 다음과 같은 여러 가지 장점을 가지고 있습니다.
1. 개발 효율성
서버리스 아키텍처를 사용하면 개발자는 서버의 관리와 운영에서 자유롭게 되어, 핵심 비즈니스 로직에 집중할 수 있습니다. 이는 개발 효율성을 크게 향상합니다.
2. 확장성
서버리스 아키텍처는 자동으로 확장되므로, 애플리케이션의 사용량이 증가하더라도 자동으로 리소스를 조정하여 처리할 수 있습니다. 이는 시스템의 확장성을 보장하며, 트래픽 예측의 부담을 줄여줍니다.
3. 비용 효율성
서버리스 아키텍처는 사용한 만큼만 비용을 지불하는 방식을 채택하고 있습니다. 이는 미사용 리소스에 대한 비용을 최소화하며, 비용 효율성을 높여줍니다.
서버리스 아키텍처의 단점
그러나 서버리스 아키텍처는 몇 가지 단점도 가지고 있습니다.
1. 시작 시간
서버리스 함수는 사용하지 않을 때 자동으로 종료되므로, 다시 시작할 때 시간이 필요합니다. 이를 '콜드 스타트'라고 부르며, 이로 인해 애플리케이션의 응답 시간이 느려질 수 있습니다.
2. 제어의 한계
서버리스 아키텍처는 클라우드 제공자가 서버의 관리와 운영을 대신 처리하므로, 이러한 부분에 대한 제어가 한정적입니다. 이는 특정한 요구 사항이 있는 경우 제약이 될 수 있습니다.
언제 서버리스 아키텍처를 사용하면 좋을까?
서버리스 아키텍처는 다양한 상황에서 유용하게 사용될 수 있지만, 특히 다음과 같은 경우에 효과적입니다.
1. 변동성이 큰 트래픽
서버리스 아키텍처는 사용량에 따라 자동으로 확장되므로, 트래픽이 크게 변동하는 서비스에 적합합니다. 예를 들어, 이벤트 기반의 마케팅 서비스, 플래시 세일 등의 쇼핑 서비스, 뉴스나 스포츠 관련 서비스 등이 이에 해당합니다.
2. 빠른 시장 진입이 필요한 스타트업
스타트업이나 새로운 프로젝트에서는 빠른 시장 진입이 중요합니다. 서버리스 아키텍처는 인프라 구축에 드는 시간과 비용을 크게 줄여주므로, MVP(Minimum Viable Product)를 빠르게 개발하고 시장에 론칭하는 데 유리합니다.
3. 마이크로서비스 아키텍처
마이크로서비스 아키텍처는 하나의 큰 애플리케이션을 작은 서비스 단위로 나누는 설계 방식입니다. 서버리스는 이러한 마이크로서비스 각각을 독립적으로 배포하고 관리하는 데 매우 적합합니다.
AWS Lambda란?
AWS Lambda는 Amazon Web Services(AWS)에서 제공하는 서버리스 컴퓨팅 서비스입니다. Lambda를 사용하면 개발자는 서버의 프로비저닝이나 관리에 신경 쓰지 않고도 코드를 실행할 수 있습니다.
AWS Lambda의 작동 원리
AWS Lambda는 이벤트에 응답하여 코드를 실행합니다. 이벤트는 HTTP 요청, S3 버킷의 변경, DynamoDB 테이블의 변경 등 다양한 형태가 될 수 있습니다.
개발자는 이벤트에 응답하는 로직을 함수로 작성하고, 이 함수를 Lambda에 등록합니다. 그런 다음, 이벤트 발생 시 Lambda가 자동으로 이 함수를 실행합니다.
AWS Lambda의 사용 사례
AWS Lambda는 다양한 사용 사례에 적용할 수 있습니다. 예를 들면,
1. 실시간 파일 처리
Lambda는 S3 버킷에서 파일이 추가되는 이벤트를 감지하고, 이에 반응하여 파일을 처리하는 로직을 실행할 수 있습니다.
2. 데이터 변환
Lambda는 DynamoDB와 같은 데이터베이스에서 데이터가 변경되는 이벤트를 감지하고, 이에 반응하여 데이터를 다른 형식으로 변환하는 등의 작업을 수행할 수 있습니다.
3. 실시간 스트림 처리
Lambda는 Kinesis와 같은 스트리밍 데이터 플랫폼에서 데이터가 흘러가는 이벤트를 감지하고, 이에 반응하여 실시간으로 데이터를 처리할 수 있습니다.
그래서 내 프로젝트에 적용 가능?
제 프로젝트는 여러 도커 컨테이너가 있는데, 그중 현재 http요청을 받는 flask_server 컨테이너
와 주가 데이터를 수집, 정제하여 RDS에 업데이트하는 data_updater 컨테이너
가 있습니다. 이 두 개의 컨테이너를 같은 ec2 인스턴스에서 docker-compose로 같이 실행하고 있습니다. 그런데, 서버리스 아키텍처를 이용하여 flask_server만 따로 서버리스로 실행하게 할 수 있을지 알아보고 있습니다.
조사한 바를 말씀드리자면, flask_server를 서버리스 환경으로 옮기려면, 먼저 Flask 애플리케이션 로직을 AWS Lambda와 같은 FaaS 서비스가 처리할 수 있는 함수 형태로 재작성해야 합니다. 그런 다음, API Gateway와 같은 서비스를 이용해서 HTTP 요청을 해당 함수로 라우팅 해주면 됩니다.
또한, RDS나 스토리지 등의 리소스에 접근하는 것도 가능합니다. AWS 환경에서는 Lambda 함수에서 Amazon RDS 인스턴스나 S3 버킷 등의 AWS 리소스에 접근하는 것이 자연스럽게 지원됩니다.
하지만 이렇게 아키텍처를 변경하면, 코드의 수정 외에도 보안 설정, 네트워크 설정 등 여러 추가적인 설정이 필요할 수 있기에 일단은 다른 중요한 부분부터 해결한 다음 고려해 봐야겠습니다.
'웹 아키텍쳐' 카테고리의 다른 글
웹 아키텍처11 - 오케스트레이션 도구와 Kubernetes (0) | 2024.02.17 |
---|---|
웹 아키텍처9 - 컨테이너화/가상화 도구와 Docker (0) | 2024.02.17 |
웹 아키텍처8 - 클라우드 서비스와 AWS(아무것도 모르고있다가 돈 날림) (0) | 2024.02.17 |
웹 아키텍처7 - 데이터 파이프라인(나는 데이터 파이프라인을 사용하는 걸까?) (0) | 2024.02.17 |
웹 아키텍처6 - 전문 검색 서비스와 ElasticSearch (0) | 2024.02.17 |