본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
https://fastcampus.info/4n8ztzq
안녕하세요 :)
오늘은 "50일의 기적 AI 환급반_ 대규모 채팅 플랫폼으로 한 번에 끝내는 실전 대용량 트래픽 커버 완전판" 챌린지에 도전하는 마흔 일곱번째 날입니다.
마흔 여섯번째 날에는 Docker Compose를 사용한 로컬 레디스 클러스터 구성에 대해 배웠었는데요. 오늘은 과연 어떤 내용들을 배울 수 있을지 공부하고 포스팅 하도록 하겠습니다.
오늘 학습할 내용의 제목은,
Part 5. 모놀리틱 서비스 분해 > Ch 2. 레디스의 고가용성과 확장성 확보를 위한 클러스터링 >
03. 채팅 프로젝트에 레디스 클러스터 적용
입니다.
💬 채팅 프로젝트에 레디스 클러스터 적용
- 이번 챕터는 채팅 프로젝트에 레디스 클러스터를 실제로 적용하는 과정입니다.
- 앞에서 구축한 레디스 클러스터 예제를 기반으로, 채팅 서버와 인증 서버 두 프로젝트에 클러스터 설정을 반영하고 도커 환경까지 재구성하여 안정적으로 동작하도록 만드는 것이 목표입니다.
⚙️ 적용 범위
- 채팅 서버 (DB 샤딩 적용 버전)
- 최근 작업한 DB 샤딩 적용 서버에 레디스 클러스터 설정을 추가합니다.
- 인증 서버 (분리된 서버)
- 별도로 분리된 인증 서버에도 동일하게 레디스 클러스터 설정을 적용해야 합니다.
- 도커 환경
- 모든 레디스 노드 구성을 반영하도록 docker-compose 설정을 수정하고, 컨테이너를 다시 띄웁니다.
🗂️ 초기 정리
- 기존 도커 데이터 디렉토리에 쌓여 있던 컨테이너 데이터를 삭제합니다.
- set_host_ip 스크립트를 채팅 서버 프로젝트 도커 디렉토리에 복사합니다.
- 프로젝트 이름을 메시지 시스템 레디스 클러스터로 변경하고 Gradle 세팅까지 반영합니다.
- 이후 스크립트를 실행해 .env 파일을 새로 생성합니다.
🛠️ 레디스 클러스터 설정
- 예제 프로젝트에서 사용했던 6개의 레디스 노드 설정을 채팅 서버의 docker-compose 파일로 가져옵니다.
- appendonly yes 옵션은 기본값으로 활성화되어 있어 명시하지 않아도 동일하게 동작합니다.
- 컨테이너를 실행하면 많은 노드가 동시에 올라오며, 클러스터 환경이 준비됩니다.
📝 스프링 부트 설정
- 채팅 서버
- application.yml의 레디스 설정 부분을 클러스터 모드로 교체합니다.
- 인증 서버
- 동일하게 레디스 클러스터 접속 정보를 적용합니다.
- 이후 bootJar 빌드 후 인증 서버를 실행시킵니다.
🔍 테스트 및 검증
- 통합 테스트 실행
- 채팅 서버의 통합 테스트를 실행해 DB 스키마 초기화와 기본 기능 검증을 진행합니다.
- 모든 테스트가 통과하면 클러스터 환경이 정상적으로 적용된 것입니다.
- 레디스 인사이트 확인
- 클러스터에 접속해 노드와 키 분산 상태를 시각적으로 확인합니다.
- 예: A 노드 5개, B 노드 4개, C 노드 6개 분산 저장 확인.
- 클라이언트 테스트
- 클라이언트에서 로그인 및 메시지 전송 기능을 실행하여 실제 동작 여부를 검증합니다.
🧪 장애 상황 실험
- 노드 중 하나를 강제로 중지시킨 뒤,
- 채팅 기능이 정상 동작하는지 확인합니다.
- 레디스 클러스터가 자동으로 페일오버 처리하며 다른 노드가 역할을 승계하는 것을 확인할 수 있습니다.
- 이번 과정에서 레디스 클러스터를 채팅 서버와 인증 서버에 적용하고, 도커 환경과 스프링 부트 설정을 통합적으로 관리하는 방법을 실습했습니다.
- 이번 챕터를 통해 단일 서버 환경이 아닌 클러스터 기반 아키텍처로 전환하면서 안정성과 확장성을 동시에 확보할 수 있는 것과 테스트 및 장애 상황 시뮬레이션을 통해 실제 운영 환경에서 발생할 수 있는 문제에 대비할 수 있다는 것을 느낄 수 있었습니다.