Django 입문! 도커로 장고 설치하고 테스트 페이지 띄우기 (old)

3 분 소요

※ 장고를 처음 시작하면서 작성했던 글입니다.
도커 컨테이너로 장고 개발 환경을 세팅하는 과정에 대해서는 이후에 프로젝트를 진행하며 작성한 다음 글에 더 자세히 작성해놓았습니다.
http://lucathree.github.io/django/django_project_1


Django를 배우려는 이유

– 지극히 개인적인 이유

파이썬으로 개발에 입문을 했고, 데이터분석/머신러닝에 대한 관심이 주가 되어 계속해서 파이썬을 중심으로 공부를 하고 코딩테스트 준비도 파이썬으로 하다보니 아무래도 자바나 다른 언어에 비하면 파이썬에 대한 이해도가 높은 상태다.

그런데 여차저차하여 커리어를 쌓아가기 위해 지금 당장 데이터 사이언스를 공부하는 것 보다는 프로그래밍 실력을 늘릴 필요가 있음을 느꼈고, 우선은 백엔드 웹개발자로 커리어를 시작 해야겠다는 생각이 커졌다. 이런 상황에서 당장 새로운 언어를 배우는 것보다는 뭐라도 하나 만들어보면서 프로그래밍 개념을 확장시키는 것이 좋을 것 같아 우선은 파이썬 기반의 웹 프레임워크를 공부해보려 한다.

– 아래부터 그나마 객관적인 이유

그렇다면 어떤 웹 프레임워크를 공부하는 것이 좋을까? 지금까지 Flask와 FastAPI를 사용해보기는 했다. Flask는 마이크로 프레임워크로 가장 기본적인 기능만 갖추고 있고 커스터마이징이 용이하다는 장점이 있다. 하지만 그것은 곧 필요한 기능이 있을 때마다 필요한 라이브러리를 찾거나 직접 기능을 붙여야한다는 것인데, 이 때문에 보안상 문제도 있는 듯하고 세부 기능들을 이해하고 공부하기 위한 목적으로는 좋지만 업무적으로 사용되는 경우는 많지 않은 듯 하다.

FastAPI는 프로젝트를 하면서 사용해봤는데 (정말 작은 규모의 프로젝트였기에 가능한 것이었겠지만) 도큐먼트만 보고도 간단한 REST API를 만들 수 있을 정도로 사용성이 좋았고, 파이썬의 단점인 느린 수행 속도를 커버할 수 있는 점이 좋았다. 하지만 FastAPI 역시 아직까지는 국내에서 상용 프로그램 개발용으로는 많이 사용되지 않는 듯 하다.

결국 개인적으로는 취업을 위해서 Django를 배우는 것이 유리한 상황인데, Django의 다양한 라이브러리를 이용해서 빠른 개발이 가능하고 Template 개념을 사용하여 프론트 웹 프레임워크를 사용하지 않고도 개발이 가능한 객관적인 장점들이 곧 상용 프로그래밍에 많이 쓰이는 이유이자 내가 Django를 배워야하는 이유가 되지 않을까 싶다.

도커를 이용해서 장고 설치하기

유튜브에서 아래 영상을 기준으로 공부를 하고 있다.

그런데 위 영상에서는 파이썬 가상환경인 virtualenv 사용을 기준으로 알려주고 있어서 기왕이면 도커를 사용하는 것이 실제 업무 능력을 키우기 위해 더 좋지 않을까 싶은 생각이 들었다.

위 영상에서는 다음 버전을 기준으로 알려주고 있다.

  • Python 3.6.5
  • Django 2.0.7

도커 설치

윈도우나 맥의 경우 시간이 좀 된 도커 강의들을 보면 docker toolbox나 다른 설치방법을 알려주기도 하는데, 그냥 docker desktop을 설치해주면 된다. 공식 docker docs에서도 해당 방법을 권장하고 있고 윈도우에서 별도로 WSL 관련 세팅을 해줄 필요도 없어서 간편하다.

AWS나 기타 리눅스 기반 서버에서 사용할 경우에만 도큐멘트에서 알려주는 순서에 따라 명령어로 docker engine을 설치하면 된다.

https://docs.docker.com/get-docker/

dockerfile을 이용한 이미지, 컨테이너 생성

*도커 개념이나 이미지, 컨테이너에 대한 설명은 나중에 다시 상세 포스트를 작성할 생각이다.

우선 도커로 장고가 설치 되어 있는 파이썬 개발환경을 세팅하려면 해당 환경이 담긴 이미지를 만들어야 한다. 그리고 만든 이미지를 기반으로 작성한 코드가 실행될 공간인 컨테이너를 만들어주면 된다.

이미지와 컨테이너를 만드는 방법은 여러가지가 있지만 나는 dockerfile 을 사용했다. 개발용 IDE에서 ‘dockerfile’을 만들어주고 아래와 같은 명령문을 작성했다.

FROM python:3.6.5-slim
WORKDIR /app/src
RUN pip install Django==2.0.7
RUN django-admin startproject trydjango
CMD ["python", "./trydjango/manage.py", "runserver", "0.0.0.0:8000"]
  1. FROM python:3.6.5-slim
    • FROM은 구축할 환경의 베이스가 되는 이미지를 불러온다. 장고를 사용하려면 당연히 파이썬이 필요한데, python 3.6.5 버전을 사용할 것이기 때문에 docker hub를 통해 해당 버전의 이미지가 있는지 확인하고 적절한 태그를 사용하면 된다.
    • 도커 이미지들을 보다보면 다양한 ‘buster’, ‘slim’, ‘bullseye’ 등 다양한 종류가 있다. 대부분 어떤 리눅스 환경을 사용하는지에 따라 달라지는데, 기본 버전을 사용하는 것이 가장 안정적이지만 필요에 따라 선택하면 된다. slim은 최소한의 패키지만 설치된 버전으로 적은 용량을 차지한다.
  2. WORKDIR /app/src
    • WORKDIR은 컨테이너가 돌아갈 리눅스 환경 내에서 명령어를 실행할 기본 경로를 설정한다.
  3. RUN pip install Django==2.0.7
    • RUN 뒤에는 이미지를 생성하는 과정에서 실행할 명령어를 입력하면 된다.
    • 위에서 Python 3.6.5 가 설치된 환경을 불러왔다면 여기에 이제 Django 2.0.7 버전을 설치 해줘야하기 때문에 ‘pip install Django==2.0.7’ 명령어를 실행시키는 것이다.
  4. RUN django-admin startproject {프로젝트명}
    • 장고가 설치 되고나면 django-admin 명령어를 통해 프로젝트 환경을 만들 수 있다.
    • django-admin startproject {프로젝트명} 명령어를 사용하면 현재 경로내에 해당 프로젝트명으로 폴더 및 기본 파일들이 생성된다.
    • 도커 이미지를 만들면 자동으로 장고 설치와 함께 trydjango 라는 프로젝트 폴더가 /app/src 경로 아래에 생성된다.
  5. CMD [“python”, “./trydjango/manage.py”, “runserver”, “0.0.0.0:8000”]
    • CMD 명령어는 컨테이너 생성시 실행되는 초기 명령문을 특정한다.
    • 해당 dockerfile을 이용해서 생성된 이미지로 컨테이너를 만들경우 위 명령문이 공통적으로 실행된다.
    • “python ./trydjango/manage.py runserver 0.0.0.0:8000” 을 실행하면 생성된 장고 프로젝트 폴더 내의 manage.py 파일을 통해 서버를 실행하고 포트번호 8000을 사용하여 외부접속이 가능하도록 한다.

이제 위 dockerfile을 이용해서 이미지를 생성하고, 생성된 이미지로 컨테이너를 실행시켜주면 된다. 아래 명령어로 dockerfile을 이용하여 이미지를 만들 수 있다. 명령어 맨 뒤에는 dockerfile 경로를 입력하면 되는데, 현재 경로 안에 파일이 있을 경우 . 만 입력해주면 된다.

docker build -t {이미지명} .

위 명령어를 실행하면 파이썬 환경이 빌드되고 이어서 RUN 뒤에 작성한 명령들이 실행되는 것을 확인할 수 있다.

이미지가 생성되었다면 다음에는 아래 명령어를 통해 컨테이너를 실행시켜주면 된다.

docker run --name {컨테이너명} -v ${pwd}:/app/src -p 8000:8000 {이미지명}

–name 은 컨테이너의 이름을 정하기 위한 명령어고, -v 는 현재 작업 경로의 파일들을 컨테이너 내의 경로와 연결하여 컨테이너 내부에서 실행할 수 있도록 해준다. -p 는 컨테이너의 포트번호와 로컬의 포트번호를 연결해준다.

컨테이너 생성까지 마치고 컨테이너가 정상적으로 실행된다면 http://localhost:8000 을 통해 장고 테스트 페이지를 확인할 수 있다.

댓글남기기