Part 1. 개발자를 위한 Kubernetes 입문

Part 1. Ch 3. Kubernetes가 백엔드 개발자에게 제공하는 것들

Ch 3. Kubernetes가 백엔드 개발자에게 제공하는 것들


01. 백엔드 개발의 트렌드와 환경의 변화

백엔드 개발의 본질적인 목표는 크게 변하지 않았다. 하지만 애플리케이션이 실행되는 환경과 요구되는 책임의 범위는 계속해서 진화해 왔다.

백엔드 실행 환경의 변화

1. 로컬 애플리케이션의 시대

초기의 애플리케이션은 네트워크에 연결되지 않은 상태에서 로컬 파일 시스템을 기반으로 동작했다. 실행 환경과 개발 환경이 사실상 동일했고, 배포라는 개념도 지금처럼 복잡하지 않았다.

2. 물리 서버의 시대

서버 애플리케이션이 등장하면서 별도의 물리 서버에 프로그램을 배포하고 실행하는 방식이 일반화되었다. 개발자는 서버 환경을 직접 구성해야 했고, 하드웨어 자원은 고정되어 있어 확장성이 제한적이었다.

3. 가상화와 클라우드의 등장

퍼블릭 클라우드가 보급되며 가상화를 통해 자원을 동적으로 할당받는 방식이 확산되었다. 필요한 만큼의 서버를 빠르게 생성하고 제거할 수 있게 되면서, 인프라 운영의 패러다임이 크게 바뀌었다.

4. 컨테이너와 Kubernetes

운영체제 레벨의 가상화인 컨테이너 기술은 실행 환경을 더욱 추상화했다. Kubernetes는 컨테이너를 관리하는 표준 플랫폼으로 자리 잡으며, 애플리케이션 운영의 복잡도를 인프라 레벨에서 해결하는 방향으로 발전했다.


백엔드 영역의 전문화

초기에는 서버 프로그램이 화면 렌더링까지 함께 담당했다. 하지만 AJAX와 REST 기반 통신이 보편화되면서 프론트엔드와 백엔드의 역할이 명확히 분리되었다.

이후 프론트엔드 프레임워크와 모바일 애플리케이션이 등장하고, 서비스 규모가 커지면서 백엔드는 다음과 같은 역할에 집중하게 되었다.

  • 비즈니스 로직 처리
  • 데이터 저장 및 조회
  • 외부 시스템과의 연동
  • 대규모 트래픽 처리와 안정성 확보

보편적인 백엔드 개발의 목표

현대의 백엔드 개발은 서버 프레임워크를 기반으로 DB, 메시지 큐, 스토리지 등 다양한 인프라와 연동하며 API와 배치 프로그램을 개발하는 형태가 일반적이다.

이 과정에서 개발자가 마주하는 핵심 과제는 다음과 같다.

  1. 유지보수하기 좋은 소스 코드를 작성하고 안정적으로 배포하는 것
  2. 실행 중인 서버가 장애 없이 많은 트래픽을 처리하도록 만드는 것
  3. 스케일 아웃을 통해 성능 문제를 해결하는 것
  4. 마이크로서비스 아키텍처(MSA)를 통한 구조적 확장
  5. 개발 조직 구조와 협업 방식의 변화
  6. 클라우드 네이티브 프로그래밍의 확산
  7. 무장애 시스템이 아닌 장애를 전제로 한 시스템으로의 인식 전환

백엔드 개발의 트렌드

백엔드 개발의 목표 자체는 변하지 않았지만, 환경 변화에 따라 더 높은 안정성, 확장성, 유연성을 요구받는 방향으로 발전하고 있다.


02. Kubernetes가 백엔드 개발자에게 제공하는 것들

Kubernetes는 단순한 컨테이너 오케스트레이션 도구를 넘어, 백엔드 개발 방식 자체에 큰 영향을 주는 플랫폼이 되었다.

쿠버네티스와 백엔드 개발

Kubernetes는 다음과 같은 가치를 백엔드 개발자에게 제공한다.

  1. 플랫폼에 독립적인 실행 환경
  2. 마이크로서비스 아키텍처에 최적화된 구조
  3. 높은 가용성과 안정성
  4. 스케일에 강한 워크로드 구성
  5. 네임스페이스를 통한 조직 및 환경 분리
  6. 빌드·배포 파이프라인의 고도화

플랫폼에 독립적인 환경

컨테이너가 가진 플랫폼 독립성을 그대로 활용할 수 있다. 애플리케이션에 필요한 자원은 Kubernetes 객체로 추상화되며, 인프라 변경이 코드에 미치는 영향이 최소화된다.

그 결과, 클러스터가 변경되더라도 서비스를 비교적 쉽게 이식할 수 있다.


마이크로서비스 아키텍처 지원

Kubernetes는 MSA에 필요한 다양한 스택을 인프라 레벨에서 제공한다.

  • 언어와 프레임워크에 종속되지 않는 구조
  • 서비스 단위의 독립적인 배포와 확장
  • 일관된 빌드 및 배포 파이프라인

이를 통해 MSA에 대한 접근과 구현이 훨씬 수월해진다.


높은 가용성과 안정성

Kubernetes는 장애를 전제로 한 시스템 구성을 기본으로 한다.

  • 장애 발생 시 자동 복구
  • 빠른 롤백과 재배포
  • 설정 실수로 인한 장애를 줄여주는 구조

이로 인해 전체 시스템의 안정성이 크게 향상된다.


스케일에 강한 워크로드 구성

하드웨어 자원을 클러스터 단위로 통합해 사용할 수 있으며, 간단한 설정만으로 스케일 업·아웃이 가능하다.

  • 배치 작업의 병렬 처리
  • 오토 스케일링 지원
  • 트래픽 변화에 유연한 대응

네임스페이스를 통한 조직과 환경 분리

네임스페이스를 통해 서비스, 팀, 환경 단위로 리소스를 논리적으로 분리할 수 있다. 이는 운영 복잡도를 줄이고 권한 관리와 리소스 관리에 큰 도움이 된다.


빌드 및 배포 과정의 고도화

Kubernetes 환경에서는 다양한 배포 전략과 자동화 기법을 활용할 수 있다.

  • 무중단 배포
  • 점진적 배포
  • 배포 안정성 향상

이로 인해 배포 과정 자체가 서비스 안정성을 높이는 중요한 수단이 된다.


쿠버네티스 기반의 백엔드 개발

Kubernetes는 백엔드 개발자가 인프라 세부 구현보다는 비즈니스 로직과 서비스 가치에 집중할 수 있도록 돕는다.

다만, Kubernetes가 모든 문제를 해결해 주지는 않는다. 플랫폼이 제공하는 기능을 제대로 활용하기 위해서는 기본 개념과 동작 원리에 대한 이해가 반드시 필요하다.



© 2020. All rights reserved.

SIKSIK