Docker 컨테이너 'Connection Refused' (Errno 111) 오류 해결 가이드

이미지
🎯 타겟 독자: Docker 입문자, 컨테이너를 띄웠으나 localhost 로 접속이 안 되는 백엔드 개발자, MSA(마이크로서비스) 구축 중 통신 오류를 겪는 엔지니어. 📝 요약: Docker 접속 오류(Errno 111)의 90%는 애플리케이션이 '0.0.0.0'이 아닌 '127.0.0.1' 로 바인딩 되어 있거나, 포트 포워딩(-p) 설정이 누락되어 발생합니다. 이 글에서는 네트워크 인터페이스의 차이를 이해하고, 외부 접속을 허용하는 올바른 설정법을 정리합니다. 1. 문제 정의: "컨테이너는 떴는데 접속이 안 돼요" Docker 입문자들이 가장 흔하게 겪는 상황입니다. docker ps 로 확인하면 상태(STATUS)는 분명히 Up 인데, 브라우저나 Postman으로 접속하면 즉시 연결이 거부됩니다. curl: (7) Failed to connect to localhost port 8080: Connection refused Python: ConnectionRefusedError: [Errno 111] Connection refused 이 문제는 방화벽 때문이 아닙니다. "누구의 요청을 들을 준비가 되었는가(Listen Address)" 에 대한 설정이 잘못되었기 때문입니다. 2. 원인 분석: 127.0.0.1의 함정 핵심은 Loopback(127.0.0.1) 과 Any Address(0.0.0.0) 의 차이입니다. 로컬 PC에서 개발할 때 서버를 localhost 로 띄우는 건 보안상 좋은 습관입니다. 하지만 Docker 컨테이너는 독립된 IP를 ...

Python 3.13+ 환경에서 'ModuleNotFoundError' 발생하는 원인과 가상환경(venv) 재설정 해결법

이미지
🎯 타겟 독자: Python 3.13으로 마이그레이션을 진행 중인 백엔드 개발자, 라이브러리 설치 후에도 모듈을 찾을 수 없다는 오류에 직면한 주니어 엔지니어. 📝 요약: pip install 로 패키지를 설치했음에도 ModuleNotFoundError 가 발생하는 주된 원인은 '인터프리터 실행 경로와 패키지 설치 경로의 불일치' 입니다. 본 글에서는 2026년 기준 최신 Python 3.13 환경에서 sys.path 를 통해 원인을 진단하고, 오염된 개발 환경을 venv (가상환경)로 완벽하게 격리 및 재구축하는 표준 절차를 다룹니다. 1. 문제 정의: 설치했는데 왜 없다고 나오는가? Python 개발을 하다 보면 가장 흔하게, 그러나 가장 당혹스럽게 마주하는 오류가 바로 ModuleNotFoundError: No module named 'x' 입니다. 특히 2026년 현재 안정화된 Python 3.13 버전으로 프로젝트를 업그레이드하거나, 여러 버전의 파이썬(3.11, 3.12, 3.13)이 공존하는 로컬 머신에서 이 문제는 빈번하게 발생합니다. 많은 개발자가 이 오류를 마주했을 때 단순히 pip install [패키지명] 을 반복 입력하거나, 무작정 IDE를 재시작하는 경향이 있습니다. 하지만 터미널에서 Requirement already satisfied 라는 메시지가 뜸에도 불구하고 코드 실행 시 에러가 지속된다면, 이는 단순 설치 문제가 아닌 '환경 참조(Path Reference)' 의 문제입니다. 즉, 당신이 명령어를 입력하는 터미널(Shell)이 바라보는 파이썬과, 코드를 실행하는 인터프리터가 서로 다른 곳을 보고 있다는 뜻입니다. 2. 기술적 원인 분석: sys.path와 인터프리터의 괴리 Python...