Connection to IP Address Refused. Check That the Hostname and Port Are Correct
PostgreSQL을 학교에서 대여 받은 NHN 클라우드에 배포해서 연결하려고 했더니 에러가 발생 하였습니다.
TypeORM으로 Ubuntu의 PostgreSQL의 접근하는 상황이었습니다
먼저, 대여한 클라우드의 기본 PostgreSQL 포트인 5432를 열어주었습니다
해결 과정 - PostGreSQL 접근 제어 이슈
방화벽을 해제했음에도 여전히 접근 할 수 없었습니다. 찾아보니 기본적으로 PostgreSQL에서 접근 제어를 하고 있었습니다
이를 해결하기 위해 먼저 설정 파일들이 몰려 있는 쿼리 파일 구성 위치를 찾습니다
sudo -u postgres psql
SHOW config_file//쿼리 파일 구성 파일 위치 찾는다
sudo vi postgresql.conf
- 리스닝 포트를 와일드 카드로 설정해서 모두 접근 할 수 있도록 바꿔줘야 한다
sudo systemctl stop postgresql
sudo systemctl start postgresql
sudo systemctl status postgresql
여기까지 했더니 새로운 에러가 발생하였습니다
[28000] FATAL: no pg_hba.conf entry for host "168.131.161.191", user "berom", database "adam", SSL on
위의 에러는 pg_hba,conf(PostgreSQL의 접근 제어 설정 파일)에 접근하려는 호스트, 사용자 및 데이터 베이스의 연결 요청과 일치하는 항목이 없음을 나타냅니다.
그렇다면, 설정 파일에 제 정보를 적으면 해결 될 것이라 생각했습니다.
예상대로, 이제 intellij의 db 접근 툴에서는 접근 할 수 있었습니다
하지만, 여전히 typeorm에서는 에러가 발생하는 것을 볼 수 있다
알고보니 hostssl로 설정해뒀기 때문에 당연히 ssl이 없다는 에러가 발생하는거였습니다
이제 저장하고 다시 postgresql을 재부팅하고 서비스를 시작하니 DB 접속과 TypeORM의 알록달록한 메시지가 뜨는 것을 볼 수 있습니다
sudo systemctl stop postgresql
sudo systemctl start postgresql
왜 Hostssl로 pg_hba.conf를 설정하면 인텔리제이의 Db 접속 툴로는 되었는데 Typeorm으로는 안되었을까?
IntelliJ의 데이터베이스 도구는 pg_hba.conf 파일에서 hostssl과 연결할 수 있었지만 TypeORM은 연결할 수 없었던 이유는 TypeORM의 SSL 구성 때문일 수 있습니다.
IntelliJ의 데이터베이스 도구에는 추가 구성 없이 자체 서명된 인증서를 사용하여 PostgreSQL 서버에 연결할 수 있는 기본 SSL 옵션이 있을 수 있습니다.
하지만, TypeORM의 경우 SSL 옵션을 단순히 false하는 것으로 SSL 인증을 통과 할 수 없습니다.
기본적으로 인증서가 없기 때문이죠. 찾아보니 이를 위해 TypeORM에서는 아래와 같은 옵션을 제공하고 있습니다
PostgreSQL 서버가 자체 서명 인증서를 사용하는 경우 TypeORM 구성에 다음 SSL 옵션을 추가해야 할 수 있습니다:
"ssl": {
"rejectUnauthorized": false
}
이렇게 하면 서버의 SSL 인증서가 신뢰할 수 있는 CA(인증 기관)에서 서명하지 않은 경우에도 연결을 허용하도록 TypeORM에 지시합니다.
부족한 점이나 잘못 된 점을 알려주시면 시정하겠습니다 :>
'DEV > Backend' 카테고리의 다른 글
Tomcat (0) | 2023.05.13 |
---|---|
AWS의 서버 종류 (0) | 2023.05.10 |
직렬화 (serialization) - 🐥 카카오 테크 캠퍼스 (0) | 2023.05.03 |
java error release version 17 not supported (0) | 2023.04.23 |
객체 지향 프로그래밍(Object-Oriented Programming, OOP) (0) | 2023.04.14 |