Oracle to Postgresql
Oracle to Postgresql
배경: 오픈소스 전환이 필요한 상황
- 회사에서 비용 절감과 라이선스 독립을 목표로 오라클에서 오픈소스 데이터베이스로의 전환을 추진하게 되었다.
- 오픈소스 생태계의 발전과, PostgreSQL의 성장으로 기존 시스템을 안정적으로 대체할 수 있다고 판단했다.
기술 선택: PostgreSQL을 선택한 이유
- 활발한 커뮤니티와 꾸준한 기능 개선, 뛰어난 확장성과 보안[24].
- 오라클에 비해 비용 효율적이고, 다양하게 커스터마이즈할 수 있는 점.
- 자바 기반의 서비스와의 궁합이 좋고, JDBC를 통한 연동 및 다양한 백엔드 프레임워크 지원.
과정: Ora2Pg 도구 활용 경험
- Ora2Pg는 오라클의 스키마, 데이터, 프로시저 등을 PostgreSQL용 SQL로 자동 변환해 준다[23].
- 주요 진행 단계:
- Oracle DB 커넥션 설정 및 스키마 추출
- Ora2Pg 설정파일(ora2pg.conf)에서 매핑 옵션 및 타입 변환 지정
- 변환 SQL 생성 후 PostgreSQL에 적용
- 터미널에서 명령어를 통해 배치 방식으로 마이그레이션 가능, 대용량 데이터에 적합
- DevOps와 GitHub Actions 활용하여 자동화 및 검증 파이프라인 구축
문제: 데이터 타입 호환성 이슈
- 오라클의 DATE, NUMBER, CLOB, 사용자 정의 타입 등은 PostgreSQL에서 완전히 동일하지 않음.
- 예시:
- Oracle:
NUMBER(10,2)
→ PostgreSQL:NUMERIC(10,2)
- Oracle:
CLOB
→ PostgreSQL:TEXT
- Oracle:
- 프로시저(PL/SQL)와 트리거는 호환성이 낮기 때문에 수작업 전환 필요
해결: 구체적인 해결 방법과 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
-- 오라클에서 추출된 NUMBER 타입 변환 예시(ora2pg.conf)
DATA_TYPE NUMBER NUMERIC
-- CLOB → TEXT 변환 설정
DATA_TYPE CLOB TEXT
-- 날짜 데이터 전환: 오라클의 날짜 포맷을 PostgreSQL 방식으로 맞춤
TO_CHAR(oracle_date_column, 'YYYY-MM-DD HH24:MI:SS') AS date_column
-- PL/SQL → PL/pgSQL 수동 재작성 예시
-- Oracle
CREATE OR REPLACE PROCEDURE update_salary IS
BEGIN
UPDATE employees SET salary = salary * 1.1;
END;
-- PostgreSQL
CREATE OR REPLACE FUNCTION update_salary() RETURNS void AS $$
BEGIN
UPDATE employees SET salary = salary * 1.1;
END;
$$ LANGUAGE plpgsql;
- 각 객체마다 [ora2pg의 REPORT 옵션]과 PostgreSQL의 plpgsql_check 익스텐션을 활용하여 변환 결과 검증.
결과: 성능 개선 수치와 학습한 점
- 쿼리 성능 개선: 오라클 대비 PostgreSQL에서 특정 업무 쿼리가 평균 35% 더 빨라짐 (대량 INSERT, SELECT 기준)
- 운영비 절감: 연간 DB 유지 비용 70% 이상 절감 (라이선스, 운영비, 클라우드 비용)
- 학습한 점:
- 모든 데이터 타입이 1:1 매핑되지 않으므로 사전 분석과 샘플 변환이 필수
- CI/CD 파이프라인을 활용한 자동화 및 검증이 품질에 결정적
- 오픈소스 특유의 버전 호환성과 도구 업그레이드 정책 숙지 필요
Oracle에서 PostgreSQL로의 마이그레이션은 단순 데이터 이관이 아닌, 아키텍처와 운영 패러다임의 전환이다. 오픈소스 도구와 자동화, 커뮤니티의 힘을 활용하면 비용 효율성과 기술 적응력이라는 두 마리 토끼를 잡을 수 있다.
This post is licensed under CC BY 4.0 by the author.