소개
관계형 데이터베이스 관리 시스템은 많은 웹 사이트와 애플리케이션의 핵심 구성 요소입니다. 이들은 정보를 저장, 구성 및 액세스하는 구조화된 방법을 제공합니다.
PostgreSQL 또는 Postgres는 관계형 데이터베이스 관리 시스템으로 SQL 질의 언어의 구현을 제공합니다. 이는 표준 준수를 하며 신뢰할 수 있는 트랜잭션과 읽기 잠금 없는 동시성과 같은 많은 고급 기능을 갖추고 있습니다.
이 안내서는 Ubuntu 22.04 서버에 PostgreSQL을 설치하는 방법을 보여줍니다. 또한 일반적인 데이터베이스 관리에 대한 지침도 제공합니다.
필수 조건
이 튜토리얼을 따라하기 위해 Ubuntu 22.04 서버 하나가 필요합니다. 이 서버는 당사의 Ubuntu 22.04용 초기 서버 설정 가이드를 따라 구성되어야 합니다. 이 필수 튜토리얼을 완료한 후에는 관리자 권한이 있는 비-루트 사용자와 기본 방화벽이 있는 서버를 갖게 됩니다.
단계 1 — PostgreSQL 설치
우분투의 기본 저장소에는 PostgreSQL 패키지가 포함되어 있으므로 apt
패키지 시스템을 사용하여 이를 설치할 수 있습니다.
최근에 이를 수행하지 않았다면, 서버의 로컬 패키지 인덱스를 새로 고칩니다:
그런 다음, 몇 가지 추가 유틸리티와 기능을 추가하는 -contrib
패키지와 함께 PostgreSQL 패키지를 설치합니다:
systemctl start
명령을 사용하여 서버가 실행 중인지 확인합니다:
이제 소프트웨어가 설치되고 실행 중이므로 작동 방식과 다른 관계형 데이터베이스 관리 시스템과의 차이점을 살펴볼 수 있습니다.
단계 2 — PostgreSQL Roles 및 데이터베이스 사용
기본적으로, Postgres는 인증 및 권한 부여를 처리하기 위해 롤이라는 개념을 사용합니다. 이것들은 일부 측면에서 일반적인 Unix 스타일의 계정과 유사하지만, Postgres는 사용자와 그룹을 구분하지 않으며 대신 더 유연한 용어 “롤”을 선호합니다.
설치 후에는 PostgreSQL이 피어 인증을 사용하도록 설정되어 있으며, 이는 PostgreSQL 역할을 해당 Unix/Linux 시스템 계정과 연관시킵니다. PostgreSQL 내에서 역할이 존재하면, 해당 이름과 동일한 Unix/Linux 사용자 이름으로 그 역할로 로그인할 수 있습니다.
설치 절차는 기본 PostgreSQL 역할과 관련된 postgres 사용자 계정을 생성했습니다. PostgreSQL을 사용하려면 해당 계정으로 로그인할 수 있습니다.
이 계정을 사용하여 PostgreSQL에 액세스하는 몇 가지 방법이 있습니다.
postgres 계정으로 전환하기
서버에서 다음을 입력하여 postgres 계정으로 전환합니다:
그런 다음 다음을 입력하여 PostgreSQL 프롬프트에 즉시 액세스할 수 있습니다:
그런 다음 필요에 따라 데이터베이스 관리 시스템과 상호 작용할 수 있습니다.
다음을 입력하여 PostgreSQL 프롬프트를 종료합니다:
이렇게 하면 postgres Linux 사용자의 명령 프롬프트로 돌아갑니다.
계정 전환 없이 PostgreSQL 프롬프트에 액세스하기
당신은 sudo
를 사용하여 직접 postgres 계정으로 원하는 명령을 실행할 수도 있습니다.
예를 들어, 마지막 예제에서는 먼저 postgres 사용자로 전환한 다음 psql
을 실행하여 Postgres 프롬프트를 열라고 지시했습니다. 이를 한 단계로 줄여서 psql
을 postgres 사용자로서 sudo
로 실행할 수 있습니다. 다음과 같이:
이렇게 하면 중간에 bash
셸 없이 바로 Postgres에 로그인됩니다.
다시 한 번 강조하자면, 상호 작용하는 Postgres 세션에서 나가려면 다음을 입력하면 됩니다:
많은 사용 사례에서 둘 이상의 Postgres 역할이 필요합니다. 이를 구성하는 방법에 대해 자세히 알아보세요.
단계 3 — 새 역할 만들기
현재 데이터베이스에는 postgres 역할이 구성되어 있습니다. createuser
명령을 사용하여 새 역할을 명령 줄에서 만들 수 있습니다. --interactive
플래그를 사용하면 새 역할의 이름을 묻고 슈퍼 사용자 권한을 가질지 여부를 물어봅니다.
만약 postgres 계정으로 로그인한 상태라면, 다음과 같이 새 사용자를 만들 수 있습니다:
대신, 보통의 계정에서 전환하지 않고 각 명령에 sudo
를 사용하고 싶다면, 다음과 같이 입력하세요:
스크립트는 여러 선택지로 사용자에게 프롬프트를 제공하고, 답변에 따라 귀하의 사양에 맞는 사용자를 생성하는 올바른 PostgreSQL 명령을 실행합니다.
OutputEnter name of role to add: sammy
Shall the new role be a superuser? (y/n) y
일부 추가 플래그를 전달하여 더 많은 제어를 얻을 수 있습니다. createuser
명령의 man
페이지를 확인하여 옵션을 살펴보세요:
PostgreSQL 설치에 새 사용자가 추가되었지만 아직 데이터베이스를 추가하지 않았습니다. 다음 섹션에서는 이 프로세스를 설명합니다.
단계 4 — 새 데이터베이스 생성하기
PostgreSQL 인증 시스템이 기본적으로 하는 또 다른 가정은 로그인에 사용되는 모든 역할에 대해 해당 역할이 기본적으로 액세스할 수 있는 동일한 이름의 데이터베이스가 있다는 것입니다.
이는 마지막 섹션에서 생성한 사용자가 sammy라고 가정하면 해당 역할은 기본적으로 “sammy”라고도 하는 데이터베이스에 연결을 시도할 것입니다. 적절한 데이터베이스를 createdb
명령으로 생성할 수 있습니다.
만약 postgres 계정으로 로그인한 경우에는 다음과 같이 입력할 수 있습니다:
대신에 일반 계정에서 전환하지 않고 각 명령에 sudo
를 사용하고자 하는 경우에는 다음과 같이 입력합니다:
이 유연성은 필요에 따라 여러 가지 방법으로 데이터베이스를 생성할 수 있도록 합니다.
단계 5 — 새 역할로 Postgres 프롬프트 열기
동료 인증으로 로그인하려면 Postgres 역할 및 데이터베이스와 동일한 이름을 가진 Linux 사용자가 필요합니다.
일치하는 Linux 사용자가 없는 경우 adduser
명령을 사용하여 하나를 만들 수 있습니다. 이 작업은 sudo
권한을 가진 비-root 계정에서 수행해야 합니다(postgres 사용자로 로그인하지 않은 경우):
새 계정이 준비되면 다음을 입력하여 데이터베이스에 연결하거나 전환할 수 있습니다:
또는 다음을 인라인으로 수행할 수도 있습니다:
이 명령은 모든 구성 요소가 올바르게 구성되어 있다고 가정하고 자동으로 로그인합니다.
사용자가 다른 데이터베이스에 연결하도록 원하는 경우 다음과 같이 데이터베이스를 지정하여 수행할 수 있습니다:
로그인한 후 현재 연결 정보를 확인할 수 있습니다. 다음을 입력하십시오:
OutputYou are connected to database "sammy" as user "sammy" via socket in "/var/run/postgresql" at port "5432".
이는 기본이 아닌 데이터베이스에 연결하거나 기본이 아닌 사용자로 연결하는 경우 유용합니다.
단계 6 — 테이블 생성 및 삭제
이제 PostgreSQL 데이터베이스 시스템에 연결하는 방법을 알았으니, 몇 가지 기본적인 Postgres 관리 작업을 배울 수 있습니다.
테이블을 생성하는 기본 구문은 다음과 같습니다:
CREATE TABLE table_name (
column_name1 col_type (field_length) column_constraints,
column_name2 col_type (field_length),
column_name3 col_type (field_length)
);
이 명령은 테이블에 이름을 지정하고, 열을 정의하며 열 유형과 필드 데이터의 최대 길이를 정의합니다. 선택적으로 각 열에 제약 조건을 추가할 수 있습니다.
SQL에서 테이블을 생성 및 관리하는 방법에 대한 가이드를 따라 자세히 알아볼 수 있습니다.SQL에서 테이블 생성 및 관리하는 방법을 따르면 테이블 생성에 대해 더 자세히 알 수 있습니다.
시연을 위해 다음 테이블을 생성합니다:
이 명령은 놀이터 장비를 인벤토리하는 테이블을 생성합니다. 테이블의 첫 번째 열은 자동으로 증가하는 정수인 serial
유형의 장비 ID 번호를 보유합니다. 이 열은 또한 PRIMARY KEY
제약 조건을 가지며 이는 그 안의 값이 고유하고 null이 아니어야 함을 의미합니다.
다음 두 줄은 각각 장비의 type
및 color
에 대한 열을 생성합니다. 둘 다 null이 될 수 없습니다. 이들 이후의 줄은 값이 여덟 가지 가능한 값 중 하나여야 하는 location
열을 생성합니다. 마지막 줄은 장비를 설치한 날짜를 기록하는 date
열을 생성합니다.
두 열(equip_id
및 install_date
) 중 두 개에 대해 명령에서 필드 길이를 지정하지 않습니다. 이유는 일부 데이터 유형이 길이를 설정하지 않아도 되기 때문입니다. 왜냐하면 길이나 형식이 함축적으로 암시되기 때문입니다.
새 테이블을 검사하려면 다음을 입력하십시오:
Output List of relations
Schema | Name | Type | Owner
--------+-------------------------+----------+-------
public | playground | table | sammy
public | playground_equip_id_seq | sequence | sammy
(2 rows)
귀하의 놀이터 테이블이 여기 있지만, playground_equip_id_seq
라는 것도 있습니다. 이것은 sequence
유형입니다. 이것은 귀하의 equip_id
열에 제공한 serial
유형의 표현입니다. 이는 순서열의 다음 숫자를 추적하며 이 유형의 열에 대해 자동으로 생성됩니다.
시퀀스 없이 테이블만 보려면 다음을 입력할 수 있습니다:
Output List of relations
Schema | Name | Type | Owner
--------+------------+-------+-------
public | playground | table | sammy
(1 row)
테이블이 준비되었으니 데이터 관리를 연습해 봅시다.
단계 7 — 테이블에 데이터 추가, 조회 및 삭제
이제 테이블이 있으므로 일부 데이터를 삽입할 수 있습니다. 예를 들어, 슬라이드와 그네를 추가하려면 추가하려는 테이블을 호출하고 열을 지정한 다음 각 열에 데이터를 제공하여 다음과 같이 하십시오:
데이터를 입력할 때 몇 가지 일반적인 문제를 피하기 위해 주의를 기울여야 합니다. 우선, 열 이름을 따옴표로 감싸지 않으나 입력하는 열 값에는 따옴표가 필요합니다.
기억해야 할 또 다른 사항은 equip_id
열에 값이 입력되지 않는다는 것입니다. 이는 테이블에 새로운 행을 추가할 때마다 자동으로 생성되기 때문입니다.
추가한 정보를 검색하려면 다음을 입력하십시오:
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
1 | slide | blue | south | 2017-04-28
2 | swing | yellow | northwest | 2018-08-16
(2 rows)
equip_id
가 성공적으로 채워졌으며 모든 다른 데이터가 올바르게 정리되었음을 알 수 있습니다.
놀이터의 슬라이드가 망가져서 제거해야 할 경우 테이블에서 해당 행을 제거할 수도 있습니다. 테이블에서 행을 제거하려면 다음을 입력하세요:
테이블을 다시 조회하세요:
Output equip_id | type | color | location | install_date
----------+-------+--------+-----------+--------------
2 | swing | yellow | northwest | 2018-08-16
(1 row)
이제 slide
행이 더 이상 테이블의 일부가 아님을 알 수 있습니다.
단계 8 — 테이블에서 열 추가 및 삭제하기
테이블을 생성한 후에는 열을 추가하거나 제거하여 수정할 수 있습니다. 각 장비의 마지막 정비 방문을 나타내는 열을 추가하려면 다음을 입력하세요:
테이블 정보를 다시 확인하세요. 새로운 열이 추가되었지만 데이터는 입력되지 않았습니다:
Output equip_id | type | color | location | install_date | last_maint
----------+-------+--------+-----------+--------------+------------
2 | swing | yellow | northwest | 2018-08-16 |
(1 row)
작업 습간이 유지보수 이력을 별도의 도구로 추적한다는 것을 알게 되면 다음을 입력하여 열을 삭제할 수 있습니다:
이는 last_maint
열과 해당 값들을 삭제하지만 다른 모든 데이터는 그대로 유지됩니다.
단계 9 — 테이블의 데이터 업데이트
지금까지 테이블에 레코드를 추가하고 삭제하는 방법을 배웠지만, 기존 항목을 수정하는 방법은 아직 다루지 않았습니다.
기존 항목의 값을 업데이트할 수 있습니다. 원하는 레코드를 조회하여 열을 원하는 값으로 설정하면 됩니다. swing
레코드를 조회하여 (이는 테이블에서 모든 스윙과 일치합니다) 그 색상을 빨간색
으로 변경할 수 있습니다. 이것은 스윙 세트에 도색을 한 경우에 유용할 수 있습니다:
작업이 성공적으로 수행되었는지를 다시 데이터를 조회하여 확인할 수 있습니다:
Output equip_id | type | color | location | install_date
----------+-------+-------+-----------+--------------
2 | swing | red | northwest | 2018-08-16
(1 row)
슬라이드가 이제 빨간색으로 등록되어 있습니다.
결론
이제 Ubuntu 22.04 서버에 PostgreSQL이 설치되었습니다. Postgres 및 해당 사용법에 대해 더 알고 싶다면 다음 가이드를 확인하는 것을 권장합니다:
Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-22-04