PostgreSQL 설치하기
번역 : 정재익
원본출처 : http://www.devshed.com/Server_Side/PostgreSQL/Installing/print
여러분들이 PostgreSQL 을 처음 접하게 된다면 제일 먼저 가지는 의문은 어떻게 발음할 것인가 하는 것일 것이다. 이것은 간단하다. 네부분으로 나눠서 "포스트-그레스-큐-엘" ( Post-gress-cue-ell, http://database.sarang.net/download.php/postgresql.mp3?aid=3557&criteria=pgsql&subcrit=columns&actual_criteria= ) 로 읽으면 된다. 그러면 이것을 실제 상업적 목적으로 사용할 만 할 것인가? Bruce Momjian 에 의하면 포스트그레스큐엘은 현재 "가장 앞선 소스가 공개된 관계형 데이터베이스 관리 시스템" 이다. 이말이 의미하는 바를 다음에서 음미해 보자.
. 가장 앞섰다. 이 말은 비록 포스트그레스큐엘의 사용이 증가되고 있지만, 가장 빠르고, 가장 널리 이용된다는 의미는 아니다. 포스트그레스큐엘은 대부분의 기능을 지원하고, SQL 92 에 가장 가깝운 호환성을 제공하는데 있어서 "가장 앞서 있다". 소프트웨어의 수준과는 상관없이, 포스트그레스큐엘은 대단히 능력이 많으며, 최상의 소프트웨어를 유지하는 성숙된 개발자들을 가지고 있다.
. 소스가 공개되어 있다. 이 말은 대단히 짧은 시간 내에 시장에서 비교적 불명확한 용어가 발전되어 형성된 용어이다. 소스가 공개되어 있다는 말은 누구나 아무런 비용을 들이지 않고 소스코드를 사용할 수 있다는 말일까? 그렇지는 않다. 이것은 누구나 프로젝트의 개발팀에 도움을 줄수 있다는 의미이다. 좀더 정확하게 얘기하면 PostgreSQL 은 BSD License 하에서 유지되고 있다. 이것은 개방되기를 원하는 만큼 공개되어 있다.
. 관계형 데이터베이스 관리 시스템. 단순히 생각해서 이것은 관계형 대수의 규칙에 따라서 자료를 관리하도록 해 주는 시스템이다. 자료는 컬럼 (attributes) 와 열 (tuples) 로 구성된 테이블 내에 저장된다. key 를 ㅣ용해서 이들 테이블은 서로 관계를 형성할수 있다. 진정한 RDBMS 는 ACID 를 지원한다.
ACID 라는 것은
A-Automicity. 이것은 transaction 이라는 말로 더 많이 알려져 있다. 이것은 릴련의 질의들이 하나의 질의로서 동작되도록 보장해 주는 것을 말한다. 만약 하나의 질의가 실패하면, 연관된 모든 것들이 취소된다.
C-Consisteny of Preservation. 데이터베이스는 다른 것에 대하여 일정상태를 보장해 줄려면 항상성을 가지고 보존되어져야 한다.
I-Isolation. 트랜젝션이 실행될때 다른 트랜젝션에 의해 절대로 방해를 받아서는 안된다.
D-Durability or permanency. 데이터베이스에 가해진 변화는 명확하게 반영되어야 하며, 뭔가 잘못될 경우에도 보존될 수 있어야 한다.
이것으로 충분하다. 그러나 이것은 여러분들이 소프트웨어를 설치하고 실행하는데 있어서는 아직 미흡할 것이다.
PostgreSQL 설치 절차
많은 사람들이 그들 각자의 운영체계에 어떻게 PostgreSQL 을 설치하느냐고 질문한다. 좀더 상세하게 말하면, 그들은 RedHat 에서 RPM 을, Debian 에서는 deb 파일을, FreeBSD 에서는 port 를 사용하면 되는지를 묻는다. 나는 일반적으로 "소스를 이용하라"고 말한다. 이 글에서는 어떻게 PostgreSQL 을 설치하고 기동시킬 수 있는지를 보여 줄것이다.
내가 운영하는 환경은 FreeBSD 3.4 stable (Pentium 166, 64M RAM) 이다. 나는 이 운영체계를 시스템의 구조, 설정파일, 그리고 최기 파일이 대단히 깔끔하고 직선적이기 때문에 선택했다. FreeBSD 도 BSD License 를 따로고 있고, 4.4 BSD Lite code 의 후손이다. 이것은 Yahoo 와 Hotmail 에서도 운용중인 운영체계이다.
이들 과정은 약간의 Unix/Linux 의 경험을 요구하며, 대부분의 플랫폼에서 상당히 유사하다. 설치 과정은 아주 기초적인 것으로 하겠다. 좀더 고급 과정은 공식 PostgreSQL 문서 (http://www.postgresql.org/idocs/) 와 메일링 리스트 (http://developer.postgresql.org/mailsub.php)를 참조하기 바란다.
공간 할당과 superuser 생성하기
이제 아래를 보도록 하자. 서치전에 먼저 할 것은 설치할 하드디스크 공간이 있는가 하는 거이다. PostgreSQL 도 초기 공간이 적절하게 있어야 한다. 대부분은 설치가 완료된 후에 깨끗이 지워진다:
설치하는 동안에
. ~30 Mb - /usr/src/pgsql (/usr/local/src 를 이용하는 경우도 있다)
. ~30 Mb - /usr/local/pgsql
설치후에는 /usr/local/pgsql 에 ~5 Mb 정도의 공간이 있으면 된다.
실제로 데이터베이스를 저장하기 위해서 필요한 공간은, 그 자료를 일반 파일로 저장시 필요한 공간의 5 배 정도가 있어야 한다. 만약 /usr/local/pgsql/data/base 디렉토리를 보면 여러분들이 생성한 테이블 보다도 더 많은 파일들을 볼수 있을 것이다. PosgreSQL 은 Index, Sequence 등등을 다루기 위해서 많은 파일들을 생성한다.
디스크 공간을 검사하기 위해서 'du -k' 명령어를 사용한다.
다음과 같이 보일 것이다:
euphoria:~$/ df -k
Filesystem 1K-blocks Used Avail Capacity Mounted on
/dev/wd0s1a 63503 20922 37501 36% /
/dev/wd0s1f 63503 1161 57262 2% /tmp
/dev/wd0s1g 1293167 1033407 156307 87% /usr
/dev/wd0s1e 63503 12304 46119 21% /var
procfs 4 4 0 100% /proc
다음으로 flex (fast lexical analyzer) 의 버전이 적절한지 점검한다. (flex 2.5.2, 2.5.4 또는 그 이상 버전) 만약 이 버전이 설치되어 있지 않다면 먼서 설치를 하여야 하며, 필요하다면 여러분들의 시스템 관리자에게 요청을 해야 한다. flex 의 설치는 이 글에서 제외하기로 하겠다. 필요하다면 http://www.leo.org/pub/comp/os/unix/gnu/flex/ 로 부터 다운 로드 받길 바란다. flex 문서는 flex tarball 파일 내에 같이 있다.
flex 버전은 다음과 같이 검사한다 :
euphoria:~/$ flex --version
flex version 2.5.4
gmake 패키지도 필요하다. 이것은 대부분의 Unix 배포판 내에 포함되어 있다. 그러나 만약 이 패키지가 없다면 http://www.gnu.org/software/make/make.html 여기서 정보를 얻을 수 있을 것이다.
이제 몇가지 단계를 root 로서 실행해야 한다. 우리는 여기서 postgres 와 root 사용자 간을 서로 왔다 갔다 하지 않기 위해서 될수 있는 한 많은 과정을 root 로서 실행하는 방법을 선택하겠다.
먼저 root 로서 로그인하라.
euphoria:~$ su -
PostgreSQL 자체는 root 로서 기동시키지 않는다는 것을 명심하기 바란다. 그래서 우리는 반드시 PostgreSQL 사용자를 만들어야만 한다. 일반적으로 우리는 이 사용자를 PostgreSQL Super-user 라고 부른다. 그러나 이러한 이름에도 불구하고 사용자 계정 자체는 특별한 권한이 주어지지 않는다. 일반적으로는 pgsql 또는 postgres 라고 부른다. 하지만 여러분들이 꼭 원한다면 norm 으로 불러도 상관없다.
이 사용자가 다른 기능을 가지지 않도록 하는 것은 대단히 중요하다. 즉 이 사용자는 apache 사용자와 동일하지 않아야 한다는 것을 의미한다. 이것은 나중에 최대 파일 오픈 수 그리고 시스템에서 사용자에게 주어지는 많은 제한으로 인해 머리 아픈 일을 줄일 수 있기 때문이다. 다음은 postgres 사용자 계정을 만드는 과정이다.
FreeBSD 에서의 경우이다 :
euphoria:~# adduser -silent
Enter username [a-z0-9_-]: postgres
Enter full name []: PostgreSQL Postmaster
Enter shell bash csh date no sh [bash]:
Enter home directory (full path) [/home/postgres]:
..
..
..
Add another user? (y/n) [y]: n
euphoria:~#
이제 소스를 풀고, 바이너리 설치하고, 실제로 데이터베이스 저장을 위한 디렉토리를 만들자. (여기서 얼마나 공간이 필요한지에 대해서는 이전에 언급한 글을 참조하기 바란다.)
/usr/src/pgsql 에 소스를 풀고 컴파일을 하자. /usr/local/pgsql 은 실행파일과 데이터가 저장될 공간이다. 여러분들이 다른 파일 시스템에서 다른 데이터베이스를 사용하길 원한다면 좀더 진보된 옵션들이 제공된다. 예를 들어 여러분들이 데이터베이스를 다른 파일시스템에 저장하기를 원한다면, 먼저 PGDATA 환경 변수를 먼저 그 디렉토리를 가르키도록 지정해 주어야 한다. 마지막으로 그 파일들의 소유권을 postgres 계정으로 설정해 주어야 한다. 구문은 다음과 같다:
chown username.groupname [directoryfile]
euphoria:~# mkdir /usr/src/pgsql
euphoria:~# mkdir /usr/local/pgsql
euphoria:~# chown postgres.postgres /usr/local/pgsql/
euphoria:~# chown postgres.postgres /usr/src/pgsql
root 계정으로서 설치과정을 끝까지 실행하고, 로그 아웃한다.
euphoria:~# logout
euphoria:~$
postgres 계정으로 로그인하라.
euphoria:~$ su - postgres
이제까지 많은 준비작업을 해 왔다. 그러나 이제 즐길 시간이다. 만약 소스로 부터 설치했다면 나머지 과정들은 비교적 직선적이다.
Source 로 부터 설치하기
ftp://ftp.postgresql.org 로 부터 소스를 다운로드 받는다. (역자주: 한국에서는 미러링 사이트인 ftp://linux.sarang.net 으로 부터 다운로드 받을수 있다) 다운로드 받을 파일은 postgresql-VERSION.tar.gz 파일을 다운로드 받도록 한다 (여기서 VERSION 은 7.1.2 7.1.3 등으로 명시되어 있다) 다운로드 방식은 Netscape, ncftp, wget 등 여러분들이 좋아하는 방식으로 하면 된다. 파일 크기는 약 7-8 mb 정도이다.
다운로딩 받은 파일을 /usr/src/pgsl 에 저장한다.
일단 이것이 되고 나면 이제 설치 준비는 된것이다. 압축 파일을 푸는 방법은 여러분들이 유닉스를 사용하는 한은 익숙해져야 할 과정들이다.
euphoria:~$ cd /usr/src/pgsql
euphoria:/usr/src/pgsql$ tar zxf postgresql-7.0.tar.gz
euphoria:/usr/src/pgsql$ ls
postgresql-7.0 postgresql-7.0.tar.gz
euphoria:/usr/src/pgsql$
하드디스크 드라이브를 보도록 하자. 그곳에는 postgresql-VERSION 형식을 가지는 디렉토리가 생성되어 있을 것이다. (이경우는 postgresql-7.0 이라는 디렉토리가 생성되어 있을 것이다) 만약 압축을 푸는 과정을 좀더 상세하게 보길 원한다면 tar xvfz postgresql-VERSION.tar.gz 이라는 명령어를 이용하길 바란다.
PostgreSQL 에는 설정할수 있는 옵션이 제법 몇가지 있다. 모든 설명은 문서에서 확인할 수 있으며, 우리는 여기서는 단순하게 설치를 시행하도록 하겠다 :
euphoria:/usr/src/pgsql$ cd postgresql-7.0/src/
euphoria:/usr/src/pgsql/postgresql-7.0/src$ ./configure
설정과정은 나의 컴퓨터에서는 약 1분 가량 소요되었다. 만약 문제점이 발생한다면 이것은 RTFM (read the fatastic manual) 에게 말해야 하며 (쩝... 표현이 너무 번역적이로군요. 문서를 참조하라는 말입니다), 그래서 문서를같이 설치하는 것은 좋은 생각이다. 문서는 간단하게 설치가 가능하다.
euphoria:/usr/src/pgsql/postgresql-7.0/src$ cd /usr/src/pgsql/postgresql-7.0/doc/
euphoria:/usr/src/pgsql/postgresql-7.0/doc$ gmake install
진실의 순간 : 컴파일링
이제 프로그램을 컴파일 할 순서이다. 이 과정은 많은 사람들에게 공포감을 주는 과정이지만, 정말로 아무것도 아니다. 먼저 여러분들은 src 디렉토리 내에 있어야 한다.
euphoria:/usr/src/pgsql/postgresql-7.0/src$
잊 gmake all 이라는 명령어로 시작한다.
euphoria:/usr/src/pgsql/postgresql-7.0/src$ gmake all
이 과정을 실행하고 나면 많은 코드 들이 여러분들의 화면을 어지럽힐 것이다. 이것은 gmake 가 PostgreSQL 을 컴파일하기 위해서 많은 의존성들을 생성하고 있는 과정이다. 나의 Pentium 166, 64 mb memory 에서는 약 7 분정도가 소요되었다. 이것은 여러분들이 얻는 이 소프트웨어에 비하면 그렇게 많은 시간은 아니라고 생각한다. 완료되고 나면 다음과 같은 메시지를 보게 될 것이다.
All of PostgreSQL is successfully made. Ready to install.
만약 이것이 보이지 않는다면 gmake clean 을 실행하고 다시 시도하기 바란다. 가능한 에러는 gmake 나 flex 같은 다른 의존성이 걸린 소프트웨어가 제대로 된 버전이 설치되어 있지 않을 가능성이 크다. 만약 이러한 경우라면 이런 프로그램이 제대로 설치되어 있는지 확읺해 보기 바란다.
이제 인스톨을 할 차례이다. 소프트웨어를 인스톨하는 과정은 대단히 쉽다. 단순히 gmake 명령어에 install 이라는 옵션만 주면 된다.
euphoria:/usr/src/pgsql/postgresql-7.0/src$ gmake install
이 명령어는 소스 하부 디렉토리에서 필요한 실행 파일들을 모두 여러분 서버의 적절한 위치로 복사해 준다. 이제 PostgreSQL 은 설치되었다. 그러나 여러분들의 서버는 아직도 필요한 라이브러리들이 어디에 설치되어 있는지를 알지 못한다.
대부분의 시스템들은 다음 예제에 따라 하면 된다. 그러나 그렇지 않은 것도 있으므로, 여러분들의 운영체계 문서를 참조해서 수정해 주기 바란다. 다음 단계는 운영체계의 설정파일을 변경해야 하므로 root 계정으로 해야 한다.
여러분들이 좋아하는 텍스트 편집기를 이용해서 (대부분 vi 겠죠?), /etc/ld.so.conf 파일에 다음 한 행을 추가한다.
/usr/local/pgsql/lib
이제 파일을 저장한다. 이제 시스템에 이 파일이 적용되도록 만들어 주어야 한다. 이런 과정이 ldconfig 를 실행하는 것이다. 시스템을 다시 reboot 할 필요는 전혀 없다. 그러나 일부 유닉스 계열 운영체계에서는 이 ldconfig 를 실행할때 아주 신중해야 하는 경우도 있다. 부작용이 나타나는 경우도 많기 때문이다.
예를 들면 리눅스에서는
linuxbox:/usr/src/pgsql/postgresql-7.0/src# ldconfig
FreeBSD 에서는 (그리고 대부분의 유닉스 계열 운영체계에서)
euphoria:/usr/src/pgsql/postgresql-7.0/src# ldconfig -m /etc/ld.so.conf
여기까지 했으면 이제 root 계정은 logout 하고 다시 PostgreSQL 계정으로 로그인 한다.
사용자 및 사용자 데이터베이스의 생성
여기까지 하고 나면 이제 시스템은 PostgreSQL 에 대해서 알게 된다. 그러면 이제 해야 할 것은 PostgreSQL 사용자를 생성하고, 사용자 데이터베이스를 생성하는 과정이다. postmaster 라는 것은 데이터비에스 접속을 관리하고, 데이터가 어디에 저장되어 있는 지를 관리하는 서버측이 프로세스이다. 이것은 데이터베이스 서버 프로세스를 관리하는 프로세스들의 모 프로세스이다. 그 아래에 여러개의 데이터베이스를 운용할수도 있으며, 하나의 서버에서 여러개의 postmaster 를 기동시킬 수도 있다. 대부분은 설정시에 사용자 또는 프로젝트 하나당 하나의 데이터베이스 만을 운영하는 경우가 많으며, 그리고 사용자는 테이블을 하나의 데이터베이스 내에 저장하게 된다.
여러분들의 기본적인 로그인 파일 내에 적절한 경로를 추가시켜 줌으로서 많은 머리아픈 상황들을 피할수 있다. 대부분의 새로운 리눅스 사용자들과 일부 FreeBSD 사용자들은 (나를 포함한) BASH 를 기본 shell 로서 사용한다. 그래서 아래는 BASH 에서의 설정법을 설명하겠다. 단순히 다음 행들을 .bashrc 나 .bash_login 또는 .bash_profile 파일 내에 추가해 주기만 하면 된다.
PATH=$PATH:/usr/local/pgsql/bin
# this tells the shell where to look for applications
MANPATH=$MANPATH:/usr/local/pgsql/man
# this tells the shell where to look for those handy documents
PGLIB=/usr/local/pgsql/lib
# this tells the shell and Postgres where to look for shared libs
PGDATA=/usr/local/pgsql/data
# this is the default directory where data is stored
export PATH MANPATH PGLIB PGDATA
# this tells the shell to pay attention to all the changes you have made.
Shell 이 여러분들이 설정한 변화들을 알수 있도록 변수들을 읽어 들이는 방법은 두가지가 있다: 하나는 로그아웃 한 후에 다시 로그인하는 방법이고 하나는 다음과 같이 하는 것이다.
euphoria:~$ source .bashrc
경고
초보자들은 다음 단계를 빠뜨리는 수가 (또는 간과하는 수가) 있다. 이 명령어는 반드시 필요하다:
euphoria:~$ initdb
이제 PostgreSQL 을 시작할 시간이다. 이 과정은 정상적으로 시스템이 기동시에 수행되어져야 한다. 그러나 테스트 목적으로 여러분들은 명령행에서 이것을 바로 실행할 수 있다.
euphoria:~$ postmaster -i &
주의
위의 postmaster 를 기동하는 과정은 PostgreSQL 7.1.x 부터는 pg_ctl 이라는 script 를 이용하여 기동하도록 변경되었다. 만약 현재 7.1.x 버전을 이용중이라면 다음과 같이 명령을 준다.
euphoria:~$ pg_ctl start
여기서 -i 옵션은 인터넷을 통한 디비 서버로의 접속을 허용한다는 의미이다. 어느 사용자가 (또는 어떻게) 디비서버로 접속할수 있는 가 하는 것은 /usr/local/pgsql/data/pg_hba.conf 파일 내에 명시해 줄수 있다. Postmaster 는 이 파일이 변경되었을때 다시 재 기동될 필요는 없다. 예를 들면 사용자가 로컬호스트에 있는 모든 파일에는 마음대로 접근할수 있도록 허용해 주고 싶다면, 다음 한 행을 포함시킨다.
host all 127.0.0.1 255.255.255.255 trust
만약 여러분들이 로컬 서브넷에 대해서 패스워드를 적어서 접근할 수 있도록 허용해 주고자 한다면, 예를 들어서 192.168.0.0/24, 다음과 유사한 행을 추가해 주도록 한다:
host all 192.168.0.0 255.255.255.0 password
이제 마지막으로 postgres 데이터베이스 사용자 생성법에 대해서 알아 보자. 이 과정은 여러분들이 생성하기를 원하는 사용자 수 만큼 반복하면 된다. 몇가지 단순한 질문에 대해서 답변하기만 하면 된다.
Enter name of user to add ---> bob
Enter user's postgres ID -> 65555
Is user "bob" allowed to create databases (y/n) n
Is user "bob" a superuser? (y/n) n
createuser: bob was successfully added
Shall I create a database for "bob" (y/n) y
bob 라는 계정이 유닉스 상의 사용자 계정일 필요는 전혀 없으며, 데이터베이스 사용자는 시스템의 사용자 계정과는 전혀 별개로 운영된다. 위의 경우는 사용자 userid 를 65536 (유닉스에서 최대 사용자 userid 는 2^16 라는 것을 명심하라) 이상으로 주었다는 것을 주의해 보기 바란다 (물론 꼭 이렇게 줄 필요는 없으며 각각의 사용자에 대해서 unique 한 userid 만 부여 되면 된다.
PostgreSQL 사용자에 대해서 여러분들은 그 사용자들이 다른 사용자나 또는 데이터베이스를 생성할 수 있는 권한을 줄것인지 여부를 결정해 줄수 있다.
euphoria:~$ createuser postgres
Enter user's postgres ID or RETURN to use Unix user ID: 1005 ->
Is user "postgres" allowed to create databases (y/n) y
Is user "postgres" a superuser? (y/n) y
createuser: postgres was successfully added
마지막으로 우리는 PostgreSQL database 로 접속하기 위해서 PostgreSQL interactive monitor 인 psql 이라는 명령어를 통해서 접속할 수 있다.
euphoria:~$ psql
Welcome to the POSTGRESQL interactive sql monitor:
Please read the file COPYRIGHT for copyright terms of POSTGRESQL
[PostgreSQL 7.0 on i386-unknown-freebsd3.4, compiled by cc ]
type \? for help on slash commands
type \q to quit
type \g or terminate with semicolon to execute query
You are currently connected to the database: postgres
postgres=>
이제 PostgreSQL 과 SQL 을 즐기면 된다!
|