Oracle Synonym

gwonsang247·2025년 4월 11일

DATA

목록 보기
3/3

“그 테이블 명이 뭐더라?”

처음으로 Oracle을 다루면서 Synonym 이라는 개념을 처음 접했습니다.

-- 너무 복잡한 테이블 명
SELECT * FROM net_owner.customer_master_2024_snapshot;

이처럼 개발을 하면서 누구나 겪을 수 있는 스키마 이름, 테이블 경로, 접두사, 접미사, 복잡한 네이밍 컨벤션 문제를 깔끔하게 해결할 수 있다는게 큰 장점인 것 같습니다.

Synonym이란?

“객체에 붙이는 짧고 쉬운 별칭(Alias)”

Synonym은 Oracle에서 제공하는 기능으로,
테이블이나 뷰, 시퀀스, 프로시저 같은 객체에 대해 간결한 별명을 만들어주는 방법입니다.

-- 원래 이렇게 썼다면
SELECT * FROM net_owner.CUSTOMERS;

-- 이제는 이렇게
SELECT * FROM customers_syn;

결과는 같지만, 느낌은 다릅니다.
더 깔끔하고, 더 유지보수하기 쉬운 코드를 만들 수 있죠.

Synonym은 두 종류

구분Private SynonymPublic Synonym
접근 대상생성한 사용자만모든 사용자 공유
사용 목적개인 쿼리 간소화시스템 전역 네이밍 통일
생성 권한기본 제공CREATE PUBLIC SYNONYM 필요

대부분 Private Synonym을 사용한다고 합니다.
그 이유는 다른 사람과 공유할 필요 없는 쿼리 작성 단축이 목적이기 때문이죠.

언제 Synonym을 쓸까?

  • 다른 스키마의 객체를 사용할 때
  • 너무 긴 객체명을 줄일 때
  • 스키마 보안 및 유지보수 유리

적용해보기

사용자 권한 부여

-- 데이터 보유 스키마
CREATE USER net_owner IDENTIFIED BY owner123;
GRANT CONNECT, RESOURCE TO net_owner;

-- 조회 전용 사용자
CREATE USER app_user IDENTIFIED BY app123;
GRANT CONNECT, RESOURCE TO app_user;

-- 테이블 접근 권한 부여
GRANT SELECT ON net_owner.CUSTOMERS TO app_user;
GRANT SELECT ON net_owner.ORDERS TO app_user;

Synonym 생성 (app_user 계정에서)

-- Synonym 생성
CREATE SYNONYM customers_syn FOR net_owner.CUSTOMERS;
CREATE SYNONYM orders_syn FOR net_owner.ORDERS;

데이터 조회 및 JOIN


-- 개별 조회
SELECT * FROM customers_syn;
SELECT * FROM orders_syn;


-- 조인 쿼리
SELECT 
  c.NAME AS 고객명, 
  o.ORDER_DATE AS 주문일, 
  o.TOTAL_AMOUNT AS 총금액
FROM customers_syn c
JOIN orders_syn o ON c.CUSTOMER_ID = o.CUSTOMER_ID
WHERE o.STATUS = 'PENDING';

Synonym vs Without Synonym

항목Synonym 없이Synonym 사용 시
쿼리 복잡도SELECT * FROM net_owner.CUSTOMERSSELECT * FROM customers_syn
보안스키마 정보 노출스키마 은닉 가능
유지보수테이블명 변경 시, 쿼리 전체 수정 필요Synonym만 변경하면 유지 가능
코드 일관성스키마마다 접근 방식 상이공통된 명명 규칙 사용 가능

0개의 댓글