DBA 실무/PostgreSQL

PostgreSQL 시리즈 1편] Oracle DBA를 위한 PostgreSQL 첫걸음 - 아키텍처부터 첫 접속까지

isony 2026. 8. 12. 06:55
반응형

[PostgreSQL 시리즈 1편] Oracle DBA를 위한 PostgreSQL 첫걸음 - 아키텍처부터 첫 접속까지

- 테스트 환경: PostgreSQL 17, Rocky Linux 9 / Oracle 19c

Oracle을 오래 다뤄온 DBA에게 PostgreSQL은 낯설면서도 익숙한 데이터베이스입니다. SQL은 대부분 통하는데, 아키텍처와 운영 방식은 꽤 다릅니다. 이 차이를 모르고 Oracle 습관대로 접근하면 곳곳에서 헤맵니다.

이 시리즈는 15년차 Oracle DBA가 PostgreSQL로 넘어가며 정리한 실전 노트입니다. 모든 개념을 Oracle과 비교하되, PostgreSQL 중심으로 설명합니다. Oracle을 아는 분이라면 훨씬 빠르게 습득하실 수 있습니다.

이번 1편에서 다룰 내용입니다.

  • 왜 지금 PostgreSQL인가
  • 아키텍처 비교 (프로세스·메모리 구조)
  • 설치와 첫 접속 (sqlplus vs psql)
  • Oracle DBA가 가장 먼저 헷갈리는 것들

실습 위주로 진행하니, PostgreSQL을 설치할 환경(로컬 VM이나 클라우드)을 준비하시면 좋습니다.

 

왜 지금 PostgreSQL인가

Oracle DBA가 PostgreSQL을 배워야 하는 이유는 명확합니다.

시장의 흐름

  • 라이선스 비용: Oracle의 높은 라이선스 부담으로 많은 기업이 PostgreSQL로 전환 중
  • 인기도: Stack Overflow 개발자 설문에서 2023년 이후 가장 인기 있는 DB
  • 클라우드: AWS RDS, Azure, GCP 모두 PostgreSQL을 핵심으로 지원
  • Oracle 호환성: 최근 Oracle도 PostgreSQL 호환성을 강화할 만큼 무시할 수 없는 존재

Oracle DBA의 강점

Oracle을 아는 것은 PostgreSQL 학습에 큰 자산입니다. 트랜잭션, 인덱스, 실행계획, 백업/복구 같은 핵심 개념은 이미 알고 있기 때문입니다. 문법과 운영 방식의 차이만 익히면 됩니다. 이 시리즈가 그 차이에 집중하는 이유입니다.

 

★ 아키텍처 비교 - 가장 중요한 첫 단추

Oracle DBA가 PostgreSQL에서 가장 먼저 이해해야 할 것이 아키텍처 차이입니다. 여기서 많은 개념이 갈립니다.

프로세스 모델 - 모놀리식 vs 모듈러

Oracle: 인스턴스 = SGA + 백그라운드 프로세스 집합

Oracle 인스턴스
├── SGA (공유 메모리)
│   ├── Shared Pool
│   ├── Buffer Cache
│   └── Redo Log Buffer
├── PGA (프로세스별 메모리)
└── 백그라운드 프로세스
    ├── DBWn (DB Writer)
    ├── LGWR (Log Writer)
    ├── CKPT (Checkpoint)
    ├── SMON (System Monitor)
    ├── PMON (Process Monitor)
    └── ARCn (Archiver)

PostgreSQL: postmaster + 연결별 백엔드 프로세스

PostgreSQL 인스턴스 (클러스터)
├── Shared Buffers (공유 메모리)
├── WAL Buffers
├── postmaster (메인 프로세스)
├── 연결별 backend 프로세스 (연결 1개 = 프로세스 1개)
└── 백그라운드 프로세스
    ├── Background Writer
    ├── Checkpointer
    ├── WAL Writer
    ├── Autovacuum (PostgreSQL 고유!)
    └── Archiver

핵심 차이 3가지

1. 연결 = 프로세스

Oracle: 공유 서버 or 전용 서버 (프로세스 관리 정교)
PostgreSQL: 연결 1개당 backend 프로세스 1개

→ PostgreSQL은 연결이 많으면 프로세스가 많아짐
→ 그래서 연결 풀러(PgBouncer)가 거의 필수

이건 나중에 "연결 부족" 문제로 이어지는 중요한 차이입니다 (12편에서 상세히).

2. SMON/PMON이 없음

Oracle: SMON(인스턴스 복구), PMON(프로세스 정리) 등 복잡한 백그라운드
PostgreSQL: 더 단순한 백그라운드 구조

3. Autovacuum이라는 고유 존재

Oracle에는 없는 개념
PostgreSQL의 MVCC 특성상 반드시 필요
→ dead tuple(죽은 행) 정리

Autovacuum은 PostgreSQL 운영의 핵심이라 11편에서 통째로 다룹니다. 지금은 "Oracle에 없는 중요한 것이 있다"만 기억하세요.

저장 구조 매핑

개념 Oracle PostgreSQL

최상위 Database (CDB/PDB) Cluster
논리 그룹 Tablespace Tablespace (유사)
스키마 User = Schema Database > Schema
트랜잭션 로그 Redo Log WAL (Write-Ahead Log)
복구 Redo + UNDO WAL + MVCC

주의할 매핑:

  • Oracle은 "User = Schema"지만, PostgreSQL은 Database 안에 여러 Schema가 있고 그 안에 객체가 있습니다.
  • Oracle의 UNDO에 해당하는 별도 구조가 PostgreSQL엔 없습니다. 대신 MVCC로 처리합니다 (3편에서 상세히).

 

설치와 첫 접속 (실습)

이제 직접 해봅시다. Rocky Linux 9 기준입니다.

설치

# PostgreSQL 공식 repo 추가
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# 기본 모듈 비활성화
sudo dnf -qy module disable postgresql

# PostgreSQL 17 설치
sudo dnf install -y postgresql17-server postgresql17

# 초기화 (Oracle의 DBCA에 해당)
sudo /usr/pgsql-17/bin/postgresql-17-setup initdb

# 서비스 시작
sudo systemctl enable --now postgresql-17

Oracle과 비교: Oracle의 dbca로 DB를 만드는 것처럼, PostgreSQL은 initdb로 클러스터를 초기화합니다. 다만 훨씬 가볍고 빠릅니다.

첫 접속 - sqlplus vs psql

Oracle의 sqlplus에 해당하는 것이 psql입니다.

# postgres 유저로 전환 (기본 관리자)
sudo -i -u postgres

# psql 접속 (sqlplus / as sysdba 느낌)
psql

접속하면 프롬프트가 나타납니다.

postgres=#

=#는 슈퍼유저, =>는 일반 유저를 의미합니다.

sqlplus vs psql 명령어 비교

작업 Oracle (sqlplus) PostgreSQL (psql)

접속 sqlplus user/pass psql -U user -d db
DB 목록 SELECT name FROM v$database; \l
테이블 목록 SELECT * FROM tab; \dt
테이블 구조 DESC 테이블 \d 테이블
유저 목록 SELECT * FROM dba_users; \du
현재 유저 SHOW USER SELECT current_user;
SQL 파일 실행 @script.sql \i script.sql
나가기 EXIT \q

핵심: PostgreSQL의 역슬래시 명령어(\) 가 psql의 강력한 기능입니다. Oracle의 DESC보다 훨씬 다양합니다. 이건 4편에서 깊게 다룹니다.

실습: 첫 데이터베이스와 테이블

-- 데이터베이스 생성 (Oracle의 PDB 생성 느낌)
CREATE DATABASE testdb;

-- 접속 전환 (sqlplus의 connect)
\c testdb

-- 테이블 생성
CREATE TABLE employees (
    emp_id SERIAL PRIMARY KEY,
    emp_name VARCHAR(100),
    hire_date DATE DEFAULT CURRENT_DATE
);

-- 데이터 입력
INSERT INTO employees (emp_name) VALUES ('홍길동'), ('김철수');

-- 조회
SELECT * FROM employees;

-- 테이블 구조 확인 (DESC 대신)
\d employees

여기서 벌써 차이가 보입니다:

  • SERIAL: Oracle의 시퀀스+트리거를 한 방에 (2편에서 상세히)
  • CURRENT_DATE: Oracle의 SYSDATE에 해당
  • \d: DESC 대신

 

Oracle DBA가 가장 먼저 헷갈리는 것 5가지

경험상 Oracle DBA가 PostgreSQL 초반에 가장 많이 헷갈리는 부분입니다.

1. Database vs Schema 구조

Oracle: 하나의 DB, User=Schema
PostgreSQL: 여러 Database, 각 Database 안에 여러 Schema

→ PostgreSQL에서 다른 database의 테이블은 
  기본적으로 직접 조인 안 됨 (Oracle과 큰 차이)

2. 세미콜론 필수

-- Oracle: sqlplus에서 SELECT는 세미콜론
-- PostgreSQL: psql에서 모든 문장에 세미콜론 필수
SELECT 1;  -- 세미콜론 없으면 실행 안 됨

3. 대소문자 처리

-- PostgreSQL은 따옴표 없는 식별자를 소문자로 변환
CREATE TABLE Test (...);   -- 실제로는 test로 생성됨
SELECT * FROM "Test";      -- 대문자 쓰려면 큰따옴표 (권장 안 함)

-- Oracle은 대문자로 변환 → 정반대!

이건 Oracle DBA가 정말 자주 실수하는 부분입니다.

4. UNDO가 없음

Oracle: UNDO 테이블스페이스로 읽기 일관성
PostgreSQL: MVCC로 각 행의 여러 버전 유지

→ ORA-01555 같은 에러가 없는 대신
  VACUUM이라는 새로운 관리 포인트 등장

5. 접속 설정 파일

Oracle: tnsnames.ora, listener.ora
PostgreSQL: postgresql.conf(설정), pg_hba.conf(접속 권한)

→ pg_hba.conf를 모르면 원격 접속이 안 됨

pg_hba.conf는 초보자가 원격 접속에서 막히는 대표 원인입니다. 접속 방식(trust, md5, scram-sha-256 등)을 정의합니다.

 

★ AI로 PostgreSQL 학습 가속하기

Oracle DBA가 PostgreSQL을 배울 때 Claude 같은 AI를 활용하면 학습 속도가 크게 빨라집니다. 간단한 활용법을 소개합니다.

Oracle → PostgreSQL 변환 학습

프롬프트 예시:
"다음 Oracle SQL을 PostgreSQL로 변환하고, 
바뀐 부분과 그 이유를 설명해줘.

[Oracle SQL 붙여넣기]"

변환 결과뿐 아니라 왜 바뀌는지를 함께 물으면 학습 효과가 큽니다.

개념 매핑 질문

"Oracle의 [개념]은 PostgreSQL에서 
무엇에 해당하고, 어떻게 다른지 설명해줘"

이 시리즈도 이런 방식으로 학습하면서 정리한 노트입니다. AI 활용법은 4편에서 본격적으로 다룹니다.

주의: AI의 답변은 반드시 본인 환경에서 검증하세요. 특히 버전별 문법 차이는 실제 실행으로 확인해야 합니다.

 

다음 글 예고

다음 글은 [PostgreSQL 시리즈 2편] 자료형과 DDL 완벽 비교 입니다. Oracle과 PostgreSQL의 데이터 타입 매핑, SERIAL/IDENTITY, CREATE TABLE 문법 차이를 실습으로 다룹니다.

 

마무리

Oracle DBA의 PostgreSQL 첫걸음에서 기억할 핵심입니다.

  1. 아키텍처는 모듈러 — 연결=프로세스, Autovacuum 존재
  2. UNDO 대신 MVCC — VACUUM이라는 새 관리 포인트
  3. Database > Schema 구조 — Oracle의 User=Schema와 다름
  4. 대소문자는 소문자 변환 — Oracle과 정반대
  5. psql의 역슬래시 명령어 — DESC보다 강력

Oracle 경험은 PostgreSQL 학습에 큰 자산입니다. 핵심 개념은 이미 아시니, 차이나는 부분만 집중하면 빠르게 익힐 수 있습니다. 이번 편에서 아키텍처의 큰 그림을 잡으셨다면, 다음 편부터는 실제 문법으로 들어가 보겠습니다.

PostgreSQL로 전환하며 겪은 경험이나 궁금한 점이 있다면 댓글로 공유해주세요.

같은 길을 걷는 Oracle DBA들에게 큰 도움이 됩니다.

 

반응형