배포(Deployment)란?

cchoijjinyoung·2025년 2월 9일

📌 배포(Deployment)란?

배포(Deployment)란 내 개발 환경에서 만든 애플리케이션을 운영 환경에서 실행할 수 있도록 배포하는 과정을 의미한다.


1️⃣ 배포란 무엇인가?

배포는 단순히 "파일을 서버로 이동시키는 것"이 아니라, 소프트웨어를 운영 환경에서 실행할 수 있도록 준비하는 과정 전체를 포함한다.

배포의 핵심 과정

  1. 코드 작성 & 빌드(Build)

    • Java의 경우 .java 파일을 .class로 컴파일
    • Maven 또는 Gradle을 사용해 실행 가능한 .jar 또는 .war 파일 생성
  2. 테스트 & 코드 검증

    • 단위 테스트, 통합 테스트 실행
    • SonarQube, JaCoCo 등을 이용한 코드 품질 검사
  3. 패키징(Packaging)

    • 애플리케이션을 실행 가능한 단일 파일 (.jar, .war, Docker 이미지)로 묶음
  4. 서버 업로드 & 환경 설정

    • scp, rsync를 이용한 파일 전송
    • 환경 변수 (.env, application.yml) 설정
  5. 실행 & 모니터링

    • java -jar 혹은 Docker를 이용한 실행
    • Prometheus, Grafana를 이용한 모니터링

2️⃣ 배포를 쉽게 이해하는 비유

🏭 1. 공장에서 제품을 만들어 매장에 공급하는 과정

배포 과정을 공장과 매장에 비유하면 다음과 같다.

  • 개발 환경 = 제품을 설계하고 제작하는 공장
    • 개발자가 애플리케이션을 작성하는 단계
  • 빌드 & 패키징 = 제품을 조립하고 포장하는 과정
    • Gradle 또는 Maven으로 .jar 혹은 .war 패키지를 생성
  • 배포 = 제품을 매장에 공급하는 과정
    • 서버에 애플리케이션을 업로드하고 실행
  • 운영 환경 = 고객이 제품을 사용하는 매장
    • 사용자가 실제로 애플리케이션을 이용하는 단계

🎁 2. 개발자가 만든 선물을 사용자에게 보내는 과정

배포는 마치 개발자가 만든 선물을 사용자에게 보내는 것과 같다.

  • 개발자가 선물(코드)를 만든다.
  • 포장(빌드 & 패키징) 후, 배송(배포)한다.
  • 사용자가 선물을 받아 실제로 사용한다.

3️⃣ 배포 방법의 종류

🔹 1. 수동 배포 (Manual Deployment)

  • .jar 파일을 직접 서버에 복사 후 실행 (SCP, FTP 등 사용. *P는 프로토콜을 의미한다.)

    필자의 경우 Filezilla라는 프로그램을 사용하여 수동 배포한 경험이 있다. Filezilla의 기본 프로토콜은 SFTP(SSH File Transfer Protocal)을 사용한다.

  • java -jar myapp.jar 실행
  • ✅ 장점: 간단하고 설정이 필요 없음
  • ❌ 단점: 사람이 직접 해야 하므로 실수 가능성이 큼

🔹 2. 스크립트 배포 (Shell Script)

  • deploy.sh 같은 스크립트를 작성해 자동화
#!/bin/bash
scp myapp.jar user@server:/home/app/
ssh user@server "java -jar /home/app/myapp.jar &"
  • ✅ 장점: 반복적인 작업 자동화 가능
  • ❌ 단점: 여전히 관리가 필요함

🔹 3. CI/CD (자동 배포)

  • GitHub Actions, Jenkins, ArgoCD 등을 이용해 코드 변경 → 자동 빌드 & 테스트 → 배포
  • ✅ 장점: 배포 속도 증가, 실수 감소
  • ❌ 단점: 초기 설정이 필요

🔹 4. 컨테이너 기반 배포 (Docker & Kubernetes)

  • Docker를 이용해 컨테이너 이미지를 빌드하고, Kubernetes로 배포
docker build -t myapp:latest .
docker run -d -p 8080:8080 myapp:latest
  • ✅ 장점: 이식성이 뛰어나며, MSA 환경에서 유리
  • ❌ 단점: Docker, Kubernetes 설정이 필요함
profile
반갑습니다 :)

0개의 댓글