DB Tool: PgAdmin4
https://www.pgadmin.org/download/pgadmin-4-windows/
DB: Postgres
https://www.postgresql.org/download/
이번 포스팅의 이유는 기존 도커에 띄워놨던 디비가 계속해서 로그 관련해서 망가지는 일이 발생했고
마땅한 해결책을 찾을 수 없어서 결국 호스트 PC에 그냥 깔기로 했다.
호스트 PC에 로컬 DB 설치를 마치고
도커에 띄워진 APP에서 호스트 PC의 DB와 연결하려고 하던 찰나 처음보던 에러가 떴다.
문제
db 연결 에러
원인 추측
로컬에서 db툴로 연결테스트를 했을 때는 잘만되던게 왜 안되는걸까 하고 생각해보다가 늘상 하던 대로 도커에 띄워진 db와 도커에 띄워진 app간의 연결이 아닌 호스트에 설치된 db와 도커에 띄워진 app간의 연결이어서 그런 것 같았다.
시도해본 것
방화벽 해제
어라라? 방화벽 문제인가?
열심히 방화벽을 풀어보았지만 이 문제도 아니었다.
Telnet, Ping 테스트
맨 처음엔 무작정 cmd에 ipconfig를 쳐서 ip를 확인하고 ip를 넣어주면 해결이 될 것 같았다.
왜냐, 도커 내부에서도 telnet을 쳐보거나 ping을 쳐봐도 해당 ip로 접속이 되고 ping이 잘갔기 때문이다.
이 문제도 아니었다.
Postgres 내부 설정
하지만 복병은 Postgres 내부에 있었다.
Postgres는 Default 설정이 내부 접속만 가능하게 되어있다. 기본적으로 외부 ip를 막아놓았다.
그리고 이를 두개의 conf파일을 수정해야 접속되도록 되어있었다.
호스트에 띄워져 있다 한들 도커 또한 외부로 보는 것이다.
두가지 conf파일을 수정해야하는데 기본 경로는 아래와 같다
C:\Program Files\PostgreSQL\16\data\
여기서 찾아야할 두가지 설정파일은 다음과 같다.
1.postgresql.conf
2.pg_hba.conf
각각의 파일에서 설정해줘야하는데
1.postgresql.conf 에서는
listen_addresses = '*'
가 주석처리 되어 있지 않은지 체크만 하면 된다.
2.pg_hba.conf 설정법은 아래 설정 맨 아래에 본인이 추가하고자 하는/ 허용하고자 하는 ip를 적는 것이다.
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all scram-sha-256
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all scram-sha-256
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
참고할만한 블로그는 아래에 있다.
https://pamyferret.tistory.com/26
다시 말하지만 Postgres에서 열어주는 것은 IP 리스트로
본인에게 접근할 수 있는 IP를 열어주는 것이다.
한마디로
호스트 PC를 가리키는 IP 주소를 열어놓는 것
여기서 도커의 ip를 적고
도커에서는 host의 ip를 적고 하는 개념이 아닌
도커가 HOST PC를 접근할 수 있는 ip를 적는 것이다. 당연하게도 Host PC의 ip가 되는 것이다.
만약 아래와 같이 추가한다고 가정하면
host all all 123.456.789.10/32 md5
저 ip는 외부로부터, 이 경우에는 도커, 접근이 가능하도록 열어준 것이다.
필자의 경우는 virtual box ip로 기존에 쓰고 있었던 Host-only Ethernet Adapter ip를
외부 접속 가능 ip로 열어주고 도커에서 저 ip로 접근하도록 설정했다.
wifi 주소랑 Host-only Ethernet Adapter ip 중에 후자를 택한 이유는 불변성 때문이다.
wifi 주소는 바뀔 수 있다. 특히나 사옥 이전을 앞두고 있는 지금 시점에는 더더욱 그렇다.
Virtual Box의 Host-only Ethernet Adapter ip 경우 DHCP 서버를 체크해제했고
수동으로 고정 IP를 지정해줬기 때문에 바뀔 확률이 현저히 적다.
그래서 Host-only Ethernet Adapter ip로 지정해두면 호스트 pc를 가리키면서도
바뀌지 않을 ip로 정해놨기 때문에 또 추가로 ip를 변경해야할 귀찮음을 줄일 수 있다.
'개발자 전향 프로젝트' 카테고리의 다른 글
Docker Gitlab CI/CD 에 대해 알아보기 (HTTP) (0) | 2024.07.09 |
---|---|
[장고] DRF 함수형 vs 클래스형의 차이 및 사용 예시 (0) | 2024.06.26 |
Django 와 React 동시에 실행하기: Concurrently 라이브러리 (0) | 2024.06.13 |
SSL 실행 에러: AttributeError: module 'ssl' has no attribute 'wrap_socket' (1) | 2024.05.28 |
pip install 중에 발생하는 코덱 에러 : UnicodeDecodeError 'cp949' codec (0) | 2024.05.28 |