개발환경을 세팅하는데 있어 로컬환경에 db, 라이브러리것들을 설치하고 싶지 않았습니다.
괜히 개발환경 복잡해지는것도 싫고 꼬이게 되면 재설정 하는데 시간이 소요되며 로컬에서도 사용해야하는 응용프로그램이나 언어를 제외하고 db, venv 웹서버등은 docker로 컨테이너 환경에서 사용할 수 있습니다.
Docker Compose를 사용하면 로컬에 Python, VSCode, Docker Desktop, Git 정도만 별도로 설치하면 되고, 나머지 환경은 컨테이너에서 해결할 수 있습니다.
당장 디자인 재능도 없을도 없고 아이디어도 없어 우선 api를 먼저 개발하는데 필요한 환경을 만들었습니다.
.env
해당 내용들은 git에 push시켜 관리할 것으로 .env에 환경변수를 db_password나 DJANGO_SECRET_KEY등 민감한 내용들을 관리합니다.
docker-compose.yml
기존까지 사용하였던 docker-compose파일의 경우 version이 필요했지만 최신버전을 version이 필요없었습니다.
오히려 version이 있으면 에러가 발생하는 문제가 생겼죠
db 영속성 보장을 위해 volums로 연결하여 사용하게 됩니다.
dockerfile
django라이브러리가 설치되어있지 않는데 django 프로젝트는 어떻게 만들어야 할까? 라는 문제에서 생각한 것이 볼륨으로 연결하여 컨테이너에서 프로젝트 세팅을 진행하게 된다면 로컬에 불필요한 것들을 설치하지 않고도 차이없이 개발을 진행 할 수 있겠다 라는 생각이였습니다.
requirements.txt
- django
- djangorestframework
- psycopg2
- redis
- celery
requirements.txt에 django, djangorestframework를 추가하여 설치할 라이브러리를 지정해 줍니다.
backend디렉터리와 실제로 코드가 실행될 컨테이너의 /app을 연결시켜 dockerfile의 CMD sh -c "django-admin startproject config . && python manage.py runserver 0.0.0.0:8000" 로 프로젝트를 생성 후 서버를 실행시키는 것 이였습니다.
해당 코드는 맨 처음에만 작동을 시키는 것으로 정상적으로 작동을 하고 manage.py 를 제거하지 않는다면 오류가 발생할 것 입니다. 그러므로 이미 동작시켜 파일이 존재한다면 CMD sh -c "python manage.py runserver 0.0.0.0:8000"로 바꾸어 실행시켜주어야 합니다.
그 후 docker-compose up -d --build를 실행하게 된다면 컨테이너가 생성 다음으로 docker exec -it bash 로 backend shell에 접근하여
"python manage.py migrate"로 db까지 마이그레이션 시켜주고 서버가 정상적으로 localhost:8000으로 접근해게 되면 서버가 정상적으로 실행되는 것을 확인하면서 개발환경 준비는 끝나게 됩니다.
