
공통점
- 둘 다 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로 배포하는 게 더 효율적
'개발인생 > etc' 카테고리의 다른 글
| 개발 초보자를 위한 필수 기술 스택 정리 v2025 (0) | 2025.02.27 |
|---|---|
| 개발자 종류 이렇게 많다고? 공부하면서 정리해봄 (2) | 2025.02.27 |
| 웹 서버, 웹 컨테이너, 애플리케이션 서버, WAS 차이점 정리 (0) | 2025.02.19 |
| [eclipse] xml파일의 "Downloading external resources is disabled." 오류 해결 (0) | 2025.02.19 |
| Trouble Shooting 트러블 슈팅이란? (3) | 2025.02.11 |