환경 구성
- 필수 도구 준비
- 가상머신 관리: VMware
- 리모트 접속 및 파일 전송: Xshell, Xftp
- 애플리케이션 런타임: Docker
- 프로젝트 패키징: IntelliJ IDEA, Maven
- 구성 파일 편집: 텍스트 에디터 (예: vim, nano)
- CentOS7 환경 설정
-
방화벽 설정 서비스 포트만 개방하는 방식을 채택함. 다음 포트를 열어야 함:
8848,10086,8080,8081,8091변경 후 반드시 방화벽 재시작 및 Docker 재시작 필요. -
JDK8 설치
yum install -y yum-utils device-mapper-persistent-data lvm2 --skip-broken
yum install java-1.8.0-openjdk* -y
- Docker 환경 구축
- 레파지토리 설정 (알리바바 클라우드)
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's@download.docker.com@mirrors.tuna.tsinghua.edu.cn/docker-ce@g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
- Docker 설치
yum install -y docker-ce
- 레지스트리 가속기 설정
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://n0dwemtq.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
- Docker Compose 설치
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.17.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
- 자동 시작 설정
systemctl enable docker
프로젝트 준비
1. 각 모듈의 Dockerfile 작성
각 서비스별로 EXPOSE 포트만 수정하면 됨. 예시: 게이트웨이 모듈
FROM java:8-alpine
COPY ./app.jar /app.jar
EXPOSE 10086
ENTRYPOINT ["java", "-jar", "/app.jar"]
2. docker-compose.yml 구성
version: "3.2"
services:
nacos:
image: nacos/nacos-server
environment:
MODE: standalone
ports:
- "8848:8848"
restart: always
logging:
driver: "json-file"
options:
max-size: "100m"
user-service:
build: ./user-module
restart: always
logging:
driver: "json-file"
options:
max-size: "100m"
order-service:
build: ./order-module
restart: always
logging:
driver: "json-file"
options:
max-size: "100m"
gateway:
build: ./gateway
ports:
- "10086:10086"
restart: always
logging:
driver: "json-file"
options:
max-size: "100m"
3. Maven 패키징
-
프로젝트 구조
-
feign-api: 클라이언트 통신용, 실행 클래스 없음 →<build>제외 -
gateway,order-module,user-module: 각각 독립된 서비스 -
pom.xml 설정 요소
-
실행 가능한 모듈에만
<build>포함 -
<finalName>app</finalName>로 일관성 유지 -
application.yml 및 bootstrap.yml 수정
-
데이터베이스 연결 주소:
localhost→mysql -
Nacos 서비스 주소:
localhost→nacos -
실제 운영 환경에서는 내부 호스트 이름 사용 필요
-
패키징 명령어
mvn clean package
결과물은 target/app.jar 생성
4. 파일 정리 및 리눅스 전송
- 각 서비스의
app.jar를 해당 모듈 폴더(예:user-module,gateway)에 복사 - 전체 프로젝트 폴더(
Cloud01)를Xftp등으로 리눅스 서버로 전송 - 예:
/usr/myProject/springcloud/
마이크로서비스 배포
1. Docker Compose로 배포
- 디렉터리 이동
cd /usr/myProject/springcloud/
- 백그라운드 실행
docker compose up -d
💡 참고: 처음 실행 시 이미지 다운로드 시간이 오래 걸림.
-d없이 먼저 실행해 로그 확인 권장.
- 서비스 순서 문제 해결
- Nacos가 먼저 시작되지 않으면 다른 서비스는 등록 실패.
- 해결 방법:
- 먼저
docker compose up -d nacos실행 → Nacos 기동 완료 후 나머지 서비스 시작 - 또는 전체 실행 후,
docker compose restart order-service user-service gateway로 재시작
2. 서비스 접근 테스트
-
Nacos 웹 대시보드 확인 브라우저에서
http://<서버IP>:8848/nacos접속 → 서비스 목록 확인 -
게이트웨이 요청 테스트 예:
http://<서버IP>:10086/order/query요청이order-service→user-service로 연쇄 호출됨
자주 발생하는 문제 해결
1. 시작 지연 및 응답 느림
- 원인: 메모리 부족으로 인한 컨테이너 초기화 지연
- 해결책: 가상머신 메모리 증설 (최소 4GB 권장) → 성능 향상 및 서비스 가동 속도 개선
2. JDK 미설치로 인한 오류
- 자바 애플리케이션 실행을 위해 반드시 JDK8 설치 필요
- 누락 시
NoClassDefFoundError등 오류 발생 - 설치 여부 확인:
java -version