1. Synonym์ด๋?
Synonym(์๋ ธ๋) ์ Oracle DB์์ ํ ์ด๋ธ, ๋ทฐ, ์ํ์ค, ํ๋ก์์ ๋ฑ ๋ค์ํ ๊ฐ์ฒด์ ๋ณ๋ช (Alias)์ ๋ถ์ด๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ฝ๊ฒ ๋งํด, ์ค์ ๊ฐ์ฒด ์ด๋ฆ ๋์ ๋ด๊ฐ ์ํ๋ ์ด๋ฆ์ผ๋ก ์ ๊ทผํ ์ ์๊ฒ ํด์ฃผ๋ ๋ณ๋ช ํ ๊ฐ์ ๊ฐ๋ ์ ๋๋ค.
์ค์ ๊ฐ์ฒด: HR.EMPLOYEES
์๋
ธ๋: EMP ← ์ด๊ฑธ๋ก ์ ๊ทผ ๊ฐ๋ฅ
2. Synonym์ ์ฌ์ฉํ๋ ์ด์
2-1) ๋ค๋ฅธ ์คํค๋ง ๊ฐ์ฒด์ ๊ฐํธํ๊ฒ ์ ๊ทผ
๋ค๋ฅธ ์คํค๋ง์ ํ
์ด๋ธ์ ์ฐธ์กฐํ ๋ ์๋๋ ์คํค๋ง๋ช
.ํ
์ด๋ธ๋ช
ํ์์ผ๋ก ์จ์ผ ํฉ๋๋ค.
-- ์๋
ธ๋ ์์ด
SELECT * FROM HR.EMPLOYEES;
SELECT * FROM SCOTT.DEPT;
-- ์๋
ธ๋ ์ฌ์ฉ ํ
SELECT * FROM EMP; -- HR.EMPLOYEES๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋
ธ๋
SELECT * FROM DEPT; -- SCOTT.DEPT๋ฅผ ๊ฐ๋ฆฌํค๋ ์๋
ธ๋
2-2) ๊ธด ๊ฐ์ฒด ์ด๋ฆ์ ์งง๊ฒ
-- ์๋
ธ๋ ์์ด
SELECT * FROM SYSTEM.DBA_LONG_TABLE_NAME_REPORT_2024;
-- ์๋
ธ๋ ์ฌ์ฉ ํ
SELECT * FROM REPORT;
2-3) ์์น ํฌ๋ช ์ฑ (Location Transparency)
์ค์ ๊ฐ์ฒด์ ์์น(์คํค๋ง, DB ๋งํฌ ๋ฑ)๊ฐ ๋ฐ๋์ด๋
์๋
ธ๋๋ง ์์ ํ๋ฉด ๋๋ฏ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
๊ธฐ์กด: APP_USER.ORDER_TABLE → ์๋
ธ๋: ORDERS
๋ณ๊ฒฝ: NEW_SCHEMA.ORDER_TABLE → ์๋
ธ๋: ORDERS (์๋
ธ๋๋ง ์ฌ์์ฑ)
→ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋ณ๊ฒฝ ์์ โ
3. Synonym์ ์ข ๋ฅ
Oracle Synonym์ Private๊ณผ Public ๋ ๊ฐ์ง๋ก ๋๋ฉ๋๋ค.
| ๊ตฌ๋ถ | Private Synonym | Public Synonym |
|---|---|---|
| ์ ๊ทผ ๋ฒ์ | ์์ฑํ ์ฌ์ฉ์๋ง ์ฌ์ฉ ๊ฐ๋ฅ | ๋ชจ๋ ์ฌ์ฉ์ ์ฌ์ฉ ๊ฐ๋ฅ |
| ์์ฑ ๊ถํ | ์ผ๋ฐ ์ฌ์ฉ์ ๊ฐ๋ฅ | DBA ๊ถํ ํ์ |
| ์์ฑ ํค์๋ | CREATE SYNONYM |
CREATE PUBLIC SYNONYM |
| ์ฃผ ์ฉ๋ | ๊ฐ์ธ ํธ์์ฉ | ๊ณตํต ๊ฐ์ฒด ๊ณต์ ์ฉ |
| ์ถฉ๋ ์ ์ฐ์ ์์ | โ Private์ด ์ฐ์ | Public์ ํ์์ |
4. ๊ธฐ๋ณธ ๋ฌธ๋ฒ
์๋ ธ๋ ์์ฑ
-- Private Synonym ์์ฑ
CREATE SYNONYM ์๋
ธ๋๋ช
FOR ์คํค๋ง๋ช
.๊ฐ์ฒด๋ช
;
-- Public Synonym ์์ฑ (DBA ๊ถํ ํ์)
CREATE PUBLIC SYNONYM ์๋
ธ๋๋ช
FOR ์คํค๋ง๋ช
.๊ฐ์ฒด๋ช
;
์๋ ธ๋ ์ญ์
-- Private Synonym ์ญ์
DROP SYNONYM ์๋
ธ๋๋ช
;
-- Public Synonym ์ญ์
DROP PUBLIC SYNONYM ์๋
ธ๋๋ช
;
์๋ ธ๋ ์ฌ์์ฑ (OR REPLACE)
-- ๊ธฐ์กด ์๋
ธ๋์ ์ญ์ ํ์ง ์๊ณ ๋ฐ๋ก ๊ต์ฒด
CREATE OR REPLACE SYNONYM ์๋
ธ๋๋ช
FOR ์คํค๋ง๋ช
.๊ฐ์ฒด๋ช
;
5. ์๋ ธ๋ ์ ๋ณด ์กฐํ
์์ฑ๋ ์๋ ธ๋ ๋ชฉ๋ก์ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ด ๊ณ์ ์ ์๋ ธ๋ ์กฐํ
-- ํ์ฌ ์ฌ์ฉ์์ Private ์๋
ธ๋ ๋ชฉ๋ก
SELECT SYNONYM_NAME,
TABLE_OWNER,
TABLE_NAME
FROM USER_SYNONYMS
ORDER BY SYNONYM_NAME;
์์
| SYNONYM_NAME | TABLE_OWNER | TABLE_NAME |
|---|---|---|
| EMP | HR | EMPLOYEES |
| EMP_SEQ | HR | EMPLOYEES_SEQ |
| EMP_VIEW | HR | EMP_DETAILS_VIEW |
| DEPT | SCOTT | DEPT |
๋ชจ๋ ์๋ ธ๋ ์กฐํ (DBA ๊ถํ)
-- ์ ์ฒด ์๋
ธ๋ ์กฐํ (DBA ๊ถํ ํ์)
SELECT OWNER,
SYNONYM_NAME,
TABLE_OWNER,
TABLE_NAME
FROM DBA_SYNONYMS
WHERE TABLE_OWNER = 'HR' -- ํน์ ์คํค๋ง ํํฐ๋ง
ORDER BY SYNONYM_NAME;
Public ์๋ ธ๋ ์กฐํ
-- Public ์๋
ธ๋ ์กฐํ
SELECT SYNONYM_NAME,
TABLE_OWNER,
TABLE_NAME
FROM ALL_SYNONYMS
WHERE OWNER = 'PUBLIC'
ORDER BY SYNONYM_NAME;
6. Private vs Public ์๋ ธ๋ ์ฐ์ ์์
๊ฐ์ ์ด๋ฆ์ Private๊ณผ Public ์๋ ธ๋์ด ๋์์ ์กด์ฌํ ๊ฒฝ์ฐ, Private ์๋ ธ๋์ด ์ฐ์ ์ ์ฉ
-- Public ์๋
ธ๋ ์์ฑ (DBA๊ฐ ์์ฑ)
CREATE PUBLIC SYNONYM EMP FOR HR.EMPLOYEES;
-- Private ์๋
ธ๋ ์์ฑ (์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์์ฑ)
CREATE SYNONYM EMP FOR SCOTT.EMP;
-- EMP ์กฐํ ์ → Private ์๋
ธ๋ ์ฐ์ ์ ์ฉ
SELECT * FROM EMP; -- SCOTT.EMP ์กฐํ๋จ
์ฐ์ ์์
1์์: ์์ ์ ์คํค๋ง์ ์๋ ์ค์ ๊ฐ์ฒด
2์์: Private Synonym
3์์: Public Synonym
7. DB Link์ ํจ๊ป ์ฌ์ฉ
์๊ฒฉ DB์ ๊ฐ์ฒด๋ฅผ ๋ก์ปฌ์ฒ๋ผ ์ฌ์ฉํ ๋ ์๋ ธ๋๊ณผ DB Link๋ฅผ ํจ๊ป ํ์ฉํฉ๋๋ค.
-- DB Link ์์ฑ
CREATE DATABASE LINK remote_db
CONNECT TO user IDENTIFIED BY password
USING 'remote_tns';
-- ์๊ฒฉ DB ํ
์ด๋ธ์ ์๋
ธ๋ ์์ฑ
CREATE SYNONYM REMOTE_EMP
FOR HR.EMPLOYEES@remote_db;
-- ์๋
ธ๋์ผ๋ก ์๊ฒฉ DB ์กฐํ (๋ก์ปฌ์ฒ๋ผ ์ฌ์ฉ)
SELECT * FROM REMOTE_EMP;
-- HR.EMPLOYEES@remote_db ์ ๋์ผ
8. ์์ฃผ ์ฐ์ด๋ ํจํด
ํจํด 1 — ๊ณตํต ํ ์ด๋ธ Public ์๋ ธ๋
์ฌ๋ฌ ์คํค๋ง์์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ์ฝ๋์ฑ ํ ์ด๋ธ์ Public ์๋ ธ๋์ ์์ฑํฉ๋๋ค.
-- DBA๊ฐ ๊ณตํต ์ฝ๋ ํ
์ด๋ธ์ Public ์๋
ธ๋ ์์ฑ
CREATE PUBLIC SYNONYM COMMON_CODE
FOR COMMON.CODE_MASTER;
-- ๋ชจ๋ ์ฌ์ฉ์๊ฐ ์คํค๋ง ์์ด ๋ฐ๋ก ์ฌ์ฉ
SELECT * FROM COMMON_CODE WHERE CODE_TYPE = 'STATUS';
ํจํด 2 — ์คํค๋ง ๋ณ๊ฒฝ ์ ์๋ ธ๋๋ง ๊ต์ฒด
๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ์คํค๋ง๋ก ์ด๋ํ์ ๋ ์๋ ธ๋๋ง ์ฌ์์ฑํฉ๋๋ค.
-- ๊ธฐ์กด: APP_USER ์คํค๋ง์ ORDERS ํ
์ด๋ธ
CREATE SYNONYM ORD FOR APP_USER.ORDERS;
-- ์คํค๋ง ๋ณ๊ฒฝ ํ: NEW_USER ์คํค๋ง๋ก ์ด๋
CREATE OR REPLACE SYNONYM ORD FOR NEW_USER.ORDERS;
-- ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋ ๋ณ๊ฒฝ ์์ด ๊ทธ๋๋ก ์ฌ์ฉ ๊ฐ๋ฅ โ
ํจํด 3 — ๊ฐ๋ฐ/์ด์ ํ๊ฒฝ ๋ถ๋ฆฌ
-- ๊ฐ๋ฐ ํ๊ฒฝ
CREATE OR REPLACE SYNONYM ORDERS FOR DEV_SCHEMA.ORDERS;
-- ์ด์ ํ๊ฒฝ
CREATE OR REPLACE SYNONYM ORDERS FOR PROD_SCHEMA.ORDERS;
-- ์ฟผ๋ฆฌ๋ ๋์ผํ๊ฒ ์ฌ์ฉ
SELECT * FROM ORDERS;
9. ํ๊ฒฝ๋ณ ์๋ ธ๋(๊ฐ๋ฐ, ์คํ ์ด์ง) ๊ตฌ์ฑ์ด ๋ค๋ฅธ ์ด์
์ค๋ฌด์์ DEV/STG/PROD ํ๊ฒฝ์ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ์ด๋ฐ ์๋ฌธ์ ๊ฐ์ง๊ฒ ๋์๋ ๊ฒ ๊ฐ์ต๋๋ค.
DEV(๊ฐ๋ฐ) ์๋ฒ์๋ ์๋ ธ๋์ด ์๋๋ฐ, STG(์คํ ์ด์ง) ์๋ฒ์๋ ๋ณ๋ ์คํค๋ง์ ์๋ ธ๋์ด ๊ฑธ๋ ค์๋ค. ์ ๊ทธ๋ฐ๊ฑธ๊น?
DEV ์๋ฒ — ์๋ ธ๋ ์์
[DEV ์๋ฒ]
์คํค๋ง: comet (๋จ์ผ ์คํค๋ง)
๊ฐ๋ฐ์๊ฐ ์ง์ comet ์คํค๋ง์ ์ ์
→ ๊ฐ์ ์คํค๋ง๋๊น ์๋
ธ๋ ๋ถํ์
→ SELECT * FROM ํ
์ด๋ธ๋ช
์ผ๋ก ๋ฐ๋ก ์ ๊ทผ
DEV๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ํด๋น ์คํค๋ง์ ๋ถ์ด์ ๊ฐ๋ฐํ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์๋
ธ๋์ ๊ฑธ ์ด์ ๊ฐ ์์ต๋๋ค.
๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ ํ
์คํธํ๋ ํ๊ฒฝ์ด๋ผ ๋จ์ํ๊ฒ ์ ์งํฉ๋๋ค.
STG ์๋ฒ — ๋ณ๋ ์คํค๋ง + ์๋ ธ๋
[STG ์๋ฒ]
์คํค๋ง 1: comet ← ์ค์ ๋ฐ์ดํฐ/๊ฐ์ฒด๊ฐ ์๋ ์คํค๋ง
์คํค๋ง 2: cometqa ← ํ
์คํธ์ฉ ์ ์ ๊ณ์ ์คํค๋ง
cometqa ์
์ฅ์์ comet์ ๋จ์ ์คํค๋ง
→ comet.ํ
์ด๋ธ๋ช
์ผ๋ก ์ ๊ทผํด์ผ ํจ
→ ๊ทผ๋ฐ ๋งค๋ฒ comet. ๋ถ์ด๊ธฐ ๋ฒ๊ฑฐ๋กญ๊ณ
→ ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๊ฐ DEV๋ ๋ฌ๋ผ์ง๋ฉด ์ ๋๋๊น
→ ์๋
ธ๋์ผ๋ก comet.ํ
์ด๋ธ → ํ
์ด๋ธ๋ช
์ผ๋ก ๋ณ์นญ
-- STG ์๋ฒ์์ cometqa ์คํค๋ง์ ์๋
ธ๋ ์์ฑ
CREATE SYNONYM ORDERS FOR COMET.ORDERS;
CREATE SYNONYM MEMBERS FOR COMET.MEMBERS;
-- ์ด์ cometqa์์ ์คํค๋ง๋ช
์์ด ์ ๊ทผ ๊ฐ๋ฅ
SELECT * FROM ORDERS; -- COMET.ORDERS์ ๋์ผ
SELECT * FROM MEMBERS; -- COMET.MEMBERS์ ๋์ผ
ํต์ฌ ์ด์ — ์ฟผ๋ฆฌ ์ฝ๋ ํต์ผ์ฑ
์ด๊ฒ ๊ฐ์ฅ ์ค์ํ ์ด์ ์ ๋๋ค. ์๋ ธ๋์ด ์์ผ๋ฉด ํ๊ฒฝ๋ง๋ค ์ฟผ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋๋ค.
-- โ ์๋
ธ๋ ์๋ ๊ฒฝ์ฐ: ํ๊ฒฝ๋ง๋ค ์ฟผ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง
DEV ์ฟผ๋ฆฌ : SELECT * FROM ORDERS
STG ์ฟผ๋ฆฌ : SELECT * FROM COMET.ORDERS ← ์คํค๋ง๋ช
๋ถ์ฌ์ผ ํจ
PROD ์ฟผ๋ฆฌ : SELECT * FROM COMET.ORDERS
-- โ
์๋
ธ๋ ์๋ ๊ฒฝ์ฐ: ๋ชจ๋ ํ๊ฒฝ์์ ๋์ผํ ์ฟผ๋ฆฌ
DEV ์ฟผ๋ฆฌ : SELECT * FROM ORDERS
STG ์ฟผ๋ฆฌ : SELECT * FROM ORDERS ← ์๋
ธ๋ ๋๋ถ์ ๋์ผ
PROD ์ฟผ๋ฆฌ : SELECT * FROM ORDERS ← ์๋
ธ๋ ๋๋ถ์ ๋์ผ
ํ๊ฒฝ๋ง๋ค ์ฟผ๋ฆฌ๊ฐ ๋ฌ๋ผ์ง๋ฉด ์ ํ๋ฆฌ์ผ์ด์
์ฝ๋๋ฅผ ํ๊ฒฝ๋ณ๋ก ๋ฐ๋ก ๊ด๋ฆฌํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๊น๋๋ค.
์๋
ธ๋์ ๊ฑธ์ด๋๋ฉด ์ด๋ ํ๊ฒฝ์์๋ ๊ฐ์ ์ฟผ๋ฆฌ๋ก ๋์ํ๊ฒ ๋ฉ๋๋ค.
ํ๊ฒฝ๋ณ ๊ตฌ์ฑ ์์ฝ
| ํ๊ฒฝ | ์คํค๋ง ๊ตฌ์ฑ | ์๋ ธ๋ | ์ด์ |
|---|---|---|---|
| DEV | ๋จ์ผ ์คํค๋ง | โ ์์ | ๊ฐ๋ฐ์๊ฐ ์ง์ ์คํค๋ง ์ ์ |
| STG | comet + cometqa | โ ์์ | ๋ณ๋ ๊ณ์ ์์ comet ์คํค๋ง ์ ๊ทผ |
| PROD | comet + ์ด์๊ณ์ | โ ์์ | ์ด์ ๊ณ์ ๊ณผ ์ค์ ์คํค๋ง ๋ถ๋ฆฌ |
๊ฒฐ๋ก
ํ๊ฒฝ๋ณ๋ก ์๋ ธ๋์ด ๋ค๋ฅธ ๊ฑด "์ด๋ ํ๊ฒฝ์์๋ ๊ฐ์ ์ฝ๋๋ก ๋์ํ๊ฒ ํ๊ธฐ ์ํ ์๋จ" ์ ๋๋ค.
DEV์์๋ ๋น ๋ฅด๊ณ ๋จ์ํ๊ฒ, STG/PROD ์์๋ ๊ณ์ ๋ถ๋ฆฌ + ์๋ ธ๋์ผ๋ก ๋ณด์ ๋ฐ ์ฝ๋ ํต์ผ์ฑ์ ์ถ๊ตฌํ๋ ๊ตฌ์กฐ ์ ๋๋ค.
10. ์๋ ธ๋ ์ฌ์ฉ ์ ์ฃผ์์ฌํญ
์๋ ธ๋์ ๊ถํ์ ๋ถ์ฌํ์ง ์๋๋ค
์๋ ธ๋์ ๋ง๋ค์ด๋ ์๋ณธ ๊ฐ์ฒด์ ๋ํ ์ ๊ทผ ๊ถํ์ด ์์ผ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋์ ์๋ณธ ๊ฐ์ฒด์ ๋ํ ๊ถํ์ ๋ณ๋๋ก ๋ถ์ฌํด์ผ ํฉ๋๋ค.
-- โ ์๋
ธ๋๋ง ์์ฑํ๋ฉด ๊ถํ ์์ด ์ ๊ทผ ๋ถ๊ฐ
CREATE SYNONYM EMP FOR HR.EMPLOYEES;
SELECT * FROM EMP; -- ORA-01031: insufficient privileges ์ค๋ฅ
-- โ
์๋ณธ ๊ฐ์ฒด ๊ถํ ๋ถ์ฌ ํ ์๋
ธ๋ ์ฌ์ฉ
GRANT SELECT ON HR.EMPLOYEES TO APP_USER;
CREATE SYNONYM EMP FOR HR.EMPLOYEES;
SELECT * FROM EMP; -- ์ ์ ์กฐํ
์๋ ธ๋์ ๊ฐ์ฒด๊ฐ ์๋๋ค
์๋
ธ๋์ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง์ง ์์ต๋๋ค.
์๋ณธ ๊ฐ์ฒด๊ฐ ์ญ์ ๋๋ฉด ์๋
ธ๋์ Invalid ์ํ๊ฐ ๋ฉ๋๋ค.
-- ์๋ณธ ํ
์ด๋ธ ์ญ์
DROP TABLE HR.EMPLOYEES;
-- ์๋
ธ๋ ์กฐํ ์ ์ค๋ฅ ๋ฐ์
SELECT * FROM EMP; -- ORA-04043: object EMP does not exist
-- Invalid ์๋
ธ๋ ํ์ธ
SELECT SYNONYM_NAME, STATUS
FROM USER_SYNONYMS
WHERE STATUS = 'INVALID';
Public ์๋ ธ๋ ์ด๋ฆ ์ถฉ๋ ์ฃผ์
Public ์๋
ธ๋์ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๋ฏ๋ก
Oracle ์์คํ
๊ฐ์ฒด์ ์ด๋ฆ์ด ๊ฒน์น์ง ์๋๋ก ์ฃผ์ํฉ๋๋ค.
-- โ ์์คํ
๊ฐ์ฒด์ ์ด๋ฆ์ด ๊ฒน์น ์ ์์ด ์ํ
CREATE PUBLIC SYNONYM DUAL FOR MY_SCHEMA.MY_TABLE;
-- โ
๋ช
ํํ ์ด๋ฆ์ผ๋ก ์์ฑ
CREATE PUBLIC SYNONYM MY_REPORT_TABLE FOR MY_SCHEMA.MY_TABLE;
11. ์ต์ข ์ ๋ฆฌ
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๊ฐ๋ | ๊ฐ์ฒด์ ๋ณ๋ช ์ ๋ถ์ด๋ ๊ธฐ๋ฅ |
| ์ข ๋ฅ | Private (๊ฐ์ธ์ฉ) / Public (์ ์ฒด ๊ณต์ ) |
| ์์ฑ ๊ฐ๋ฅ ๊ฐ์ฒด | ํ ์ด๋ธ, ๋ทฐ, ์ํ์ค, ํ๋ก์์ , ํจ์, DB Link ๋ฑ |
| ์ฃผ์ ์ฅ์ | ๊ธด ์ด๋ฆ ๋จ์ถ, ๋ค๋ฅธ ์คํค๋ง ์ ๊ทผ ํธ์, ์์น ํฌ๋ช ์ฑ |
| ์ฃผ์์ฌํญ | ๊ถํ์ ๋ณ๋ ๋ถ์ฌ ํ์, ์๋ณธ ์ญ์ ์ Invalid |
| ์ฐ์ ์์ | ์ค์ ๊ฐ์ฒด > Private > Public |
'๐ฅ๏ธ development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| MyBatis XML โ CDATA, #{}, ${} (0) | 2026.06.08 |
|---|---|
| ๋ด์ฅ Tomcat vs ์ธ๋ถ Tomcat (0) | 2026.05.15 |
