BEYOND SW 캠프 20기 16주차

배창민·2025년 12월 8일
post-thumbnail

16주차 회고록

1) 16주차를 시작하며

이번 주는 새로운 팀원이 정해지고, 숨 돌릴 틈도 없이 바로 데브옵스 프로젝트에 돌입한 한 주였다.
백엔드와 프론트엔드 프로젝트가 끝난 지 얼마 되지도 않았지만, 곧바로 인프라와 배포 관점에서 서비스를 다시 바라봐야 했다.

이번 데브옵스 프로젝트의 주제는 이전에 구상했던 아이디어를 이어가는 형태로 잡았다.
사용자들이 마음에 드는 책의 글귀를 저장하고, 그 글귀를 다른 사람들과 공유할 수 있는 플랫폼을 만드는 프로젝트이고, 이름은 Cherry Booker로 정했다.

팀 구성도 이번 주에 확정되었다.
이제 이 팀원들과 함께 데브옵스 프로젝트를 거쳐 최종 프로젝트까지 이어서 함께 가야 하기 때문에, 서로 합을 맞추어 끝까지 무사히 완주했으면 좋겠다는 생각이 컸다.

한편 지난달에 봤던 SQLD 시험의 사전 결과가 이번 주에 나왔는데, 다행히 합격으로 표시되었다.
정식 발표 전이긴 하지만 오랫동안 준비했던 시험이라 안도감과 함께 조금은 자신감도 얻을 수 있었다.
다만 기뻐하는 것도 잠시, 바로 쿠버네티스와 테라폼 강의와 실습이 이어지면서 정신없이 한 주를 보냈다.


2) 학습 요약

2-1) Docker 로깅과 모니터링, 메시지 브로커

  • 로깅과 모니터링 기본 개념

    • 컨테이너 환경에서 로그를 남기고 수집하는 방식에 대해 정리했다.
    • 애플리케이션 내부 로그, 컨테이너 표준 출력 로그, 호스트 레벨 로그가 어떻게 다른지 구분하고,
      로그를 중앙에서 모으는 구조의 필요성을 이해했다.
  • Docker 기반 로깅 흐름

    • docker logs 명령으로 기본 로그를 보는 수준에서
      로그 드라이버와 외부 수집 도구로 넘기는 구조까지 개념을 확인했다.
    • 나중에 쿠버네티스 환경에서의 로깅과 연결될 내용이라고 생각하며 기본기를 다지는 느낌으로 정리했다.
  • 메시지 브로커 개념

    • 서비스 간 통신에서 메시지 브로커를 사용하는 이유를 다시 정리했다.
    • 동기 통신만으로는 처리량과 장애 대응에 한계가 있어,
      비동기 큐 기반 구조로 이벤트를 처리하는 패턴을 이해했다.
  • Docker 환경에서의 메시지 브로커

    • 메시지 브로커를 컨테이너로 띄우고,
      애플리케이션 컨테이너가 이를 바라보는 구성을 어떻게 만드는지 흐름을 익혔다.

2-2) Kubernetes 기초와 Ingress, 배포 전략

  • Kubernetes 기초

    • 쿠버네티스가 왜 필요한지, 컨테이너 오케스트레이션 도구의 역할을 처음부터 다시 정리했다.
    • 노드, 파드, 서비스, 네임스페이스 같은 기본 개념들을 구조도와 함께 살펴보며 연결했다.
  • Ingress와 서비스 노출

    • 서비스 타입에 따라 외부에 노출하는 방식이 어떻게 달라지는지 정리했다.
    • Ingress를 통해 여러 서비스의 라우팅을 한 지점에서 관리하는 구조를 이해했다.
    • 도메인과 경로 기반으로 트래픽을 분기하는 예시를 보며 Cherry Booker에도 어떻게 적용할지 상상해 보았다.
  • 배포 전략

    • 롤링 업데이트, 블루 그린, 카나리 같은 배포 전략을 살펴보았다.
    • 단순히 이미지만 새로 올리는 것이 아니라,
      트래픽 분배와 롤백 가능성을 염두에 두고 배포 전략을 설계해야 한다는 점을 배웠다.

2-3) Kubernetes 스토리지와 설정 관리

  • Volume, PV, PVC

    • 컨테이너가 사라져도 유지되어야 하는 데이터를 다루기 위해 Volume이 필요하다는 점을 다시 확인했다.
    • Pod에서 바로 Volume을 선언하는 방식이 아니라,
      클러스터 레벨의 PersistentVolume과 이를 요청하는 PersistentVolumeClaim 구조를 통해
      스토리지를 추상화하는 개념을 정리했다.
  • ConfigMap과 Secret

    • 애플리케이션 설정값과 민감한 값을 컨테이너 이미지 밖에서 관리하는 방식으로
      ConfigMap과 Secret을 사용하는 패턴을 배웠다.
    • 코드에 박아 두던 설정들을 환경 의존적으로 분리할 수 있다는 점이 특히 인상적이었다.
    • 나중에 Cherry Booker의 데이터베이스 주소, 토큰, 각종 키들을
      ConfigMap과 Secret으로 관리하는 그림을 그려 보게 되었다.

2-4) Kubernetes 헬스 체크, 스케일링, Job, StatefulSet

  • Liveness와 Readiness Probe

    • 단순히 컨테이너가 떠 있는지만 보는 것이 아니라,
      애플리케이션이 정상 동작 중인지, 트래픽을 받아도 되는 상태인지 분리해서 체크해야 한다는 점을 배웠다.
    • 헬스 체크가 제대로 설정되지 않으면
      이미 죽어 있거나 준비 안 된 파드로 요청이 들어갈 수 있다는 점을 이해했다.
  • 자원 제한과 HPA 기반 자동 스케일링

    • 각 파드에 CPU와 메모리 요청값과 상한을 설정해
      한 파드가 자원을 과도하게 사용하는 상황을 방지하는 방법을 배웠다.
    • HPA를 통해 부하 기준으로 파드 수를 자동으로 늘리고 줄이는 구조를 살펴보면서
      나중에 실제 트래픽이 있는 서비스에 어떻게 적용할 수 있을지 생각해 보았다.
  • Job과 CronJob

    • 상시 실행되는 서비스와 달리, 한 번만 실행해야 하는 작업을 Job으로 처리하는 패턴을 배웠다.
    • 정기적으로 반복 실행해야 하는 배치 작업은 CronJob으로 관리하는 구조도 함께 익혔다.
  • StatefulSet과 Headless Service

    • 순서와 고유성이 중요한 파드들을 운영할 때 사용하는 것이 StatefulSet이라는 점을 배웠다.
    • Headless Service를 통해 각 파드가 고유한 호스트명을 갖도록 하는 방식도 살펴보며
      데이터베이스나 특정 상태 기반 서비스에 어떻게 적용할지 감을 잡았다.

2-5) Terraform과 Kubernetes 클러스터 배포

  • Terraform 기본 개념

    • 인프라를 코드로 관리한다는 관점에서 Terraform을 다시 정리했다.
    • 선언적인 설정 파일로 리소스를 정의하고,
      현재 상태와 원하는 상태를 비교해 필요한 변경만 적용하는 흐름을 익혔다.
  • Terraform을 통한 Kubernetes 클러스터 배포

    • Terraform으로 클라우드 리소스를 정의하고,
      그 위에 Kubernetes 클러스터를 구성하는 예시를 살펴봤다.
    • 수동으로 콘솔에서 클릭해서 만들던 인프라를
      코드로 관리하면 버전 관리와 재현성이 높아진다는 점이 인상적이었다.
    • 데브옵스 프로젝트에서도, 나중에 시간이 된다면
      Cherry Booker를 위한 테스트 클러스터를 Terraform으로 올려 보는 것을 목표로 삼고 싶다는 생각이 들었다.

3) 진행 상황

  • 새로운 팀 구성 완료

    • 이번 주에 DevOps 프로젝트부터 최종 프로젝트까지 함께할 팀원이 확정되었다.
    • 이제 이 멤버들과 한 번에 끝나는 프로젝트가 아니라
      뒤에 이어질 최종 프로젝트까지 묶여 있기 때문에,
      초반부터 합을 잘 맞추는 것이 중요하다고 느꼈다.
  • DevOps 프로젝트 Cherry Booker 착수

    • 숨 돌릴 틈도 없이 곧바로 데브옵스 프로젝트에 들어갔다.
    • 서비스 컨셉은 사용자가 책에서 마음에 드는 글귀를 저장하고,
      그 글귀를 다른 사람들과 공유할 수 있는 플랫폼이다.
    • 이름은 Cherry Booker로 정했다.
      예전에 아이디어를 냈던 이름을 실제 프로젝트로 이어가게 된 셈이다.
  • 인프라 관점의 설계 시작

    • 단순히 기능 중심이 아니라,
      이 서비스를 어떤 환경에서 어떻게 띄우고, 어떻게 관찰할지라는 관점에서 구조를 고민하기 시작했다.
    • 쿠버네티스와 Terraform 강의를 들으면서
      프로젝트에 가져올 수 있는 부분과 당장은 욕심을 줄여야 할 부분을 구분해 보는 중이다.
  • SQLD 사전 합격 확인

    • 지난달에 봤던 SQLD 시험의 사전 결과가 합격으로 나온 것도 이번 주 진행 상황 중 하나였다.
    • 프로젝트와 별도로 준비했던 공부가 결실을 맺은 느낌이라,
      앞으로 데이터와 쿼리를 다루는 작업에서 조금 더 자신감을 가지고 접근할 수 있을 것 같다.

4) 느낀 점

이번 주는 백엔드와 프론트엔드 프로젝트가 막 끝난 직후라
조금 쉬고 싶다는 마음이 컸지만, 바로 새로운 팀과 데브옵스 프로젝트에 들어가면서
정신을 가다듬을 틈이 거의 없었다.

그래도 지난 몇 달간 기능 구현 중심으로만 보던 서비스를 이제는
배포, 스케일링, 모니터링까지 포함한 전체 관점에서 다시 보고 있다는 점이 새로웠다.
쿠버네티스, HPA, 헬스 체크, Terraform 같은 개념들은 처음에는 추상적으로 느껴졌지만
이제 Cherry Booker를 어디에 어떻게 배포할지 연결해서 생각해 보니
단순 이론이 아니라 실제 선택지라는 생각이 들기 시작했다.

한편, 새로운 팀과 다시 한 번 장기 프로젝트를 시작한다는 점에서
기대와 부담이 동시에 느껴졌다.
서로 아직 스타일과 강점을 잘 모르는 상태라,
초반에 맞춰 가는 과정에서 생각보다 에너지가 많이 쓰일 것 같은 느낌도 있다.
그래도 이번에는 일정과 건강을 함께 관리하면서
중간에 번아웃이 오지 않도록 조절하는 것이 개인적인 목표다.

SQLD 사전 합격 소식은 이번 주의 작은 위안이 되었다.
한동안 프로젝트와 시험 준비를 병행하면서 체력적으로 힘들었는데,
그래도 최소한 그 시간들이 헛되지 않았다는 느낌을 받을 수 있었다.
다만 이제는 여기서 멈추지 않고, 프로젝트에서 실제로 데이터와 쿼리를 설계하고 개선하는 데
이 지식을 녹여 보는 것이 중요하다고 느꼈다.


5) 다음 계획

  • DevOps 프로젝트 구조 구체화

    • Cherry Booker의 기본 아키텍처를
      어떤 환경에, 어떤 방식으로 배포할지 팀원들과 더 구체적으로 정리할 계획이다.
    • 쿠버네티스와 Terraform에서 배운 내용을
      어느 수준까지 실제 프로젝트에 적용할지 현실적으로 선을 긋는 것도 필요하다.
  • 팀 합 맞추기와 역할 분담

    • 새 팀원들과 데일리 공유와 짧은 회의를 통해
      각자 맡을 도메인과 역할을 더 명확히 나눌 생각이다.
    • 프론트, 백엔드, 인프라 사이의 경계를 어떻게 나눌지,
      인터페이스를 어떻게 정의할지 논의하면서 병렬로 작업할 수 있는 구조를 만드는 것이 목표다.
  • 쿠버네티스와 Terraform 복습 및 실습 확장

    • 이번 주에 배운 개념을 단순 이론으로 두지 않고
      작은 예제 클러스터나 테스트 환경을 직접 구성해 보면서 손에 익히고 싶다.
    • 특히 헬스 체크, HPA, Job과 CronJob 같은 기능들은
      실제 서비스 동작을 상상하면서 연습해야 이해가 더 잘 될 것 같다.
  • 건강과 일정 관리

    • 연달아 프로젝트가 이어지다 보니
      체력 관리의 중요성이 더 크게 느껴지고 있다.
    • 이번 달부터는 최소 수면 시간과 공부 시간을 나누어 정리하고,
      무리한 야근 대신 꾸준한 리듬을 유지하는 방향으로 패턴을 바꿔 볼 계획이다.

이번 15주차는
새로운 팀과 DevOps 프로젝트를 시작하며,
Cherry Booker라는 이름 아래에서 서비스를 한 단계 더 확장해 갈 준비를 한 주였다.
인프라와 배포 관점까지 시야를 넓히는 동시에
팀워크와 체력이라는 두 가지 과제도 함께 안게 되었지만,
이 경험들이 최종 프로젝트까지 이어지는 긴 여정의 기반이 될 거라고 믿고 있다.

profile
개발자 희망자

0개의 댓글