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;

공식 문서

BGM EVER