반응형
본 포스팅에서는 멋쟁이사자처럼 백엔드 부트캠프 플러스 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 추가 실습
'개발' 카테고리의 다른 글
라즈베리파이 서버에 도커 컨테이너 환경으로 프로젝트를 배포하자 (6) | 2025.04.06 |
---|---|
[미해결] 다른 서비스의 DB 데이터를 통합 조회할 수 있을까? (2) | 2025.04.02 |
이미저를 통해 라즈베리파이5에 우분투를 설치해보자 (2) | 2025.03.14 |
라즈베리파이5 언박싱 및 케이스 조립 (1) | 2025.03.14 |
젠킨스로 CI/CD 파이프라인을 구축해보며 남은 것들 (6) | 2025.01.19 |