๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
ORACLE/DB

[Oracle] ์˜ค๋ผํด ๋ทฐ(View) ์‚ฌ์šฉ๋ฒ• ๋ฐ ์ •๋ฆฌ :: ๋งˆ์ด์ž๋ชฝ

by ๐ŸŒปโ™š 2020. 3. 22.

View ๋ž€?

View๋Š” ์ €์žฅ๋œ SELECT ๋ฌธ์ด๋‹ค.

์˜ค๋ผํด์—๋Š” ํ…Œ์ด๋ธ”๋ง๊ณ ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. FROM์ ˆ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ํ…Œ์ด๋ธ”๋งŒ์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์œผ๋กœ View๋ผ๋Š” ์˜ค๋ผํด ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ  ์‹ค์ œ๋กœ ํ˜„์—…์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ค๋ธŒ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ View๋Š” ๋ฌด์—‡์ด๊ณ  ์™œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ผ๊นŒ์š”?

 

 

 

"View๋Š” ์ €์žฅ๋œ SELECT ๋ฌธ"์ด๋ผ๊ณ  ํ‘œํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ „์  ์˜๋ฏธ๋กœ "๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๋ถ€๋ถ„์ง‘ํ•ฉ"์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ์š”, ์‹ค์งˆ์ ์œผ๋กœ View๋ฅผ SELECT๋ฌธ์„ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์™€ ๊ฐ™์ด ํ‘œํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ผ๋Š”๊ฒŒ ๋ฌด์—‡์ผ๊นŒ์š”?

 

๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๋ถ€๋ถ„์ง‘ํ•ฉ?

๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๋ถ€๋ถ„์ง‘ํ•ฉ์ด๋ž€ ๊ฒƒ์€ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ํ‘œํ˜„์„ ํ•˜์ž๋ฉด ์ฐฝ๋ฌธ์„ ํ†ตํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๋ฉด ํ…Œ์ด๋ธ”์„ SELECT๋ฌธ์„ ํ†ตํ•ด์„œ ํ–‰, ์—ด์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ํ…Œ์ด๋ธ”๋“ค์„ JOIN ์‹œ์ผœ 1์ฐจ๋ก€ ๊ฐ€๊ณต๋œ ๋ฐ์ดํ„ฐ๋ฅผ View๋ผ๋Š” ์ฐฝ๋ฌธ์„ ํ†ตํ•ด์„œ ์กฐํšŒํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ƒฅ ํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•ด๋„ ๋ ํ…๋ฐ ๊ทธ๋Ÿผ ์™œ ์ด๋Ÿฐ VIEW๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”?

 

 

VIEW ์™œ ์‚ฌ์šฉํ• ๊นŒ?

๋ณด์•ˆ๊ฐ•ํ™”์™€ Query์˜ ๋‹จ์ˆœํ™”. ๋‘๊ฐ€์ง€ ์ด์œ ๋กœ VIEW๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

1. ๋ณด์•ˆ ๊ฐ•ํ™”

 

์˜ˆ๋ฅผ๋“ค์–ด 20๋ฒˆ ๋ถ€์„œ ์‚ฌ์›์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ 20๋ฒˆ ๋ถ€์„œ์žฅ์—๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ์ฃผ๋ ค๊ณ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ํ…Œ์ด๋ธ” ์ „์ฒด์— ๋Œ€ํ•œ ๊ถŒํ•œ์„ ์ค˜๋„ ์ƒ๊ด€์—†์ง€๋งŒ, ๋‹ค๋ฅธ ๋ถ€์„œ์‚ฌ์›๋“ค์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜ ๊ธ‰์—ฌ์ฒ˜๋Ÿผ ๊ฐœ์ธ์ ์ธ ์ •๋ณด๋ฅผ ๊ฐ™์ด ๋ณด์—ฌ์ค„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋Ÿด๋•Œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ผญ ํ•„์š”ํ•œ ์ •๋ณด๋งŒ ์ œ๊ณตํ•˜๋„๋ก ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์—ฌ VIEW๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํ•ด๋‹น VIEW์— ๋Œ€ํ•ด READ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด ์ค€๋‹ค๋ฉด ๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์„ ๊ฐ•ํ™” ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ Access๋ฅผ ์ œํ•œํ•˜๊ณ  ๋™์ธํ•œ ๋ฐ์ดํ„ฐ์˜ ๋‹ค๋ฅธ ๋ทฐ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ๋…๋ฆฝ์„ฑ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

2. Query ๋‹จ์ˆœํ™”

๋ณด์•ˆ์ ์ธ ์ธก๋ฉด์„ ๊ฐ•ํ™”ํ•˜๋Š” ๊ฒƒ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Query๋ฅผ ๋‹จ์ˆœํ™” ์‹œ์ผœ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ๋Š” ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ์„ ์‹œ์ผฐ์ง€๋งŒ, ๋‹ค์ˆ˜์˜ ํ…Œ์ด๋ธ”์„ ์กฐ์ธ์‹œํ‚ค๊ณ  SubQuery๊นŒ์ง€ ์จ๊ฐ€๋ฉด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ค˜์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ์ž๋Š” ํ™”๋ฉด์œผ๋กœ ์ถœ๋ ฅ๋œ ๊ฒฐ๊ณผ๋งŒ ๋ณด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ™์ด ์ผ์„ ํ•˜๋Š” ๋™๋ฃŒ๋‚˜ ํ˜‘๋ ฅ์—…์ฒด, ๊ฐœ๋ฐœ์ž ๋“ฑ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ๋ณด๊ณ  ์ž‘์—…์„ ํ•ด์•ผํ•˜๋Š” ์‚ฌ์šฉ์ž๋ผ๋ฉด ํ•ด๋‹น ์Šคํ‚ค๋งˆ์™€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ดํ•ด๋„ ํ•„์š”ํ•˜๊ณ  Query ๋ถ„์„์—๋„ ์‹œ๊ฐ„์„ ํˆฌ์žํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ช…์นญ ๋งŒ์œผ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” VIEW๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ œ๊ณตํ•˜๋ฉด ๋‹จ์ˆœํ™”๋œ ์ฟผ๋ฆฌ๋กœ ์ž‘์—…์‹œ๊ฐ„๋„ ๋‹จ์ถ• ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

View Performance

View๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡๊ฐ€์ง€ ์ด์ ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š”๋ฐ ๊ทธ๋ ‡๋‹ค๋ฉด Performance์ ์ธ ์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ๋Š” ์–ด๋–จ๊นŒ์š”?

 

View ์ƒ์„ฑ์‹œ ์‚ฌ์šฉ๋œ SELECT๋ฌธ์„ ๊ทธ๋Œ€๋กœ ์ด์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํฐ ์ฐจ์ด๋Š” ์—†์Šต๋‹ˆ๋‹ค.

 

๋‹ค๋งŒ, View ์ƒ์„ฑ์‹œ force ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  View๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ ๋‹จ๊ณ„๋ฅผ ๊ฑด๋„ˆ๋›ฐ์–ด ๋ฏธ์„ธํ•˜๊ฒŒ ๋น ๋ฅผ ์ˆ˜๋Š” ์žˆ์Šต๋‹ˆ๋‹ค. View๋Š” Performance๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

 

View ์ƒ์„ฑ

CREATE ์ƒ๋žต๊ฐ€๋Šฅ[OR REPLACE] ์ƒ๋žต๊ฐ€๋Šฅ[FORCE | NOFORCE] VIEW ๋ทฐ๋ช…
AS (SELECT๋ฌธ)
์ƒ๋žต๊ฐ€๋Šฅ[WITH CHECK OPTION ์ƒ๋žต๊ฐ€๋Šฅ[CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…]]
์ƒ๋žต๊ฐ€๋Šฅ[WITH READ ONLY ์ƒ๋žต๊ฐ€๋Šฅ[CONSTRAINT ์ œ์•ฝ์กฐ๊ฑด๋ช…]]

View ์ƒ์„ฑ ์˜ˆ์ œ๋Š” Oracle Scott ๊ณ„์ •์œผ๋กœ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

1
GRANT CREATE VIEWS TO SCOTT;

 

SCOTT ๊ณ„์ •์— VIEW๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ถŒํ•œ์ด ์—†๋‹ค๋ฉด DBA๊ถŒํ•œ์˜ ๊ณ„์ •์—์„œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์ค๋‹ˆ๋‹ค.

 

20๋ฒˆ ๋ถ€์„œ์— ๋Œ€ํ•œ ์ •๋ณด๋‹ด์€ VIEW๋ฅผ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
CREATE OR REPLACE VIEW EMP_DEPT20
AS
SELECT
    EMPNO
    ,ENAME
    ,JOB
    ,SAL
    ,DEPTNO
FROM EMP
WHERE DEPTNO = 20;

 

1
SELECT * FROM EMP_DEPT20;

 

FROM ์ ˆ์—์„œ ํ…Œ์ด๋ธ” ๋Œ€์‹  VIEW ๋ช…์นญ์œผ๋กœ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. WHERE ์ ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์„ ๊ฑธ์–ด ์ค„ ์ˆ˜๋„ ์žˆ๋„ ORDER BY๋ฌธ์œผ๋กœ ์ •๋ ฌ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

 

DATA DICTIONARY ํ™•์ธ

1
2
3
4
SELECT
    VIEW_NAME
    ,TEXT
FROM USER_VIEWS;

Data Dictionary๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด๋ฉด TEXT ์นผ๋Ÿผ์— View๋ฅผ ์ƒ์„ฑํ• ๋•Œ ์‚ฌ์šฉํ•œ SELECT๋ฌธ์ด ๊ฐ™์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 

MAIN QUERY์—์„œ SELECT ๋ฌธ์ด ์‹คํ–‰๋˜์—ˆ์„๋•Œ FROM์ ˆ์— ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  VIEW๋กœ ๊ฒ€์ƒ‰์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ดํ›„ FROM์ ˆ์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” SELECT๋ฌธ์œผ๋กœ ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

 

 

VIEW ์‚ญ์ œ

VIEW์˜ ์‚ญ์ œ๋Š” DROP ๋ช…๋ น์„ ํ†ตํ•ด์„œ ํ• ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1
DROP VIEW EMP_DEPT20;

 

 

VIEW ์ˆ˜์ •

VIEW ์˜ค๋ธŒ์ ํŠธ๋Š” ALTER ๋ช…๋ น์ด ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ DROP ์ดํ›„ ๋‹ค์‹œ ์ƒ์„ฑํ•ด์„œ ๋‹ค์‹œ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ.... VIEW๋Š” ์ƒ์„ฑ์‹œ OR REPLACE ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒˆ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

DROP์„ ํ•˜๊ฒŒ ๋˜๋ฉด ORACLE ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์ง€๋‹ˆ๊นŒ ๊ถŒํ•œ๊นŒ์ง€ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. OR REPLACE๋กœ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๋ฉด ๊ถŒํ•œ ๊ทธ๋Œ€๋กœ ๋‚จ์•„ ์žˆ๊ณ  ํ•ด๋‹น SELECT๋ฌธ๋งŒ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค.

 

์‹ค์ œ ์šด์˜๋˜๋Š” ์„œ๋น„์Šค์—์„œ VIEW๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ VIEW์˜ SELECT ๋ฌธ์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ DROP์„ ํ†ตํ•ด ์‚ญ์ œ ํ›„ ์ƒ์„ฑํ•˜๋ฉด ๋‹ค์‹œ ๊ถŒํ•œ์„ ๋ถ€์—ฌํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

VIEW ์ƒ์„ฑ ์˜ต์…˜

OR REPLACE

๋ทฐ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋‹ค์‹œ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋ทฐ์˜ ๊ถŒํ•œ์€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค.

 

FORCE | NO FORCE(Default)

FORCE์™€ NO FORCE ์˜ต์…˜์€ ์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์„ค๊ณ„๋ฅผํ•˜๋Š” ์‚ฌ๋žŒ๊ณผ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์€ ์‹ค์ œ ๋ถ„๋ฆฌ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์„ค๊ณ„๋ฅผ ํ•˜๋Š” ์ชฝ์—์„œ ๋ฏธ๋ฆฌ ํ…Œ์ด๋ธ” ์ •์˜์„œ๋ฅผ ํ™•์ธํ•˜๊ณ  VIEW๋ฅผ ๋งŒ๋“ค์–ด ๋†“๊ธฐ ์œ„ํ•ด FORCE ์˜ต์…˜์„ ์‚ฌ์šฉํ•ด์„œ ํ…Œ์ด๋ธ”์ด ๊ตฌ์ถ•๋˜๊ธฐ ์ด์ „์— ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

FORCE

 VIEW๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฟผ๋ฆฌ ์ปดํŒŒ์ผํ•˜์ง€ ์•Š๊ณ  ๋งŒ๋“ญ๋‹ˆ๋‹ค.

 

NO FORCE

VIEW๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์ฟผ๋ฆฌ ์ปดํŒŒ์ผ์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. (๊ธฐ๋ณธ๊ฐ’)

 

 

WITH CHECK OPTION

DML ์ž‘์—…์ด ๋ทฐ ์˜์—ญ์—๋งŒ ์ ์šฉ๋˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ๋ฒˆ ์ƒ์„ฑ๋œ ๋ทฐ์—์„œ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์—†๋„๋ก VIEW ๋‹จ์—์„œ CRUD๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

WITH READ ONLY

DML ์ž‘์—…์„ ๋ชปํ•˜๊ฒŒํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

 

๋Œ“๊ธ€