들어가며
안녕하세요. NNT Tech 팀입니다. NNT Tech팀의 업무 중에는 고객사의 데이터를 수집한 뒤, 이를 목적에 맞게 처리하는 데이터 파이프라인 구축 작업이 있는데요. Google Cloud Platform의 Serverless 서비스를 이용해 통해 쉽고 빠르게 데이터 파이프라인을 구축하는 방법에 대해 소개해보고자 합니다.
왜 Serverless여야 하나요?
Serverless가 무엇일까요? 클라우드 환경에서 Serverless는 기존의 VM 방식이 가진 정적인 한계와 시스템 유지보수의 이슈를 해결하는 혁신적인 서비스 설계 방식입니다. 쉽게 말해서 요청이 발생할 때마다 휴면 상태에 있던 함수를 실행 시킬 수 있는 서비스입니다. 즉, 매번 서버를 띄워놓을 필요가 없어 전통적으로 서버를 실행시키거나 관리할 때 필요했던 노동력이 필요하지 않다는 것이죠.
특히 성과 데이터와 같이 매번 최신성이 보장되지 않아도 되는 데이터를 수집하는 작업은 서버를 띄워 진행하게 된다면 서버를 관리하는 데 들어가는 노동력에 비해 작업 자체가 너무 작다는 것을 느끼게 될 겁니다. 이럴 때 서버리스 서비스인 GCP Cloud Function, AWS Lambda를 사용하면 서버 관리 없이 간편하게 개발자가 원하는 기능을 구현 및 실행할 수 있습니다.
그럼 왜 Serverless는 “간편하다”라는 수식어를 강조하게 될까요?
인프라 관리의 부담 감소
서버리스 아키텍처는 클라우드 제공자가 인프라의 프로비저닝, 유지보수, 스케일링을 모두 담당하기 때문에 개발자는 사용량을 고려하지 않고 코드 작성과 배포에만 집중할 수 있습니다. 클라우드 서비스 제공업체는 실행 중인 애플리케이션에 대해 장애 조치를 제공해 높은 가용성을 보장하기 때문에 개발자가 오케스트레이션을 위한 작업을 하지 않아도 됩니다. 또한 스케일링을 클라우드 제공자가 담당해주기 때문에 급하게 새로 서버를 띄우기 위한 작업을 고려하지 않아도 됩니다.
비용 효율성
서버리스 애플리케이션은 이벤트 기반으로 작동하며 필요할 때만 실행되어 비용 효율성도 높습니다. 실행된 코드에 필요한 CPU, 메모리 및 기타 컴퓨팅 리소스에 대해서만 비용을 지불하기 때문에 코드가 종료되어 Serverless 기능이 동작하지 않는 상태일 때에는 아무런 비용이 들지 않습니다. 매 시간 띄워두어야 하는 서버가 아니기 때문에 비용을 줄이기 위한 개발자의 세심한 세팅이 필요하지 않습니다.
실제 서비스 되는 로직 외 운영에 필요한 작업이 필요 없기 때문에 개발자들은 간편하게 본인의 목적 서비스만 구현하면 된다는 것입니다. 이러한 이유로 특히 스타트업이나 소규모 프로젝트에서는 매력적인 선택지일 수 밖에 없습니다.
Serverless 도입시 주의해야 할 점
다만 Serverless가 만능 해결사는 아닙니다. Server 구조로 얻는 장점이 있듯, Serverless 구조도 단점이 존재하겠죠. 하지만 단점을 제대로 파악해 대비할 수 있는 방안을 확인해둔다면 Serverless 도입에 큰 어려움은 없을 것입니다. 아래 유의사항을 살펴보고 이를 극복할 수 있는 방법에 대해 알아보겠습니다.
서버리스 환경에서는 모니터링, 콜드 스타트, 보안 문제, 서드파티 종속성 관리, 비용 최적화 등 다양한 도전과제가 있습니다. 이러한 문제들을 해결하기 위해 각종 모니터링 도구를 활용하고, 최소 권한 원칙을 적용하며, 비용 관리 도구를 통해 비용을 모니터링하고 최적화하는 등의 방법을 사용할 수 있습니다.
✔️ 서드파티 종속성 관리서드파티 종속성이 성능에 영향을 미치거나 보안 취약성을 초래할 수 있습니다. 필요 최소한의 종속성만 사용하고, 정기적으로 업데이트해야 합니다.
✔️ 콜드 스타트 문제함수가 한동안 비활성 상태였다가 호출될 때 지연이 발생합니다. 이를 관리하기 위해 프로비저닝된 동시성이나 재시도 로직을 구현할 수 있습니다.
✔️ 모니터링의 복잡성데이터 파이프라인을 구성하고 있는 개별 함수들이 모두 독립적으로 실행되고 있기 때문에 단순 모니터링으로는 오류를 관찰하기 어려울 수 있습니다.
- GCP Cloud Logging에서 알림 확인을 위한 Dashboard 구성하여 각 서비스의 에러를 한 곳에 모아 확인해보세요.
- Cloud Logging의 Alert 기능을 통해 알림 조건에 트리거를 걸 수 있습니다.
✔️ 비용 관리 및 최적화서버리스 아키텍처에서 사용량 기반 과금 모델로 인해 역으로 예기치 않은 비용이 발생할 수 있습니다. 이를 관리하고 최적화하기 위해 GCP의 다양한 도구를 활용해야 합니다.
- GCP의 Cloud Billing을 통해 실시간 비용 모니터링과 예산 설정이 가능합니다. 또한 알림 설정을 통해 과도한 비용 발생을 방지할 수 있습니다.
- GCP Cost Management와 Recommendations를 사용하여 비효율적인 리소스 사용을 식별하고 최적화할 수 있습니다. 또한 각 리소스에 태그를 추가하여 프로젝트별, 팀 별 비용 분석을 진행해보세요.
✔️ 보안 문제인프라 보안은 클라우드 제공자가 담당하지만, 코드와 설정의 보안은 여전히 개발자가 책임져야 합니다. 최소 권한 원칙을 적용하고 IAM 서비스를 활용하여 보안을 강화해야 합니다.
- GCP IAM을 통해 프로젝트별로 세밀한 권한 설정을 진행할 수 있습니다. 각 기능과 서비스가 필요한 최소한의 권한만 가지도록 제한해야 하며, 역할 기반 액세스 제어(RBAC)를 사용하여 사용자 및 서비스 계정의 권한을 관리해야 합니다. 또한, 정기적인 감사 및 모니터링을 통해 비정상적인 활동을 감지하고 대응해야 보안 문제를 더욱 신경 쓸 수 있습니다.
Serverless 서비스
이제 Serverless라는 개념을 왜 도입해야 하는지, 그리고 어떻게 도입하면 되는지 알아봤으니, 실제 클라우드 환경에서 적용해보는 것이 필요합니다. 여러 클라우드 제공자 중에서도 Google Marketing Platform과의 연결이 가장 쉬운 Google Cloud Platform(GCP)의 Serverless 서비스들에 대해 소개해드리겠습니다.
각 서비스는 다른 클라우드 플랫폼에서도 다양한 이름으로 구현되어 있으므로, 큰 틀에서 공유하는 점이 많기 때문에 비록 GCP 클라우드 플랫폼을 사용하지 않더라도 계속 읽어보시길 바랍니다.
Cloud Functions
Cloud Functions는 GCP의 서버리스 컴퓨팅 서비스로, 개발자가 인프라 관리 없이 코드를 실행할 수 있게 해줍니다. 서버리스 아키텍처의 주요 구성 요소로서, 이벤트 기반으로 동작하여 특정 이벤트 발생 시 자동으로 코드를 실행합니다. 예를 들어, 데이터베이스 변경, 파일 업로드, HTTP 요청 등 다양한 이벤트에 반응할 수 있습니다. 이를 통해 확장성, 비용 효율성, 운영 간소화를 제공하며, 실시간 데이터 처리, 백엔드 로직 구현, 자동화된 워크플로우 등 다양한 애플리케이션에서 중요한 역할을 합니다.
Cloud Functions의 주요 기능 및 장점:
- 이벤트 기반 실행: 특정 이벤트에 반응하여 자동으로 함수 실행.
- 자동 확장: 트래픽 증가에 따라 자동으로 인스턴스 확장.
- 비용 효율성: 사용한 만큼만 비용 지불.
- 유연한 통합: 다양한 GCP 서비스 및 타사 API와 쉽게 통합 가능.
Cloud Functions는 데이터 파이프라인, 실시간 데이터 처리, 비즈니스 로직 자동화 등 다양한 시나리오에서 유용하게 활용될 수 있습니다. 이를 통해 개발자는 인프라 관리의 부담을 줄이고, 애플리케이션 로직 개발에 집중할 수 있습니다.
Cloud Run
Cloud Run은 GCP의 완전 관리형 서버리스 플랫폼으로, 컨테이너화된 애플리케이션을 손쉽게 배포하고 확장할 수 있게 해줍니다. Cloud Run을 사용하면 인프라를 관리할 필요 없이 HTTP 요청이나 이벤트를 통해 컨테이너를 실행할 수 있으며, 서버리스 아키텍처의 유연성과 확장성을 활용할 수 있습니다.
Cloud Run의 주요 기능 및 장점:
- 유연한 배포: 다양한 언어와 프레임워크로 작성된 컨테이너를 실행할 수 있습니다.
- 자동 확장: 요청 수에 따라 자동으로 확장 및 축소되어 비용 효율적입니다.
- 간편한 통합: GCP의 다른 서비스와 쉽게 통합할 수 있어 복잡한 워크플로우를 간편하게 구현할 수 있습니다.
- 보안 및 관리: Google의 보안 인프라를 활용하여 안전하게 애플리케이션을 운영할 수 있습니다.
Cloud Run은 웹 애플리케이션, API 서버, 데이터 처리 작업 등 다양한 시나리오에서 활용될 수 있으며, 개발자는 인프라 관리의 부담 없이 애플리케이션 개발에 집중할 수 있습니다.
BigQuery
대규모 데이터를 빠르고 효율적으로 분석할 수 있는 서버리스 데이터 웨어하우스입니다.
BigQuery는 GCP의 완전 관리형 데이터 웨어하우스 서비스로, 대규모 데이터를 신속하게 분석할 수 있는 고성능 분석 엔진을 제공합니다. 서버리스 구조를 통해 인프라 관리 부담을 줄이며, SQL을 사용하여 쉽게 데이터를 쿼리할 수 있습니다.
BigQuery의 주요 기능 및 장점:
- 무제한 확장성: 페타바이트급 데이터도 실시간으로 처리 가능.
- 비용 효율성: 사용한 만큼만 비용 지불.
- 통합: 다양한 GCP 서비스와의 손쉬운 통합.
- 고급 분석: 머신러닝 모델 통합 및 고급 분석 기능 제공.
BigQuery는 대규모 데이터 분석, 실시간 데이터 웨어하우징, 비즈니스 인텔리전스 등 다양한 용도로 활용될 수 있습니다.
이 외에도 데이터 파이프라인을 관리하기 위해 몇가지 서비스를 짧게 소개해볼게요.
- Cloud Scheduler
- Cloud Pub/Sub
- Cloud Storage
- Cloud Logging
- Cloud IAM
- …
이어서
다음 글에서는 직접 GCP 서비스를 사용해보면서 간단한 사용 케이스를 확인해보도록 할게요.