백엔드 개발자가 활용할 줄 알아야 하는 Kubernetes, 그게 따로 있어?

#쿠버네티스 #백엔드 #MSA


2023년을 기준으로 쿠버네티스가 소프트웨어 개발 환경, 특히 백엔드 프로그램의 개발과 실행에서 사실상 표준이 되었다는 사실은 부정하기 어렵습니다. 이제 '왜 쿠버네티스를 써야 하는가?'를 물어보기보다는 '왜 쿠버네티스를 안 쓰는가?'에 대한 대답을 준비해야 할 정도로 개발 트렌드가 쿠버네티스 중심으로 이미 옮겨진 상태입니다.

이는 쿠버네티스가 본격적으로 세상에 공개된 지 10년도 되지 않는 기간에 이루어진 성장이며, 소프트웨어 개발 환경의 역사에서도 독보적인 성장 속도라고 할 수 있습니다. 이렇듯 쿠버네티스가 개발 환경에서 차지하는 비중이 점점 더 높아지고 있습니다.


📌 | Kubernetes

쿠버네티스

쿠버네티스는 모든 종류의 서비스 개발과 운영에 사용할 수 있는 컨테이너 기반의 실행 환경입니다. 이는 다시 말하자면, 개발자들이 애플리케이션을 실행하고 운영하는 데 필요한 모든 것들을 제공해 준다는 것을 의미합니다.
보통 ‘쿠버네티스를 사용하는 것은 데브옵스 엔지니어다’라고 생각할 수 있습니다. 하지만 이들은 쿠버네티스 환경을 ‘구축’하고 ‘운영’하는 것에 초점을 맞추지만, 이를 ‘활용’하여 실제로 고객이 사용하는 서비스를 개발하는 것은 바로 백엔드 개발자입니다.

쿠버네티스는 개발에 필요한 컴퓨팅 자원, 저장소, 설정, 네트워크 등을 모두 추상화하여 제공해 주는데요. 때문에 백엔드 개발자들은 복잡한 하드웨어 구성에 종속되지 않고 쿠버네티스가 제공해 주는 것들만 활용하여 개발과 운영 모두를 쉽고 강력하게 구성할 수 있습니다. 특히 다양한 애플리케이션을 함께 실행하고 서로 안정적으로 통신할 수 있는 환경을 제공해 주기 때문에 MSA(*Micro Service Architecture) 관점에서도 매우 유리한 환경을 제공하고 있습니다.


📌 | MSA 환경에서의 Kubernetes의 역할

MSA는 매우 중요한 패러다임이자 아키텍처이지만 고전적인 환경에서는 많은 서비스를 빌드하고 배포하며 서로 통신할 수 있도록 관리해 주는 것들이 모두 높은 기술 수준을 요구한다는 단점을 가지고 있기도 합니다.

이때 쿠버네티스는 기본적으로 아주 많은 수의 워크로드가 동시에 실행되는 것을 가정하고 설계되어 다수의 애플리케이션이 계속 배포되고 유지되는 MSA 환경의 구성에서 무척 유리합니다. 이렇게 쿠버네티스가 복잡한 MSA 환경 구성을 단순화 시켜주기 때문에, 개발자들은 각각의 서비스의 개발에 집중할 수 있으며 적은 리소스로도 MSA 기반의 서비스를 개발해 낼 수 있도록 해줍니다.


📌 | Kubernetes for Backend

백엔드 개발자는 쿠버네티스 그 자체의 동작과 특성에 대해서 이해하는 것도 중요하지만, 더욱 중요한 것은 쿠버네티스가 백엔드 개발자들에게 제공하는 장점들이 무엇이며 이를 자연스럽게 활용하기 위해서 서버 프로그램 개발을 어떻게 해야 하는지에 대해 이해하는 것에 있습니다.

극단적으로 백엔드 개발자들은 쿠버네티스에 대해서 전혀 모르더라도, 쿠버네티스에서 돌아가는 애플리케이션을 만들 수 있습니다. 하지만 쿠버네티스가 제공해 주는 환경에 대한 이해를 바탕으로, 그 환경을 자연스럽게 활용하는 애플리케이션을 만들어 낸다면 아주 적은 노력으로도 쿠버네티스의 강력한 기능을 활용하는 애플리케이션을 개발해 낼 수 있습니다.

쿠버네티스

‘대규모 트래픽 과부하’로 한 가지 예시를 들어보겠습니다. 보통 이 상황을 해결하기 위한 대책으로 스케일링(*scaling)을 활용하는데요. 스케일링에는 스케일 업(scale-up)과 스케일 아웃(scale-out)이라는 두 가지 방법이 존재하는데, 각각의 방법에는 치명적인 단점이 존재합니다.

- 스케일 업(scale-up) : 서버 컴퓨터의 성능을 높여 요청을 처리하는 방법, 하지만 서버 한 대에 모든 부하가 집중되어 장애 발생 시 치명적임
- 스케일 아웃(scale-out) : 서버 컴퓨터의 대수를 높여 트래픽을 분산시키는 방법, 하지만 설계 관리가 복잡하고, 모든 서버에 데이터 일관성을 유지해야 함

이 스케일링을 자동화하기 위해 나온 서비스가 바로 오토스케일링(*auto-scaling)입니다. 오토스케일링은 애플리케이션의 인스턴스 수를 자동으로 조정하여 트래픽에 대응하는 기능인데요. 즉, 애플리케이션의 부하가 증가하면 자동으로 인스턴스 수를 늘리고, 부하가 감소하면 자동으로 인스턴스 수를 줄여 리소스 사용을 최적화시키는 것입니다.
덕분에 개발자는 한시가 바쁜 상황에서, 단 몇 분 만에 서비스 전체에서 여러 리소스에 대해 애플리케이션 규모 조정 설정을 할 수 있습니다. 이렇듯 백엔드 개발자는 쿠버네티스의 강력한 기능을 활용할 줄 안다면 적은 리소스로 더 효율적인 개발을 할 수 있습니다.


📌 | 오직 백엔드에 의한, 백엔드를 위한 맞춤형 Kubernetes 강의

하지만 보통 쿠버네티스 강의들은 DevOps 엔지니어에 초점을 맞춰 쿠버네티스라는 환경을 구성하고 운영하는 부분에 중점을 두어서 설명하는 경우가 많습니다.
이 강의에서는 쿠버네티스라는 환경을 구성하는 것보다는 활용하는 것에 포커스를 맞추고 있습니다. 쿠버네티스의 기본적인 개념을 백엔드 개발의 관점에서 이해할 수 있도록 설명하고, 백엔드 개발자들에게 익숙한 프로그래밍 언어와 서버 프레임워크를 이용하여 쿠버네티스 환경을 활용해 나가는 서버 개발을 경험하며 쿠버네티스에 대해 더 깊이 이해할 수 있습니다. 나아가 쿠버네티스 기반의 서비스 개발을 잘 할 수 있는 방법에 대해 이해할 수 있도록 구성하고 있습니다.

따라서 다른 강의나 문서 등을 통해 쿠버네티스에 대해서 배우고 이를 자신이 알고 있던 서버 개발 지식과 연결하는 과정에서 어려움을 겪었던 개발자라면, 이 강의에서 쿠버네티스를 위한 서버 개발은 어떻게 해나가야 되는지 배워갈 수 있을 것입니다.


📌 | 파트별 학습 내용

쿠버네티스

강의는 크게 4개의 파트로 나누어서 진행됩니다.

- 첫 번째 파트에서는 쿠버네티스의 중요한 컨셉들과 쿠버네티스가 제공해주는 객체들에 대해 학습합니다.
- 두 번째 파트에서는 서버 개발을 중심으로 첫 번째 파트에서 배웠던 쿠버네티스의 특징과 구성 요소들을 어떻게 활용할지에 대해 학습합니다.
- 세 번째 파트에서는 배운 내용들을 활용하여 백엔드 개발 프로젝트를 수행하면서 실제 프로젝트에서 어떻게 활용할지에 대한 인사이트를 얻을 수 있습니다.
- 마지막 파트에서는 쿠버네티스 환경에서 서버 개발을 하면서 만날 수 있는 트러블과 그 해결법에 대해 알아봅니다.

백엔드 개발에 대해서 막 배우기 시작했거나 이미 충분히 익숙해지신 개발자분들이, 백엔드 개발을 더 잘하기 위해서 쿠버네티스라는 환경에 대한 이해가 필요할 때 이 강의를 학습하시기를 권장합니다.


📌 | 마치며

어쩌면 백엔드 개발자들에게 쿠버네티스라는 환경은 스트레스로 다가왔을 수도 있습니다. 배워야 할 것도 많고, 적응해야 할 것도 많은데 갑자기 등장한 환경이 순식간에 주류로 올라가 모르면 안되는 존재가 되어서 백엔드 개발자들에게 압박을 주는 것처럼 느껴지기도 하기 때문입니다.

하지만 쿠버네티스는 본질적으로 백엔드 개발자들이 원하던 것, 즉 '백엔드 개발에만 집중하고 싶다'는 요구를 충족시켜 주기 위해 등장했습니다.
강의 커리큘럼을 천천히 따라가면서 쿠버네티스가 제공해 주는 것들을 자연스럽게 습득해 나가시면 어느 순간부터는 쿠버네티스가 여러분이 개발을 하면서 나올 수 있는 많은 스트레스를 줄여주는 환경으로 다가올 수 있을 것입니다.


💜 아래 링크를 클릭하여 더욱 자세한 내용을 확인해 보세요.

이 글과 연관된 주제의 추천 강의