[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 첫걸음에서 기억할 핵심입니다.
- 아키텍처는 모듈러 — 연결=프로세스, Autovacuum 존재
- UNDO 대신 MVCC — VACUUM이라는 새 관리 포인트
- Database > Schema 구조 — Oracle의 User=Schema와 다름
- 대소문자는 소문자 변환 — Oracle과 정반대
- psql의 역슬래시 명령어 — DESC보다 강력
Oracle 경험은 PostgreSQL 학습에 큰 자산입니다. 핵심 개념은 이미 아시니, 차이나는 부분만 집중하면 빠르게 익힐 수 있습니다. 이번 편에서 아키텍처의 큰 그림을 잡으셨다면, 다음 편부터는 실제 문법으로 들어가 보겠습니다.
PostgreSQL로 전환하며 겪은 경험이나 궁금한 점이 있다면 댓글로 공유해주세요.
같은 길을 걷는 Oracle DBA들에게 큰 도움이 됩니다.
'DBA 실무 > PostgreSQL' 카테고리의 다른 글
| PostgreSQL, 설치할 때 정한 걸로 3년을 삽니다 — 설치부터 초기 설정까지 (0) | 2026.08.10 |
|---|