Q&A

책을 따라하다가 막히는 부분이 있나요?
질문을 남겨주세요.

573p. PostgreSQL 유저 및 비밀번호 오류... 제발 도와주세요ㅠㅠ

1 year, 1 month ago

j66518081 j66518081

안녕하세요! 자꾸 글을 많이 쓰게 되네요.

사실 611페이지까지 갔다가... 어느 순간부터 페이지 접속이 안되고 오류가 발생해서, git restore --source로 "도커에 장고만 담기"로 복귀시켰습니다. 거기로 돌아가면 페이지가 잘 열리더라구요. 그래서 PostgreSQL을 적용하는 과정에 문제가 발생하는 것 같았습니다.

574p에서 페이지가 작동하지 않은 원인은 psycopg2 모듈이 없어서라고 하는데, 저는 아래와 같은 오류코드만 발생했습니다.


do_it_django_a_to_z-web-1 exited with code 139


챗지피티한테 물어보니까 이렇게 말하더라구요.


"do_it_django_a_to_z-web-1 exited with code 139"는 Docker 컨테이너 내에서 실행 중인 Django 애플리케이션 컨테이너인 "do_it_django_a_to_z-web-1"이 비정상적으로 종료되었음을 나타냅니다. 코드 139는 일반적으로 Segmentation Fault(세그멘테이션 오류)를 나타내며, 이것은 프로그램이 메모리 접근 오류 또는 무효한 메모리 위치에 접근하려고 할 때 발생하는 오류입니다.

세그멘테이션 오류는 일반적으로 프로그래밍 버그, 메모리 누수, 또는 메모리 충돌과 관련이 있을 수 있습니다. 이러한 문제를 해결하기 위해서는 다음과 같은 단계를 따를 수 있습니다:

1. 로그 확인: 컨테이너의 로그를 확인하여 더 자세한 오류 메시지나 스택 트레이스를 찾아봅니다. 로그는 종종 어떤 문제가 발생했는지에 대한 힌트를 제공합니다.

2. 코드 검토: 소스 코드를 검토하여 잠재적인 버그나 메모리 접근 오류를 찾아봅니다. 특히 메모리 관련 오류나 배열 범위를 벗어난 접근을 확인합니다.

3. 의존성 및 환경 확인: 필요한 의존성이나 환경 변수가 올바르게 설정되었는지 확인합니다. Django 설정, 데이터베이스 연결 등이 올바르게 구성되어야 합니다.

4. Dockerfile 및 환경 설정 검토: Dockerfile과 `docker-compose.yml` 파일을 검토하여 컨테이너가 올바르게 설정되었는지 확인합니다. 필요한 라이브러리 및 설정이 모두 포함되어 있는지 확인하세요.

5. 리소스 확인: 컨테이너가 충분한 리소스를 할당받았는지 확인합니다. 메모리 또는 CPU 부족으로 인해 오류가 발생할 수 있습니다.

6. 외부 패키지 및 라이브러리 업데이트: 사용 중인 외부 패키지 및 라이브러리를 최신 버전으로 업데이트하고, 버전 간의 호환성 문제를 확인합니다.

세그멘테이션 오류는 디버깅이 어려울 수 있으므로 로그와 코드 검토를 중심으로 문제를 해결하려고 노력해야 합니다. 문제가 해결되지 않으면 추가 정보와 로그를 기반으로 구체적인 도움을 얻기 위해 프로그래밍 커뮤니티나 지원 포럼에 도움을 요청하는 것이 좋습니다.



아무튼 그냥 다음 과정으로 넘어가 보았습니다. pip list로 확인해 보니 psycopg2-binary는 이미 설치된 것으로 확인이 되어서 바로 pip freeze > requirements.txt를 입력했습니다. 그리고 docker-compose build 후 docker-compose up을 했습니다. 그러자 발생한 에러는 다음과 같습니다.

Attaching to do_it_django_a_to_z-db-1, do_it_django_a_to_z-web-1

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:37.500 UTC [1] LOG: starting PostgreSQL 12.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 8.3.0) 8.3.0, 64-bit

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:37.500 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:37.500 UTC [1] LOG: listening on IPv6 address "::", port 5432

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:37.506 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:37.526 UTC [19] LOG: database system was shut down at 2023-10-06 04:09:36 UTC

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:37.536 UTC [1] LOG: database system is ready to accept connections

do_it_django_a_to_z-web-1 | Watching for file changes with StatReloader

do_it_django_a_to_z-web-1 | Performing system checks...

do_it_django_a_to_z-web-1 |

do_it_django_a_to_z-web-1 | System check identified no issues (0 silenced).

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:41.751 UTC [26] FATAL: password authentication failed for user "do_it_django_db_user"

do_it_django_a_to_z-db-1 | 2023-10-06 04:14:41.751 UTC [26] DETAIL: Role "do_it_django_db_user" does not exist.

do_it_django_a_to_z-db-1 | Connection matched pg_hba.conf line 95: "host all all all md5"

do_it_django_a_to_z-web-1 | Exception in thread django-main-thread:

do_it_django_a_to_z-web-1 | Traceback (most recent call last):

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection

do_it_django_a_to_z-web-1 | self.connect()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner

do_it_django_a_to_z-web-1 | return func(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 270, in connect

do_it_django_a_to_z-web-1 | self.connection = self.get_new_connection(conn_params)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner

do_it_django_a_to_z-web-1 | return func(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection

do_it_django_a_to_z-web-1 | connection = self.Database.connect(**conn_params)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect

do_it_django_a_to_z-web-1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

do_it_django_a_to_z-web-1 | psycopg2.OperationalError: connection to server at "db" (172.24.0.2), port 5432 failed: FATAL: password authentication failed for user "do_it_django_db_user"

do_it_django_a_to_z-web-1 |

do_it_django_a_to_z-web-1 |

do_it_django_a_to_z-web-1 | The above exception was the direct cause of the following exception:

do_it_django_a_to_z-web-1 |

do_it_django_a_to_z-web-1 | Traceback (most recent call last):

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/threading.py", line 932, in _bootstrap_inner

do_it_django_a_to_z-web-1 | self.run()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/threading.py", line 870, in run

do_it_django_a_to_z-web-1 | self._target(*self._args, **self._kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/autoreload.py", line 64, in wrapper

do_it_django_a_to_z-web-1 | fn(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/commands/runserver.py", line 136, in inner_run

do_it_django_a_to_z-web-1 | self.check_migrations()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/core/management/base.py", line 574, in check_migrations

do_it_django_a_to_z-web-1 | executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/executor.py", line 18, in __init__

do_it_django_a_to_z-web-1 | self.loader = MigrationLoader(self.connection)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 58, in __init__

do_it_django_a_to_z-web-1 | self.build_graph()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/loader.py", line 235, in build_graph

do_it_django_a_to_z-web-1 | self.applied_migrations = recorder.applied_migrations()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 81, in applied_migrations

do_it_django_a_to_z-web-1 | if self.has_table():

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/migrations/recorder.py", line 57, in has_table

do_it_django_a_to_z-web-1 | with self.connection.cursor() as cursor:

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner

do_it_django_a_to_z-web-1 | return func(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 330, in cursor

do_it_django_a_to_z-web-1 | return self._cursor()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 306, in _cursor

do_it_django_a_to_z-web-1 | self.ensure_connection()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner

do_it_django_a_to_z-web-1 | return func(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection

do_it_django_a_to_z-web-1 | self.connect()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/utils.py", line 91, in __exit__

do_it_django_a_to_z-web-1 | raise dj_exc_value.with_traceback(traceback) from exc_value

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 289, in ensure_connection

do_it_django_a_to_z-web-1 | self.connect()

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner

do_it_django_a_to_z-web-1 | return func(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/base/base.py", line 270, in connect

do_it_django_a_to_z-web-1 | self.connection = self.get_new_connection(conn_params)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/utils/asyncio.py", line 26, in inner

do_it_django_a_to_z-web-1 | return func(*args, **kwargs)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection

do_it_django_a_to_z-web-1 | connection = self.Database.connect(**conn_params)

do_it_django_a_to_z-web-1 | File "/usr/local/lib/python3.8/site-packages/psycopg2/__init__.py", line 122, in connect

do_it_django_a_to_z-web-1 | conn = _connect(dsn, connection_factory=connection_factory, **kwasync)

do_it_django_a_to_z-web-1 | django.db.utils.OperationalError: connection to server at "db" (172.24.0.2), port 5432 failed: FATAL: password authentication failed for user "do_it_django_db_user"

나머지 파일들은 이렇게 됩니다.








https://cafe.naver.com/doitstudyroom/47427


do_it_django_a_to_z-web-1 | django.db.utils.OperationalError: connection to server at "db" (172.24.0.2), port 5432 failed: FATAL: password authentication failed for user "do_it_django_db_user"

이 문구를 보고 여럿 검색을 해 보니 위의 게시글을 보아서, docker-compose.yml 파일과 .env.dev 파일의 user과 password가 다른지도 확인해 보았으나, 다르지 않은 것 같았습니다. 그래서 이미 등록된 PostgreSQL 사용자가 있는 건가도 싶었는데 잘 모르겠더라구요. 도대체 뭐가 문제일까요... 순서대로 할 때에는 "도커에 PostgreSQL 설정 추가하기" 까지는 잘 작동을 했던 것 같았습니다. 막히기 시작한 건 590페이지에서 Server Error가 500이 아니라 402였나...가 뜨기 시작해서부터였습니다.

아무튼... 제발 도와주세요ㅠㅜㅜㅠㅜㅠㅠㅜㅠㅜ




sungyong
sungyong   1 year, 1 month ago

너무 답이 늦은게 아닌가 싶네요. 

어찌됐든 db에 로그인이 안되는 문제이므로, 현재 코드에 문제가 없다면 중간에 뭔가 꼬였기 때문인 것 같습니다. 

아래와 같이 도커 볼륨과 이미지를 삭제한 뒤, 다시 만들어보면 될 수도 있습니다. 

sudo docker-compose down - v

sudo volume prune 


시도해보시고 결과 알려주세요. 

Updated: Oct. 12, 2023, 1:41 p.m.

Leave a Comment:
목록보기
Search
  • 자유게시판
  • Q&A