Development Artist

[WSL2, Ubuntu, Postgresql, Django] WSL2의 Django 프로젝트에서 Windows Local Postgresql 연결 본문

TroubleShooting/Etc

[WSL2, Ubuntu, Postgresql, Django] WSL2의 Django 프로젝트에서 Windows Local Postgresql 연결

JMcunst 2022. 8. 3. 16:33
728x90
반응형

※ 내용이 요약되어 있지 않습니다. 참고 바랍니다.

개요

 Django 프로젝트를 진행 중에 DB를 local의 Postgresql에 연결을 하려고 하였다. 하지만, Django 프로젝트가 WSL2 Ubuntu 환경에 있었기 때문에 Windows 환경에 있는 Postgresql에 연결하는 것을 실패했다.

 

* Django>base.py

* WSL2 Terminal>파이썬 가상환경

 # python3 manage.py makemigrations

내용은 5432 포트로 호스트 localhost가 TCP/IP Connection refused가 된다 라는 것이다.


해결

일단 구글신에게 물어보았다. 몇 번의 삽질을 시도 해보았다.

 

구글링을 통해 알게된 것은

 

1. WSL2는 별도의 IP를 가진다. shutdown을 하지 않는 이상 유지가 되고, shutdown 후 재시작을 하면 IP가 변경된다. 그리고 고정 IP를 사용하는 방법도 있다.

* Terminal>파이썬 가상환경

 # cat /etc/resolv.conf

nameserver가 WSL2의 Ubuntu OS가 가지는 IP이다. 해당 IP에 대해서 Postgresql에 대한 접속을 허용해야한다.

 

2. WSL2에서 CLI로 Postgresql에 접속. psql 명령어를 사용하기 위해서 postgresql-client 설치.

* Terminal>파이썬 가상환경

 # sudo apt-get postgresql-client

이후, 아래 Command로 DB 접속.

# psql --host=172.xxx.xxx.1 --port=5432 --user=postgres

접속이 안될 것이다.

 

정상적인 접속은 아래와 같다.

 

3. Postgresql의 설정 파일은 default로 설치했다면, C:\Program Files\Postgresql\[Version]\data 안에 있다. 이중에서 봐야할 파일이 postgresql.conf와 pg_hba.conf다.

 

Postgresql.conf에서 postgresql이 '*' 모든 IP로 부터 듣고 있다는 뜻이다. 기본적으로 아래와 같이 설정이 되어 있을 것이다.

* postgresql.conf

* pg_hba.conf

해당 파일은 접속하는 클라이언트에 대한 인증 설정을 설명하는 파일이다. 여기에 WSL2 클라이언트를 등록을 해준다.

아까 알아낸 resolv.conf의 nameserver 주소를 넣어준다. 

4. postgresql.conf와 pg_hba.conf 파일을 수정하면 postgresql을 재시작할 필요가 있다. 방법은 여러개가 있으나, 아래의 방법으로 진행했다.

* Window키+R> services.msc

* 이름>postgresql-x64-[Version] 찾아서 우클릭 후 다시 시작.

다시 시작하면 PID가 바뀐다.

확인 하는 방법은 Windows에 cmd 열어서

# netstat -nop tcp 

PID가 25736인데 재시작 한 후 해당 명령어를 다시 쳐보면 PID가 바뀌어 있을 것이다.

 

5. Window Local에서 기본적으로 방화벽 설정을 확인할 필요가 있다. 방화벽이 TCP/IP 통신을 막고 있을 수 있다. Inbound 규칙을 추가해줌으로써, 해결할 수 있다.

Windows에서 '고급 보안이 포함된 Windows Defender 방화벽'을 킨다.

* 인바운드 규칙 우클릭>새 규칙>

마침을 누르면서 인바운드 규칙을 하나 추가해 주었다.

 

이 모든 것을 마치고 난 뒤, WSL2로 돌아가서

# psql --host=172.xxx.xxx.1 --port=5432 --user=postgres

해당 명령어를 쳐보면 PW를 물어보고 정상적으로 접속이 될 것이다.

 

그리고 Django의 Base.py의 DB host를 바꾼다.

* base.py

# python3 manage.py makemigrations
# python3 manage.py migrate

정상적으로 DB에 migrate된 모습.

 

Windows의 PgAdmin4에서 확인한 결과, 정상적으로 테이블에 내용들이 업데이트 되었다.

728x90
반응형
Comments