소개
이 실습에서는 LabEx VM에 PostgreSQL을 설치하고 초기 설정을 수행합니다. PostgreSQL을 성공적으로 실행하고 기본적인 기능을 확인하는 것이 목표입니다.
먼저 패키지 목록을 업데이트하고 PostgreSQL 서버와 postgresql-contrib 패키지를 설치합니다. 설치 후에는 pg_isready 명령어를 사용하여 PostgreSQL 서비스가 실행 중이며 연결을 수락하고 있는지 확인합니다. 마지막으로 기본 데이터베이스를 살펴보고 서버 상태와 기본 설정을 점검합니다.
PostgreSQL 설치 및 확인
이 단계에서는 LabEx VM에 PostgreSQL을 설치하고 설치가 성공적으로 완료되었는지 확인합니다. PostgreSQL은 강력한 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다.
먼저 업그레이드 및 새로운 설치를 위해 패키지 목록을 업데이트합니다. LabEx VM의 바탕 화면에 있는 터미널 아이콘을 클릭하여 터미널을 엽니다.
다음 명령어를 실행하세요:
sudo apt update
이 명령어는 사용 가능한 패키지와 버전 목록을 업데이트하지만, 패키지를 직접 설치하거나 업그레이드하지는 않습니다. 패키지 목록이 업데이트되고 있다는 출력을 확인할 수 있습니다.
다음으로 PostgreSQL 서버와 postgresql-contrib 패키지를 설치합니다. postgresql-contrib 패키지는 유용한 추가 유틸리티와 기능을 제공합니다.
다음 명령어를 실행하세요:
sudo apt install postgresql postgresql-contrib -y

-y 플래그는 설치 과정에서 나타나는 모든 질문에 자동으로 "yes"라고 응답합니다. 이 명령어를 통해 PostgreSQL과 관련 패키지가 다운로드 및 설치됩니다. 패키지가 설치되는 동안 많은 양의 출력 메시지가 표시됩니다.
설치가 완료되면 PostgreSQL이 실행 중인지 확인해야 합니다. PostgreSQL은 설치 후 자동으로 시작되어야 합니다.
PostgreSQL 서비스 상태를 확인하려면 다음 명령어를 실행하세요:
sudo service postgresql status
또한 pg_isready 명령어를 사용하여 PostgreSQL 서버가 실행 중이며 연결을 수락하고 있는지 확인할 수 있습니다.
다음 명령어를 실행하세요:
pg_isready
PostgreSQL이 정상적으로 실행 중이라면 다음과 같은 출력이 나타납니다:
/var/run/postgresql:5432 - accepting connections
PostgreSQL이 실행 중이지 않다면 다음과 같은 오류 메시지가 나타날 수 있습니다:
/var/run/postgresql:5432 - no response
"no response" 오류가 발생하면 PostgreSQL 서비스를 다시 시작해 보세요. 다음 명령어를 시도할 수 있습니다:
sudo service postgresql restart
그런 다음 pg_isready를 다시 실행하여 상태를 확인합니다.

pg_isready가 "accepting connections"를 표시한다면, PostgreSQL이 성공적으로 설치되어 실행 중임을 의미합니다.
PostgreSQL 셸(psql) 접속
이 단계에서는 PostgreSQL 데이터베이스와 상호 작용하기 위한 명령줄 도구인 psql 셸에 접속합니다. psql을 사용하면 SQL 쿼리를 실행하고, 데이터베이스를 관리하며, 기타 관리 작업을 수행할 수 있습니다.
기본적으로 PostgreSQL은 PostgreSQL 슈퍼유저에 해당하는 postgres라는 유닉스 사용자를 생성합니다. psql 셸에 접속하려면 postgres 사용자로 전환하거나 sudo를 사용하여 postgres 사용자 권한으로 명령어를 실행하면 됩니다.
먼저 postgres 사용자로 전환해 보겠습니다. 다음 명령어를 실행하세요:
sudo -i -u postgres
이 명령어는 현재 사용자를 postgres로 전환합니다. 프롬프트가 새로운 사용자에 맞게 변경된 것을 확인할 수 있습니다.
이제 postgres 사용자로 로그인했으므로 psql 셸에 접속할 수 있습니다. 다음 명령어를 실행하세요:
psql
이 명령어를 실행하면 psql 셸이 열립니다. 다음과 같은 프롬프트가 나타나야 합니다:
postgres=#
이는 PostgreSQL 서버에 연결되었으며 이제 SQL 명령어를 실행할 수 있음을 의미합니다.
psql 셸을 종료하려면 \q를 입력하고 Enter 키를 누르세요:
postgres=## \q
이렇게 하면 postgres 사용자의 셸로 돌아갑니다.
postgres 사용자의 셸을 종료하고 원래 사용자(labex)로 돌아가려면 exit를 입력하고 Enter 키를 누르세요:
exit
또는 sudo를 사용하여 labex 사용자 상태에서 직접 psql 셸에 접속할 수도 있습니다. 이 방법을 사용하면 사용자를 전환할 필요가 없습니다.

다음 명령어를 실행하세요:
sudo -u postgres psql
이 명령어는 postgres 사용자로 psql 명령어를 실행합니다. 즉시 psql 셸에 연결됩니다.
다시 psql 셸을 종료하려면 \q를 입력하고 Enter 키를 누르세요:
postgres=## \q
이렇게 하면 labex 사용자의 셸로 돌아갑니다.
요약하자면, psql 셸에 접속하는 두 가지 방법(사용자 전환 및 sudo 사용)을 배웠습니다. 두 방법 모두 같은 결과를 얻을 수 있지만, 경우에 따라 sudo를 사용하는 것이 더 편리할 수 있습니다.
기본 데이터베이스 탐색
이 단계에서는 PostgreSQL 설치 시 생성되는 기본 데이터베이스를 살펴봅니다. 이 데이터베이스들은 PostgreSQL 서버에 대한 필수적인 기능과 정보를 제공합니다.
먼저 postgres 사용자로 psql 셸에 접속합니다. 다음 명령어를 사용할 수 있습니다:
sudo -u postgres psql
psql 셸에 접속한 후 \l 명령어를 사용하여 사용 가능한 데이터베이스 목록을 확인할 수 있습니다. 다음 명령어를 실행하세요:
postgres=## \l
이 명령어는 데이터베이스 목록과 함께 소유자, 인코딩, 접근 권한 정보를 표시합니다. 최소한 세 개의 데이터베이스가 보여야 합니다:
postgres:psql셸에 처음 접속할 때 연결되는 기본 데이터베이스입니다. 주로 관리 작업에 사용됩니다.template0: 새로운 데이터베이스를 생성하기 위한 템플릿으로 사용됩니다. 이 데이터베이스는 수정하지 않는 것이 좋습니다.template1: 새로운 데이터베이스를 생성하기 위한 또 다른 템플릿 데이터베이스입니다. 표준 템플릿이며 사용자 정의가 가능합니다.

특정 데이터베이스에 연결하려면 \c 명령어 뒤에 데이터베이스 이름을 입력합니다. 예를 들어 postgres 데이터베이스에 연결하려면 다음 명령어를 실행하세요:
postgres=## \c postgres
이제 postgres 데이터베이스에 연결되었다는 메시지가 나타납니다:
You are now connected to database "postgres" as user "postgres".
postgres 데이터베이스에 연결되었으므로 내용을 살펴볼 수 있습니다. 예를 들어 \dt 명령어를 사용하여 데이터베이스 내의 테이블 목록을 확인할 수 있습니다:
postgres=## \dt
이 명령어는 현재 데이터베이스의 테이블 목록을 표시합니다. postgres 데이터베이스는 주로 관리 작업용이므로 사용자 정의 테이블이 없을 수도 있습니다.
또한 \conninfo 명령어를 사용하여 현재 데이터베이스 연결 정보를 확인할 수 있습니다:
postgres=## \conninfo
이 명령어는 데이터베이스 이름, 사용자, 호스트, 포트 등의 정보를 표시합니다.
현재 데이터베이스 연결을 끊고 기본 연결로 돌아가려면 데이터베이스 이름 없이 \c 명령어를 사용하세요:
postgres=## \c
이렇게 하면 기본 데이터베이스(일반적으로 postgres 데이터베이스)로 다시 연결됩니다.

마지막으로 \q를 입력하고 Enter 키를 눌러 psql 셸을 종료하세요:
postgres=## \q
이렇게 하면 labex 사용자의 셸로 돌아갑니다.
이 단계에서는 사용 가능한 데이터베이스 목록을 확인하고, 특정 데이터베이스에 연결하며, psql 셸을 사용하여 내용을 탐색하는 방법을 배웠습니다.
서버 상태 및 기본 설정 확인
이 단계에서는 PostgreSQL 서버 상태를 확인하고 몇 가지 기본 설정 항목을 살펴봅니다.
앞서 언급했듯이 LabEx VM은 Docker 컨테이너에서 실행되므로 systemctl 명령어가 예상대로 작동하지 않을 수 있습니다. 따라서 서버 상태 확인을 위해 주로 pg_isready와 psql을 사용합니다.
먼저 PostgreSQL 서버가 실행 중인지 다시 확인합니다. 다음 명령어를 실행하세요:
pg_isready
PostgreSQL이 실행 중이라면 다음과 같은 출력이 나타납니다:
/var/run/postgresql:5432 - accepting connections
다음으로 psql 셸을 사용하여 몇 가지 기본 설정을 확인해 보겠습니다. postgres 사용자로 psql 셸에 접속하세요:
sudo -u postgres psql
psql 셸에 접속한 후 다음 SQL 쿼리를 사용하여 PostgreSQL 버전을 확인할 수 있습니다:
SELECT version();
psql 셸에서 이 쿼리를 실행하세요. 다음과 유사한 출력이 나타납니다:
version
----------------------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.17 (Ubuntu 14.17-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
(1 row)
이는 서버에 설치된 PostgreSQL 버전을 보여줍니다.
현재 데이터베이스 사용자도 확인할 수 있습니다:
SELECT user;
출력 결과는 다음과 같습니다:
user
----------
postgres
(1 row)
현재 연결된 데이터베이스 이름을 확인하려면 다음을 사용하세요:
SELECT current_database();
출력 결과는 다음과 같습니다:
current_database
------------------
postgres
(1 row)
설정 항목을 보려면 SHOW 명령어를 사용할 수 있습니다. 예를 들어 서버가 연결을 수락할 IP 주소를 지정하는 listen_addresses 설정을 확인하려면 다음 명령어를 실행하세요:
SHOW listen_addresses;
출력 결과는 다음과 같을 것입니다:
listen_addresses
--------------------
localhost
(1 row)
localhost는 서버가 로컬 호스트에서 수신 대기 중임을 나타냅니다.
확인할 또 다른 유용한 설정은 서버가 연결을 수락하는 포트 번호를 지정하는 port입니다:
SHOW port;
출력 결과는 다음과 같습니다:
port
------
5432
(1 row)
이는 서버가 PostgreSQL 기본 포트인 5432에서 수신 대기 중임을 나타냅니다.

마지막으로 \q를 입력하고 Enter 키를 눌러 psql 셸을 종료하세요:
postgres=## \q
이렇게 하면 labex 사용자의 셸로 돌아갑니다.
이 단계에서는 pg_isready와 psql 셸을 사용하여 PostgreSQL 서버 상태를 확인하고 몇 가지 기본 설정을 살펴보는 방법을 배웠습니다.
요약
이 실습에서는 apt update 및 apt install postgresql postgresql-contrib -y 명령어를 사용하여 LabEx VM에 PostgreSQL RDBMS를 설치했습니다. -y 플래그는 설치 중 나타나는 질문에 자동으로 응답하기 위해 사용되었습니다.
설치 후에는 PostgreSQL 서비스가 실행 중이며 연결을 수락하고 있는지 확인했습니다. LabEx VM이 Docker 컨테이너에서 실행되는 환경 특성상, systemctl status postgresql 대신 pg_isready 명령어를 사용하여 서버 상태를 확인했습니다. 서버가 정상적으로 실행 중일 때 pg_isready의 예상 출력은 /var/run/postgresql:5432 - accepting connections입니다.


