Analysis
고객사는 요즘 젊은 세대들의 필수품인 사진 편집 및 필터기능을 제공하는 플랫폼을 운영하는 기업입니다. 기업은 애플리케이션 내에서 자체 개발 알고리즘을 기반으로 한 사진 분석 서비스를 제공하고 있습니다. 이번에 플랫폼의 대대적인 기술적 개편을 진행하는 과정에서 해당 도메인에 대한 설계를 서버리스 아키텍처로 구현하길 원합니다. 고객사와 기존 아키텍처를 함께 점검하고, 이 중 서버리스에 적합한 유저의 유형을 분리하여 Tencent cloud의 SCF(Serverless Cloud Function)을 활용한 로직을 새로 도입하기로 하였습니다.
Architecture Blueprint
1) 유저가 애플리케이션에 사진을 업로드 하면 사진 화질을 개선해주는 기능을 구현합니다. (유저1) COS에 업로드 된 원본사진은
유저가 선택한 해상도에 따라 서로 다른 SCF함수를 호출합니다. SCF함수는 COS업로드 이벤트를 트리거로하여 작성된 알고리즘 코드를 실행합니다.
2) 화질 개선이 완료된 사진 파일 결과물은 COS에 업로드되고 후처리 로직을 담당하는 또 다른 SCF를 호출하여 유저에게 전달됩니다.
3) Bucket 업로드 이벤트가 SCF를 호출할 때 , 원본 파일에 대한 업로드 트리거가 SCF를 무한루프에 빠지게 할 가능성이 있습니다. 따라서 이미지 파일에 대한 메타데이터를 적절하게 태깅하여 파일의 before - after를 구분하도록 설계해야 합니다.
4) 애플리케이션 유저가 자신이 사는 위치를 기반으로 가까운 사용자와 질문 및 답변을 교환할 수 있는 커뮤니티 기능을 구현합니다. (유저2, 유저3) 유저의 질문은 API Gateway를 통해 SCF함수에 전달되고 작성된 위치기반 답변자 검색 알고리즘 코드를 싱행하여 결과 값을 TencentDB for MongoDB에 기록합니다.
5) 현재 Tencent cloud에서 자체 NoSQL 데이터베이스의 Stream을 추적하여 SCF를 트리거하는 기능을 제공하지 않으므로, DB에 저장된 값은 고객사의 기존 웹 서버를 통해 렌더링 합니다.
6) 질문자 - 답변자 간 매칭에 대한 비동기 처리는 Tencent cloud의 큐잉 시스템을 이용하여 구현합니다. 관련 POST 요청은 API Gateway와 SCF를 거쳐 TDMQ for Ckafka 에 쌓이게 됩니다. SCF는 Ckafka 기반 트리거 기능을 제공합니다. 대기열 값을 비동기적으로 매칭 알고리즘이 구현된 SCF를 통해 처리하고 결과 값을 NoSQL 데이터베이스에 저장합니다.
7) SCF 구성 시, 재시도 메커니즘을 적절히 설계하여 에러를 핸들링하고, 발생하는 모든 로그는 CLS로 전송합니다. 이 과정에는 모든 요청 및 응답으로 인해 생성되는 로그 데이터도 포함하도록 합니다. 타임아웃이 중요한 서버리스 아키텍처에서 효율적인 트러블슈팅이 가능하게 됩니다.
Overall
기업의 사례는 전통적인 서버리스 아키텍처를 충실히 따르며, 기존에 AWS Lambda를 사용하던 엔지니어라면 추가적인 학습 부담 없이 유사한 방식으로 워크로드를 구축할 수 있도록 설계되었습니다.
대규모 애플리케이션의 경우, 기업은 도메인 별로 다양한 클라우드 아키텍처를 채택합니다. 이때 메인 서비스가 아닌 부분이나 새롭게 출시하는 기능에 있어서는 비용 효율성과 확장성을 고려해 서버리스 아키텍처가 유리한 경우가 있습니다.
이는 실제 프로덕션 환경 뿐만 아니라 코드의 단위 테스트를 위한 설정에서도 적절한 선택이 될 수 있습니다. Tencent cloud SCF는 기업에게 추가적인 부담을 주지 않으면서도, 효율적으로 시스템을 운영할 수 있는 방안을 제공합니다.
Products we used
- SCF : https://console.tencentcloud.com/scf
- API gateway : https://console.tencentcloud.com/apigateway
- COS : https://console.tencentcloud.com/cos
- TDMQ for CKafka : https://console.tencentcloud.com/ckafka
- CLS : https://www.tencentcloud.com/products/cls
- TencentDB for MongoDB : https://www.tencentcloud.com/products/mongoDB