LINE Corporation이 2023년 10월 1일부로 LY Corporation이 되었습니다. LY Corporation의 새로운 기술 블로그를 소개합니다. LY Corporation Tech Blog

Blog


LINE 엔지니어를 지원하는 CaaS 기반 서비스의 현재와 미래

Japan Container Days v18.12

안녕하세요. LINE에서 프라이빗 클라우드(private cloud)를 개발하고 있는 Nishiwaki입니다. 저는 지난해 12월 4일과 5일에 개최된 Japan Container Days v18.12에 발표자로 참가했습니다. 참가 후기로 제가 키노트에서 발표했던 'LINE 엔지니어를 지원하는 CaaS(Container as a Service) 기반 서비스의 현재와 미래'의 내용을 간략히 소개하겠습니다. 

이번 Japan Container Days에서는 아래와 같이 저 포함 총 4명의 LINE 엔지니어가 5개의 세션을 맡았습니다. 아래 세션 전부 다 재밌고 흥미로운 내용이니 하나씩 살펴보시면 좋을 것 같습니다(다만, 자료는 모두 일본어로 작성되어 있습니다).

LINE 프라이빗 클라우드

LINE에서는 사내 개발자에게 프라이빗 클라우드를 제공하고 있습니다. LINE의 프라이빗 클라우드는 간단한 서비스형 인프라(Infrastructure as a Service, 이하 IaaS)뿐 아니라 관리형 미들웨어(Managed Middleware)와 서비스형 플랫폼(Platform as a Service) 등 다양한 서비스도 함께 제공하고 있습니다. 

 

IaaS 품질 향상이 곧 애플리케이션 품질 향상?

프라이빗 클라우드 개발팀은 2016년 릴리스부터 IaaS 계층의 확장성(scalability), 성능 개선 등에 특별히 힘을 쏟고 있습니다. 하지만 IaaS 계층의 품질 개선이 사내 엔지니어의 개발과 운영 업무의 효율화나 애플리케이션의 품질 향상과 반드시 연결되는 것은 아닙니다.

가상 머신을 제공하는 서비스를 예로 생각해봅시다. 저희 서비스에선 같은 역할을 하는 여러 개의 가상 머신을 서로 다른 장애 도메인에 스케줄링하는 시스템을 제공, hypervisor 하나의 고장이 바로 서비스 다운으로 연결되지 않도록 고민하고 있는데요. 만약 애플리케이션 개발자가 이런 기능을 제대로 이해하지 못한다면 저희의 고민이, 구축될 애플리케이션의 품질 향상으로 이어질 수 없습니다. 또한 저희 프라이빗 클라우드는 GUI 외 다른 API도 제공하고 있어서 모니터링 툴과 연계하여 트래픽 증가에 맞춰 오토스케일링도 구현할 수 있는데요. 이런 시스템 역시 개발자가 직접 설정하고 구축해야 합니다. 

이처럼 애플리케이션의 품질은 코딩뿐만 아니라 애플리케이션을 구축하면서 클라우드 자원을 어떻게 이용할 것인지와도 밀접하게 관련되어 있습니다. 따라서 애플리케이션 개발자는 애플리케이션 개발뿐 아니라 프라이빗 클라우드 이용 모범 사례(best practice)에도 신경을 써야 합니다. 

프라이빗 클라우드 개발팀은 사내 엔지니어가 애플리케이션 개발에 집중할 수 있도록 IaaS의 복잡함을 가려주는 CaaS라는 레이어를 구축하여 사용자에게 제공하고 있습니다. CaaS를 도입하면서 프라이빗 클라우드가 제공하는 책임의 범위를 '사용자의 애플리케이션을 어떻게 실행할 것인가'에까지 확장하여 사용자가 인프라에 신경을 덜 쓸 수 있도록 노력하고 있습니다.

프라이빗 클라우드의 LINE CaaS Family

저는 발표에서 'Container as a Service'를 CaaS라고 표현했는데요. CaaS는 '컨테이너 기술을 이용하여 사용자의 작업을 실행하기 위한 서비스'를 뜻합니다. 저희 프라이빗 클라우드에서는 아래 3가지 종류의 CaaS 서비스를 제공합니다.

  • Platform as a Service(실제 운영 중) 
    • Github 리포지터리를 등록하기만 하면 자동으로 애플리케이션의 컨테이너, DNS(Domain Name System) 레코드, LB(Load Balancing) 설정이 수행되어 사용자에게 서비스를 시작할 수 있는 서비스
  • Kubernetes as a Service(베타 버전 운영 중)
    • 관리형(managed) Kubernetes 클러스터를 사용자에게 제공하고, Kubernetes 인터페이스를 통해서 애플리케이션, 인프라 자원을 프로비저닝(provisioning)할 수 있는 서비스
  • Function as a Service(개발 중)
    • 모니터링 툴과 같은 LINE 사내 툴과 프라이빗 클라우드에서 발생한 이벤트를 임의의 프로그램에 연동해서 실행할 수 있는 서비스

Platform as a Service (PaaS) 

Platform as a Service(이하 PaaS)는 CaaS Family 가운데 가장 먼저 제공하기 시작한 서비스입니다. 2017년부터 제공, 운영하고 있으며 현재 일부 상용 애플리케이션은 PaaS에서 실제로 운영되고 있습니다. 

Kubernetes as a Service (KaaS)

PaaS를 제공하기 시작한 후, 다양한 서비스가 PaaS에서 구축될 것으로 기대했습니다. 그런데 PaaS는 인프라 자원을 완전히 추상화하기 때문에 사용자가 세밀하게 제어하기 어렵다는 단점이 있는데요. 그래서인지 PaaS를 이용하지 않고 Kubernetes 클러스터를 스스로 구축해서 이용하는 사용자가 늘어났습니다. 클러스터를 구축하고 운영하는 게 쉽다면 이런 흐름이 나쁘지 않겠지만, 사실 그런 작업은 애플리케이션 개발자가 짬을 내서 할 수 있는 수준의 작업이 아닙니다. 실제로 프라이빗 클라우드에서 운영되고 있는 Kubernetes 클러스터는 문제를 안고 있는 부분이 적지 않은데요. 그래서 프라이빗 클라우드 개발팀에서 Kubernetes 클러스터를 집중적으로 관리하는 Kubernetes as a Service(이하 KaaS)를 제공할 필요성이 아주 높아졌습니다. 

현재 KaaS는 사내 개발자에게 베타 버전을 제공하고 있는데요. 서비스를 제공하는데 걸리는 준비 기간을 단축하기 위해 Rancher라는 OSS(open-source software)를 기반으로 서비스를 구축했습니다(Rancher를 채택하게 된 배경과 어떻게 이용하고 있는지는 이곳(일본어)에서 확인해주세요).

 

Function as a Service (FaaS)

Function as a Service(이하 FaaS)는 내년에 사용자에게 제공하는 것을 목표로 개발하고 있습니다. FaaS는 장기적으로 많은 유스케이스(use case)를 지원할 수 있을 것으로 기대되는데요. 일단은 오퍼레이션 자동화 기반으로서 제공하는 것을 중심으로 생각하고 있습니다.

시스템을 개발하고 운영하다 보면, '새로운 변경이 적용되었다', '새로운 서버가 추가되었다', '새로운 멤버가 추가되었다', '특정 서버가 고장 났다', '메모리 사용량이 60%를 넘었다' 등과 같은 많은 이벤트와 일상적으로 마주칩니다. 저희 오퍼레이션은 기본적으로 이런 이벤트가 트리거(trigger)가 되어 실행되는 경우가 많습니다. 이미 다양한 도구로 오퍼레이션 자동화를 구현하고 있는 분들이 많으실 테지만, 같은 팀에서 서로 다른 툴을 사용하면서 지식이 분산되고 자동화 스크립트의 품질이 저하되는 등 여러가지 문제가 있습니다. 이런 문제를 해결하여 사용자가 애플리케이션을 개발하고 운영하는 업무의 부담을 조금이라도 덜어주기 위해 라인업에 FaaS를 추가했습니다. 현재 Knative라는 OSS를 기반으로 개발 중입니다.

CaaS Family의 미래 

저희는 CaaS Family 중 가장 먼저 제공했던 PaaS를 운영하면서 중요한 사실을 하나 배웠습니다. 그건 바로 하나의 추상화 레벨을 모든 개발자나 서비스에 적용하는 것은 매우 어렵다는 점입니다. LINE 프라이빗 클라우드의 사용자는 2,000명이 넘는 사내 개발자입니다. 현재 일본뿐 아니라 태국, 대만, 인도네시아를 비롯한 여러 나라와 지역에서 다양한 서비스를 제공하고 있는데요. 각 서비스의 특성이 다르기 때문에 프라이빗 클라우드에 바라는 조건이나 사용 방법도 아래와 같이 다양합니다. 

  • VM을 사용자가 직접 제어할 필요가 있는 서비스 
  • Kubernetes를 사용자가 직접 제어할 필요가 있는 서비스 
  • 특정 이벤트를 만나면 특정 프로그램을 실행해야 하는 서비스

LINE 프라이빗 클라우드는 LINE이 제공하는 다양한 서비스 니즈에 맞는 적절한 추상화 레벨을 개발자에게 제공해야 합니다. 앞으로 LINE 프라이빗 클라우드 각 서비스의 품질을 높여서 개발자가 개발에 더 집중하기 쉬운 환경을 조성해나가는 것이 저희의 목표입니다. 앞으로 다양한 기회를 통해 더 많은 이야기를 나눌 수 있으면 좋겠습니다.