제목
서버에 대한 집착을 끝내자
분야
프로그래밍/소프트웨어 개발
대상자
- 개발자 및 아키텍처 설계자: 전통적인 서버 기반 아키텍처에서 벗어나 효율적인 서비스 설계에 관심 있는 분
- 난이도: 중급~고급 수준, 서버리스 아키텍처 전환에 대한 기술적 이해가 필요
핵심 요약
- *_서버 중심 아키텍처의 한계_**:
- 서버리스 함수(Serverless Functions)는 서버 기반 아키텍처의 한계를 극복하는 새로운 패턴
- 12-Factor Manifesto는 서비스가 무상태(stateless)여야 하며, 데이터는 외부 저장소에 저장해야 함
- PHP는 요청당 새로운 인터프리터를 생성하여 무상태 설계에 적합함
- *_서버리스의 이점_**:
- 리소스 효율성: Kubernetes 노드에서 30개 컨테이너만 실행 가능했던 기존 방식 대비 서버리스 방식은 3,000개 이상의 애플리케이션 실행 가능
- 보안 개선: 외부 라이브러리 의존성 감소로 취약점 감소, TLS/SSL 및 네트워킹 작업을 외부로 이동
- 성능 향상: WebAssembly 기반 서버리스는 콜드 스타트 시간을 1밀리초 미만으로 단축
섹션별 세부 요약
- 전통적인 서버 아키텍처의 문제
- 리소스 낭비: 컨테이너화된 소켓 서버는 80% 비활성 상태임에도 리소스를 대부분 점유
- 보안 위험: 수만 줄의 외부 라이브러리 의존성으로 인한 취약점 및 공격 표면 확대
- 운영 부담: 서버 상태 확인(서버 실행 여부)은 개발자에게 부여된 운영 문제
- 무상태 설계의 원칙과 예시
- 12-Factor Manifesto는 서비스가 무상태여야 하며, 데이터는 외부 저장소에 저장
- PHP는 요청당 새로운 인터프리터를 생성하여 무상태 설계에 적합함
- 미소프레스(Microservice) 패턴은 인스턴스 재시작 시 데이터 손실 없어야 함
- 서버리스 함수의 진화와 이점
- 서버리스 v1의 한계: AWS Lambda 등 초기 플랫폼은 성능 부족, 빌더 락인 문제
- 서버리스 v2의 혁신: WebAssembly 기반으로 콜드 스타트 시간 단축, 외부 라이브러리 감소
- 리소스 효율성: 1개 Kubernetes 노드당 3,000개 이상의 서버리스 애플리케이션 실행 가능
- 서버리스 전환의 실무 팁
- 서버 분리: 비즈니스 로직과 네트워크, TLS, DNS 관리 분리
- 관리 역할 위임: 서버 관리 로직을 전용 소프트웨어에 위임
- 보안 강화: 외부 의존성 감소로 취약점 감소 및 공격 표면 축소
결론
- 서버리스 함수는 리소스 효율성, 보안, 성능 측면에서 전통적인 서버 아키텍처를 대체할 수 있는 최적 솔루션
- 실무 적용 팁:
- 서버 기능을 외부 소프트웨어에 위임하여 개발자 책임 범위 축소
- WebAssembly 기반 서버리스를 고려하여 콜드 스타트 시간 최소화
- 12-Factor 원칙과 무상태 설계를 유지하면서 서버리스 전환 검토
- 핵심 메시지: "서버에 대한 집착"은 더 이상 필요 없으며, 서버리스 패턴을 통해 간결성과 안정성을 달성해야 합니다.