데이터베이스에서 뷰(View)는 가상의 테이블로, 복잡한 쿼리를 숨기고 보안을 강화하며 재사용성을 높여줍니다. 본 포스트에서는 뷰 개념부터 생성·수정·활용 예제까지 단계별로 정리했습니다.
1. 뷰(View)란?
- 실제 데이터를 저장하지 않는 가상의 테이블
- 뷰 내부에 저장된 SQL이 실행되어 결과를 반환
- 주요 장점
- 편리성: 복잡한 쿼리를 간결한 뷰 이름으로 대체
- 보안성: 민감 데이터를 숨기거나 특정 사용자에게만 공개
2. 뷰 생성 문법
CREATE [OR REPLACE] VIEW 뷰_이름 AS
SELECT 컬럼1, 컬럼2, …
FROM 테이블명
WHERE 조건;
- OR REPLACE: 기존 뷰를 수정할 때 사용
- 뷰 생성 후 SELECT * FROM 뷰_이름;으로 조회
3. 뷰 활용 예제
3.1. 남/여 사원 전용 뷰
CREATE OR REPLACE VIEW sawon_man_view AS --sawon_man_view가 있다는 전제 하에, 'OR REPLACE'가 추가됨
SELECT * FROM sawon WHERE sasex = '남자';
CREATE OR REPLACE VIEW sawon_woman_view AS
SELECT * FROM sawon WHERE sasex = '여자';
3.2. 입사 정보 확장 뷰
CREATE OR REPLACE VIEW sawon_view AS
SELECT
s.*,
TO_NUMBER(TO_CHAR(sahire,'YYYY')) AS hire_year,
TO_NUMBER(TO_CHAR(sahire,'MM')) AS hire_month,
CASE FLOOR(TO_NUMBER(TO_CHAR(sahire,'MM'))/3)
WHEN 1 THEN '봄'
WHEN 2 THEN '여름'
WHEN 3 THEN '가을'
ELSE '겨울'
END AS hire_season
FROM sawon s;
- hire_year, hire_month로 기간 정보 추출
- 분기를 계산해 hire_season 컬럼 생성
4. 뷰로 뷰 생성하기
뷰는 다른 뷰를 기반으로도 생성할 수 있습니다.
CREATE OR REPLACE VIEW gogek_view3 AS
SELECT
gv2.gobun,
gv2.goname,
gv2.goaddr,
gv2.godam,
SUBSTR(gv2.gojumin,1,8) || '******' AS gojumin,
TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) - gv2.goborn AS goage,
CASE MOD(gv2.goborn,12)
WHEN 1 THEN '닭'
WHEN 2 THEN '개'
WHEN 3 THEN '돼지'
WHEN 4 THEN '쥐'
WHEN 5 THEN '소'
WHEN 6 THEN '호랑이'
WHEN 7 THEN '토끼'
WHEN 8 THEN '용'
WHEN 9 THEN '뱀'
WHEN 10 THEN '말'
WHEN 11 THEN '양'
ELSE '원숭이'
END AS goganji,
(SUBSTR('경신임계갑을병정무기', MOD(gv2.goborn,10)+1,1) ||
SUBSTR('신유술해자축인묘진사오미',MOD(gv2.goborn,12)+1,1)) AS goddi,
CASE
WHEN TO_NUMBER(SUBSTR(gv2.gojumin,9,2)) BETWEEN 0 AND 8 THEN '서울'
WHEN TO_NUMBER(SUBSTR(gv2.gojumin,9,2)) BETWEEN 9 AND 12 THEN '부산'
WHEN TO_NUMBER(SUBSTR(gv2.gojumin,9,2)) BETWEEN 14 AND 15 THEN '인천'
-- 이하 생략 --
ELSE '미상'
END AS goborncity
FROM gogek_view2 gv2;
5. 뷰를 활용한 고급 예제
5.1. 고객 개인정보 뷰
CREATE OR REPLACE VIEW gogek_view AS
SELECT
gobun, goname, goaddr, godam,
SUBSTR(gojumin,1,8) || '******' AS masked_jumin
FROM gogek;
SELECT * FROM gogek_view;
- 주민등록번호 뒷자리를 마스킹
- 민감 정보 노출 방지
5.2. 퇴직금 계산 뷰
퇴직금 계산 방식
- 퇴직금1 = (근속년수 × 월급) + (잔여월수/12 × 월급)
- 퇴직금2 = (총근무월수 × 월급) / 12
CREATE OR REPLACE VIEW sawon_view2 AS
SELECT
sv1.*,
FLOOR(sv1.근속총월수/12) AS 근속년수,
MOD(sv1.근속총월수,12) AS 잔여월수,
TRUNC((MOD(sv1.근속총월수,12)/12*sv1.월급 + FLOOR(sv1.근속총월수/12)*sv1.월급),2) AS 퇴직금1,
TRUNC((sv1.근속총월수*sv1.월급)/12,2) AS 퇴직금2
FROM (
SELECT
sv.*,
TRUNC(MONTHS_BETWEEN(SYSDATE,TO_DATE(sahire,'YYYY-MM-DD'))) AS 근속총월수,
sapay/12 AS 월급
FROM sawon_view sv
) sv1;
SELECT * FROM sawon_view2;
6. 뷰 보안 설정
- 사용자 계정 생성
CREATE USER test9 IDENTIFIED BY test9; GRANT CONNECT TO test9;
- 뷰 접근 권한 부여
GRANT SELECT ON gogek_view TO test9;
- 접속 후 확인
CONNECT test9/test9; SELECT * FROM test.gogek_view;
7. 팁 & 주의사항
- 뷰 내부 SQL이 복잡해지면 성능 저하 가능
- DML(INSERT/UPDATE/DELETE)은 제한적
- 데이터 변경이 잦은 테이블은 뷰로 처리할 때 주의
- 정기적으로 뷰 사용 현황 및 성능 모니터링 권장
'Oracle' 카테고리의 다른 글
Oracle JOIN(조인) 총정리 (2) | 2025.08.14 |
---|---|
Oracle GROUP BY 활용 가이드 (2) | 2025.08.14 |
Oracle 집계 함수(aggregate functions) 정리 및 실습 (0) | 2025.08.13 |
Oracle SQL 서브쿼리(Subquery)와 집합 연산자 (5) | 2025.08.13 |
Oracle DECODE, CASE, NVL/NVL2, VIEW 함수 정리 및 예제 (4) | 2025.08.08 |