대덕인재/Oracle

[Oracle D-16] VIEW

꼬마버거 2025. 4. 22. 18:35

✅ 뷰(View)란?

**"가짜 테이블"**이야!
실제로 데이터를 저장하지는 않고, 진짜 테이블을 보는 창문 같은 것이야.

 

🎨 예시로 쉽게 설명!


진짜 테이블:
📋 CUSTOMERS라는 테이블이 있고, 거기에는 이름, 나이, 주소, 전화번호 등등이 있어.

근데 나는 이 중에 이름, 나이만 자주 보고 싶어!

그래서 이렇게 말해:

"이름하고 나이만 따로 보여주는 **창문(view)**을 만들어줘!"

그게 바로 VIEW야!
SELECT 문으로 만든 결과를 가짜 테이블처럼 저장하는 것!

 

✅ 왜 뷰를 사용할까?


 

이유 설명
🔒 보안 민감한 정보(예: 비밀번호, 급여 등)를 숨길 수 있어요.
🔁 편의성 복잡한 SELECT문을 매번 안 쓰고, 뷰 이름만 쓰면 돼서 편해요.
🔄 재사용성 여러 명이 같은 뷰를 사용하면 일관된 결과를 얻을 수 있어요.
🧼 정리정돈 너무 많은 테이블을 깔끔하게 뷰로 정리할 수 있어요.

 

 

✅ 뷰 만드는 방법

CREATE VIEW 뷰이름 AS
SELECT 열1, 열2, ...
FROM 테이블이름
WHERE 조건;

예시:

CREATE VIEW VIP_CUSTOMERS AS
SELECT MEM_ID, MEM_NAME, MEM_MILEAGE
FROM CUSTOMERS
WHERE MEM_MILEAGE >= 3000;

→ 이제 VIP_CUSTOMERS라는 가짜 테이블이 생긴 거야!
진짜 테이블은 CUSTOMERS, 근데 그걸 일부만 보여주는 창문이 VIP_CUSTOMERS야!

 

 

✅ 뷰 사용하는 방법

SELECT * FROM VIP_CUSTOMERS;

진짜 테이블처럼 사용할 수 있어!


✅ 뷰의 단점은?

  • 데이터를 직접 저장하진 않아!
  • 어떤 뷰는 **수정이 불가능(읽기 전용)**할 수 있어!
  • 진짜 테이블이 바뀌면 뷰도 같이 바뀌어 (자동 반영)

✅ 뷰 수정 / 삭제

  • 수정할 때:
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT ...
  • 삭제할 때:
DROP VIEW 뷰이름;

 

 

좋아! 이번엔 오라클 뷰(View)에서 자주 쓰이는 옵션들인
✅ WITH CHECK OPTION
✅ WITH READ ONLY
두 가지를 아주 쉽게 설명해줄게!


✅ 1. WITH CHECK OPTION

📌 뭔데?

"이 뷰에서 조건에 맞는 데이터만 수정할 수 있어!" 라는 뜻이야.


🎯 왜 써?

만약 뷰에서 조건 걸어놨는데,
그 조건을 깨뜨리는 수정을 하면 안 되니까 막아주는 역할이야.

 

CREATE VIEW vip_customers AS
SELECT * FROM customers
WHERE mem_mileage >= 3000
WITH CHECK OPTION;

 

이 뷰는 마일리지가 3000 이상인 고객만 보여줘.

그런데!

UPDATE vip_customers
SET mem_mileage = 2000
WHERE mem_id = 'user01';
 

이렇게 하면 마일리지가 3000 미만이 되니까 뷰 조건을 어기게 되지?

🔥 오류 발생!

왜? WITH CHECK OPTION이 걸려 있어서
"마일리지 3000 이상"이라는 조건을 깨는 수정은 못하게 막음!

 

✅ 2. WITH READ ONLY

📌 뭔데?

이 뷰는 그냥 보기만 가능!
🔒 수정(INSERT, UPDATE, DELETE)은 절대 안 돼!


🎯 왜 써?

민감한 데이터를 다룰 때,
누가 실수로라도 데이터를 수정 못 하게 하고 싶을 때 사용해!


📋 예시로 보기

CREATE VIEW only_view AS
SELECT mem_id, mem_name
FROM customers
WITH READ ONLY;
 
 

이 뷰는 단순히 회원 정보만 보여주는 뷰야.

이제 아래처럼 수정하면?

UPDATE only_view
SET mem_name = '바보'
WHERE mem_id = 'user01';
 

🔥 오류 발생!

이유? 이 뷰는 읽기 전용이니까! (WITH READ ONLY 때문!)

 

✅ 두 개 차이 비교!


 

구분 WITH CHECK OPTION WITH READ ONLY
목적 조건을 유지하며 수정 가능하게 함 아예 수정 못 하게 막음
INSERT/UPDATE 가능? 가능하지만 조건을 지켜야 함 불가능
DELETE 가능? 가능 불가능
주로 사용 예 일부 조건 데이터만 보여주는 뷰 완전히 잠궈야 할 뷰

 

같이 쓰기도 가능할까?

YES!

CREATE VIEW vip_view AS
SELECT * FROM customers
WHERE mem_mileage >= 3000
WITH CHECK OPTION
WITH READ ONLY;

이건 보기만 가능하고, 수정도 조건을 지켜야만 가능하다는 뜻인데
실제로는 WITH READ ONLY 때문에 아예 못 고침!

 

'대덕인재 > Oracle' 카테고리의 다른 글

[Oracle D-16] 비트맵 인덱스(Bitmap Index)  (0) 2025.04.22
[Oracle D-16] 시퀀스(Sequence)  (0) 2025.04.22
[Oracle D-15] Oracle 객체  (0) 2025.04.21
[Oracle D-15] 집합연산자(Set Operators)  (0) 2025.04.21
[Oracle D-12] ANSI JOIN  (0) 2025.04.19