코드 저장소.

AWS EC2 기반 Spring Boot 분산 인프라 구축기 2 본문

포폴/일정관리 프로젝트

AWS EC2 기반 Spring Boot 분산 인프라 구축기 2

slown 2026. 4. 19. 00:08

목차

1.공통 환경 구축: Docker & Docker Compose

2.인프라 서버: Nginx & SSL 인증서(Certbot) 적용

3.Docker Compose를 통한 서비스 배치

4.후기

 

1.공통 환경 구축: Docker & Docker Compose

4대의 EC2 서버에 동일한 런타임 환경을 구축하고, 외부 트래픽을 안전하게 수용하기 위한 SSL 인증서 발급 과정을 정리했습니다.

# 패키지 업데이트 및 Docker/Compose 설치
sudo apt-get update
sudo apt-get install -y docker.io docker-compose

# 사용자 권한 부여 (sudo 없이 Docker 명령 실행 가능)
sudo usermod -aG docker ubuntu

# 서비스 활성화
sudo systemctl start docker
sudo systemctl enable docker

 

2.인프라 서버: Nginx & SSL 인증서(Certbot) 적용

외부 사용자가 도메인을 통해 접속할 때 보안 연결(HTTPS)을 제공하기 위해 Certbot을 이용해 Let's Encrypt 인증서를 발급받았습니다.

  • 발급 대상: api.schedulemanagement.site (및 서비스 관련 도메인)
  • 적용 방식: Certbot의 standalone 혹은 nginx 플러그인을 사용하여 SSL 인증서를 획득하고, Nginx 설정 파일에 경로를 지정했습니다.

3.Docker Compose를 통한 서비스 배치

각 서버의 역할에 맞춰 docker-compose.yml 파일을 작성하고 배포했습니다.

 

  • 인프라 서버: Nginx를 전면에 띄워 로드밸런싱을 수행하고, Kafka와 ZooKeeper 브로커를 관리합니다.
  • 서비스 서버: Spring Boot 애플리케이션 컨테이너를 기동합니다.
  • 모니터링 서버: Prometheus와 Grafana 스택을 띄워 인프라 가시성을 확보합니다.

 

트러블 슈팅

 

구축 과정 중 인프라 서버에서 Kafka와 ZooKeeper 간의 통신이 원활하지 않은 문제가 발생했습니다. 보안 그룹(2181 포트) 설정과 내부 컨테이너 네트워크 간의 충돌로 인해 연결 오류 로그가 계속해서 출력되었습니다.  

 

이 문제를 해결하며 고민이 깊어졌습니다. "과연 분산 시스템을 구축하면서 ZooKeeper라는 별도의 관리 포인트가 꼭 필요할까?"

4.후기

반복되는 패키지 설치와 SSL 설정 과정을 거치며 인프라의 기초를 다졌습니다. 하지만 ZooKeeper 관련 이슈를 겪으며 더 효율적인 Kafka 운영 방식을 고민하게 되었습니다.

 

그래서 다음 포스팅에서는 ZooKeeper 의존성을 완전히 제거한 Kafka KRaft(Kafka Raft) 모드로 전환하여 시스템을 한 단계 더 고도화하는 과정을 다뤄보겠습니다.