Spring Cloud 로컬 인프라: 고정 버전으로 구성한 Docker Compose 학습 환경
이 문서는 로컬 학습용입니다. 운영 환경에서는 각 구성 요소의 공식 배포 방식, 고정 버전, 구성 요소별 독립적인 자격 증명, 영속성 저장소 및 고가용성 구성을 사용하세요.
1. 왜 latest를 사용하지 않는가
latest를 사용하면 같은 Compose 파일로도 시점에 따라 다른 버전의 이미지를 가져오게 됩니다. 그 결과 구성, 데이터베이스 스크립트, 클라이언트 프로토콜 및 시작 동작을 재현할 수 없습니다. Nacos, Seata, RabbitMQ, MySQL, Elasticsearch 및 Kibana는 모두 버전을 고정해야 하며, Elasticsearch와 Kibana의 버전은 반드시 서로 일치해야 합니다.
2. 서비스 분리
로컬 환경에는 다음 구성 요소들을 포함할 수 있습니다:
MySQL 配置和业务数据
Nacos 注册中心与配置中心
Seata 分布式事务协调器
RabbitMQ 消息队列
Elasticsearch/Kibana 可选的日志或检索环境
모든 구성 요소를 기본 비밀번호로 설정하거나 관리 포트를 공인망에 노출해서는 안 됩니다. 자격 증명은 .env, Docker secret 또는 로컬에서 커밋하지 않는 파일을 통해 주입합니다.
3. Compose 설계 원칙
각 서비스에는 고정된 이미지 태그, 영속 볼륨, 독립적인 네트워크, 헬스체크, 리소스 제한 및 최소 권한이 있어야 합니다. depends_on은 시작 순서만 지정할 뿐, 의존 대상 서비스가 이미 요청을 받을 수 있다는 뜻은 아닙니다. 애플리케이션은 여전히 연결 재시도와 준비 상태 검사를 수행해야 합니다.
데이터베이스 초기화 스크립트는 반드시 해당 구성 요소의 버전에 맞는 것을 사용해야 합니다. 특히 Seata TC 테이블과 업무 데이터베이스의 undo_log는 오래된 튜토리얼에서 복사해서는 안 됩니다.
4. Nacos 2.x
Nacos 2.x에서는 클라이언트 포트, 클러스터 통신 포트, 데이터베이스 초기화 테이블 및 인증을 함께 고려해야 합니다. 단일 머신 학습 환경에서는 필요 없는 클러스터 기능을 끌 수 있지만, 운영 환경에서는 공식 문서에 따라 인증, 영속성 및 고가용성을 구성해야 합니다.
Spring Cloud Alibaba 클라이언트 버전은 Spring Boot, Spring Cloud 및 Nacos 클라이언트와 호환되어야 합니다. Config Data Import를 사용할 때는 bootstrap 구성을 기본 방식으로 삼지 마세요.
5. Seata 2.x
Seata Server와 클라이언트는 동일한 호환 버전 조합을 사용해야 합니다. TC의 file 저장소 사용 방식은 로컬 검증에만 적합하며, 운영 환경에서는 복구 가능한 데이터베이스 또는 공식적으로 지원하는 고가용성 저장소가 필요합니다. 또한 동일 버전의 데이터베이스 스크립트를 실행해야 합니다.
AT가 참여하는 각 업무 데이터베이스에는 해당 버전의 undo_log가 있어야 합니다. AT는 메시지, 캐시 및 서드파티 API를 롤백할 수 없습니다. 따라서 외부 시스템에 미치는 부작용에는 멱등성, 신뢰성 있는 메시징 또는 보상 처리가 필요합니다.
6. RabbitMQ
지원되는 3.13+ 또는 4.x 버전을 사용하세요. 중요한 메시지 처리에는 publisher confirms, 메시지 지속성, 소비자 ack, 제한된 재시도, dead letter 및 멱등성을 구성해야 합니다. 기본 사용자, 기본 비밀번호와 공인망에 노출된 관리 포트는 임시 로컬 환경에서만 허용해야 합니다.
7. 로컬 검증 체크리스트
- 모든 컨테이너의 버전이 고정되어 있고, 재시작 후에도 정상 상태로 복구될 수 있어야 합니다;
- 데이터 볼륨과 초기화 스크립트를 반복 적용할 수 있어야 합니다;
- 애플리케이션이 서비스가 준비되지 않은 상태를 감지하고 재시도할 수 있어야 합니다;
- Nacos 등록, 구성 가져오기 및 새로 고침을 검증할 수 있어야 합니다;
- Seata가 TM/RM을 등록하고 롤백 테스트를 완료할 수 있어야 합니다;
- RabbitMQ가 발행 확인, 소비 ack 및 dead letter를 검증할 수 있어야 합니다;
- Compose 파일에 실제 비밀번호, token 또는 운영 주소가 없어야 합니다.
이 환경의 목표는 재현 가능한 학습 환경이며, 운영 아키텍처 템플릿이 아닙니다. 운영 배포 전에는 네트워크, 저장소, 백업, 모니터링, 업그레이드 및 재해 복구 체계를 다시 설계해야 합니다.