콘텐츠로 이동

11. DB 오브젝트 (View · Sequence · Synonym)#

2과목 · 관리 구문. ★ = 시험 빈출


1. ★ VIEW (뷰)#

정의#

"기존 테이블(또는 다른 뷰)에 대한 SELECT 쿼리 결과를 가상 테이블처럼 사용하는 객체"

★ 특징#

  1. 실제 데이터 보관 X — 원본 테이블에서 실시간 SELECT
  2. 디스크 공간 사용 안 함
  3. 정의를 변경하면 뷰 출력 변경 (테이블 변경 X)
  4. 다른 뷰의 기초가 될 수 있음
  5. 기존 테이블 삭제 시 → 참조한 뷰도 삭제됨

종류#

종류 설명
단순 뷰 한 개 테이블에서 일부 컬럼만 가져옴
복합 뷰 여러 테이블을 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; ```

★ 장점#

  1. 논리적 독립성 — 원본 변경에도 뷰 인터페이스 유지
  2. 보안 향상 — 필요한 컬럼/행만 노출
  3. 복잡한 쿼리 단순화 — 자주 쓰는 SQL을 이름으로 재사용
  4. 다양한 데이터 지원 가능

★ 단점#

  1. 갱신 제약 — 복합 뷰 (JOIN/GROUP BY 등)는 INSERT/UPDATE/DELETE 어려움
  2. 성능 저하 — 매번 SELECT 실행 → 큰 뷰는 오버헤드
  3. 인덱스 구성 불가 — 뷰 자체에는 인덱스 못 만듦

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로 덮어쓰기
  • 다른 사용자 객체 접근 단순화 용도