인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

inspireworld님의 프로필 이미지
inspireworld

작성한 질문수

파이썬/장고로 결제 시작하기 (Feat. 아임포트) - 기본편

배포환경과 개발환경 패키지 관리, 도커환경 디버깅 팁이 있을까요?

작성

·

95

0

  1. 개발용 PC가 리눅스라면 괜찮은데,

윈도우에서 개발한다면 배포시에 보통 리눅스에 배포하게 될텐데..

그 경우 개발환경과 배포환경이 다름으로 생기는 패키지 관리 문제가 생기는데 강사님은 어떻게 해결하시나요..?

 

  1. cookiecutter-django로 프로젝트 세팅을 간소화 하려고 하는데, 도커에서 서비스가 돌아가다보니 디버깅 하기가 까다롭네요.. pycharm에서는 보통 어떻게 하나요?

     

    • vscode에서는 debugpy를 제가 수동으로 설정해서 디버깅 처리를 했는데, 이 방법은 너무 번거롭더라구요..

    • 요지는 윈도우 개발환경에서 도커 컨테이너에서 돌아가고 있는 코드를 어떻게 디버깅 하느냐에 대한 질문입니다..

좋은 강의 제공해주셔서 감사드리며, 강의 주제와는 좀 벗어나지만 답변 주시면 개발하는데 많은 도움 될 것 같습니다.

답변 4

0

이진석님의 프로필 이미지
이진석
지식공유자

docuechoo 프로젝트에서 workdir 설정이 /app 인데요.

pycharm을 통해서 디버거를 거신 후에 (중요) 터미널에서 아래 명령으로 django 컨테이너에 접속하시면,

docker compose -f docker-compose.local.yml exec django /bin/bash

컨테이너에 진입하자마자, 경로가 어떻게 되시나요?

/app 이신가요? /opt/project 이신가요?

이진석님의 프로필 이미지
이진석
지식공유자

아마도 /opt/project 경로가 뜨실 텐데요. 그렇다면 아래 내용이 도움이 되실 겁니다.


파이참에서 python interpreter로서 docker compose를 추가할 때, 프로젝트의 docker-compose 구성 외에 별도로 docker compose 구성을 추가하는 듯 보입니다.

아래와 같은 구성으로 프로젝트 root 경로도 볼륨 추가하구요. pycharm helpers 볼륨도 추가합니다.

image.png

 

그래서 우리 django 도커 구성에서는 workdir이 /app 인데, 위 설정 등으로 인해
파이참에서는 workdir이 /opt/project 이 되겠구요. 파이참에서 Path mappings 설정에서 /app 경로가 아닌 /opt/project 경로를 바라보도록 수정해주시면, 중단점이 탐지가 되실 듯 합니다.

image.png

 

설명이 조금 어려울 수도 있는 데요. 살펴보시고 댓글 부탁드립니다.

inspireworld님의 프로필 이미지
inspireworld
질문자

path mapping만 수정해주니 잘 되네요. 정말 감사합니다. 
컨테이너에 bash로 한번만 봐봤더라면 좀 더 수월하게 디버깅 할 수 있었을듯한데.. 어떻게 찾으신건가요?

 

저두 구글링을 해보니 pycharm에서 디버그 실행 시에 자동으로 /opt/project 폴더를 만들고 거기다가 코드를 복사한다고 하네요..

이진석님의 프로필 이미지
이진석
지식공유자

오. 해결되셨다니 다행입니다.

파이참에서 docker compose 설정될 때, 로그 메시지를 다 읽어보고, 로그에 출력되는 모든 경로의 파일들을 다 열어서 봤습니다. 그랬더니 위 docker compose 설정이 보이더라구요.

파이참에서 docker compose 사용할 때, 유의점은 아래와 같이 정리해볼 수 있겠네요.

  • docker-compose 사용할 때에는 장고 서비스명은 django 로 해야함. 그래야만 pycharm helpers 등이 설정됨.

  • 이때 django 소스 프로젝트는 docker-compose, Dockerfile 설정에 상관없이, 추가 docker compose 설정으로 /opt/project 경로로 마운트되니, 파이참 Configuration에서 소스 프로젝트 마운트 경로를 /opt/project 로 수정하기

화이팅입니다. :-)

inspireworld님의 프로필 이미지
inspireworld
질문자

답변 감사합니다.

몇년 전부터 있었던 이슈(?) 같아요.ㅎ

https://intellij-support.jetbrains.com/hc/en-us/community/posts/360004951500-How-to-avoid-create-opt-project

image.png


pycharm에서 만드는 docker compose 파일은 어디서 확인하셨을까요? 저도 한번 확인해보고 싶어서요.

그리고 로그도 어떻게 확인하셨는지 궁금합니다.

이진석님의 프로필 이미지
이진석
지식공유자

Python Interpreter 설정에서 Docker Compose 타겟을 지정하면 아래와 같은 다이얼로그가 뜨는 데요.

image.png

Next 버튼을 클릭하면, 아래와 같이 로그가 출력됩니다.

image.png

로그에서 /Users/allieus/Library/Caches/JetBrains/PyCharm2024.1/tmp/docker_compose/docker-compose.override.7.yml 경로가 있는 데요.

/Users/allieus/Library/Caches/JetBrains/PyCharm2024.1/tmp/docker_compose/ 디렉토리에 들어가면 아랫처럼 여럿 임시 파일들이 있구요. 곧 자동 제거됩니다.

image.png

그 파일들을 모두 열어보시면 찾으실 수 있습니다. :-)

 

inspireworld님의 프로필 이미지
inspireworld
질문자

친절하게 답변 주셔서 정말 감사합니다..

강의도 좋지만 이런 질문을 통해서도 더 많이 배우네요.

0

이진석님의 프로필 이미지
이진석
지식공유자

docker-compose 실행 자체를 파이참이 해주는 데 따로 up을 하셨기 때문에, 브라우저 요청이 파이참 쪽 프로세스가 아닌, 별도 터미널 쪽 프로세스를 타는 것은 아닐까요. 흠.

저는 docker-compose build만 하고 터미널에서는 up은 안 했구요. 파이참에서 디버그 실행만 했습니다. 이때 docker-compose up이 수행됩니다.

inspireworld님의 프로필 이미지
inspireworld
질문자

cookiecutter django가 wsl이나 windows10에서 테스트가 안된 문제일까 싶기도 한데.. 혹시 해당 코드로 한번 테스트 해봐 주 실 수 있을까요..?

wsl 기준으로 해봤더니 안되서, wsl 문제 일까 싶어서 윈도우 버전으로 프로젝트 다시 생성한 뒤 똑같이 테스트해봐도 안되네요ㅜㅜ

https://github.com/quroom/docuecho-windows - 윈도우 버전

https://github.com/quroom/docuecho-wsl - wsl 버전

0

이진석님의 프로필 이미지
이진석
지식공유자

테스트해본 제 Configuration 파일은 아래와 같구요. runserver_plus 쓰시길래 명령에 적용해봤습니다.

image.png

아래는 중단점에서 실행이 멈춘 상황입니다.

image.png

 

흠. 어떤 이유일까요. 🤔

inspireworld님의 프로필 이미지
inspireworld
질문자

테스트하신 예제 코드 repo 주소 알 수 있을까요..? 저도 돌려보면 뭐가 문제인지 파악하기가 용이 할듯합니다..
일단은 vscode로 하던데로 개발해야겠습니다.

pycharm이 django 개발용으로는 최고라는 이야기를 들어서 갈아타보려 했는데, 익숙치가 않네요.ㅎ

0

이진석님의 프로필 이미지
이진석
지식공유자

안녕하세요.

리눅스에서의 라이브러리 팩키지 관리 이슈는 리눅스에서 직접 설치를 해봐야할 것이구요. 이를 위해 윈도우에서는 WSL이나 VirtualBox, 도커 등을 사용해보실 수 있으실 듯 합니다.

WSL (Windows Subsystem for Linux)의 약자로서, 윈도우에서 직접 리눅스 커널을 제공해주고, 다양한 리눅스 배포판을 사용할 수 있습니다. 이를 활용하면 윈도우지만 WSL 상에서 리눅스 라이브러리를 활용하여 개발을 하실 수 있고, VSCode 등에서도 손쉽게 연결하실 수 있습니다. 모두 Microsoft 작품이니깐요.

혹은 VirtualBox로 리눅스를 설치해서 테스트를 해보실 수도 있겠구요. Docker로 리눅스 컨테이너를 올려서 라이브러리를 설치를 테스트해보실 수도 있겠구요. // 저는 파이썬 팩키지 설치 문제는, 배포할 서버 OS에 맞게 리눅스 컨테이너로 구동 확인만 해도 대개 충분했습니다.

저라면 윈도우에서 WSL을 사용하고, 윈도우에서도 리눅스 팩키지로 개발한다에 한 표 입니다.

마지막으로 CI/CD 서비스(ex: GitHub Actions)를 활용하시면, 테스트 수행 전에 대개 라이브러리 설치부터 진행하니깐요. GitHub 저장소에 코드가 머지될 때마다 동작 테스트가 자동으로 수행되어 편리합니다.

--

PyCharm Professional에서 Settings => Python Interpreter 설정에서 "Add Interpreter" 기능을 통해, 원격지의 파이썬 인터프리터를 설정하실 수 있습니다.

  1. docker-compose로 먼저 도커를 실행하셔서는 안 되구요.

  2. Docker-compose 경로를 지정하시고, 도커내 python 경로를 설정하시면, 도커 내 python 인터프리터 설정이 현재 프로젝트에 잡히구요. (이때 저는 삽질이 있었습니다. 아래 댓글에서 부연 설명할게요.)

  3. 그리고 파이참에서 Configurations에 자동으로 도커 실행 설정이 추가되는 데요. Edit 메뉴를 통해 bind되는 host를 localhost에서 0.0.0.0으로 변경해주세요.

  4. 그리고 파이참에서 디버그 시작 버튼을 클릭하시면, 파이참을 통해 도커를 통해 장고 서버가 구동됩니다. 그리고 파이참의 디버깅 기능을 활용하실 수 있습니다.

이진석님의 프로필 이미지
이진석
지식공유자

pycharm 에서 container 내에 자동으로 /opt/.pycharm_helpers 경로에 파이참 디버깅 관련된 여러 팩키지들이 자동 복사되어야하는 데, 복사가 안 되어서 고생한 적이 있습니다. python interpreter 설정이 마무리가 안 되더라구요. exit code가 2라는 메시지만 있고 다른 메시지가 없어서 어리둥절했었습니다.

  • macOS에서는 /Applications/PyCharm.app/Contents/plugins/python/helpers/ 경로에

  • 윈도우에서는 C:\Program Files\JetBrains\PyCharm 2024.1\plugins\python\helpers 경로에 (경로 가운데 버전명이 다를 수 있으니 확인 필요) pycharm helpers 파일들이 있구요.

     

이 디렉토리 내 파일들이 컨테이너 내 /opt/.pycharm_helpers 경로에 마운트되어야하거든요. 그래서 수동으로 Dockerfile 내에서 위 경로의 파일들이 /opt/.pycharm_helpers/ 디렉토리에 복사되도록 설정했었던 적이 있습니다.

살펴보시고, 댓글 부탁드립니다. :-)

이진석님의 프로필 이미지
이진석
지식공유자

python interpreter 설정이 되면, 아래와 같은 모습이 되어야합니다.

붙여넣은_이미지_10_8_24_12_45.png

 

이진석님의 프로필 이미지
이진석
지식공유자

붙여넣은_이미지_10_8_24_12_46.png

 

inspireworld님의 프로필 이미지
inspireworld
질문자

말씀하신것처럼 python interpreter까지는 설정을 마치고, docker 컨테이너 띄운 뒤에 디버거까지 연결은 된거 같은데,, 중단점이 작동을 안하네요.ㅜ

https://github.com/quroom/docuecho

프로젝트 코드구요.

image.png

docker-compose up으로 먼저 모든 컨테이너 띄운 뒤에 runserver_plus 디버깅 모드로 실행했습니다. 혹시나 runserver_plus extension 문제일까봐 runserver로 장고를 띄워봤는데도 중단점 작동이 안되네요.

 

image.png

get_object라인에서 중단 되어야하는데 그냥 넘어가네요.. 말씀하신 0.0.0.0:8000은 되어있습니다.

image.png

 

inspireworld님의 프로필 이미지
inspireworld
질문자

import sys; print('Python %s on %s' % (sys.version, sys.platform))
/usr/local/bin/python3 /opt/.pycharm_helpers/pydev/pydevd.py --multiprocess --qt-support=auto --client host.docker.internal --port 57373 --file /opt/project/manage.py runserver_plus 0.0.0.0:8000 
 Container docuecho_local_redis  Running
 Container docuecho_local_postgres  Running
 Container docuecho_local_mailpit  Running
 Container docuecho_local_django  Recreate
 Container docuecho_local_django  Recreated
Attaching to docuecho_local_django
docuecho_local_django  | wait-for-it: waiting 30 seconds for postgres:5432
docuecho_local_django  | wait-for-it: postgres:5432 is available after 0 seconds
docuecho_local_django  | PostgreSQL is available
pydev 디버거에 연결되었습니다(빌드 242.23339.19)docuecho_local_django  | WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
docuecho_local_django  |  * Running on all addresses (0.0.0.0)
docuecho_local_django  |  * Running on http://127.0.0.1:8000
docuecho_local_django  |  * Running on http://172.21.0.7:8000
docuecho_local_django  | Press CTRL+C to quit
docuecho_local_django  |  * Restarting with watchdog (inotify)
docuecho_local_django  | Performing system checks...
docuecho_local_django  | 
docuecho_local_django  | System check identified no issues (0 silenced).
docuecho_local_django  | 
docuecho_local_django  | Django version 5.0.9, using settings 'config.settings.local'
docuecho_local_django  | Development server is running at http://0.0.0.0:8000/
docuecho_local_django  | Using the Werkzeug debugger (https://werkzeug.palletsprojects.com/)
docuecho_local_django  | Quit the server with CONTROL-C.
docuecho_local_django  |  * Debugger is active!
docuecho_local_django  |  * Debugger PIN: 418-360-494

runserver_plus 디버거 연결시 로그입니다.

inspireworld님의 프로필 이미지
inspireworld
질문자

wsl문제일까 싶어서, windows11 에서도 해봤는데 중단점이 안걸리네요 세팅은 정상적인 것 같은데, 왜 그런지 모르겠습니다.

inspireworld님의 프로필 이미지
inspireworld

작성한 질문수

질문하기