Home Django 개발자에게 Docker는 필수인가?
Post
Cancel

Django 개발자에게 Docker는 필수인가?

“나는 백엔드 개발자가 될꺼야!” 라고 [[Django]] 개발자가 되신 분들도 있겠지만, 이 글을 보고 있는 대부분은python 을 시작으로 정신 차려보니 Django 개발자로 진로를 잡고 계신 분들도 있을거라 생각합니다.

가상환경

우리는 python을 개발하면서 anaconda, pipenv, virtualenv 등 수많은 가상 환경을 지나쳐 왔습니다. 우리가 가상 환경을 사용했던 이유는

  1. 의존성 관리 : 각 프로젝트의 의존성을 격리시켜 관리할 수 있습니다.(다른 프로젝트에 영향을 미치지 않습니다.)
  2. 충돌 반지 : 라이브러리들 사이에서의 의존성 충돌을 방지할 수 있습니다.
  3. 쉬는 패키지 관리 : requirements.txt, Pipfile 을 생성하여 쉽게 동일한 환경을 재현할 수 있습니다.

다음과 같습니다.

하지만 특정 환경에서 작성한 코드를 다른 환경에서 복제하여 라이브러리를 설치하는 경우, 특정 라이브러리가 어떤 OS에서는 설치가 되지 않아서 난감한 경우를 한번 쯤은 경험 했을꺼라 예상합니다. 필자도 이러한 이유로 Docker를 사용하게 되었습니다.

Docker

[[Docker]] docs를 확인해보면 개요에 다음과 같은 소개가 있습니다.

Docker는 애플리케이션을 개발, 제공 및 실행하기 위한 개방형 플랫폼입니다. Docker를 사용하면 애플리케이션을 인프라에서 분리하여 소프트웨어를 신속하게 제공할 수 있습니다. Docker를 사용하면 애플리케이션을 관리하는 것과 동일한 방식으로 인프라를 관리할 수 있습니다. 코드 전달, 테스트 및 배포를 위한 Docker의 방법론을 활용하면 코드 작성과 프로덕션 환경 실행 사이의 지연 시간을 크게 줄일 수 있습니다.

얼핏 보면 우리가 기존에 사용해왔던 가상 환경과 차이가 없어 보이지만 자세한 차이점은 다음과 같습니다.

  1. 격리 수준 : 애플리케이션, 종속성, 운영 체제를 포함하여 완전한 격리를 제공합니다.(컨테이너라고 함)
  2. 애플리케이션 배포 및 실행 : Docker 컨테이너는 “윈도우에서는 되는데 Mac에서는 안돼!” 같은 문제를 해결할 수 있습니다.
  3. 언어 독립성 : 다양한 프로그래밍 언어와 애플리케이션을 지원합니다.

Docker 는 OS 수준에서의 완전한 격리와 일관된 실행 환경을 보장합니다.

Docker 장점

실제 개발을 하면서 직접적으로 느꼈던 장점 입니다.

  1. 환경 일관성: OS에 영향을 받지 않는다.
  2. 클라우드 환경 배포가 쉽다.
  3. 개발 환경과 프로덕션 환경을 분리하는게 간단하다.
  4. DB(PostgreSQL) 컨테이너를 생성하여 로컬 환경에 국한되지 않는다.
  5. github action을 사용하여 서비스 환경 CI/CD 파이프라인 구축이 매우 간단하다.
  6. Nginx, Gunicorn, Websocket(Daphne) 등 배포를 위한 프로세스가 매우 단축된다.
  7. 개발 속도 향상된다.

결론

모든 프로젝트나 개발 환경에서 Docker를 필요로 하는 것은 아니지만, 필자 경험으로는 Docker의 사용 전후로 개발자의 퀄리티가 크게 달라질 것이라고 확신합니다. 다음 글에서는 Django 프로젝트의 Docker Compose(여러 컨테이너를 정의하고 실행하기 위한 도구)를 구축하는 방법에 대해 말씀드리겠습니다.

This post is licensed under CC BY 4.0 by the author.