[25.01-03] ‘서버리스 컴퓨팅’ 연구
저희 컴퓨터시스템 연구실(CSLab)에서는 서버리스 컴퓨팅 관련 큰 과제가 하나 있어서 연구원분들과 ‘서버리스 컴퓨팅’ 관련 연구를 진행하고 이를 바탕으로 논문을 작성하고자 합니다.
쿠버네티스(K8s) 클러스터 구축
K8s 클러스터에 연결된 노드들
연구실에서 진행하는 서버리스 컴퓨팅 관련 연구를 위해 쿠버네티스(K8s) 클러스터가 필요했습니다. 이를 위해 K8s의 정확한 아키텍처 및 동작 원리를 이해하고자 가상머신(Virtual Machine)으로 노드 3개(Master Node 1개, Worker Node 2개)를 띄워서 직접 K8s 클러스터를 구축했습니다.
클러스터를 직접 구축해보면서 1) 프로세스를 그룹화하여 자원을 제한 및 할당하는 cgroup 기술에 대해서 알게 되었고, 2) 리눅스 명령어(curl, cat, sysctl 등)도 훨씬 더 익숙해 졌습니다.
OpenFaaS 아키텍처 분석, 설치 그리고 함수 배포
직접 그린 OpenFaaS 아키텍처 by 필자
OpenFaaS 설치 완료
오픈소스 서버리스 플랫폼인 OpenFaaS를 서버리스 컴퓨팅 연구에 활용하고자 K8s 클러스터 위에 OpenFaaS를 설치하고 함수를 직접 배포 및 호출하는 경험을 했습니다.
OpenFaaS는 크게 5가지 구성요소가 있습니다:
•
Gateway: 함수 호출 및 라우팅
•
Prometheus: 메트릭 데이터 수집
•
Alert Manager: 수집된 데이터 기반으로 알림 기능
•
NATS: 비동기 함수 요청 저장하는 메시지 큐
•
Queue-worker: NATS에서 비동기 요청 처리
서버리스 컴퓨팅 서베이 논문 리뷰
‘The Serverless Computing Survey: A Technical Primer for Design Architecture’에 나온 서버리스 컴퓨팅 계층
1~2월에는 ‘서버리스 컴퓨팅’ 연구에 필요한 배경지식을 습득하기 위해 쿠버네티스, OpenFaaS 등을 공부하고 학습한 내용을 바탕으로 세미나를 진행했습니다. 그리고 3월부터는 본격적인 연구 및 논문 작성을 위해 ‘서버리스 컴퓨팅 서베이’ 논문인 ‘The Serverless Computing Survey: A Technical Primer for Design Architecture (Li et.al., 2022)’을 읽고 세미나를 진행했습니다.
해당 논문에 따르면, 서버리스 컴퓨팅의 아키텍처는 크게 4가지로 이뤄져있습니다:
•
Virtualization Layer: 서버리스 함수를 독립적으로 격리 및 실행시키는 Sandbox(가상머신, 컨테이너 등)를 제공하는 계층
•
Encapsule Layer: 함수 인스턴스를 미리 준비(Pre-warm)하여 Cold Start 시간을 줄이는 계층
•
Orechestration Layer: 트래픽에 따라 Resource/Instance/Application 수준으로 스케줄링하는 계층
•
Coordination Layer: 서버리스 함수들이 백엔드 서비스(S3, DynamoDB 등)를 활용하도록 하는 계층
Layer마다 레퍼런스된 논문이 4~10개씩 있어서 이를 읽고 정리해야하는 논문이 꽤 많습니다. 이 논문들을 100%는 아니지만 70% 정도는 이해하려고 노력하고 있어서 시간을 꽤 많이 사용했지만, 덕분에 ‘서버리스 컴퓨팅’에 대한 전반적인 이해를 깊게 할 수 있을 것 같습니다.
‘도커 없이 직접 컨테이너 만들기’ 실습
서버리스 컴퓨팅 관련 논문을 읽다보니 서버리스 함수의 Sandbox로 주로 사용되는 컨테이너에 대한 확실한 이해가 필요하다고 판단했습니다. 그래서 이 영상을 참고하여 직접 컨테이너를 만들어보는 실습을 혼자서 진행했습니다.
컨테이너를 만들기 위해서는 크게 3가지가 필요합니다:
•
컨테이너만을 위한 자체적인 File System
•
컨테이너 내 프로세스들을 격리하는 Namespace
•
컨테이너 내 프로세스가 사용할 수 있는 자원을 제한하는 Cgroups
컨테이너를 만들 때 사용하는 Namespace는 여러 개가 있는데, 다음과 같습니다:
•
Mount Namespace: 마운트 포인트를 격리하여 컨테이너만의 파일 시스템을 갖게 한다.
•
PID Namespace: 프로세스 ID(PID)를 격리하여 컨테이너는 공유한 PID 공간을 갖게 하는데, 이는 해당 네임스페이스 내의 프로세스끼리만 서로 볼 수 있도록 한다.
•
Network Namespace: 네트워크 인터페이스, IP 주소 등을 격리하여 컨테이너만의 네트워크 스택을 갖게 한다.
•
UTS Namespace: 호스트 이름(hostname)을 격리하여 컨테이너마다 독립적으로 Hostname을 사용하도록 한다.
•
IPC Namespace: 메시지 큐, 공유 메모리, 세마포어 등을 격리하여 컨테이너 내 프로세스 간 통신을 위한 자원들을 제공한다.
이 Namespace들을 통해 프로세스들을 격리하고 Cgroup으로 사용할 자원까지 제한하여 컨테이너를 독립적인 실행환경으로 만들 수 있습니다.
매번 컨테이너를 Docker 등으로 쉽게 사용하기만 했는데, 직접 컨테이너를 만들어보니 어떻게 구성 및 생성되는지 제대로 이해할 수 있게 되었습니다. 컨테이너를 만드는 과정은 블로그에 적어두었으니, 참고하시면 좋을 것 같습니다.
[25.02] 7년 만에 학부 졸업 & 석사과정 시작
저는 재수하여 2018년에 중앙대학교 기계공학부로 입학했습니다. 4차산업혁명 이라는 키워드를 듣고 막연하지만 SW/AI가 더욱 중요해지는 세상이 온다고 판단하여 2021년 군대 전역 이후, 기계공학도에서 소프트웨어 엔지니어로 커리어를 전향하기로 결정했습니다. 그리고 전역하자마자 개발 공부를 하면서도 20대 때 최대한 많이 도전하고 실패하여 성공의 기틀을 다지고자 다양한 경험들을 했습니다: 임대 사업(대학생 셰어하우스 사업), 블록체인 스타트업 풀타임 재직(A41), 블록체인 학회장(CURG), 대학 IT동아리(멋쟁이사자처럼) 등등
이러한 경험 덕분에 빠르게 변하는 세상 속에서 근본에 가까운 ‘기본기’와 ‘정도(正道)’가 정말 중요하다는 사실을 깨닫게 되었습니다. 그래서 유능한 소프트웨어 엔지니어가 되기 위해서 CS 지식(컴퓨터공학 지식)을 더 채우고 깊게 공부하고자 중앙대학교 컴퓨터공학과 대학원에 입학하게 되었습니다.
[25.03] 대학기 첫 학기 생활
대학원에서의 첫 학기가 시작되었습니다. 대학원 수업으로는 ‘고급컴퓨터네트워크’, ‘고급분산및병렬처리’를 듣고 있는데, 학부 때와 비교하면 큰 부담은 없습니다.
학기가 시작되니, 제 스케줄에 기존에 진행하고 있던 연구 및 행정 업무 외에도 대학원 수업과 조교 업무(시험 감독, 실습실 IP 초기화 등)가 추가되었습니다. 그래서 효율적인 시간 관리가 더욱더 절실해지는 요즘입니다.
종종 성공한 사람들의 명언 및 인사이트를 찾아보는데, 지금의 저에게 필요한 몇 가지를 기록으로 남기자면:
•
자기가 좋아하는 일만 하며 살아갈 수는 없다. 하고 싶은 것을 하기 위해서는 하기 싫은 것을 반드시 해야 한다. 그리고 그 하기 싫은 일을 묵묵히 해내야 성공할 수 있다.
•
진짜 강한 사람은 남이 아니라, 어제의 나 자신을 이기는 사람이다. 말은 최대한 줄이고 행동으로 보여주는 사람이 되자.
•
잘못된 지름길에는 반드시 늪이 있다. 요행을 바라지 말고, 시간이 오래 걸리더라도 정도(正道)를 걷자. 그게 알고 보면, 가장 빠른 길일 것이다.
재미없는(?) 제 기록들을 읽어주셔서 대단히 감사드립니다
25년 2분기도 화이팅입니다~!
“50대의 추교현이 20대의 추교현에게 감사할 수 있도록 하루하루 최선을 다해 살고 있습니다.”
The End.