개발

멋쟁이사자처럼부트캠프 백엔드 부트캠프 플러스

brobro332 2025. 4. 8. 01:30
반응형
본 포스팅에서는 멋쟁이사자처럼 백엔드 부트캠프 플러스 4기 10일 차에 배운 내용들을 정리하고자 한다.

 

학습 목표

  • 도메인 위임을 통한 스프링 의존성 제거
  • Docker, Nginx, Docker-Compose, K8s 등 인프라 학습

 

과정

10일 차
├── 도메인 위임
│   ├── 도메인 위임 시 이점이 무엇인지 학습
│   └── 실습(Domain 위임, Port/Adaper 위임)
├── Docker
│   ├── 효용성, 이미지 / 컨테이너 개념, 구성 요소, 흐름 등 개념 학습
│   ├── Dockerfile 작성법
│   ├── 명령어 정리(상태 체크, 빌드, 실행, 삭제)
│   ├── Docker Resource(Network, Volume)
│   └── 실습(Dockerfile 실행, 도커 컨테이너에서 호스트 접근)
├── Nginx
│   ├── 개념 및 효용성 학습
│   └── 실습(리버스 프록시 설정)
├── Docker-Compose
│   ├── 효용성
│   ├── 명령어 정리
│   ├── Docker-Compose 파일 구조 학습
│   └── 실습(Docker-compose 파일을 통한 Nginx 로드 밸런싱)
└── Kubernetes
    ├── 개념, 효용성, 구성 요소, 워크플로우 학습
    ├── 명령어 정리
    └── 실습(minikube로 K8s 환경에서 pod 실행)

 

결과

도메인 위임

  • 팀원이 특정 인터페이스의 기능을 구현 중이고, 해당 기능을 가져다 써야한다고 가정하자.
  • 내가 편하자고 해당 기능을 구현해버리면 개발 영역이 겹쳐 서로 얼굴을 붉히게 될 수 있음
  • 이때는 구현에 상관 없이 해당 도메인(또는 인터페이스)에 책임을 위임하여 그저 메서드를 호출하기만 하면 된다. 
  • 책임을 위임함으로써 스프링 의존성을 줄일 수 있다는 점을 알게 되었다.

 
Docker

  • 이식성, 배포, 격리된 실행 환경 확보 및 개발, 그리고 운영 환경의 구성 요소의 일관성을 위해서는 도커 컨테이너 기술이 필수적이다. 
  • 기존의 가상 머신과 달리 운영 체제 전체가 아닌 프로세스 단위로 일부를 가상화하는데, 이를 컨테이너 런타임이라고 한다.
  • 일반적인 워크플로우는 Dockerfile 작성 → 이미지 생성 →  컨테이너 생성 및 실행 순서로 진행된다. 
  • Dockerfile 작성 시 FROM, ENTRYPOINT 명령어는 필수적으로 작성해야 한다.
  • ENTRYPOINT는 docker run 명령어의 옵션에 overwrite 되지 않으므로 항상 실행되어야 할 명령을 설정하면 된다.
  • 반면 CMD는 docker run 명령어의 옵션에 overwrite되므로 실행되지 않을 수 있다.
  • 컨테이너는 기본적으로 외부와 격리되어 있고, 컨테이너 간 통신을 위해서는 동일 네트워크에 붙어 있어야 한다.
  • 외부 서버와 컨테이너 간 통신을 위해서는 포트 포워딩이 필수적이다.
  • 컨테이너에서 호스트 머신과 통신하려면 host.docker.internal 키워드를 사용해야 한다. 
  • Dockerfile 실행 실습을 통해 --rm 옵션을 추가하면 docker stop 시 컨테이너가 내려간다는 점을 새롭게 알게 되었다.
  • 도커 컨테이너에서 호스트에 접근해보는 실습을 통해 nginx 리버스 프록시 설정에 대해 새롭게 알게 되었다.

 
Nginx

  • 리버스 프록시, 로드 밸런서, 정적 파일 서버 등 API 게이트웨이 구조의 기초로 다양한 역할을 수행한다는 점을 알게 되었다.

 
Docker-Compose

  • Docker-Compose 파일을 통한 Nginx 로드 밸런싱 실습을 통해 컨테이너를 늘림으로써 필요 리소스가 증가하더라도 로드 밸런싱을 통해 트래픽을 분산하고 고가용성, 롤링 업데이트 등의 이점을 확보하는 것이 중요하다는 점을 알게 되었다.
  • Docker-Compose 명령어를 통해 컨테이너의 모든 로그들을 확인하는 방법을 새롭게 알게 되었다.

 
Kubernetes

  • 실습을 통해 일반적인 워크플로우와 효용성을 알게 되었다.

 

느낀 점

  • 헥사고날 아키텍처를 도입함으로써 협업 및 스프링 의존성을 줄일 수 있다는 점이 신기했다.
  • Docker 및 Docker-Compose 도입 시 장애 발견에 있어 로그 확인이 중요하다는 점을 실감했다.
  • Kubernetes를 도입할 경우 여러 컨테이너 환경을 동시에 모니터링할 수 있다는 점을 이해했다.

 

향후 계획

  • 개인프로젝트에 헥사고날 아키텍처 및 Nginx 로드밸런싱 도입
  • Docker, Docker-Compose, K8s 추가 실습