PostgreSQL을 사용하기 위해서는 먼저 설치 과정이 필요하다. 운영체제에 이미 포함되어 있거나 시스템 관리자가 설치했을 수 있다. 이런 경우에는 운영체제 문서나 시스템 관리자에게 PostgreSQL 접근 방법을 문의한다.
PostgreSQL이 이미 설치되어 있는지, 또는 실험적으로 사용할 수 있는지 확실하지 않다면 직접 설치해볼 수 있다. 설치 과정은 어렵지 않으며 좋은 학습 기회가 될 것이다. PostgreSQL은 일반 사용자 권한으로도 설치할 수 있어 최고 관리자(root) 권한이 필요하지 않다.
직접 설치를 진행할 경우 17장의 설치 지침을 참고하고, 설치가 완료된 후 이 가이드로 돌아온다. 특히 환경 변수 설정 부분을 주의 깊게 따라야 한다.
시스템 관리자가 기본 설정과 다르게 구성했다면 추가 작업이 필요할 수 있다. 예를 들어, 데이터베이스 서버가 원격지에 있다면 PGHOST
환경 변수에 데이터베이스 서버 컴퓨터의 이름을 지정해야 한다. PGPORT
환경 변수 설정도 필요할 수 있다. 결론적으로, 응용 프로그램을 실행했을 때 데이터베이스 연결 오류가 발생한다면 시스템 관리자에게 문의하거나, 본인이 관리자라면 문서를 참고하여 환경 설정이 올바른지 확인한다. 이전 설명이 이해되지 않는다면 다음 장을 먼저 읽어보기 바란다.
다음 장으로 넘어가기 전에 PostgreSQL 시스템 아키텍처의 기본 개념을 이해하는 것이 중요하다. PostgreSQL의 각 구성 요소가 어떻게 상호작용하는지 이해하면 이번 장의 내용을 더 명확하게 파악할 수 있다.
데이터베이스 용어로 PostgreSQL은 클라이언트/서버 모델을 채택한다. PostgreSQL 세션은 다음과 같은 협력 프로세스(프로그램)로 구성된다:
서버 프로세스는 데이터베이스 파일을 관리하고, 클라이언트 애플리케이션의 데이터베이스 연결 요청을 수락하며, 클라이언트를 대신해 데이터베이스 작업을 수행한다. 이 데이터베이스 서버 프로그램의 이름은 postgres
이다.
사용자의 클라이언트(프론트엔드) 애플리케이션은 데이터베이스 작업을 수행하고자 하는 프로그램이다. 클라이언트 애플리케이션은 매우 다양한 형태를 가질 수 있다. 텍스트 기반 도구, 그래픽 애플리케이션, 웹 페이지를 표시하기 위해 데이터베이스에 접근하는 웹 서버, 또는 전문적인 데이터베이스 유지보수 도구가 될 수 있다. PostgreSQL 배포판에 포함된 클라이언트 애플리케이션도 있지만, 대부분은 사용자가 직접 개발한다.
클라이언트/서버 애플리케이션의 일반적인 특징처럼 클라이언트와 서버는 서로 다른 호스트에 위치할 수 있다. 이 경우 TCP/IP 네트워크 연결을 통해 통신한다. 이는 클라이언트 컴퓨터에서 접근 가능한 파일이 데이터베이스 서버 컴퓨터에서는 접근이 불가능하거나 다른 파일 이름으로만 접근 가능할 수 있다는 점을 고려해야 한다.
PostgreSQL 서버는 여러 클라이언트의 동시 연결을 처리할 수 있다. 이를 위해 각 연결마다 새로운 프로세스를 시작(“포크”)한다. 이후부터는 클라이언트와 새로 생성된 서버 프로세스가 원래의 postgres
프로세스의 개입 없이 직접 통신한다. 따라서 감독자 역할의 서버 프로세스는 항상 실행 상태를 유지하며 클라이언트 연결을 기다리는 반면, 클라이언트와 관련 서버 프로세스는 필요에 따라 생성되고 소멸된다. (물론 이 모든 과정은 사용자에게 보이지 않으며, 여기서는 설명의 완성도를 위해 언급한다.)
데이터베이스 서버에 접근할 수 있는지 확인하는 첫 번째 방법은 데이터베이스를 직접 생성해보는 것이다. 실행 중인 PostgreSQL 서버는 여러 개의 데이터베이스를 관리할 수 있다. 일반적으로 각 프로젝트나 사용자마다 별도의 데이터베이스를 사용한다.
이미 사이트 관리자가 데이터베이스를 만들어 놓았을 수도 있다. 그런 경우에는 이 단계를 건너뛰고 다음 섹션으로 넘어가면 된다.
새로운 데이터베이스를 만들려면 다음 명령을 실행한다. 예제에서는 mydb
라는 이름을 사용한다:
$ createdb mydb
아무런 응답이 없다면 성공적으로 생성된 것이므로 이 섹션의 나머지 부분은 건너뛰어도 좋다.
만약 다음과 같은 메시지가 나타난다면:
createdb: command not found
PostgreSQL이 제대로 설치되지 않은 것이다. 아예 설치되지 않았거나 셸의 검색 경로에 PostgreSQL이 포함되지 않은 것이다. 대신 절대 경로로 명령을 실행해보자:
$ /usr/local/pgsql/bin/createdb mydb
실제 경로는 사이트마다 다를 수 있다. 상황을 해결하려면 사이트 관리자에게 문의하거나 설치 설명서를 확인한다.
또 다른 응답으로 다음과 같은 메시지가 나올 수 있다:
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: No such file or directory
Is the server running locally and accepting connections on that socket?
이는 서버가 시작되지 않았거나 createdb
가 연결을 시도하는 위치에서 응답하지 않는다는 의미다. 설치 설명서를 확인하거나 관리자에게 문의한다.
다음과 같은 응답이 나올 수도 있다:
createdb: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL: role "joe" does not exist
여기서 “joe”는 로그인한 사용자 이름이다. 이는 관리자가 해당 사용자의 PostgreSQL 계정을 만들지 않았다는 의미다. (PostgreSQL 사용자 계정은 운영체제 사용자 계정과 별개다.) 관리자라면 21장을 참고해 계정을 만든다. 첫 번째 사용자 계정을 만들려면 PostgreSQL이 설치된 운영체제 사용자(보통 postgres
)로 전환해야 한다. 또는 운영체제 사용자 이름과 다른 PostgreSQL 사용자 이름이 할당되었을 수 있다. 이 경우 -U
스위치를 사용하거나 PGUSER
환경 변수를 설정해 PostgreSQL 사용자 이름을 지정해야 한다.
사용자 계정은 있지만 데이터베이스를 만들 권한이 없는 경우 다음과 같은 메시지가 나타난다:
createdb: error: database creation failed: ERROR: permission denied to create database
모든 사용자가 새 데이터베이스를 만들 수 있는 것은 아니다. PostgreSQL이 데이터베이스 생성을 거부한다면 사이트 관리자에게 권한을 요청해야 한다. 이런 상황이 발생하면 사이트 관리자와 상담한다. PostgreSQL을 직접 설치했다면 서버를 시작할 때 사용한 계정으로 로그인해야 한다.
다른 이름으로도 데이터베이스를 만들 수 있다. PostgreSQL은 한 사이트에서 여러 개의 데이터베이스를 만들 수 있다. 데이터베이스 이름은 반드시 알파벳으로 시작해야 하며 길이는 63바이트로 제한된다. 현재 사용자 이름과 같은 이름으로 데이터베이스를 만드는 것이 편리하다. 많은 도구가 이를 기본값으로 가정하므로 타이핑을 줄일 수 있다. 그런 데이터베이스를 만들려면 다음 명령어를 입력한다:
$ createdb
더 이상 데이터베이스를 사용하지 않는다면 삭제할 수 있다. 예를 들어 mydb
데이터베이스의 소유자(생성자)라면 다음 명령으로 삭제할 수 있다:
$ dropdb mydb
(이 명령은 사용자 계정 이름을 기본값으로 사용하지 않는다. 반드시 지정해야 한다.) 이 작업은 데이터베이스와 관련된 모든 파일을 물리적으로 제거하며 되돌릴 수 없으므로 신중하게 결정해야 한다.
createdb
와 dropdb
에 대한 자세한 내용은 각각 createdb와 dropdb 문서에서 확인할 수 있다.
데이터베이스를 생성한 후에는 다음과 같은 방법으로 접근할 수 있다:
PostgreSQL 대화형 터미널 프로그램인 *psql*을 실행한다. psql은 SQL 명령어를 대화식으로 입력하고, 편집하고, 실행할 수 있게 해준다.
pgAdmin과 같은 그래픽 기반 도구나 ODBC 또는 JDBC를 지원하는 오피스 프로그램을 사용해 데이터베이스를 생성하고 관리한다. 이 방법들은 이 튜토리얼에서 다루지 않는다.
여러 프로그래밍 언어에서 제공하는 데이터베이스 연결 라이브러리를 사용해 직접 응용 프로그램을 작성한다. 이 방법은 제4부에서 자세히 설명한다.
이 튜토리얼의 예제를 따라하려면 psql
을 실행하는 것이 좋다. mydb
데이터베이스에 접속하려면 다음 명령어를 입력한다:
$ psql mydb
데이터베이스 이름을 지정하지 않으면 사용자 계정 이름을 기본값으로 사용한다. 이는 이전 섹션에서 createdb
명령어를 사용할 때 이미 확인했다.
psql
을 실행하면 다음과 같은 메시지가 표시된다:
psql (17.2)
Type "help" for help.
mydb=>
마지막 줄은 다음과 같이 표시될 수도 있다:
mydb=#
이는 데이터베이스 슈퍼유저 권한을 가지고 있다는 의미다. PostgreSQL을 직접 설치했다면 대부분 이 경우에 해당한다. 슈퍼유저는 접근 제어의 제약을 받지 않지만, 이 튜토리얼에서는 중요하지 않다.
psql
실행에 문제가 있다면 이전 섹션을 다시 확인해보자. createdb
와 psql
의 진단 방식은 비슷하므로, createdb
가 정상 작동했다면 psql
도 정상 작동할 것이다.
psql
이 출력하는 마지막 줄은 프롬프트다. 이는 psql
이 명령어를 기다리고 있으며, SQL 쿼리를 입력할 수 있는 작업 공간이 준비되었다는 의미다. 다음 명령어들을 시도해보자:
mydb=> SELECT version();
version
------------------------------------------------------------------------------------------
PostgreSQL 17.2 on x86_64-pc-linux-gnu, compiled by gcc (Debian 4.9.2-10) 4.9.2, 64-bit
(1 row)
mydb=> SELECT current_date;
date
------------
2016-01-07
(1 row)
mydb=> SELECT 2 + 2;
?column?
----------
4
(1 row)
psql
프로그램은 SQL 명령어 외에도 내부 명령어를 제공한다. 이 명령어들은 백슬래시 문자 “\“로 시작한다. 예를 들어, PostgreSQL SQL 명령어의 문법에 대한 도움말을 보려면 다음과 같이 입력한다:
mydb=> \h
psql
을 종료하려면 다음과 같이 입력한다:
mydb=> \q
이렇게 하면 psql
이 종료되고 커맨드 셸로 돌아간다. (더 많은 내부 명령어를 보려면 psql
프롬프트에서 \?
를 입력한다.) psql
의 모든 기능은 psql 문서에서 확인할 수 있다. 이 튜토리얼에서는 이러한 기능을 명시적으로 사용하지 않지만, 필요할 때 직접 사용해보기 바란다.