DB/PostgreSQL

윈도우서버에서 PostgreSQL 외부접속 가능하게 설정하는 방법

심플블루 2020. 6. 14. 01:08
반응형

# 윈도우서버에서 PostgreSQL 외부접속 허용하기

사실 실무에서 대부분 DB서버와 웹서버를 물리적으로 같은 서버에 두진 않을 것이다.
그래서 이번엔 SET ROLE 사용법과 DATABASE, TABLE 만들기에 앞서 PostgreSQL 외부접속을 허용하는 방법에 대해서 포스팅을 하려한다.
 
나의 경우는 실시간 서비스를 목적으로 PostgreSQL을 사용한 건 아니라 이 과정이 필요하진 않았지만, 
서버용PC에 PostgreSQL을 설치한 후 원격으로 접속하였을 때 서버용PC가 성능이 조금 더 좋은 것이었기 때문에 약간의 속도향상의 이점이 있었었다.
(하지만 원격 접속이라 직접 서버용PC에서 작업할 때보단 체감속도가 좀 떨어지는 느낌은 있다.)
 
  • 이 포스팅은 윈도우서버에 설치된 PostgreSQL을 대상으로 하지만, 사실 설정파일의 명칭과 위치는 리눅스, 유닉스 등등의 OS와 상관 없이 항상 같기 때문에 해당 OS 환경에서도 참고할 수 있다.
  • DB서버와 클라이언트서버는 같은 네트워크 대역대에 있다고 가정한다.
    (같은 네트워크 대역대가 아니라면 PostgreSQL 설정뿐 아니라 공유기나 방화벽 등등의 설정 작업을 추가해야 할 것이다.)


# 물리적으로 2대의 서버가 각자 존재하는 상황

  • 노트북 SMITH 가 서버역할 입니다. (이쪽이 성능이 조금 더 좋거든요)
  • 서버쪽에 설치된 PostgreSQL의 설정파일을 수정하여 외부접속이 되도록 합니다.

 

 

 

# 서버(SMITH)측  PostgreSQL 설정파일(.conf파일) 수정

  • pg_hba.conf 파일 수정

    pg_hba.conf 파일은 PostgreSQL이 설치된 폴더의 data 폴더 밑에 있다. 
    (C:\Program Files\PostgreSQL\10\data\pg_hba.conf 수정)

    Linux나 Unix에 설치한 경우도 거의 동일한 경로에 해당 conf파일이 존재 한다.

pg_hba.conf 파일은 data 폴더 밑에 존재한다.

 

  • pg_hba.conf 파일 하단의 #IPv4 local connections: 부분에 추가하려는 IP대역을 입력한다.

하단의 #IPv4 local connections: 부분이다. 해당 사진은 변경 전 모습이다.

 

  • host  all  all  0.0.0.0/0  md5 를 입력하고 저장한다.

추가하려는 IP대대역을 이 부분에 기입해 주면 된다. 나는 모든 IP 접속을 허용할 것이기 때문에 0.0.0.0/0 라고 했다.

 

  • postgresql.conf 파일 확인

    postgresql.conf 파일은 PostgreSQL이 설치된 폴더의 data 폴더 밑에 있다.

(C:\Program Files\PostgreSQL\10\data\postgresql.conf 확인)

postgresql.conf 파일은 data 폴더 밑에 존재한다.

 

  • listen_addresses 항목과 port 항목을 확인한다.

    listen_addresses 항목은 모든 IP의 접속을 허용한다는 뜻으로 '*' 로 설정되어 있고, 사용 port 번호는 '5432'이다.

listen_addresses 항목과 port 항목 확인

# 서버 재시작

  • 변경사항이 적용될 수 있도록 서버를 재시작 한다.

pgAdmin4 를 사용해 서버를 재시작하였다.

 

# 클라이언트(new31514)측에서 접속 확인

  • 클라이언트에서 psql을 이용하여 서버(SMITH)측 PostgreSQL에 접속

    당연히 서버항목은 localhost가 서버의 IP주소가 되어야 한다.
    Database는 postgres, Port는 5432, Username은 postgres, 암호는 postgres 이다.
    접속 후 연결된 세션을 확인하기 위해 \c 명령어를 실행했고, 유저리스트를 확인하기 위해 \du 명령어를 실행했다.

노트북(new31514)의 psql을 이용하여 노트북(SMITH) 로 접속하기

 

  • 클라이언트에서 pgAdmin4를 이용하여 서버(SMITH)측 PostgreSQL에 접속

    클라이언트측에서 pgAdmin4를 실행시키면 로컬DB서버목록이 보인다. 원격지의 DB서버의 항목을 추가하도록 한다.


  • 로컬DB서버목록의 Servers 항목을 클릭 후 마우스 오른쪽 버튼을 클릭후 Create >> Server Group 클릭

Server Group 을 추가한다.

 

  • [General] 탭에서 Name : PostgreSQL10.13, Server Group : SMITH 를 입력
    (각자 원하는 명칭을 입력해도 상관없다.)

[General] 탭 수정

 

  • [Connection]탭에서 Host name/address : 192.168.219.149 (<< 서버 IP), Port : 5432, Username : postgres, Password : postgres 입력

[Connection] 탭 수정

 

  • 서버측 데이터베이스 서버목록이 새로 추가 된 것을 확인

    하단의 로컬 DB서버 외에 상단에 서버측 DB서버인 SMITH가 추가된 것을 확인할 수 있다.

서버측 DB인 SMITH 추가 확인



1.1 클라이언트/서버(client/server)

'클라이언트/서버'는 컴퓨터간의 관계를 역할로 구분하는 개념이다. 서버(server)는 서비스를 제공하는 컴퓨터(service provider)이고, 클라이언트(client)는 서비스를 사용하는 컴퓨터(service user)가 된다.

일반적으로 서버는 다수의 클라이언트에게 서비스를 제공하기 때문에 고사양의 하드웨어를 갖춘 컴퓨터이지만, 하드웨어의 사양으로 서버와 클라이언트를 구분하는 것이 아니기 때문에 하드웨어의 사양에 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터를 서버라 한다.

 

1.2 IP주소(IP address)

IP주소는 컴퓨터(호스트, host)를 구별하는데 사용되는 고유한 값으로 인터넷에 연결된 모든 컴퓨터는 IP주소를 갖는다. IP주소는 4 byte(32 bit)의 정수로 구성되어 있으며, 4개의 정수가 마침표를 구분자로 'a. b. c. d'와 같은 형식으로 표현된다.

여기서 a, b, c, d는 부호없는 1byte값, 즉 0~255사이의 정수이다.

IP주소는 다시 네트워크주소와 호스트주소로 나눌 수 있는데, 32 bit(4byte)의 IP주소 중에서 네트워크주소와 호스트주소가 각각 몇 bit를 차지하는 지는 네트워크를 어떻게 구성하였는지에 따라 달라진다. 그리고 서로 다른 두 호스트의 IP주소의 네트워크주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미한다.

IP Address     : 192.168.10.100

Subnet Mask  : 255.255.255.0

위의 결과에서 얻은 IP주소와 서브넷 마스크를 2진수로 표현하면 다음과 같다.

IP주소와 서브넷 마스크를 비트연산자 '&'로 연산하면 IP주소에서 네트워크 주소만을 뽑아낼 수 있다.

 

'&'연산자는 bit의 값이 모두 1일 때만 1을 결과로 얻기 때문에 IP주소의 마지막 8 bit는 모두 0이 되었다. 이결과로 부터 IP주소 192.168.10.100의 네트워크 주소는 24 bit(192.168.10)이라는 것과 호스트 주소는 마지막 8 bit(100)이라는 것을 알 수 있다.

IP주소에서 네트워크주소가 차지하는 자리수가 많을수록 호스트 주소의 범위가 줄어들기 때문에 네트워크의 규모가 작아진다. 이 경우 호스트 주소의 자리수가 8자리이기 때문에 256개(2^8)의 호스트만 이 네트워크에 포함될 수 있다.

호스트 주소가 0인 것은 네트워크 자신을 나타내고, 255는 브로드캐스트 주소로 사용되기 때문에 실제로는 네트워크에 포함 가능한 호스트 개수는 254개이다.

이처럼 IP주소와 서브넷 마스크를 '&'연산하면 네트워크 주소를 얻어낼 수 있어서 서로 다른 두 호스트의 IP주소를 서브넷 마스크로 '&'연산을 수행해서 비교하면 이 두 호스트가 같은 네트워크 상에 존재하는지를 쉽게 확인할 수 있다.

 

[출처] 자바의 정석 中 Chapter 16 네트워킹 Networking

 

Java의 정석

남궁성

최근 7년동안 자바 분야의 베스트 셀러 1위를 지켜온 '자바의 정석'의 최신판. 저자가 카페에서 12년간 직접 독자들에게 답변을 해오면서 초보자가 어려워하는 부분을 잘 파악하고 쓴 책. 뿐만 아니라 기존의 경력자들을 위해 자바의 최신기능(람다와 스트림)을 자세하면서도 깊이있게 설명하고 있다. 저자가 2002...
http://www.yes24.com/Product/Goods/24259565

 

 

 

# 추가사항

  • 0.0.0.0/0 대신 위의 [자바의 정석]의 내용을 참조하여 IP와 Subnet Mask 값을 조정하면 특정 IP대신 IP대역대로 설정할 수 있다.
    ex) 0.0.0.0/0  --->  192.168.219.0/24 로 설정을 한다면 모든 IP의 접속을 허용하는 대신 192.168.219.1 ~ 192.168.219.254 IP들만 접속하게 제한할 수 있다.

  • 접속이 되지 않을 시엔 서버측의 방화벽 설정을 확인하자.

 

반응형