Oracle DB를 이용하여 블로그 서비스를 구축하는 방법 개괄하여 소개
Oracle Database 기반 블로그 서비스 설계 가이드입니다. service name/PDB/schema 개념, blog_app 사용자, posts 테이블, Oracle JDBC, listener/PDB 점검과 백업 기준을 정리했습니다.
Oracle Database로 블로그 서비스를 만들 때는 MySQL/MariaDB와 다르게 database, schema, user, service name 개념을 정확히 구분해야 합니다. 애플리케이션은 보통 특정 PDB의 service name에 접속하고, 애플리케이션용 schema user가 테이블을 소유합니다.
구성 개요
- Oracle Database 또는 Oracle Database Free/Express 계열
- 블로그 애플리케이션 서버
- Oracle JDBC thin driver
- 업로드 파일을 저장할 object/file storage
- DB 백업과 archive/redo 전략
접속 확인
Oracle은 USE dbname 문법을 쓰지 않습니다. service name 또는 PDB에 접속합니다.
sqlplus blog_app@//db.example.local:1521/FREEPDB1
애플리케이션 사용자와 권한
관리자 계정으로 접속해 애플리케이션 schema user를 만듭니다. 운영에서는 tablespace, quota, password 정책을 함께 설정합니다.
CREATE USER blog_app IDENTIFIED BY "REPLACE_WITH_STRONG_PASSWORD";
GRANT CREATE SESSION, CREATE TABLE, CREATE SEQUENCE, CREATE VIEW TO blog_app;
ALTER USER blog_app QUOTA 1G ON USERS;
테이블 구조 예시
CREATE TABLE posts (
id NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
slug VARCHAR2(200) NOT NULL UNIQUE,
title VARCHAR2(255) NOT NULL,
body CLOB NOT NULL,
status VARCHAR2(20) DEFAULT 'draft' NOT NULL,
published_at TIMESTAMP NULL,
created_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL,
updated_at TIMESTAMP DEFAULT SYSTIMESTAMP NOT NULL
);
CREATE INDEX idx_posts_status_pub ON posts(status, published_at);
JDBC 연결 예시
SID 방식보다 service name 기반 접속 문자열을 쓰는 것이 일반적입니다. 비밀번호는 코드에 직접 넣지 않습니다.
jdbc:oracle:thin:@//db.example.local:1521/FREEPDB1
String sql = "select id, title from posts where status = ? order by published_at desc fetch first ? rows only";
try (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, "published");
ps.setInt(2, 20);
try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) {
System.out.println(rs.getString("title"));
}
}
}
운영 관점
- Oracle DB는 설치 전 지원 OS와 kernel 요구사항을 확인합니다.
- listener, service name, PDB open 상태를 점검합니다.
- 백업은 Data Pump export만이 아니라 RMAN 전략까지 검토합니다.
- 블로그 첨부파일은 DB CLOB/BLOB보다 별도 object/file storage가 운영상 단순한 경우가 많습니다.
점검 명령
lsnrctl status
sqlplus / as sysdba
SHOW PDBS;
SELECT name, open_mode FROM v$pdbs;