Docker로 NGINX, GUNICORN, DJANGO(+ Postgresql) 컨테이너화 및 구동 고난기

horiz.d·2023년 5월 18일
0

PJ: Aight

목록 보기
5/17

AIGHT 프로젝트의 API서버에서 NEXTJS로 REFRESH토큰을 HTTPONLY 쿠키로 설정하여 응답에 전달하였는데, 브라우저는 API서버와 클라잉언트의 도메인 불일치를 문제삼아 쿠키를 브라우저에 저장하지 않는 것으로 확인했다.

띠라서 현재 NEXTJS를 배포한 도메인 (ai-ght.com)의 서브도메인으로 API서버를 구성하여 배포하는 것에 우선순위를 뒀다.

우선, 백엔드 배포는 네이버 클라우드 서비스를 이용해 두번정도 수행해본 적 있으나, 다소 구식적이며 dev수준의 배포에서 그쳤기 때문에, 관련된 지식이 다소 부족하다고 할 수 있다. 이에 더해 장고 등 처음 사용해보는 스택이 천지인 현재 관련 지식을 학습하는데에 시간을 꽤 할애했다.

우선 AWS EC2는 나름 익숙했고, Elastic beanserach서비스를 이용하면 매우 간단하게 배포할 수 있다는 사실을 알았으나, 실제 서비스를 목적으로 시작한 프로젝트였기 때문에 비용을 걱정하지 않을 수 없었다.

따라서, 프리티어로 상당히 높은 수준의 인스턴스를 제공하는 오라클 클라우드를 사용해 배포하기로 결정했고, 가입 및 준비를 완료했다.

또한 최근 도커 학습 및 사용의 필요성을 절실히 느끼고 있었을 뿐만 아니라, 생소한 오라클 클라우드 환경에서 안정적으로 배포하기 위해 BACK을 도커 컨테이너화 시켜 배포하기로 결정했다.

이에 따라 약 2~3일정도의 삽질을 거듭하여 현재 로컬수준에서 NGINX + GUNICORN + 장고 REST API + Postgresql을 컴포즈 및 구동하는것을 성공했다.

도커를 사용하는 과정에서, 너무 많은 시행착오가 있었고, 사실 이런 시행착오를 겪으며 도커 환경과 많이 친숙해진 것 같다. 그중 가장 최근의 이벤트를 하나 기록해두고자 한다.

docker-compose.yml파일에 postgresql DB관련 설정을 작성하는데, 계정명과 PW등을 중간에 한두번 수정해줬는데 이것이 화근이 되어, web컨테이너가 의존성을 가진 DB에 접근할 때 계정 정보 불일치 문제를 발생시켰다.

이후 down stop rm rmi 등의 조치 이후, 다시 build,up을 수행해도 전혀 나의 새로운 수정사항이 반영되지 않았고 수많은 조치를 찾고 취해보았으나 해결되지 않았는데,

https://stackoverflow.com/questions/67265521/newbie-needs-help-understanding-docker-postgres-django-db-utils-operationalerror

위의 스택오버플로우 답변 중 -v옵션을 통해 컴포즈를 내리라는 조언을 확인 및 수행한 이후, 새로이 빌드와 업을 수행하니 DB에 새로운 설정이 잘 반영되었다.

docker-compose down -b

그래서 이것이 무엇이길래 해결되었나?


Explain )
docker-compose down -v 명령은 Docker 컨테이너를 종료하고, 해당 컨테이너에 연결된 모든 볼륨을 제거합니다. 볼륨은 Docker 컨테이너가 데이터를 영구적으로 저장하는 공간입니다. PostgreSQL 서버를 실행하는 Docker 컨테이너의 경우, 볼륨은 PostgreSQL 데이터베이스의 데이터를 저장하는 데 사용됩니다.

그러므로, docker-compose down -v를 실행하면, PostgreSQL 데이터베이스가 초기 상태로 리셋됩니다.


사실 볼륨에 대한 기본적인 이해는 docker 기반지식을 학습하며 접했었으나, 내가 처음 구동한 컨테이너에 볼륨이 벌써 발생했는지, 또한 이것을 -v플래그를 통해 제거하지 않는다면 다음의 빌드와 실행 등에 영향을 주는지 알지 못했다. 역시 근본지식이 중요해

여튼! 도커에 대한 더 자세한 정리는 다른 포스팅에 기록하도록 하겠다.

profile
가용한 시간은 한정적이고, 배울건 넘쳐난다.

0개의 댓글