개발인생/etc

Docker 없이 배포 vs Docker로 배포

forri 2025. 2. 27. 15:08

 

 

공통점

  • 둘 다 AWS EC2(서버)에 프로젝트를 올려서 실행해야 함
  • 서버를 띄우고 프로젝트를 실행하는 과정은 동일함
  • 둘 다 DB(MySQL, PostgreSQL 등)를 연결해서 운영할 수 있음
  • AWS RDS 같은 클라우드 DB를 사용하면 둘 다 같은 방식으로 DB와 연결 가능
  • 둘 다 인터넷에서 접속 가능하게 만들 수 있음
  • http://13.124.164.53:8787 같은 주소로 웹사이트를 제공 가능
  • 둘 다 배포 후 관리해야 함
  • 서버가 꺼지면 다시 실행해야 하고, 코드 변경 시 업데이트해야 함

차이점 (Docker vs 직접 배포)

구분 Docker 없이 배포 (전통적인 방식) Docker로 배포
설치 과정 서버에 직접 Node.js, Java, MySQL 등을 수동 설치 Docker 컨테이너 안에 환경을 미리 정의하고 실행
환경 차이 문제 개발 환경(로컬)과 배포 환경(AWS)이 다르면 에러 발생 가능 개발 환경과 배포 환경이 완전히 동일해서 에러 발생 확률 ↓
배포 속도 서버에 필요한 패키지를 설치하고 설정하는 과정이 길어짐 Docker 이미지를 만들어두면 빠르게 실행 가능
운영 및 유지보수 새로운 서버를 만들 때마다 처음부터 설치해야 함 Docker 컨테이너만 실행하면 되므로 관리가 쉬움
업데이트 코드가 바뀌면 서버에서 직접 업데이트해야 함 새로운 Docker 이미지를 빌드해서 배포하면 됨
프로세스 관리 nohup이나 systemctl을 사용해 서버 프로세스를 관리해야 함 docker restart로 간단하게 컨테이너 재시작 가능

예제: Docker 없이 직접 배포하는 경우

1️⃣ AWS EC2에 접속

ssh -i "my-key.pem" ec2-user@13.124.164.53

2️⃣ 필요한 패키지 설치 (예: Java, MySQL, Node.js 등)

sudo yum install java-11-openjdk -y
sudo yum install mysql -y

3️⃣ 프로젝트를 가져와서 실행

git clone https://github.com/myrepo.git
cd myrepo
java -jar myapp.jar  # 또는 npm start

문제점:

  • 실행할 때마다 환경을 직접 세팅해야 함
  • 서버를 새로 만들면 다시 설치해야 함
  • 개발 환경과 서버 환경이 다르면 에러가 발생할 가능성이 높음

예제: Docker로 배포하는 경우

1️⃣ Docker 설치

sudo yum install docker -y
sudo systemctl start docker
sudo systemctl enable docker

2️⃣ Dockerfile을 작성

FROM openjdk:11
COPY myapp.jar /app.jar
CMD ["java", "-jar", "/app.jar"]

3️⃣ Docker 컨테이너 실행

docker build -t myapp .
docker run -d -p 8080:8080 myapp

장점:

  • 어떤 서버에서도 동일하게 실행됨
  • 새 서버에서도 docker run만 하면 끝
  • 환경 차이로 인한 오류가 없음

결론

어떤 배포 방식이 더 좋을까?

- 처음에는 직접 배포 방식으로 경험해보는 게 좋음

- 하지만 실무에서는 Docker를 많이 사용하므로 Docker 배포를 익히면 유지보수가 쉬워짐

- 장기적으로 Docker로 배포하는 게 더 효율적