728x90

1. SYNONYM이란 무엇인가?
SYNONYM(시노님)은 Oracle에서 테이블, 뷰, 시퀀스, 프로시저, 함수 등 다양한 객체에 대해 별칭을 만들어주는 객체입니다. 다른 사용자 스키마의 객체를 보다 간단하게 참조하거나, 객체명을 추상화할 때 주로 사용됩니다.
2. SYNONYM의 필요성
- 객체명을 짧고 단순하게 줄이기 위해
- 스키마명을 노출하지 않고 참조하기 위해
- 다른 사용자 스키마의 객체에 접근을 간단하게 만들기 위해
- 애플리케이션 유지보수 시 객체명을 변경하지 않아도 되게 하기 위해
3. SYNONYM의 종류
| 종류 | 설명 | 스코프 |
|---|---|---|
| PRIVATE SYNONYM | 특정 사용자 스키마에만 존재 | 사용자 단위 |
| PUBLIC SYNONYM | 모든 사용자에게 동일하게 노출 | 데이터베이스 전체 |
4. PRIVATE SYNONYM 생성 예제
CREATE SYNONYM emp_syn FOR hr.employees;
현재 사용자 스키마에서 hr.employees 테이블을 emp_syn이라는 이름으로 참조할 수 있게 만듭니다.
5. PUBLIC SYNONYM 생성 예제
CREATE PUBLIC SYNONYM emp_pub FOR hr.employees;
모든 사용자가 emp_pub이라는 이름으로 hr.employees 테이블을 참조할 수 있습니다.
6. SYNONYM 사용 예
SELECT employee_id, first_name FROM emp_syn;
원래는 SELECT employee_id, first_name FROM hr.employees를 입력해야 하지만, 시노님으로 간편화됩니다.
7. SYNONYM 존재 확인
USER_SYNONYMS: 현재 사용자 소유의 시노님 목록ALL_SYNONYMS: 접근 가능한 모든 시노님 목록DBA_SYNONYMS: 전체 데이터베이스 시노님 목록 (DBA 전용)
SELECT synonym_name, table_owner, table_name
FROM user_synonyms;
8. SYNONYM 삭제
-- 개인 시노님 삭제
DROP SYNONYM emp_syn;
-- 공개 시노님 삭제
DROP PUBLIC SYNONYM emp_pub;
9. 실무 활용 예
- 뷰 또는 테이블을
SYNONYM으로 감싸고, 실제 객체 이름이 바뀌더라도 애플리케이션 쿼리는 수정하지 않음 - 부서별 스키마 구조가 동일한 경우, 시노님을 통해 하나의 쿼리 템플릿으로 모든 부서를 처리
- 데이터 마이그레이션 또는 테스트 환경 분리 시 동일한 시노님 이름 사용으로 코드 일관성 유지
10. SYNONYM 사용 시 주의사항
- PUBLIC SYNONYM은 충돌을 방지하기 위해 신중하게 사용
- 의존 객체가 삭제되면 시노님은 깨진 상태로 남음 (ORACLE-00980 오류 발생 가능)
- 뷰나 프로시저 내에서 사용 시, 시노님 변경이 전체 영향을 줄 수 있음
- 스키마가 다른 동일 객체명이 있을 경우, 시노님 우선순위에 주의
11. VIEW vs SYNONYM
| 항목 | VIEW | SYNONYM |
|---|---|---|
| 정의 대상 | SELECT 결과 집합 | 모든 SQL 객체 (테이블, 뷰 등) |
| 데이터 보유 | 없음 (가상 테이블) | 없음 (단순 별칭) |
| 작성 목적 | 복잡한 쿼리 단순화 | 접근 경로 단축 |
| DML 지원 | 조건부 지원 | 원본 객체에 따라 결정 |
12. 결론
Oracle SYNONYM은 단순한 별칭 기능을 넘어, 객체 구조의 추상화와 SQL 코드의 유지보수성 향상에 매우 유용한 기능입니다. 특히 대규모 시스템에서 모듈 간 객체 참조를 단순화하고, 객체 이름 변경이나 스키마 구조 변경에 유연하게 대처할 수 있는 강력한 수단입니다.
출처
- Oracle 공식 문서: https://docs.oracle.com/en/database/
- Oracle SQL Reference Guide
- 실무 오라클 개발과 튜닝 - 김정민 저
728x90
'Database > Oracle' 카테고리의 다른 글
| [ORACLE] INDEX() 성능 향상을 위한 인덱스 종류와 예제 완전 정복 (0) | 2025.06.09 |
|---|---|
| [ORACLE] LOCK TABLE() 문법부터 예제까지 한눈에 이해하기 (0) | 2025.06.09 |
| [ORACLE] VIEW() 가상 테이블로 복잡한 SQL을 단순하게 만드는 방법 (0) | 2025.06.09 |
| [ORACLE] SEQUENCE() 자동 증가 값 생성 원리와 실전 예제 완벽 정리 (0) | 2025.06.09 |
| [ORACLE] PROFILE() 비밀번호 정책과 로그인 제한을 한 번에 설정하는 법 (0) | 2025.06.08 |