본문 바로가기
Development Frameworks/클라우드 컴퓨팅(Cloud Computing)

[클라우드 컴퓨팅] 서버리스(Serverless)란 무엇인가?

by 데이터 벌집 2023. 10. 7.
반응형

서버리스(Serverless) 기술이 처음 개발 커뮤니티에 등장했을 때, 많은 사람들은 이 용어가 조금 혼란스럽다고 느꼈습니다. '서버리스'라고 하면 '서버가 없다'는 것처럼 들리지만, 실제로는 서버 없이 코드를 실행하는 것이 아니라, 개발자가 서버 관리를 걱정할 필요 없이 코드를 실행할 수 있는 환경을 말합니다. 이 기술이 어떻게 작동하는지, 그리고 그 장단점은 무엇인지 함께 알아보겠습니다. 이 포스트를 통해 서버리스의 기본 개념과 AWS를 활용한 서버리스 환경 구축 방법에 대해 간략히 소개하려 합니다.

 

serverless

 


1. 서버리스(Serverless) 란 무엇인가?

기존 애플리케이션 호스팅 방식에서는 고정된 서버 용량을 미리 준비하고 관리해야 했습니다. 이 경우, 고객의 요청이 예상보다 많을 때는 서버가 과부하되어 서비스 이용에 장애가 생길 수 있었고, 반대로 고객의 요청이 적을 때는 서버가 유휴 상태로 대부분의 자원이 활용되지 않는 문제가 발생했습니다.

 

서버리스는 이러한 문제를 해결하기 위해 등장한 기술로, AWS Lambda와 같은 서비스를 통해 실현됩니다. 서버리스 환경에서는 개발자는 코드만 작성하고 업로드하면, 서버 설정, 관리 및 유지보수 등은 AWS와 같은 클라우드 서비스 제공자가 대신 수행합니다. 더욱이, 사용자의 요청이 많을 때는 자동으로 서버 자원을 확장(Scale Out)하고, 요청이 적을 때는 서버 자원을 축소(Scale In)하여 효율적으로 서버 자원을 활용합니다. 이 방식으로 개발자는 실제로 사용된 서버 자원에 대해서만 비용을 지불하게 됩니다.

 

따라서, 서버리스는 개발자가 서버 운영에 대한 부담 없이 애플리케이션의 개발과 서비스 제공에 집중할 수 있는, 혁신적인 환경을 제공합니다.


2. 서버리스의 장단점

장점

  • 비용 효율적: 서버리스 환경에서는 코드가 실행되는 시간만큼만 비용이 청구됩니다. 예를 들어, 일일 사용량이 매우 적은 작은 웹사이트의 경우, 전통적인 호스팅에 비해 서버리스로 운영하는 편이 경제적일 수 있습니다.
  • 개발 집중: 개발자는 서버 유지보수나 확장 등에 신경 쓸 필요 없이, 애플리케이션의 비즈니스 로직에만 집중할 수 있습니다. 이로 인해 개발자의 생산성이 향상되고, 빠르게 제품을 출시할 수 있습니다.
  • 유연한 확장성: 가용성이 높고, 요청에 따라 동적으로 자원이 할당되므로 확장성이 용이합니다. 예를 들어, 특정 이벤트(블랙프라이데이, 싱글스데이 등)로 인한 트래픽 폭증 시, 서버리스 환경은 자동으로 리소스를 확장하여 이를 처리합니다.

단점

  • Cold Start: 함수가 처음 시작될 때 '콜드 스타트'라는 지연이 발생합니다. 콜드 스타트는 특히 private VPC(가상 사설 클라우드)에서 더욱 두드러집니다.
  • 플랫폼 종속성: 예를 들어 AWS Lambda로 작성된 함수는 Azure Functions나 Google Cloud Functions에서 직접적으로는 실행되지 않습니다. 각 플랫폼은 고유의 설정과 구성을 필요로 하므로 이식성이 제한됩니다.
  • 장시간 작업 불리: 예를 들어, 긴 동영상 파일을 인코딩하는 작업과 같이 많은 계산 리소스와 시간을 요구하는 작업은 서버리스 환경에서는 비효율적일 수 있습니다. 각 함수 호출에는 시간제한이 있으며, 대규모 작업을 수행하기 위해서는 추가적인 아키텍처 설계가 필요합니다.

3. 실제 기업의 서버리스 활용 사례

  • Netflix는 AWS Lambda를 활용하여 서버리스 환경을 구축하여 다양한 백엔드 작업을 효율적으로 관리하고, 리소스를 동적으로 확장하여 대규모 사용자의 스트리밍 요청을 빠르고 안정적으로 처리하고 있습니다.
  • iRobot은 AWS Lambda와 AWS IoT를 활용하여 로봇의 연동과 데이터 수집 및 분석 작업을 수행하여 사용자의 사용 패턴과 선호도를 파악하여 개인화된 서비스를 제공하고 있습니다.

4. 서버리스 구성요소 이해하기: Serverless.yml 파일

serverless.yml 파일은 마치 게임을 만들 때 캐릭터와 배경, 룰 등을 설정하는 것처럼, 서버리스 앱을 만들 때 필요한 '설정'을 적어놓는 파일이에요. 이 파일에 우리가 만들 앱의 '규칙'을 적어놓으면, 컴퓨터가 이를 읽어서 앱을 실행해 줍니다.

service: 앱이름

provider:
  name: aws
  runtime: nodejs14.x

functions:
  함수이름:
    handler: 파일이름.함수이름
    events:
      - http: GET 경로
  • service: 우리가 만들 앱의 이름을 적어요. 예를 들어, 'hello-app'이라고 적으면, 앱의 이름이 'hello-app'이 돼요.
  • provider: 앱이 돌아갈 '장소'와 '방식'을 정해요.
    • name: aws는 앱이 AWS라는 곳에서 실행된다는 거예요.
    • runtime: nodejs14.x는 앱이 Node.js라는 프로그래밍 언어로 돌아간다는 걸 의미해요.
  • functions: 앱이 어떤 일을 할지 정의해요.
    • 함수이름: 앱에서 실행되는 작은 '기능'의 이름이에요.
    • handler: 파일이름.함수이름는 이 기능을 코드로 어떻게 작성했는지 알려줘요.
    • events: 언제 이 기능을 실행할지 결정해요. 예를 들어, 사람들이 인터넷에서 어떤 버튼을 누르면 이 기능이 실행된다던가요.

오늘 함께 살펴본 서버리스(Serverless) 기술은 우리가 애플리케이션을 개발하고 배포하는 방식을 혁신적으로 변화시켰습니다. 서버리스가 무엇인지, 그리고 그 특징과 장단점에 대해 이해했다면, 앞으로 여러분이 프로젝트를 진행할 때 이를 어떻게 활용할 수 있을지 고민해 보시면 좋을 것 같습니다.

 

AWS Lambda와 같은 서버리스 환경은 개발자로 하여금 인프라에 대한 부담 없이 비즈니스 로직 개발에만 집중할 수 있도록 돕습니다. 물론, 모든 상황에 서버리스가 완벽한 솔루션은 아니지만, 각각의 상황과 요구에 맞게 적절히 활용한다면 매우 효과적인 도구가 될 수 있습니다

반응형