11. DB 오브젝트 (View · Sequence · Synonym)#
2과목 · 관리 구문. ★ = 시험 빈출
1. ★ VIEW (뷰)#
정의#
"기존 테이블(또는 다른 뷰)에 대한 SELECT 쿼리 결과를 가상 테이블처럼 사용하는 객체"
★ 특징#
- 실제 데이터 보관 X — 원본 테이블에서 실시간 SELECT
- 디스크 공간 사용 안 함
- 정의를 변경하면 뷰 출력 변경 (테이블 변경 X)
- 다른 뷰의 기초가 될 수 있음
- 기존 테이블 삭제 시 → 참조한 뷰도 삭제됨
종류#
| 종류 | 설명 |
|---|---|
| 단순 뷰 | 한 개 테이블에서 일부 컬럼만 가져옴 |
| 복합 뷰 | 여러 테이블을 JOIN |
문법#
```sql -- 생성 CREATE OR REPLACE VIEW EMP_VIEW AS SELECT EMPNO, ENAME, SAL FROM EMP WHERE DEPTNO = 10;
-- 사용 (테이블처럼) SELECT * FROM EMP_VIEW;
-- 삭제 DROP VIEW EMP_VIEW; ```
★ 장점#
- 논리적 독립성 — 원본 변경에도 뷰 인터페이스 유지
- 보안 향상 — 필요한 컬럼/행만 노출
- 복잡한 쿼리 단순화 — 자주 쓰는 SQL을 이름으로 재사용
- 다양한 데이터 지원 가능
★ 단점#
- 갱신 제약 — 복합 뷰 (JOIN/GROUP BY 등)는 INSERT/UPDATE/DELETE 어려움
- 성능 저하 — 매번 SELECT 실행 → 큰 뷰는 오버헤드
- 인덱스 구성 불가 — 뷰 자체에는 인덱스 못 만듦
2. ★ SEQUENCE (시퀀스)#
정의#
"자동으로 순차적인 숫자를 생성해주는 DB 객체"
- 주로 PK 값 부여에 사용 (회원ID, 주문번호, 송장번호)
- 중복 없이 유일한 숫자 보장
문법#
sql
CREATE SEQUENCE 시퀀스명
START WITH 시작값 -- 기본값 1
INCREMENT BY 증가값 -- 기본값 1 (음수 가능)
MINVALUE 최솟값 -- 기본값 NOMINVALUE
MAXVALUE 최댓값 -- 기본값 NOMAXVALUE
CYCLE | NOCYCLE -- 최댓값 도달 시 순환 여부 (기본: NOCYCLE)
CACHE 캐시크기 -- 기본값 20 (NOCACHE 가능)
;
예제#
```sql -- 1부터 시작, 1씩 증가 CREATE SEQUENCE SEQ_USER_ID START WITH 1 INCREMENT BY 1 NOCYCLE CACHE 20;
-- 사용 INSERT INTO USERS (USER_ID, NAME) VALUES (SEQ_USER_ID.NEXTVAL, '홍길동');
-- 현재 값 조회 (NEXTVAL을 한 번이라도 호출 후 가능) SELECT SEQ_USER_ID.CURRVAL FROM DUAL;
-- 100부터 시작, 1씩 감소, 1까지 가면 다시 100 CREATE SEQUENCE SEQ_COUNTDOWN START WITH 100 INCREMENT BY -1 MINVALUE 1 MAXVALUE 100 CYCLE; ```
핵심 키워드#
| 키워드 | 의미 |
|---|---|
NEXTVAL |
다음 값 반환 (+증가) |
CURRVAL |
현재 값 조회 (NEXTVAL 후 가능) |
CACHE |
미리 캐싱해서 성능 향상 |
NOCACHE |
매번 디스크 액세스 (정확성 보장) |
3. ★ SYNONYM (시노님)#
정의#
"DB 객체(테이블, 뷰, 시퀀스 등)에 대한 별칭 부여"
- 긴 이름의 객체를 짧게 부르기 위함
- 다른 사용자 소유의 객체를 자기 이름처럼 접근
종류#
| 종류 | 설명 |
|---|---|
| Private Synonym | 생성한 사용자만 사용 가능 (기본) |
| Public Synonym | 모든 사용자 사용 가능 |
문법#
```sql -- 생성 (Private) CREATE SYNONYM SYN_EMP FOR SCOTT.EMPLOYEE_TBL;
-- 생성 (Public) CREATE PUBLIC SYNONYM SYN_EMP FOR SCOTT.EMPLOYEE_TBL;
-- 덮어쓰기 (이미 있어도 에러 X) CREATE OR REPLACE SYNONYM SYN_EMP FOR SCOTT.EMPLOYEE_TBL;
-- 사용 SELECT * FROM SYN_EMP;
-- 삭제 DROP SYNONYM SYN_EMP; ```
활용 예시#
```sql -- 사용자 HR이 SCOTT의 EMP 테이블에 접근할 때 SELECT * FROM SCOTT.EMP; -- 매번 스키마.테이블 명시
-- 시노님 만들면 간단하게 CREATE SYNONYM EMP FOR SCOTT.EMP; SELECT * FROM EMP; ```
시험 핵심 체크리스트#
View#
- 뷰는 실제 데이터를 가지지 않는다
- 단순 뷰 vs 복합 뷰
- 복합 뷰는 갱신 제약이 있다
- 인덱스 구성 불가
- 다른 뷰의 기초가 될 수 있음
Sequence#
- NEXTVAL, CURRVAL 차이
- START WITH, INCREMENT BY, CYCLE 옵션
- CACHE는 성능 향상, NOCACHE는 정확성
- PK 자동 부여 용도
Synonym#
- Private vs Public 시노님 차이
- CREATE OR REPLACE로 덮어쓰기
- 다른 사용자 객체 접근 단순화 용도