# 워크스페이스와 조직

> Nodaro CLI 명령이 작동할 워크스페이스를 선택하고, 조직을 만들고, 반이나 팀 전체를 한 번에 초대하고, 사용량 보고서를 표, JSON, CSV로 내보내세요.

Source: https://nodaro.ai/ko/docs/developers/cli/workspaces

**워크스페이스**는 조직 기능이 있는 인스턴스에서 작업이 놓이는 곳으로, 학교의 반이나 회사의 팀에 해당합니다. 이 Nodaro CLI 명령들은 명령이 작동할 워크스페이스를 선택하고, 조직과 멤버를 관리하고, 사용량 보고서를 내보냅니다. 조직은 인스턴스마다 켜는 Nodaro Cloud 기능이며, 조직 기능이 없는 인스턴스에서는 이 명령들을 사용할 수 없습니다.

## 명령이 작동할 워크스페이스 선택
브라우저는 모든 화면에 현재 워크스페이스를 보여 줍니다. 터미널은 아무것도 보여 주지 않으므로, CLI에서는 선택을 명시적으로 합니다. 설정하는 방법은 세 가지이며, 각 방법은 그 아래의 방법보다 우선합니다.

```bash
nodaro --workspace <id> workflows list   # 1. this command only
export NODARO_WORKSPACE=<id>             # 2. this shell, or this CI job
nodaro workspace use <id>                # 3. saved on the profile until you change it
```

- `nodaro workspace current`는 현재 위치와, 세 가지 중 어느 방법으로 정해졌는지를 알려 줍니다. 그렇지 않으면 상속된 `NODARO_WORKSPACE`가 저장된 워크스페이스와 똑같아 보일 수 있습니다.
- `nodaro workspace use`는 워크스페이스를 저장하기 전에 확인하므로, 오타가 있으면 그 자리에서 한 번만 실패하고 이후 모든 명령에서 실패하지 않습니다.
- `nodaro workspace clear`는 저장된 워크스페이스를 제거합니다.
- 워크스페이스를 설정하지 않으면 모든 작업이 내 개인 공간에서 이루어집니다.

워크스페이스는 **목록**을 어느 워크스페이스에서 읽을지와 **생성**한 항목이 어디에 놓일지를 정합니다. 접근 권한은 절대 정하지 않습니다. ID로 지정한 항목을 읽고, 수정하고, 삭제하고, 실행하는 것은 그 항목이 속한 워크스페이스를 따릅니다. 따라서 `--workspace`를 빠뜨려도 내 작업이 숨겨지지 않고, 잘못 지정해도 다른 사람의 작업에 접근할 수 없습니다.

## 워크스페이스 명령
```bash
nodaro workspace list [--json]
nodaro workspace current [--json]
nodaro workspace use <id> [--json]
nodaro workspace clear
nodaro workspace get <id> [--json]
nodaro workspace members <id> [--limit <n>] [--cursor <token>] [--json]
nodaro workspace join <code> [--json]
nodaro workspace usage [id] [--from YYYY-MM-DD] [--to YYYY-MM-DD] [--tz <iana>] [--group-by member|model|day|none] [--user <id>] [--limit <n>] [--cursor <token>] [--csv] [--json]
```

`workspace join`은 워크스페이스 관리자가 공유하는 8자리 참여 코드를 받습니다. 참여 코드를 사용하면 한 워크스페이스의 일반 멤버가 됩니다.

## 조직 명령
```bash
nodaro org list [--json]
nodaro org get <id> [--json]
nodaro org create --name <name> --kind school|team [--slug <slug>] [--accept-terms] [--json]
nodaro org members <orgId> [--limit <n>] [--cursor <token>] [--json]
nodaro org invite <orgId> --email a@x.com --email b@x.com [--role admin|member] [--workspace <id>] [--workspace-role admin|member] [--json]
nodaro org invitations <orgId> [--status open|accepted|revoked|expired] [--limit <n>] [--cursor <token>] [--json]
nodaro org revoke <invitationId> [--json]
nodaro org audit <orgId> [--limit <n>] [--cursor <token>] [--json]
nodaro org usage <orgId> [--from YYYY-MM-DD] [--to YYYY-MM-DD] [--tz <iana>] [--group-by workspace|member|model|day|none] [--workspace <id>] [--user <id>] [--limit <n>] [--cursor <token>] [--csv] [--json]
```

- `org create --kind school`에는 `--accept-terms`가 필요합니다. 소유자가 학생을 등록할 권한이 있음을 밝히는 것입니다.
- 새 조직은 보통 대기 상태로 시작하며, 플랫폼이 승인하면 활성 상태가 됩니다. 그 전까지는 조직 안의 어떤 것도 변경할 수 없습니다.
- `org revoke`는 초대를 취소하며, 초대 링크는 더 이상 작동하지 않습니다.
- `org audit`는 조직의 감사 로그를 나열합니다.

## 사용자 초대
반이나 팀 전체를 인스턴스에 데려오는 일은 한 번에 대량으로 하는 작업이며, `nodaro org invite`는 이를 위해 만들어졌습니다. 사람마다 `--email`을 한 번씩 반복하고, 원하면 모든 사람을 하나의 워크스페이스에 배치하세요.

```bash
nodaro org invite org_abc --email ada@school.edu --email grace@school.edu --workspace ws_xyz --workspace-role member
```

이 명령은 주소마다 한 줄씩, 그 주소로 이메일을 보냈는지를 출력합니다. 메일 공급자가 없는 설치에서는 누구에게도 이메일을 보낼 수 없습니다. 이때 각 줄에는 `not emailed (link_only)`가 표시되고, 다음 줄에 초대 링크가 나옵니다.

그 링크는 직접 보내세요. 그러지 않으면 초대는 만들어졌지만 아무도 접근할 수 없습니다. 초대는 14일 후에 만료됩니다.

## 사용량 보고서
`nodaro org usage`와 `nodaro workspace usage`는 기간 동안 누가 무엇에 크레딧을 얼마나 썼는지 알려 줍니다.

- `--from`과 `--to`는 시작일과 종료일을 포함하는 날짜로, `YYYY-MM-DD` 형식으로 작성합니다. `--tz`는 일별 집계의 시간대를 설정하며, 기본값은 터미널의 시간대입니다.
- `--group-by`는 보고서를 `workspace`(조직 보고서만 해당), `member`, `model`, `day` 기준으로 묶습니다. `none`은 개별 실행을 최신순으로 나열합니다.
- 기본 출력은 합계 줄이 있는 표입니다. `--json`은 전체 보고서를 출력하고, `--csv`는 CSV를 표준 출력에 써서 바로 파일로 리디렉션할 수 있게 합니다.

```bash
nodaro org usage org_abc --from 2026-09-01 --to 2026-09-30 --group-by member --csv > september.csv
```

일반 워크스페이스 멤버는 자신의 사용량만 볼 수 있습니다. 워크스페이스 관리자는 워크스페이스의 모든 사람의 사용량을 볼 수 있으며, 조직 보고서는 소유자와 조직 관리자를 위한 것입니다.

## 자주 묻는 질문

### Nodaro CLI가 특정 워크스페이스에서 작동하게 하려면 어떻게 하나요?

명령 하나에만 적용하려면 --workspace에 ID를 지정하고, 셸이나 CI 작업에 적용하려면 NODARO_WORKSPACE를 설정하고, 프로필에 저장하려면 nodaro workspace use를 사용하세요. 플래그가 환경 변수보다 우선하고, 환경 변수가 저장된 워크스페이스보다 우선합니다.

### 워크스페이스 ID를 잘못 지정하면 다른 사람의 작업이 노출될 수 있나요?

아니요. 워크스페이스는 목록을 어디에서 읽고 새 작업을 어디에 만들지를 정합니다. ID로 지정한 항목에 대한 접근은 그 항목이 속한 워크스페이스가 정하므로, 워크스페이스를 잘못 지정해도 명령 하나가 헛돌 뿐입니다.

### nodaro org invite가 이메일을 보내지 않고 링크를 출력한 이유는 무엇인가요?

설치에 메일 공급자가 없거나 전송에 실패했기 때문입니다. 초대는 만들어졌지만, 그 링크를 직접 상대에게 보내기 전까지는 아무도 초대에 접근할 수 없습니다.

### 한 달 치 사용량을 CSV로 내보내려면 어떻게 하나요?

조직 ID, --from과 --to 날짜, member 같은 --group-by 값, 그리고 --csv를 지정해 nodaro org usage를 실행한 다음 출력을 파일로 리디렉션하세요.
