0Pricing
SQL Academy · 강의

일반 뷰: 논리적 재사용

복잡한 쿼리를 캡슐화하고 보고서를 단순화하며 일부 열에 대한 읽기 권한을 제공하는 뷰를 만들어보세요.

일반 뷰: 논리적 재사용은(는) CoddyKit의 무료 SQL Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

뷰란 무엇인가

뷰는 저장된 SELECT입니다. 뷰를 쿼리할 때마다 기반 SELECT가 실행됩니다. 이름이 지정된 쿼리처럼 JOIN, 필터링 및 집계에 사용할 수 있습니다.

CREATE VIEW active_users AS
  SELECT id, email, full_name
  FROM users
  WHERE deleted_at IS NULL;

뷰 사용하기

어떤 테이블처럼 쿼리합니다:

SELECT COUNT(*) FROM active_users;
SELECT * FROM active_users WHERE email LIKE '%@gmail.com';

뷰는 저장되지 않습니다

저장되는 것은 뷰의 정의이지 결과가 아닙니다. 쿼리할 때마다 뷰가 확장되고 기반 SELECT가 실행됩니다. 쿼리 계획에 대해서도 동일한 고려 사항이 적용됩니다.

뷰를 사용하는 이유

  • 재사용 — 복잡한 쿼리를 한 번만 정의합니다
  • 추상화 — 구현을 숨깁니다(테이블 3개를 JOIN → "active_users")
  • 보안 — 기본 테이블을 노출하지 않고 뷰에 SELECT 권한을 부여합니다
  • 호환성 — 스키마를 변경한 뒤에도 기존 쿼리 형태가 작동하도록 유지합니다

CREATE OR REPLACE

뷰를 제자리에서 업데이트합니다. 단, 열의 자료형과 순서가 일치해야 합니다:

CREATE OR REPLACE VIEW active_users AS
  SELECT id, email, full_name, last_login
  FROM users
  WHERE deleted_at IS NULL;

-- ERROR if columns conflict; DROP VIEW + CREATE VIEW instead.

JOIN과 집계를 사용하는 뷰

일반적인 사례는 사용자별로 집계하는 것입니다:

CREATE VIEW user_stats AS
SELECT u.id, u.email,
       COUNT(o.id) AS order_count,
       COALESCE(SUM(o.total), 0) AS revenue
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id, u.email;

업데이트 가능한 뷰

단순한 뷰(단일 테이블이며 집계와 DISTINCT가 없는 뷰)는 업데이트 가능하므로 이를 통해 INSERT/UPDATE/DELETE를 실행할 수 있습니다. PostgreSQL은 가능한 경우 뷰를 자동으로 업데이트합니다.

스키마가 지정된 뷰

유틸리티 뷰는 전용 스키마에 배치하십시오:

CREATE SCHEMA api;
CREATE VIEW api.users_public AS
  SELECT id, email, full_name FROM users WHERE deleted_at IS NULL;

GRANT SELECT ON api.users_public TO app_reader;

뷰와 권한

기본적으로 뷰는 쿼리를 실행하는 사용자의 권한으로 실행되므로 해당 사용자에게 기본 테이블에 대한 권한이 여전히 필요합니다. 권한이 낮은 사용자가 민감한 테이블을 쿼리하도록 하려면 SECURITY DEFINER 함수를 대신 사용하십시오.

성능 고려 사항

플래너는 뷰를 확장하고 일반적인 최적화를 적용합니다. 때로는 뷰의 GROUP BY가 조건식 푸시다운을 막을 수 있으므로 EXPLAIN에서 문제가 나타나면 뷰를 나누거나 다시 작성하십시오.

뷰 종속성

뷰가 기본 테이블에 의존하면 해당 테이블을 삭제할 수 없습니다. 의도한 경우에만 DROP TABLE ... CASCADE를 사용하십시오. 종속 객체를 확인하려면 다음을 사용합니다:

SELECT * FROM pg_depend
WHERE refobjid = 'users'::REGCLASS;

복습

뷰는 재사용 가능한 SELECT입니다.

  • 한 번 정의하고 여러 번 쿼리
  • 추상화와 보안
  • 단순한 경우 업데이트 가능
  • 쿼리할 때마다 다시 실행되며 기본 캐싱은 없음

빠른 확인

뷰를 쿼리하면 그 결과가 저장됩니까?

자주 묻는 질문

“일반 뷰: 논리적 재사용” 강의는 무료인가요?

네 — “일반 뷰: 논리적 재사용” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Academy 강의 전체를 잠금 해제할 수 있습니다. SQL Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“일반 뷰: 논리적 재사용”에서 뭘 배우나요?

복잡한 쿼리를 캡슐화하고 보고서를 단순화하며 일부 열에 대한 읽기 권한을 제공하는 뷰를 만들어보세요. 브라우저에서 직접 실행하는 실습 코드로 SQL Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

SQL Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 SQL Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“일반 뷰: 논리적 재사용” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 SQL Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 SQL Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 일반 뷰: 논리적 재사용
  2. 업데이트 가능한 뷰와 INSTEAD OF 트리거
  3. 구체화된 뷰와 REFRESH 전략
  4. 사전 집계가 필요한 경우
← SQL Academy(으)로 돌아가기