
1. 문제 상황
이번에 프로젝트에서 백엔드 개발을 하다 보니 로컬에서는 정상적으로 동작했지만, 서버에 배포하여 팀원들이 사용했을 때에 오류가 발생하는 일이 있었다. 이 문제점들은 단순히 코드의 문제가 아닌 실행 환경의 차이에서 생긴 오류였다.
Java의 버전이 다르거나, DB 설정, OS, 라이브러리 버전이 다르는 등의 여러 실행 환경에서의 차이점으로부터 생긴 문제들이었고, 이를 해결하기 위해 동일한 환경을 직접 세팅하여 프로그램을 실행하는 것은 너무나 번거로운 일이었다.
2. 기존 방식(VM웨어)의 한계
이러한 문제점을 해결하기 위해 VM(가상 머신)을 사용하는 기존의 방식이 있었다. 하나의 물리 서버 위에서 여러 개의 독립적인 OS를 실행할 수 있게 해주는 방식인데, 개발 환경과 동일한 OS를 만들고 그 위에 애플리케이션을 올려 프로그램을 실행할 수 있도록 해준다.
하지만, OS 전체를 포함하기에 다음과 같은 문제점들이 존재한다.
- VM 자체가 무겁다
- 부팅 시간이 오래 걸린다
- 메모리, CPU 사용량이 크다
- 이로 인해 여러 개를 띄우기 부담스럽다
따라서, VM으로는 환경을 일치시키는 것은 해결할 수 있지만, 효율성이 떨어지는 트레이드 오프가 발생한다.
그렇지만, VM웨어를 사용하는 것의 장점도 존재한다.
- 독립적인 실행 환경을 제공하여 서로 다른 OS 간의 충돌 방지
- 여러 서버를 가상화하여 자원을 효율적으로 사용할 수 있음
- 백업 및 복구 기능을 제공하여 데이터 손실 방지
- 네트워크 가상화 및 보안 기능 제공
그래서 무작정 VM웨어를 사용하는 대신 Docker를 사용하는 것보다 요구 사항에 따라 더 알맞는 기술을 선택하여 사용하는 것이 적합하다.

3. Docker
Docker는 위에서 언급한 문제들을 해결하기 위해 다른 방식으로 접근한다.
Docker는 개발 환경을 이미지화시키고 해당 이미지를 통해 개발 및 배포 환경을 쉽게 컨테이너화하여 구축할 수 있다. 해당 이미지를 실행한 인스턴스인 컨테이너를 활용한다.
Dockerfile을 통해 설치할 언어, 프레임워크, 패키지 등을 미리 코드 형태로 명시하여 어느 컴퓨터에서든 쉽게 자동으로 설치할 수 있게 한다. 이를 통해 개발자와 운영자가 동일한 환경에서 작업을 할 수 있게 된다.
Docker는 CI/CD 파이프라인에서도 중요한 역할을 하는데, Jenkins와 같은 도구와 통합하여 자동화된 빌드 및 배포 프로세스를 구현할 수 있다.

실행 환경 자체를 코드로 관리해준다고 생각하면 된다.
4. 마무리하며
Docker에 대하여 간단하게 알아보았는데, 다음으로는 Docker의 핵심 구조에 대해서 이해해보는 시간을 가져야겠다. 빠르게 학습을 마치고 Docker를 이용하여 프로젝트를 EC2에 배포하는 것을 목표로 삼아야겠다.
'[INFRA] > [DOCKER]' 카테고리의 다른 글
| [Docker] Docker의 핵심 구조 이해하기 (0) | 2026.05.16 |
|---|