./gradlew build 명령어를 실행하여, 모든 의존성이 포함된 실행 가능한 JAR 파일(Fat JAR)을 생성합니다.scp나 FileZilla와 같은 도구를 사용하여, 배포할 서버(e.g., AWS EC2)로 전송합니다.java -jar 명령어로 애플리케이션을 실행합니다.-Dspring.profiles.active=prod와 같은 옵션을 사용하여 운영 환경 프로파일을 활성화하고, 데이터베이스 비밀번호 등 민감한 정보는 서버의 환경 변수를 통해 주입합니다.nohup 명령어와 &를 사용하여, SSH 세션이 종료되어도 애플리케이션이 계속 백그라운드에서 동작하도록 합니다.nohup java -jar -Dspring.profiles.active=prod my-app.jar > app.log 2>&1 &Dockerfile 작성: 애플리케이션을 Docker 이미지로 만들기 위한 설계도를 작성합니다. 멀티 스테이지 빌드를 사용하여 최종 이미지의 크기를 최적화하는 것이 좋습니다.docker build 명령어로 Docker 이미지를 생성합니다.docker push)합니다.docker pull), docker run 명령어로 컨테이너를 실행합니다.-e 또는 --env-file 옵션을 사용하여 컨테이너에 환경 변수를 주입합니다.-p 옵션으로 호스트 서버의 포트와 컨테이너의 포트를 연결합니다.Docker Compose나 Kubernetes와 같은 오케스트레이션 도구를 통해 여러 컨테이너를 쉽게 관리하고 확장할 수 있습니다.CI (Continuous Integration) 단계 - GitHub Actions 서버에서 실행:
./gradlew build로 JAR 파일을 생성합니다.Dockerfile을 사용하여 Docker 이미지를 빌드합니다.CD (Continuous Deployment) 단계 - 배포 서버(EC2)에서 실행:
장점:
| 배포 방식 | 장점 | 단점 | 핵심 도구 |
|---|---|---|---|
| JAR 직접 배포 | • 간단하고 직관적 | • 수동 관리, 환경 의존성 높음 | java -jar, nohup |
| Docker 컨테이너 배포 | • 환경 격리, 일관성 보장 • 쉬운 확장 | • Docker 학습 곡선 • 이미지 관리 필요 | Dockerfile, docker run |
| CI/CD 자동 배포 | • 신속성, 안정성 • 개발 생산성 극대화 | • 초기 파이프라인 구축 비용 | GitHub Actions, Jenkins |