# 프로젝트 생성부터 IAM 권한까지

새 샘플 프로젝트를 만들고 BigQuery 작업공간을 연 뒤, 프로젝트의 BigQuery 작업 사용자와 데이터셋의 데이터 뷰어를 분리해 부여하는 온보딩 가이드입니다.

- 카테고리: BigQuery
- 소요 시간: 약 12분
- 난이도: 입문
- 업데이트: 2026.09.02
- 원문: /wiki/playbook/bigquery-checklist/bigquery-onboarding-guide

## 목차

- [완료 기준](#goal)
- [리소스 구조](#resource-model)
- [1단계 · 프로젝트 만들기](#step-1)
- [2단계 · BigQuery 열기](#step-2)
- [3단계 · 작업 권한 부여](#step-3)
- [4단계 · 데이터 권한 부여](#step-4)
- [검증 체크리스트](#verify)
- [코드로 연결 확인](#code-examples)
- [자주 묻는 질문](#faq)

BigQuery를 사용하려면 **프로젝트 선택**, **API 활성화**, ** 쿼리 작업 권한**, **데이터 접근 권한**이 각각 준비되어야 합니다. 이 문서는 새 샘플 프로젝트에서 권한을 실제로 나누어 설정하고, 마지막에 쿼리 실행 가능 여부까지 확인하는 온보딩 절차입니다.

> **이 문서 핵심**
>
> - **대상.** BigQuery를 처음 쓰는 백엔드·데이터·분석 업무 담당자와 권한을 부여하는 프로젝트 관리자.
>
> - **완료 후.** 사용자는 지정된 프로젝트에서 쿼리 작업을 만들고, 허용된 데이터셋만 읽을 수 있습니다.
>
> - **다음 문서.** 권한이 준비되면 [로컬·운영 환경 인증 설정](/wiki/playbook/bigquery-checklist/how-to-set-up-bigquery-authentication)으로 이동합니다.

## 먼저 구분할 것: 계정, 프로젝트, 데이터셋, 테이블

Google 계정은 로그인 주체이고, 프로젝트는 API·결제·쿼리 작업을 묶는 경계입니다. BigQuery 데이터는 프로젝트 아래의 **데이터셋**에 모이고, 실제 행은 데이터셋 아래의 **테이블**에 저장됩니다.

![계정에서 프로젝트, 데이터셋, 테이블로 이어지는 BigQuery 리소스 계층](/wiki-assets/playbook/bigquery-onboarding-guide/00-resource-hierarchy.png)

> **한눈에 보기.** 로그인 계정이 프로젝트에 접근하고, 프로젝트 안의 데이터셋과 테이블을 사용합니다.

| 단위 | 무엇을 결정하나 | 예시 |
| --- | --- | --- |
| **Google 계정** | 누가 로그인했는지 | `developer@example.com` |
| **프로젝트** | API, 쿼리 작업, 할당량, 비용의 경계 | `hurdlers-bq-dev-guide-260902` |
| **데이터셋** | 데이터 위치, 보존, 접근 권한 | `developer_guide` |
| **테이블** | 스키마와 실제 데이터 행 | `orders` |

> **정보**
>
> **쿼리 권한과 데이터 권한은 별개입니다.** 작업 프로젝트에는 `BigQuery Job User`가, 데이터를 읽을 데이터셋에는 `BigQuery Data Viewer`가 필요합니다. 한쪽만 있으면 쿼리가 실패합니다.

## 1단계. 전용 Google Cloud 프로젝트 만들기

Google Cloud 콘솔에서 새 프로젝트를 엽니다. 이 문서에서는 운영 프로젝트와 분리된 `BigQuery Developer Guide` 샘플 프로젝트를 사용했습니다.

![Google Cloud 새 프로젝트 빈 입력 화면](/wiki-assets/playbook/bigquery-onboarding-guide/01-project-form-blank.png)

> **화면 1.** 프로젝트 이름·ID·결제 계정·조직을 확인하는 위치.

프로젝트 이름은 사람이 읽는 표시 이름이고, 프로젝트 ID는 API와 SQL에서 사용하는 전 세계 고유 식별자입니다. ID는 생성 후 변경할 수 없으므로 회사·서비스·환경을 구분할 수 있게 정합니다.

![BigQuery Developer Guide 샘플 프로젝트 입력 화면](/wiki-assets/playbook/bigquery-onboarding-guide/02-project-form-filled.png)

> **화면 2.** 샘플 값을 입력하고 **만들기**를 선택.

![새 프로젝트 생성 완료 화면](/wiki-assets/playbook/bigquery-onboarding-guide/03-project-created.png)

> **화면 3.** 상단 프로젝트 선택기와 프로젝트 ID로 생성 완료를 확인.

> **팁**
>
> 개인 실습용 프로젝트와 운영 프로젝트를 분리하면 IAM·비용·삭제 범위를 명확히 관리할 수 있습니다. 운영에서는 `service-env-purpose`처럼 팀이 합의한 명명 규칙을 사용하세요.

## 2단계. BigQuery 작업공간과 API 확인

콘솔 상단 검색에서 BigQuery를 열고, 상단 프로젝트 선택기와 좌측 탐색기의 프로젝트 ID가 방금 만든 프로젝트인지 확인합니다. 다른 프로젝트가 선택된 상태로 쿼리를 실행하면 비용과 작업 이력이 그 프로젝트에 기록될 수 있습니다.

![새 프로젝트의 BigQuery SQL 작업공간](/wiki-assets/playbook/bigquery-onboarding-guide/04-bigquery-workspace.png)

> **화면 4.** 좌측 탐색기와 SQL 편집기가 열린 초기 작업공간.

BigQuery API가 꺼져 있다면 API 사용 설정 버튼이 표시됩니다. 정확한 확인 방법은 [인증 설정 가이드](/wiki/playbook/bigquery-checklist/how-to-set-up-bigquery-authentication)의 API 절차를 따릅니다.

## 3단계. 프로젝트에 BigQuery 작업 사용자 부여

**IAM 및 관리자 → IAM → 액세스 권한 부여**를 엽니다. 이 권한은 쿼리 작업을 생성할 프로젝트에 부여합니다.

![IAM 페이지의 액세스 권한 부여 버튼](/wiki-assets/playbook/bigquery-onboarding-guide/05-project-iam-entry.png)

> **화면 5.** 프로젝트 IAM에서 **액세스 권한 부여** 선택.

역할 검색에서 **BigQuery 작업 사용자**(`roles/bigquery.jobUser`)를 고릅니다. 이 역할은 쿼리·로드·복사 같은 BigQuery 작업을 만들 수 있게 하지만 데이터 읽기 자체를 허용하지는 않습니다.

![IAM 역할 선택기의 BigQuery 작업 사용자 역할](/wiki-assets/playbook/bigquery-onboarding-guide/06-job-user-role.png)

> **화면 6.** 역할 목록에서 **BigQuery 작업 사용자** 선택.

![예시 사용자와 BigQuery 작업 사용자 역할이 입력된 IAM 폼](/wiki-assets/playbook/bigquery-onboarding-guide/07-project-iam-form.png)

> **화면 7.** 주 구성원과 역할을 확인한 뒤 관리자가 저장.

> **주의**
>
> **BigQuery 관리자**나 프로젝트 **소유자**를 기본 역할로 사용하지 마세요. 테이블 삭제·권한 변경까지 가능한 과도한 권한입니다. 필요한 작업별 최소 역할을 조합합니다.

## 4단계. 데이터셋에 BigQuery 데이터 뷰어 부여

BigQuery 탐색기에서 데이터셋을 연 뒤 **공유 → 권한 관리**를 선택합니다. 데이터 접근은 가능하면 프로젝트 전체가 아니라 실제로 읽어야 하는 데이터셋 범위에 부여합니다.

![developer_guide 데이터셋 권한 관리 화면](/wiki-assets/playbook/bigquery-onboarding-guide/08-dataset-permissions.png)

> **화면 8.** 데이터셋 권한에서 주 구성원 추가와 현재 역할 확인.

읽기 전용 사용자라면 **BigQuery 데이터 뷰어**(`roles/bigquery.dataViewer`)를 선택합니다. 쓰기가 필요한 애플리케이션은 별도 서비스 계정에 `roles/bigquery.dataEditor`를 데이터셋 범위로 부여합니다.

![데이터셋에 BigQuery 데이터 뷰어를 추가하는 폼](/wiki-assets/playbook/bigquery-onboarding-guide/09-dataset-viewer-form.png)

> **화면 9.** 예시 사용자에게 데이터셋 읽기 역할을 지정.

## 검증 체크리스트

- 상단 프로젝트 선택기가 작업 프로젝트를 가리키는가
- 사용자 또는 서비스 계정에 `roles/bigquery.jobUser`가 있는가
- 조회할 데이터셋에 `roles/bigquery.dataViewer`가 있는가
- 클라이언트의 location과 데이터셋 region이 일치하는가

| 오류 | 먼저 확인할 항목 |
| --- | --- |
| `bigquery.jobs.create denied` | 작업 프로젝트의 BigQuery 작업 사용자 |
| `bigquery.tables.getData denied` | 대상 데이터셋의 BigQuery 데이터 뷰어 |
| `Not found... in location` | 쿼리 location과 데이터셋 region |

역할별 권한과 적용 범위는 Google Cloud의 [BigQuery IAM 역할 문서](https://cloud.google.com/bigquery/docs/access-control)에서 확인할 수 있습니다.

권한 부여가 끝나면 최소 호출로 Job 생성 권한, 데이터셋 접근 권한, region이 모두 맞는지 확인합니다.

## 자주 묻는 질문

### BigQuery 사용자와 BigQuery 작업 사용자는 같은 역할인가요?

아닙니다. BigQuery 작업 사용자는 작업 생성에 집중된 최소 역할입니다. BigQuery 사용자는 데이터셋 생성 등 더 넓은 권한을 포함하므로, 단순 조회 계정에는 작업 사용자와 데이터셋 뷰어 조합이 더 명확합니다.

### 프로젝트가 서로 다른 데이터셋도 조회할 수 있나요?

가능합니다. 쿼리 프로젝트에는 Job User가, 원본 데이터가 있는 각 데이터셋에는 Data Viewer가 있어야 합니다. 한 쿼리에서 참조하는 데이터셋의 위치 호환 조건도 충족해야 합니다.

### 개인 계정 대신 그룹을 추가해도 되나요?

팀 규모가 크면 Google 그룹에 역할을 부여하는 방식이 권장됩니다. 입·퇴사 시 그룹 구성원만 바꾸면 되므로 IAM 누락을 줄일 수 있습니다.

## Navigation

- [전체 플레이북 Markdown sitemap](/wiki/playbook/sitemap.md)

### BigQuery

- [BigQuery](/wiki/playbook/bigquery-checklist)
- [BigQuery 온보딩](/wiki/playbook/bigquery-checklist/bigquery-onboarding-guide) (현재 문서)
- [BigQuery 인증 설정](/wiki/playbook/bigquery-checklist/how-to-set-up-bigquery-authentication)
- [BigQuery 데이터셋·테이블 설계](/wiki/playbook/bigquery-checklist/bigquery-dataset-and-table-design-guide)
- [BigQuery 쿼리·비용 제어](/wiki/playbook/bigquery-checklist/bigquery-query-and-cost-control-guide)
- [BigQuery 쓰기·MERGE·CDC](/wiki/playbook/bigquery-checklist/bigquery-data-write-and-cdc-guide)
- [BigQuery 코드 예제 모음](/wiki/playbook/bigquery-checklist/bigquery-code-examples)
- [BigQuery로 들어오는 GA4 데이터](/wiki/playbook/bigquery-checklist/what-is-ga4-data-in-bigquery)
- [BigQuery Studio 인터페이스 이해하기](/wiki/playbook/bigquery-checklist/what-is-bigquery-studio-interface)
- [BigQuery 예상 비용](/wiki/playbook/bigquery-checklist/how-to-estimate-bigquery-costs)
- [무료 버전(샌드박스) 해제해야 하는 이유](/wiki/playbook/bigquery-checklist/why-upgrade-from-bigquery-sandbox)
- [GA4 BigQuery 데이터를 왜 평탄화해야 하나](/wiki/playbook/bigquery-checklist/why-flatten-ga4-bigquery-data)
- [Log Router란?](/wiki/playbook/bigquery-checklist/what-is-log-router)
- [Pub/Sub이란?](/wiki/playbook/bigquery-checklist/what-is-pubsub)
- [Cloud Functions이란?](/wiki/playbook/bigquery-checklist/what-is-cloud-function-and-run)
- [GA4 export 시점에 예약 쿼리 자동 실행하기](/wiki/playbook/bigquery-checklist/how-to-trigger-scheduled-query-on-ga4-export)
- [테이블 정의서는 왜 필요한가](/wiki/playbook/bigquery-checklist/why-table-definition-doc)
- [Event_Flat 테이블 이해하기](/wiki/playbook/bigquery-checklist/what-is-event-flat-table)
- [Item_Performance 테이블 이해하기](/wiki/playbook/bigquery-checklist/what-is-item-performance-table)
