서버리스(Serverless) 아키텍처의 장단점과 도입 시 고려사항

 서버가 없는 것이 아니라, '관리'가 없는 세상

클라우드 컴퓨팅의 발전 단계는 가상 머신(EC2)에서 컨테이너(Docker/K8s)를 거쳐, 이제 **서버리스(Serverless)**로 진화했습니다. 이름만 들으면 "서버가 아예 없다"는 뜻 같지만, 실제로는 물리적인 서버는 존재하되 개발자가 직접 서버를 관리하거나 프로비저닝할 필요가 없다는 의미입니다.

AWS Lambda, Google Cloud Functions 같은 서비스가 대표적입니다. 개발자는 오직 비즈니스 로직(코드)만 작성해서 업로드하면 됩니다. 실행에 필요한 메모리 할당, 오토스케일링, 운영체제 패치 등은 클라우드 제공업체가 전담합니다.


서버리스의 빛: 왜 열광하는가?

서버리스가 현대 애플리케이션 개발의 주류로 떠오른 이유는 명확합니다. 비용과 효율성입니다.

사용한 만큼만 지불하는 경제성

기존의 서버(EC2)는 24시간 켜져 있어야 했습니다. 사용자가 없는 새벽 시간에도 서버 비용은 발생했죠. 반면 서버리스는 함수가 실행된 시간(밀리초 단위)과 횟수만큼만 과금됩니다. 요청이 없으면 비용은 '0원'입니다. 트래픽이 불규칙하거나 간헐적인 서비스에 최적의 비용 구조를 제공합니다.

무한에 가까운 자동 확장성 (Auto-scaling)

갑자기 사용자가 100명에서 100만 명으로 늘어나도 걱정할 필요가 없습니다. 서버리스 플랫폼이 알아서 함수 인스턴스를 복제하여 병렬로 처리합니다. 개발자가 복잡한 로드 밸런싱이나 스케일링 정책을 설정할 필요가 전혀 없습니다.

운영(Ops) 부담의 제로화

'NoOps'에 가장 가까운 아키텍처입니다. OS 보안 패치, 런타임 버전 관리, 서버 다운 등 인프라 레벨의 이슈에서 해방되므로, 개발팀은 오로지 서비스 기능 개발에만 집중할 수 있어 시장 출시 시간(Time to Market)을 획기적으로 단축할 수 있습니다.


서버리스의 그림자: 도입 전 고려해야 할 단점

하지만 모든 기술에는 트레이드오프(Trade-off)가 존재합니다. 무작정 도입했다가는 예상치 못한 문제에 직면할 수 있습니다.

콜드 스타트(Cold Start) 지연

서버리스의 고질적인 문제입니다. 오랫동안 실행되지 않은 함수를 호출하면, 클라우드 제공자가 실행 환경(컨테이너)을 새로 띄우는 데 시간이 걸립니다. 이로 인해 첫 응답이 수 초간 지연될 수 있어, 실시간 응답 속도가 중요한 서비스에는 치명적일 수 있습니다.

벤더 락인(Vendor Lock-in)

특정 클라우드 제공자의 기능(트리거, DB 연동 등)에 깊게 의존하게 됩니다. AWS Lambda로 짠 코드를 Azure Functions로 그대로 옮기는 것은 거의 불가능합니다. 코드를 다시 짜야 하거나 아키텍처를 변경해야 하는 부담이 큽니다.

디버깅과 모니터링의 어려움

로컬 환경에서 서버리스 환경을 똑같이 구현하여 테스트하기가 어렵습니다. 또한, 수백 개의 함수가 분산되어 실행되므로 문제가 발생했을 때 어떤 함수에서 에러가 났는지 추적하는 통합 모니터링이 기존 모놀리식 아키텍처보다 훨씬 복잡합니다.


언제 도입해야 할까? (Use Cases)

서버리스가 만능열쇠는 아닙니다. 다음과 같은 상황에서 최고의 효율을 발휘합니다.

  • 배치(Batch) 작업: 매일 밤 정해진 시간에 데이터를 분석하거나 백업하는 작업
  • 이벤트 기반 처리: 이미지가 S3에 업로드되면 자동으로 썸네일을 생성하거나, 로그가 들어오면 알림을 보내는 트리거 작업
  • 변동성이 큰 웹 서비스:켓 예매나 수강 신청처럼 특정 시간에만 트래픽이 폭주하는 API
  • MSA(마이크로서비스) 전환: 거대한 시스템의 일부 기능을 독립적으로 분리하여 운영할 때

반면, 긴 실행 시간(Long-running)이 필요한 작업이나(대부분의 서버리스는 실행 시간제한이 있음, AWS Lambda는 15분), 일정한 트래픽이 꾸준히 들어오는 서비스는 오히려 기존 서버 방식보다 비용이 더 비쌀 수 있습니다.


도입 시 체크리스트: 상태 비저장(Stateless) 설계

서버리스 함수는 실행이 끝나면 모든 상태(변수, 메모리 등)가 사라집니다. 이를 Stateless(무상태)라고 합니다. 따라서 사용자 세션 정보나 DB 커넥션 풀을 함수 내부에 저장하면 안 됩니다. 반드시 Redis나 DynamoDB 같은 외부 저장소를 이용하여 상태를 관리하도록 설계해야 합니다.


기술 부채가 아닌 자산으로 만들려면

서버리스는 인프라 관리의 복잡성을 비용(요금)으로 치환하는 모델입니다. 

"우리 서비스의 트래픽 패턴이 불규칙한가?", "운영 인력이 부족하여 개발에만 집중하고 싶은가?"라는 질문에 "Yes"라면 서버리스는 최고의 선택이 될 것입니다.


댓글 쓰기

다음 이전