본문 바로가기
카테고리 없음

PostgreSQL 서버 설치와 구성 가이드

by AI의 미래 2024. 11. 24.
PostgreSQL은 강력한 오픈 소스 데이터베이스로, 다양한 데이터 세트를 관리하는 데 이상적입니다. 이 글에서는 PostgreSQL 설치에서 데이터 백업 및 마이그레이션 방법까지 Comprehensive한 가이드를 제공합니다.

PostgreSQL 소개

PostgreSQL은 고급 기능과 뛰어난 성능을 제공하는 오픈 소스 객체 관계형 데이터베이스 시스템입니다. 특히, 대량의 데이터를 처리하고 여러 동시 사용자 환경에서 안정적으로 작동할 수 있는 능력이 뛰어난 시스템입니다. 데이터를 안전하게 저장하고 관리할 수 있는 다양한 기능과 유연한 확장성 덕분에 PostgreSQL은 다양한 애플리케이션에서 널리 사용됩니다.

PostgreSQL의 특징 및 장점

PostgreSQL의 가장 큰 특징 중 하나는 강력한 데이터 무결성입니다. 이 데이터베이스 시스템은 ACID(Atomicity, Consistency, Isolation, Durability) 속성을 준수하여 데이터의 안전성과 신뢰성을 보장합니다. 또한, 사용자는 독자적인 데이터 유형과 사용자 정의 함수를 만들 수 있어, 데이터베이스를 더욱 유연하게 확장할 수 있습니다.

특징 설명
데이터 무결성 ACID 속성을 기반으로 안정적이고 일관된 데이터 제공
확장성 사용자 정의 데이터 타입 및 함수 지원
동시성 여러 사용자가 동시에 데이터베이스에 접근 가능
오픈 소스 무료로 사용 가능하고, 다양한 커뮤니티 지원

PostgreSQL은 또한 확장성이 뛰어난 기능을 제공하여, 사용자는 기존 데이터베이스를 재구성하지 않고도 필요에 따라 기능을 추가할 수 있습니다. 예를 들어, 데이터베이스에 사용자 정의 함수를 제작하여 특정 비즈니스 로직을 통합할 수 있습니다. 이러한 유연함 덕분에 PostgreSQL은 다양한 산업 분야에서 큰 인기를 얻고 있습니다.

"데이터베이스는 단순한 저장소가 아니라, 비즈니스의 핵심입니다."

 

PostgreSQL의 사용 사례

PostgreSQL은 다양한 환경에서 사용되며, 각각의 환경에서 수많은 이점을 제공합니다. 다음은 PostgreSQL의 일반적인 사용 사례입니다.

  1. 웹 애플리케이션: 웹 후면 서비스에서 데이터를 안전하게 저장해야 할 때 PostgreSQL은 매우 유용합니다. 양질의 데이터 무결성과 동시성 처리가 필요하기 때문입니다.
  2. 데이터 분석: 대규모 데이터셋을 처리하고 분석할 수 있는 능력 덕분에, PostgreSQL은 데이터 과학 및 비즈니스 인사이트를 제공하는 데 자주 사용됩니다.
  3. IoT 애플리케이션: 여러 동시 사용자와 센서 데이터를 관리할 수 있는 PostgreSQL의 기능은 IoT 애플리케이션에 적합합니다. 실제로 여러 IoT 플랫폼에서 PostgreSQL을 데이터 저장소로 활용하고 있습니다.
  4. 비즈니스 인텔리전스: 다양한 시각화 도구와 통합하여 데이터를 분석하고, 의사 결정에 필요한 인사이트를 제공합니다.

PostgreSQL은 이러한 다양한 사용 사례 덕분에 개인 개발자부터 대규모 기업까지 전 세계적으로 폭넓은 사용자층을 형성하고 있습니다. 이처럼 안정적이고 강력한 PostgreSQL은 데이터베이스 선택에서 많은 의사 결정을 돕는 중요한 요소입니다.

PostgreSQL 설치

PostgreSQL은 SQL 언어를 기반으로 한 고성능의 오픈 소스 데이터베이스 서버입니다. 여러 동시 사용자와 대량의 데이터 세트를 효과적으로 관리할 수 있는 기능으로 인해 많은 기업과 조직에서 선호하는 선택이 되고 있습니다. 이 섹션에서는 RHEL 8에서 PostgreSQL 설치하는 방법과 컨테이너를 이용한 여러 PostgreSQL 버전 실행 방법에 대해 알아보겠습니다.

RHEL 8에서 PostgreSQL 설치하기

RHEL 8에서는 PostgreSQL의 다양한 버전이 지원되며, 각각 별도의 스트림에서 제공됩니다. 사용 가능한 PostgreSQL 버전은 다음과 같습니다:

PostgreSQL 버전 RHEL 8에서의 사용 가능 버전
PostgreSQL 9.6 지원됨
PostgreSQL 10 기본 스트림
PostgreSQL 12 RHEL 8.1.1 이후 사용 가능
PostgreSQL 13 RHEL 8.4 이후 사용 가능
PostgreSQL 15 RHEL 8.8 이후 사용 가능
PostgreSQL 16 RHEL 8.10 이후 사용 가능

설계상 동일한 모듈의 두 개 이상 버전을 병렬로 설치할 수는 없기 때문에, 하나의 스트림만 선택하여 설치해야 합니다. PostgreSQL을 설치하기 위해서는 다음 단계에 따라 진행하면 됩니다:

  1. 모듈 스트림 선택 및 설치:
    ```bash
yum module install postgresql:16/server

```

  1. 데이터베이스 클러스터 초기화:
    ```bash
postgresql-setup --initdb

```

  1. 서비스 시작:
    ```bash
systemctl start postgresql.service

```

  1. 부팅 시 서비스 활성화:
    ```bash
systemctl enable postgresql.service

```

위의 절차를 통해 PostgreSQL 서버를 손쉽게 설치하고 활성화할 수 있습니다. PostgreSQL의 다양한 기능을 활용하여 데이터의 무결성을 보장하며, 확장 가능한 시스템을 구축해 보세요! 📈

"PostgreSQL은 확장성을 통해 데이터베이스 관리의 새로운 지평을 열다."

 

컨테이너를 사용한 여러 PostgreSQL 버전 실행

동일한 호스트에서 여러 버전의 PostgreSQL을 실행하려면 컨테이너를 사용하는 것이 가장 유용합니다. 이는 RHEL 8의 모듈 제약으로 인해 가능하며, PostgreSQL의 다양한 버전을 다음과 같이 실행할 수 있습니다:

  1. 사전 요구 사항: container-tools 모듈이 설치되어 있어야 합니다.
  2. Red Hat 고객 포털로 로그인:
    ```bash
podman login registry.redhat.io

```

  1. PostgreSQL 13 컨테이너 실행:
    bash $ podman run -d --name pg13 -e postgresql_user=<user_name> -e postgresql_password=<password> -e postgresql_database=<database_name> -p <host_port_1>:5432 rhel8/postgresql-13
  2. PostgreSQL 15 컨테이너 실행:
    bash $ podman run -d --name pg15 -e postgresql_user=<user_name> -e postgresql_password=<password> -e postgresql_database=<database_name> -p <host_port_2>:5432 rhel8/postgresql-15
  3. PostgreSQL 16 컨테이너 실행:
    bash $ podman run -d --name pg16 -e postgresql_user=<user_name> -e postgresql_password=<password> -e postgresql_database=<database_name> -p <host_port_3>:5432 rhel8/postgresql-16

⚠️ 주의: 각 컨테이너의 이름과 호스트 포트는 반드시 달라야 합니다.

  1. 방화벽에서 호스트 포트 열기:
    ```bash
firewall-cmd --permanent --add-port={/tcp,/tcp,/tcp}
firewall-cmd --reload

```

컨테이너를 사용하면 쉽고 빠르게 여러 버전의 PostgreSQL을 환경에 맞게 실행할 수 있으며, 각 버전에서 발생하는 기능이나 성능 테스트에도 유용합니다. 다양한 요청 처리와 더불어 데이터베이스 매니저가 필요한 기능을 실험할 수 있는 기회가 많아집니다. 🚀

이렇게 PostgreSQL 설치와 컨테이너를 통한 다중 버전 실행에 대해 살펴보았습니다. 데이터베이스 관리의 유연성과 효율성을 높이는 데 큰 도움이 될 것입니다!

PostgreSQL 사용자 및 권한 관리

PostgreSQL은 강력하고 확장성이 뛰어난 오픈 소스 데이터베이스 관리 시스템으로, 다양한 사용자와 그 권한을 효과적으로 관리할 수 있는 기능을 제공합니다. 이에 대해 자세히 알아보겠습니다.

PostgreSQL 사용자 유형

PostgreSQL에서 사용자(또는 역할)는 여러 유형으로 구분되며, 각 유형은 특정 권한과 기능이 할당됩니다. 사용자 유형은 다음과 같습니다:

  1. PostgreSQL 슈퍼유저: 기본적으로 데이터베이스 시스템에서 가장 높은 권한을 가지며, 모든 작업을 수행할 수 있는 사용자를 의미합니다. 일반적으로 기본 제공되는 postgres 사용자나, 사용자가 직접 생성한 슈퍼유저입니다.
  2. 데이터베이스 사용자: 특정 데이터베이스에 접근할 수 있는 권한을 가진 사용자입니다. 기본적으로 로그인 권한을 갖습니다.
  3. 유닉스 시스템 사용자: 운영 체제에서의 사용자와 연결되어 있는 유형입니다. 주로 pg_dump와 같은 PostgreSQL 클라이언트 애플리케이션을 실행하기 위해 사용됩니다.
  4. 사용자 그룹: 여러 사용자를 그룹으로 묶어 그룹 전체에 대한 권한을 관리할 수 있게 해줍니다. 이를 통해 사용자의 권한 관리가 효율적으로 이루어질 수 있습니다.

각 사용자에게는 데이터베이스 개체에 대한 권한(예: SELECT, INSERT, UPDATE, DELETE 등)을 할당할 수 있으며, 특정 역할과 특수 권한(예: superuser, createdb, createrole)을 부여할 수 있습니다. 이러한 사용자와 역할을 통해 PostgreSQL의 강력한 보안 및 권한 관리를 구현할 수 있습니다 .

 

사용자 생성 및 권한 할당 방법

PostgreSQL에서 새로운 사용자를 생성하고 권한을 부여하는 과정은 다음과 같은 절차로 진행됩니다:

  1. 사용자 생성:
    사용자를 생성하기 위해, PostgreSQL 대화형 셸에 접속한 후 아래와 같은 SQL 명령어를 사용합니다.

sql CREATE USER mydbuser WITH PASSWORD 'mypasswd' CREATEROLE CREATEDB;

여기서 mydbuser는 생성할 사용자 이름, mypasswd는 해당 사용자의 비밀번호입니다. CREATEROLECREATEDB 권한도 동시에 부여되었습니다.

  1. 권한 부여:
    사용자가 생성된 후, 필요한 데이터베이스에 대한 권한을 부여해야 합니다. 예를 들어, 다음과 같이 특정 데이터베이스에 대한 모든 권한을 부여할 수 있습니다.

sql GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydbuser;

이 명령어는 mydatabase 데이터베이스의 모든 권한을 mydbuser에게 부여합니다.

  1. 권한 확인 및 조정:
    부여된 권한은 언제든지 확인하고 조정할 수 있습니다. 최종 사용자가 자신의 역할과 권한을 명확히 하고, 필요에 따라 새로운 역할을 생성하거나 기존의 권한을 수정합니다.

권한 관리는 PostgreSQL에서 데이터의 무결성과 보안을 유지하는 데 핵심적인 기능입니다. 적절한 권한 관리는 데이터베이스가 안전하게 운영되도록 돕는 중요한 요소입니다. 🙌

PostgreSQL 데이터베이스 구성

PostgreSQL은 강력하고 확장성이 뛰어난 오픈 소스 데이터베이스 서버로, 다양한 데이터 세트를 효과적으로 관리할 수 있는 엔진입니다. 이 섹션에서는 PostgreSQL의 구성 파일 개요서버 설정 변경 방법에 대해 다루겠습니다.

구성 파일 개요

PostgreSQL의 데이터베이스 구성은 여러 파일로 나누어져 있으며 주요 구성 파일은 다음과 같습니다:

파일 이름 설명
postgresql.conf 데이터베이스 클러스터의 모든 주요 매개변수를 설정하는 데 사용됩니다.
pg_hba.conf 클라이언트 인증 및 데이터베이스 접근 제어를 구성하는 파일입니다.
pg_ident.conf 외부 인증 메커니즘의 사용자 ID를 PostgreSQL 사용자 ID로 매핑합니다.
postgresql.auto.conf 서버 제어 아래의 기본 설정을 가집니다. 이 파일은 시스템의 쿼리에 의해 수정됩니다.

PostgreSQL 서버는 이러한 파일들을 /var/lib/pgsql/data/ 디렉터리 내에 저장하는 것이 권장됩니다. 이 경로는 데이터베이스 클러스터의 기본 위치로 데이터 무결성을 확보하는 데 중요한 역할을 하며, 데이터베이스 생성 및 관리와 관련된 모든 설정을 포함합니다.

"구성이 잘 되어 있는 시스템이 안정적인 서비스를 제공합니다."

 

PostgreSQL 서버 설정 변경 방법

PostgreSQL 서버 설정을 변경하기 위해서는 구성 파일을 수정하고, 변경 사항을 적용하기 위해 PostgreSQL 서비스를 재시작해야 합니다. 아래 단계를 따라 설정을 변경할 수 있습니다.

  1. 구성 파일 편집
    수정하려는 구성 파일 예를 들어 /var/lib/pgsql/data/postgresql.conf를 선택하고 편집합니다. 필요한 매개변수를 변경합니다.

```bash

vi /var/lib/pgsql/data/postgresql.conf

```

예를 들어, 데이터베이스 연결의 암호화 방법을 변경하고자 할 경우 아래와 같은 설정을 할 수 있습니다.

plaintext password_encryption = scram-sha-256

  1. 서비스 재시작
    편집을 마친 후, PostgreSQL 서비스를 재시작해야 변경 사항이 적용됩니다.

```bash

systemctl restart postgresql.service

```

  1. 변경 사항 적용 확인
    설정이 성공적으로 적용되었는지 확인하기 위해 PostgreSQL 대화형 터미널에서 연결된 정보를 조회할 수 있습니다.

```bash

psql -U postgres -c "SHOW password_encryption;"

```

이러한 단계들을 통해 PostgreSQL의 기본 설정을 효과적으로 조정할 수 있습니다. 다양한 설정을 적절하게 관리하면 데이터베이스의 성능안정성을 극대화할 수 있습니다.

PostgreSQL 보안 구성

PostgreSQL은 강력하고 확장성이 뛰어난 데이터베이스 서버로, 데이터 무결성을 보장하기 위한 다양한 기능을 갖추고 있습니다. 그러나 이러한 기능을 안전하게 사용하기 위해서는 적절한 보안 구성이 필수적입니다. 이 섹션에서는 TLS 암호화 설정 방법클라이언트 인증 및 구성 실습을 다뤄보겠습니다.

TLS 암호화 설정 방법

데이터베이스에 대한 연결을 보안하기 위해 PostgreSQL에서는 TLS(전송 계층 보안)를 사용할 수 있습니다. 이를 통해 암호화된 연결을 설정하고 데이터 전송 중에 발생할 수 있는 도청 및 변조를 방지할 수 있습니다.

"보안을 강화할수록 데이터베이스의 신뢰성이 높아집니다."

다음 단계로 PostgreSQL에서 TLS를 설정하는 방법을 알아보겠습니다:

  1. OpenSSL 라이브러리 설치:
    PostgreSQL이 TLS를 지원하도록 openssl 라이브러리를 설치해야 합니다.
    ```bash
yum install openssl

```

  1. TLS 인증서 및 키 생성:
    다음 명령어를 사용하여 TLS 인증서와 키를 생성합니다.
    ```bash
openssl req -new -x509 -days 365 -nodes -text -out server.crt -keyout server.key -subj "/cn=dbhost.yourdomain.com"

`` 여기서dbhost.yourdomain.com`은 데이터베이스 호스트의 도메인 이름으로 대체해야 합니다.

  1. 인증서 및 키 복사:
    생성한 인증서와 키를 PostgreSQL 데이터 디렉토리에 복사합니다.
    ```bash
cp server.{key,crt} /var/lib/pgsql/data/.

```

  1. 소유권 및 권한 설정:
    인증서의 소유자 및 그룹을 PostgreSQL 사용자로 변경하고, 개인 키에 대한 권한을 제한합니다.
    ```bash
chown postgres:postgres /var/lib/pgsql/data/server.{key,crt}
chmod 0400 /var/lib/pgsql/data/server.key

```

  1. PostgreSQL 구성 파일 수정:
    PostgreSQL의 설정 파일(postgresql.conf)에서 SSL을 활성화합니다.
    ```bash
ssl = on

```

  1. pg_hba.conf 파일 수정:
    클라이언트 연결을 TLS로 제한하려면 pg_hba.conf 파일을 수정합니다.
    bash hostssl all all 127.0.0.1/32 scram-sha-256
  2. PostgreSQL 서비스 재시작:
    변경 사항을 반영하기 위해 PostgreSQL 서비스를 재시작합니다.
    ```bash
systemctl restart postgresql.service

```

검증

TLS가 제대로 설정되었는지 확인하려면 아래 명령어로 PostgreSQL 데이터베이스에 연결하여 SSL 연결 정보를 확인합니다.

$ psql -u mydbuser -h 127.0.0.1 -d mydatabase mydbuser=> \conninfo

위 명령어를 실행하면 현재 연결이 TLS 프로토콜을 사용하고 있는지 확인할 수 있습니다.

 

클라이언트 인증 및 구성 실습

PostgreSQL에서는 클라이언트 인증을 통해 데이터베이스 접근을 제한할 수 있습니다. 이 섹션에서는 클라이언트 인증을 설정하고, 인증을 통해 데이터베이스의 보안을 강화하는 방법을 설명합니다.

  1. 사용자 생성:
    PostgreSQL에 사용자를 생성하여 접근 제어를 설정합니다. 다음 명령어를 사용하여 사용자를 생성합니다.
    bash CREATE USER mydbuser WITH PASSWORD 'mypasswd';
  2. pg_hba.conf 파일 수정:
    클라이언트 인증을 위한 방법을 지정합니다. 다음과 같은 줄을 추가하여 특정 IP 범위의 사용자 접근을 허용합니다.
    bash host all mydbuser 192.168.93.0/24 scram-sha-256
  3. 접속 권한 부여:
    사용자에게 데이터베이스에 대한 적절한 권한을 부여합니다.
    bash GRANT ALL PRIVILEGES ON DATABASE mydatabase TO mydbuser;

인증 테스트

이제 클라이언트 인증 설정이 완료되었습니다. 사용자 mydbuser로 데이터베이스에 접속하여 권한이 제대로 설정되었는지 확인합니다.

$ psql -U mydbuser -h 127.0.0.1 -d mydatabase

이제 PostgreSQL의 보안 구성을 통해 안전하게 데이터베이스를 관리할 수 있습니다. 항상 최신 보안 프로토콜 및 권장 설정을 확인하여 데이터를 안전하게 보호하는 것이 중요합니다. 🌐🛡️

PostgreSQL 데이터 백업 및 마이그레이션

PostgreSQL은 강력하고 확장성이 뛰어난 오픈 소스 데이터베이스입니다. 이 섹션에서는 PostgreSQL 데이터 백업 및 마이그레이션에 대한 정보를 제공합니다. 데이터베이스를 안전하게 유지하고 최신 버전으로의 마이그레이션 방법을 이해하는 것은 매우 중요합니다.

SQL 덤프를 사용한 데이터 백업

SQL 덤프는 PostgreSQL에서 데이터를 백업하는 가장 일반적인 방법 중 하나입니다. 이 방법은 SQL 명령을 사용하여 덤프 파일을 생성하며, 생성된 덤프 파일을 통해 데이터베이스를 다시 구성할 수 있습니다. pg_dumppg_dumpall 두 가지 도구가 있으며, 각각의 활용법은 다음과 같습니다.

도구 설명
pg_dump 단일 데이터베이스를 덤프합니다.
pg_dumpall 지정된 클러스터의 모든 데이터베이스를 덤프합니다.
pg_dump

를 사용하여 데이터베이스를 덤프하려면 다음과 같이 명령을 실행합니다:

pg_dump dbname > dumpfile.sql

여기서 dbname은 백업할 데이터베이스의 이름이고, dumpfile.sql은 생성할 덤프 파일의 이름입니다. 또한, pg_dumpall을 사용하여 전체 클러스터를 덤프할 수 있습니다:

pg_dumpall > dumpfile.sql

이러한 방법의 장점은 서버 버전과 아키텍처에 관계없이 데이터를 이전할 수 있는 유일한 방법이라는 것입니다. 데이터의 일관성을 보장하며, 다양한 버전 간 마이그레이션에도 유용합니다. 하지만 sql 덤프 방법은 파일 시스템 수준 백업에 비해 시간이 더 걸리는 단점이 있습니다.

"백업은 데이터 손실 방지의 첫걸음이며, 정기적인 백업은 모든 데이터베이스 관리의 필수 요소입니다."

PostgreSQL 버전 간 데이터 마이그레이션 절차

PostgreSQL의 버전 간 데이터 마이그레이션은 데이터의 안전한 이전을 보장하는 중요한 작업입니다. PostgreSQL의 이전 버전에서 새로운 버전으로 이동하는 과정은 여러 단계를 필요로 합니다. 다음은 PostgreSQL을 안전하게 마이그레이션하는 방법에 대한 단계입니다:

  1. 데이터베이스 백업: 마이그레이션을 시작하기 전에 기존 데이터베이스를 백업합니다. SQL 덤프 방법을 사용하여 데이터베이스 내용을 백업하고, SQL 파일을 안전한 장소에 보관합니다.
  2. 새 버전 PostgreSQL 설치: 새 서버 또는 시스템에 필요한 PostgreSQL 버전을 설치합니다. 이때, RHEL(레드햇 엔터프라이즈 리눅스)에서는 다음 명령을 사용합니다:
    bash yum module enable postgresql:16 yum install postgresql-server
  3. 데이터베이스 클러스터 초기화: 새 PostgreSQL 설치 후 클러스터를 초기화합니다.
    bash postgresql-setup --initdb
  4. 데이터 복원: 준비한 데이터베이스 덤프 파일을 사용하여 새 데이터베이스에 데이터를 복원합니다.
    bash psql -f ~/pgdump_file.sql postgres
  5. 구성 파일 업데이트: 이전 버전에서 사용한 구성 파일을 새 버전에 맞게 조정하고, 필요한 경우 변경 사항을 적용합니다.
  6. 테스트: 모든 데이터가 올바르게 마이그레이션되었는지 및 데이터베이스가 예상대로 작동하는지 확인합니다.

이 과정을 통해 PostgreSQL의 여러 버전 간에 안전하고 효율적으로 데이터를 마이그레이션할 수 있습니다. 마이그레이션은 데이터 관리에서 중요한 단계이므로 현실적인 계획 및 꼼꼼한 검토가 필요합니다.

🔗 같이보면 좋은 정보글!