데이터 대량 가져오기
Mattermost v12.0요약
대량 가져오기 기능을 사용하면 명령줄에서 JSONL 파일의 대량 데이터를 Mattermost로 가져올 수 있습니다. 다음과 같은 데이터 유형을 가져올 수 있습니다: 추가 유형의 게시물 가져오기는 아직 지원되지 않습니다.
사용 가능 플랜: Entry, Professional, Enterprise, Enterprise Advanced
대량 가져오기 기능을 사용하면 명령줄에서 JSONL 파일의 대량 데이터를 Mattermost로 가져올 수 있습니다. 이 기능은 기존 시스템에서 데이터를 마이그레이션하거나 신규 설치에 데이터를 미리 채워 넣는 데 가장 적합합니다.
다음과 같은 데이터 유형을 가져올 수 있습니다:
- 팀
- 스레드 토론
- 채널(공개 및 비공개)
- 사용자
- 사용자의 팀 멤버십
- 사용자의 채널 멤버십
- 사용자의 알림 기본 설정
- 사용자의 사용자 지정 상태
- 게시물(일반, 답글 아닌 게시물)
- 게시물 답글
- 게시물 반응
- 게시물 첨부 파일
- 다이렉트 메시지 및 그룹 메시지 채널
- 다이렉트 메시지 및 그룹 메시지 채널의 읽음/안읽음 상태
- 다이렉트 메시지 및 그룹 메시지
- 사용자 자신에게 보낸 다이렉트 메시지
- 권한 스킴
- 커스텀 이모지
- 봇 사용자
추가 유형의 게시물 가져오기는 아직 지원되지 않습니다.
대량 가져오기 명령에 대해#
대량 가져오기 명령은 중단 가능하며 멱등합니다
어떤 이유로든 가져오기가 중단된 경우, 다음에 명령을 실행하면 중단된 곳에서 계속됩니다. 같은 데이터 파일로 명령을 반복 실행할 수 있으며, 데이터는 한 번만 가져와집니다. 들어오는 게시물과 타임스탬프가 일치하는 게시물은 첨부 파일이 들어오는 데이터로 교체됩니다. v5.20 이전에는 타임스탬프가 일치하는 게시물의 업데이트가 이전 게시물에 추가되었습니다.
라이브 시스템에서 대량 가져오기 명령을 실행할 수 있습니다
명령을 실행하기 위해 Mattermost를 종료할 필요는 없지만, 실행 사이에 시스템 사용자가 변경한 내용은 데이터 파일에 해당 필드가 있는 경우 덮어쓰일 수 있습니다.
일부 데이터 필드는 선택 사항입니다
모든 필드가 필수는 아닙니다. 가져오는 객체에서 선택적 필드가 없는 경우, 데이터베이스의 해당 필드의 현재 값은 변경되지 않습니다.
대량 가져오기 명령은 동기화 도구가 아닙니다
대량 가져오기 명령을 사용하여 Mattermost 데이터베이스에서 객체나 해당 필드를 제거할 수 없습니다. 명령은 필드를 생성하거나 덮어쓰는 것만 가능합니다.
대량 가져오기 명령은 mmctl에서 실행되며 mmctl의 보안 컨텍스트에서 작동합니다. 즉, Mattermost 데이터베이스의 모든 항목에 접근하고 변경할 수 있는 전체 권한을 가집니다.
데이터 대량 가져오기#
대량 가져오기 명령을 실행하기 전에, 먼저 Mattermost 디렉터리에 가져올 데이터가 포함된 JSONL 파일을 만들어야 합니다. 파일 이름은 아무 이름이나 지정할 수 있지만, 이 예시에서는 data.jsonl이라고 합니다. 파일 형식은 데이터 형식 섹션에 설명되어 있습니다.
다음으로, zip -r data.zip data.jsonl 명령을 실행하여 압축합니다.
mmctl 로컬 모드 사용#
Mattermost v9.5부터, 로컬 모드의 mmctl 대량 가져오기 처리 명령은 서버에 업로드하지 않고 가져오기 파일을 처리하는 것을 지원합니다.
mmctl import process --bypass-upload <file>.zip --local을 실행하여 가져오기를 시작하고 Mattermost 서버가 파일에서 직접 읽을 수 있도록 합니다.
mmctl 로컬 모드를 사용하지 않는 경우#
mmctl 명령을 로컬 모드로 실행하지 않는 경우:
- mmctl import upload 명령을 실행하여 ZIP 파일을 데이터베이스에 업로드합니다. 예:
mmctl import upload data.zip. 업로드 후 두 개의 ID가 반환됩니다. 첫 번째 줄에는 업로드 세션 ID가, 두 번째 줄에는 파일 이름이 포함됩니다. - mmctl import list available 명령을 실행하여 파일이 업로드되어 사용 준비가 되었는지 확인합니다.
- 업로드 세션 ID(파일 이름이 아님)를 사용하여 mmctl import process 명령을 실행하여 업로드된 파일을 가져옵니다. 예:
mmctl import process <upload_session_id>_data.zip, 여기서<upload_session_id>는 업로드 명령에서 반환된 업로드 세션 ID입니다.
데이터 형식#
입력 데이터 파일은 유효한 JSONL 파일이어야 하며, 파일의 각 줄에 다음 객체들이 나열된 순서대로 포함되어야 합니다.
Version
필수. Version 객체는 파일의 첫 번째 줄이어야 하며, 한 번만 나타나야 합니다. 버전은 대량 가져오기 도구의 버전이며, 현재 1입니다.
Scheme
선택 사항. 있는 경우, Scheme 객체는 Version 객체 다음에, 모든 Team 객체 이전에 나타나야 합니다.
Emoji
선택 사항. 있는 경우, Emoji 객체는 Version 객체 다음에, 모든 Team 객체 이전에 나타나야 합니다.
Team
선택 사항. 있는 경우, Team 객체는 모든 Scheme 객체 다음에, 모든 Channel 객체 이전에 나타나야 합니다.
Channel
선택 사항. 있는 경우, Channel 객체는 모든 Team 객체 다음에, 모든 User 객체 이전에 나타나야 합니다.
User
선택 사항. 있는 경우, User 객체는 파일에서 Team 및 Channel 객체 다음에, 모든 Post 객체 이전에 나타나야 합니다. 각 User 객체는 사용자가 멤버인 팀 및 채널을 정의합니다. 해당 팀과 채널이 데이터 파일에 없는 경우, Mattermost 데이터베이스에 존재해야 합니다.
Post
선택 사항. 있는 경우, Post 객체는 마지막 User 객체 다음에, 모든 DirectChannel 객체 이전에 나타나야 합니다. 각 Post 객체는 팀, 채널, 메시지를 게시한 사용자의 사용자명을 정의합니다. 해당 팀, 채널 또는 사용자가 데이터 파일에 없는 경우, Mattermost 데이터베이스에 존재해야 합니다.
DirectChannel
선택 사항. 있는 경우, DirectChannel 객체는 파일의 모든 Post 객체 다음에, 모든 DirectPost 객체 이전에 나타나야 합니다.
DirectPost
선택 사항. 있는 경우, DirectPost 객체는 파일의 모든 다른 객체 다음에 나타나야 합니다. 각 DirectPost 객체는 채널 멤버들의 사용자명과 메시지를 게시한 사용자의 사용자명을 정의합니다. 해당 사용자명이 데이터 파일에 없는 경우, Mattermost 데이터베이스에 존재해야 합니다.
Version 객체를 제외하고, 각 객체는 해당 객체의 고유 식별자로 사용되는 필드 또는 필드 조합을 가집니다. 대량 가져오기 명령은 고유 식별자를 사용하여 가져오는 객체가 새 객체인지 기존 객체의 업데이트인지 결정합니다.
각 객체의 식별자는 다음 표에 나열되어 있습니다:
| 객체 | 고유 식별자 |
|---|---|
| Version | 해당 없음 |
| Scheme | name |
| Role | name |
| Emoji | name |
| Team | name |
| Channel | name, team |
| User | username |
| UserNotifyProps | username |
| UserTeamMembership | team, username |
| UserChannelMembership | team, channel, username |
| Post | channel, message, create_at |
| Reply | post, message, create_at |
| Reaction | post, emoji_name, create_at |
| Attachment | path |
| DirectChannel | members |
| DirectPost | channel_members, user, message, create_at |
다음은 두 팀, 각 팀에 두 채널, 많은 사용자 및 게시물을 가져오는 파일의 일부입니다.
{ "type": "version", ... }
{ "type": "team", "team": { "name": "TeamA", ...} }
{ "type": "team", "team": { "name": "TeamB", ...} }
{ "type": "channel", "channel": { "team": "TeamA", "name": "channel_a1", ...} }
{ "type": "channel", "channel": { "team": "TeamA", "name": "channel_a2", ...} }
{ "type": "channel", "channel": { "team": "TeamB", "name": "channel_b1", ...} }
{ "type": "channel", "channel": { "team": "TeamB", "name": "channel_b2", ...} }
{ "type": "user", "user": { "username": "user001", ...} }
{ "type": "user", "user": { "username": "user002", ...} }
{ "type": "user", "user": { "username": "user003", ...} }
{ "type": "user", ... }
{ "type": "user", ... }
{ "type": "user", ... }
.
.
.
{ "type": "post", { "team": "TeamA", "name": "channel_a1", "user": "user001", ...} }
{ "type": "post", { "team": "TeamA", "name": "channel_a1", "user": "user001", ...} }
{ "type": "post", { "team": "TeamA", "name": "channel_a1", "user": "user001", ...} }
.
.
.
Version 객체#
Version 객체는 데이터 파일의 첫 번째 객체여야 하며, 한 번만 나타날 수 있습니다. 버전은 대량 가져오기 도구의 버전을 나타내며, 현재 1입니다.
Version 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "version",
"version": 1
}
Version 객체의 필드#
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| type | string | 문자열 "version"이어야 합니다. | 예 | 예 |
| version | number | 숫자 1이어야 합니다. | 예 | 예 |
Scheme 객체#
Scheme 객체는 Mattermost 권한 시스템의 권한 스킴를 나타냅니다. 있는 경우, Scheme 객체는 Version 객체 다음에, 모든 Team 객체 이전에 나타나야 합니다.
Scheme 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "scheme",
"scheme": {
"name": "custom_scheme_name",
"display_name": "Custom Scheme Name",
"description": "This is a custom override scheme.",
"scope": "team",
"default_team_admin_role": {
"name": "custom_scheme_team_admin_role",
"display_name": "Custom Scheme Team Admin Role",
"description": "This is the default team admin role for the custom scheme.",
"permissions": ["add_user_to_team", "manage_team_roles"],
},
"default_team_user_role": {
"name": "custom_scheme_team_user_role",
"display_name": "Custom Scheme Team User Role",
"description": "This is the default team user role for the custom scheme.",
"permissions": ["create_public_channel", "create_private_channel"],
},
"default_channel_admin_role": {
"name": "custom_scheme_channel_admin_role",
"display_name": "Custom Scheme Channel Admin Role",
"description": "This is the default channel admin role for the custom scheme.",
"permissions": ["manage_private_channel_members", "manage_channel_roles"],
},
"default_channel_user_role": {
"name": "custom_scheme_channel_user_role",
"display_name": "Custom Scheme Channel User Role",
"description": "This is the default channel user role for the custom scheme.",
"permissions": ["manage_public_channel_members", "manage_public_channel_properties"],
},
}
}
Scheme 객체의 필드#
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| name | string | 스키마 이름입니다. 소문자 ([a-z0-9]) 또는 _로 시작하고 이들만 포함해야 하며, 길이는 2~64자여야 합니다. | 예 | 예 |
| display_name | string | 스키마의 표시 이름입니다. | 예 | 예 |
| scope | string | 스키마의 범위입니다. "team" 또는 "channel" 중 하나여야 합니다. | 예 | 예 |
| description | string | 스키마에 대한 설명입니다. | 예 | 아니요 |
| default_team_admin_role | Role 객체 | 이 스키마를 사용하는 팀에서 팀 관리자에게 적용되는 기본 역할입니다. 스키마 범위가 "team"으로 설정된 경우 이 필드는 필수이며, 그렇지 않은 경우 포함하면 안 됩니다. | 예 | 아니요 |
| default_team_user_role | Role 객체 | 이 스키마를 사용하는 팀에서 팀 사용자에게 적용되는 기본 역할입니다. 스키마 범위가 "team"으로 설정된 경우 이 필드는 필수이며, 그렇지 않은 경우 포함하면 안 됩니다. | 예 | 아니요 |
| default_channel_admin_role | Role 객체 | 이 스키마를 사용하는 채널에서 채널 관리자에게 적용되는 기본 역할입니다. 이 필드는 "team" 및 "channel" 범위 스키마 모두에서 필수입니다. | 예 | 예 |
| default_channel_user_role | Role 객체 | 이 스키마를 사용하는 채널에서 채널 사용자에게 적용되는 기본 역할입니다. 이 필드는 "team" 및 "channel" 범위 스키마 모두에서 필수입니다. | 예 | 예 |
Role 객체의 필드#
이 객체는 Scheme 객체의 멤버입니다.
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| name | string | 스킴 이름입니다. | 예 | 예 |
| display_name | string | 스킴의 표시 이름입니다. | 예 | 예 |
| description | string | 스킴에 대한 설명입니다. | 예 | 아니요 |
| permissions | array | 역할이 부여해야 하는 권한입니다. 문자열 배열이며, 각 문자열은 Mattermost 권한 시스템에 있는 개별 권한의 이름입니다. | 예 | 아니요 |
Emoji 객체#
Emoji 객체는 사용자 지정 이모지를 나타냅니다. 있는 경우, Emoji 객체는 Version 객체 다음에, 모든 Team 객체 이전에 나타나야 합니다.
Emoji 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "emoji",
"emoji": {
"name": "custom-emoji-troll",
"image": "bulkdata/emoji/trollolol.png"
}
}
Emoji 객체의 필드#
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| name | string | 이모지 이름입니다. | 예 | 예 |
| image | string | 이 이모지의 이미지 파일 경로입니다(절대 경로 또는 현재 작업 디렉터리 기준 상대 경로). | 아니요 | 예 |
Team 객체#
있는 경우, Team 객체는 Version 객체 다음에, 모든 Channel 객체 이전에 나타나야 합니다.
Team 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "team",
"team": {
"name": "team-name",
"display_name": "Team Display Name",
"type": "O",
"description": "The Team Description",
"allow_open_invite": true
}
}
Team 객체의 필드#
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 스킴이 존재하지 않으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| name | string | 팀 이름입니다. | 예 | 예 |
| display_name | string | 팀의 표시 이름입니다. | 예 | 예 |
| type | string | 팀 유형입니다. 다음 값 중 하나를 가질 수 있습니다. O: 공개 팀 I: 초대 전용 팀 |
예 | 예 |
| description | string | 팀 설명입니다. | 예 | 아니요 |
| allow_open_invite | bool | 공개 초대를 허용할지 여부입니다. 다음 값 중 하나여야 합니다. true false |
예 | 아니요 |
| scheme | string | 이 팀에 적용할 스킴의 이름입니다. | 아니요 [1] | 아니요 |
Channel 객체#
있는 경우, Channel 객체는 모든 Team 객체 다음에, 모든 User 객체 이전에 나타나야 합니다.
Channel 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "channel",
"channel": {
"team": "team-name",
"name": "channel-name",
"display_name": "Channel Name",
"type": "O",
"header": "The Channel Header",
"purpose": "The Channel Purpose",
}
}
Channel 객체의 필드#
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 팀 또는 스킴이 존재하지 않으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| team | string | 이 채널이 속한 팀의 이름입니다. | 아니요 [1] | 예 |
| name | string | 채널 이름입니다. 영문 소문자 ([a-z0-9])로 시작해야 하며, 영문 소문자, -, _만 포함할 수 있습니다. | 예 | 예 |
| display_name | string | 채널의 표시 이름입니다. | 예 | 예 |
| type | string | 채널 유형입니다. 다음 값 중 하나를 가질 수 있습니다. O: 공개 채널 P: 비공개 채널 |
예 | 예 |
| header | string | 채널 헤더입니다. | 예 | 아니요 |
| purpose | string | 채널 목적입니다. | 예 | 아니요 |
| scheme | string | 이 팀에 적용할 스킴의 이름입니다. | 아니요 [1] | 아니요 |
User 객체#
있는 경우, User 객체는 파일에서 Team 및 Channel 객체 다음에, 모든 Post 객체 이전에 나타나야 합니다.
User 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "user",
"user": {
"profile_image": "profile-picture.png",
"username": "username",
"email": "email@example.com",
"auth_service": "",
"password": "passw0rd",
"nickname": "bobuser",
"first_name": "Bob",
"last_name": "User",
"position": "Senior Developer",
"roles": "system_user",
"locale": "pt_BR",
"teams": [
{
"name": "team-name",
"theme": "{
\"awayIndicator\":\"#DBBD4E\",
\"buttonBg\":\"#23A1FF\",
\"buttonColor\":\"#FFFFFF\",
\"centerChannelBg\":\"#ffffff\",
\"centerChannelColor\":\"#333333\",
\"codeTheme\":\"github\",
\"linkColor\":\"#2389d7\",
\"mentionBg\":\"#2389d7\",
\"mentionColor\":\"#ffffff\",
\"mentionHighlightBg\":\"#fff2bb\",
\"mentionHighlightLink\":\"#2f81b7\",
\"newMessageSeparator\":\"#FF8800\",
\"onlineIndicator\":\"#7DBE00\",
\"sidebarBg\":\"#fafafa\",
\"sidebarHeaderBg\":\"#3481B9\",
\"sidebarHeaderTextColor\":\"#ffffff\",
\"sidebarText\":\"#333333\",
\"sidebarTextActiveBorder\":\"#378FD2\",
\"sidebarTextActiveColor\":\"#111111\",
\"sidebarTextHoverBg\":\"#e6f2fa\",
\"sidebarUnreadText\":\"#333333\",
}",
"roles": "team_user team_admin",
"channels": [
{
"name": "channel-name",
"roles": "channel_user",
"notify_props": {
"desktop": "default",
"mark_unread": "all"
}
}
]
}
]
}
}
User 객체의 필드#
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| profile_image | string | 사용자의 프로필 이미지입니다. 존재하는 파일 경로여야 합니다. | 예 | 아니요 |
| username | string | 사용자의 사용자 이름입니다. 사용자의 고유 식별자입니다. | 예 | 예 |
| string | 사용자의 이메일 주소입니다. | 예 | 예 | |
| auth_service | string | 이 사용자 계정에 사용할 인증 서비스입니다. 지정하지 않으면 기본값은 비밀번호 기반 인증입니다. 다음 값 중 하나여야 합니다. "" 또는 지정하지 않음 - 비밀번호 인증입니다. "gitlab" - GitLab 인증입니다. "ldap" - LDAP 인증입니다(Enterprise 및 Professional). "saml" - 일반 SAML 기반 인증입니다(Enterprise). "google" - Google OAuth 인증입니다(Enterprise). "office365" - Microsoft Entra ID OAuth 인증입니다(Enterprise). |
아니요 | 아니요 |
| auth_data | string | auth_service를 사용하는 경우의 인증 데이터입니다. 값은 지정한 auth_service에 따라 달라집니다. 데이터는 각 auth_service에 대해 다음 필드에서 가져옵니다. "" 또는 지정하지 않음 - 생략해야 합니다. "gitlab" - GitLab 인증 데이터에 제공된 Id 속성의 값입니다. "ldap" - Mattermost LDAP 구성에서 "ID Attribute"로 지정한 LDAP 속성의 값입니다. "saml" - SAML 이메일 주소 속성의 값입니다. "google" - OAuth Id 속성의 값입니다. "office365" - OAuth Id 속성의 값입니다. |
아니요 | 아니요 |
| password | string | 사용자의 비밀번호입니다. 비밀번호 기반 인증을 사용하는 경우에만 지정할 수 있습니다. 비밀번호 기반 인증을 사용하는데 비밀번호가 없으면 대량 가져오기 명령이 비밀번호를 생성합니다. | 예 | 아니요 |
| nickname | string | 사용자의 닉네임입니다. | 예 | 아니요 |
| first_name | string | 사용자의 이름입니다. | 예 | 아니요 |
| last_name | string | 사용자의 성입니다. | 예 | 아니요 |
| position | string | 사용자의 직책입니다. | 예 | 아니요 |
| roles | string | 사용자의 역할입니다. 다음 값 중 하나여야 합니다. "system_user" "system_admin system_user" |
예 | 아니요 |
| locale | string | 사용자의 로케일입니다. Mattermost가 현지화를 지원하는 유효한 로케일이어야 합니다. | 아니요 | 아니요 |
| delete_at | int64 | 사용자가 비활성화된 시점의 타임스탬프입니다. | 아니요 | 아니요 |
| teams | array | 사용자가 멤버로 등록될 팀입니다. UserTeamMembership 객체의 배열이어야 합니다. | 예 | 아니요 |
| theme | string | 사용자의 테마입니다. Mattermost 테마 문자열 형식이어야 합니다. | 아니요 | 아니요 |
| military_time | string | 이 사용자에게 시간을 표시하는 방식입니다. 다음 값 중 하나여야 합니다. "true" - 24시간제를 사용합니다. "false" - 12시간제를 사용합니다. |
아니요 | 아니요 |
| collapse_previews | string | 링크 미리보기를 기본적으로 접을지 펼칠지 여부입니다. 다음 값 중 하나여야 합니다. "true" - 기본적으로 접습니다. "false" - 기본적으로 펼칩니다. |
아니요 | 아니요 |
| message_display | string | 메시지를 표시할 때 사용할 스타일입니다. 다음 값 중 하나여야 합니다. "clean" - 표준 스타일을 사용합니다. "compact" - 간결한 스타일을 사용합니다. |
아니요 | 아니요 |
| channel_display_mode | string | 채널 메시지를 표시하는 방식입니다. 다음 값 중 하나여야 합니다. "full" - 화면 전체 너비를 사용합니다. "centered" - 너비가 고정된 가운데 정렬 블록을 사용합니다. |
아니요 | 아니요 |
| tutorial_step | string | 사용자 튜토리얼을 시작할 위치입니다. 다음 값 중 하나여야 합니다. "1", "2" 또는 "3" - 지정한 튜토리얼 단계부터 시작합니다. "999" - 사용자 튜토리얼을 건너뜁니다. |
아니요 | 아니요 |
| use_markdown_preview | bool | 메시지 마크다운 서식 미리보기를 활성화합니다. 다음 값 중 하나를 가질 수 있습니다. "True" "False" |
예 | 예 |
| use_formatting | bool | 링크, 이모지, 텍스트 스타일, 줄 바꿈에 대한 게시물 서식을 활성화합니다. 다음 값 중 하나를 가질 수 있습니다. "True" "False" |
예 | 예 |
| show_unread_section | bool | 채널 사이드바 상단에 읽지 않은 메시지를 표시하도록 활성화합니다. 다음 값 중 하나를 가질 수 있습니다. "True" "False" |
예 | 예 |
| email_interval | string | 대량 가져오기 중 이메일 일괄 전송 간격을 지정합니다. 다음 값 중 하나를 가질 수 있습니다. "immediately" - 이메일을 즉시 보냅니다. "fifteen" - 이메일을 모아서 15분마다 보냅니다. "hour" - 이메일을 모아서 1시간마다 보냅니다. |
예 | 예 |
| notify_props | UserNotifyProps 객체 | 사용자의 알림 환경설정이며, UserNotifyProps 객체로 정의됩니다. | 예 | 아니요 |
UserNotifyProps 객체의 필드#
이 객체는 User 객체의 멤버입니다.
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 팀이 존재하지 않으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| desktop | string | 데스크톱 알림 전송 환경설정입니다. 다음 값 중 하나여야 합니다. "all" - 모든 활동에 대해 보냅니다. "mention" - 멘션에 대해서만 보냅니다. "none" - 보내지 않습니다. |
예 | 아니요 |
| desktop_sound | string | 데스크톱 알림 소리 재생 여부에 대한 환경설정입니다. 다음 값 중 하나여야 합니다. "true" - 소리를 재생합니다. "false" - 소리를 재생하지 않습니다. |
예 | 아니요 |
| string | 이메일 알림 환경설정입니다. 다음 값 중 하나여야 합니다. "true" - email_interval 설정에 따라 이메일 알림을 보냅니다. "false" - 이메일 알림을 보내지 않습니다. |
아니요 | 아니요 | |
| mobile | string | 모바일 푸시 알림 전송 환경설정입니다. 다음 값 중 하나여야 합니다. "all" - 모든 활동에 대해 보냅니다. "mention" - 멘션에 대해서만 보냅니다. "none" - 보내지 않습니다. |
예 | 아니요 |
| mobile_push_status | string | 푸시 알림이 발생하는 시점에 대한 환경설정입니다. 다음 값 중 하나여야 합니다. "online" - 온라인, 자리 비움 또는 오프라인일 때 보냅니다. "away" - 자리 비움 또는 오프라인일 때 보냅니다. "offline" - 오프라인일 때 보냅니다. |
예 | 아니요 |
| channel | string | @all, @channel, @here가 멘션을 발생시킬지 여부입니다. 다음 값 중 하나여야 합니다. "true" - 멘션이 발생합니다. "false" - 멘션이 발생하지 않습니다. |
예 | 아니요 |
| comments | string | 답글 멘션 알림 환경설정입니다. 다음 값 중 하나여야 합니다. "any" - 사용자가 시작했거나 참여한 답글 스레드의 메시지에 대해 알림을 발생시킵니다. "root" - 사용자가 시작한 스레드의 메시지에 대해 알림을 발생시킵니다. "never" - 사용자가 멘션되지 않는 한 답글 스레드의 메시지에 대해 알림을 발생시키지 않습니다. |
예 | 아니요 |
| mention_keys | string | 멘션을 발생시키는, 대소문자를 구분하지 않는 사용자 지정 단어에 대한 환경설정입니다. 단어는 쉼표로 구분해야 합니다. | 아니요 | 아니요 |
UserTeamMembership 객체의 필드#
이 객체는 User 객체의 멤버입니다.
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 팀이 존재하지 않으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| name | string | 이 사용자가 멤버가 되어야 하는 팀의 이름입니다. | 아니요 [1] | 예 |
| theme | string | 지정한 팀에 대한 사용자의 테마입니다. Mattermost 테마 문자열 형식이어야 합니다. | 예 | 아니요 |
| roles | string | 이 팀에서 사용자가 가져야 하는 역할입니다. 다음 값 중 하나여야 합니다. "team_user" "team_admin team_user" |
예 | 아니요 |
| channels | array | 이 팀 내에서 사용자가 멤버가 되어야 하는 채널입니다. UserChannelMembership 객체의 배열이어야 합니다. | 예 | 아니요 |
UserChannelMembership 객체의 필드#
이 객체는 TeamMembership 객체의 멤버입니다.
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 상위 채널이 존재하지 않으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| name | string | 이 사용자가 멤버가 되어야 하는, 상위 팀에 속한 채널의 이름입니다. | 아니요 [1] | 예 |
| roles | string | 이 채널에서 사용자가 가져야 하는 역할입니다. 다음 값 중 하나여야 합니다. "channel_user" "channel_user channel_admin" |
예 | 아니요 |
| notify_props | object | 이 채널에서 이 사용자의 알림 환경설정입니다. ChannelNotifyProps 객체여야 합니다. | 예 | 아니요 |
| favorite | boolean | 채널을 즐겨찾기에 추가할지 여부입니다. 다음 값 중 하나여야 합니다. "true" - 예. "false" - 아니요. |
아니요 | 아니요 |
ChannelNotifyProps 객체의 필드#
이 객체는 ChannelMembership 객체의 멤버입니다.
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| desktop | string | 데스크톱 알림 전송 환경설정입니다. 다음 값 중 하나여야 합니다. "default" - 전역 기본값을 따릅니다. "all" - 모든 활동에 대해 보냅니다. "mention" - 멘션에 대해서만 보냅니다. "none" - 보내지 않습니다. |
예 | 아니요 |
| mobile | string | 모바일 알림 전송 환경설정입니다. 다음 값 중 하나여야 합니다. "default" - 전역 기본값을 따릅니다. "all" - 모든 활동에 대해 보냅니다. "mention" - 멘션에 대해서만 보냅니다. "none" - 보내지 않습니다. |
예 | 아니요 |
| mark_unread | string | 채널을 읽지 않음으로 표시하는 환경설정입니다. 다음 값 중 하나여야 합니다. "all" - 읽지 않은 모든 메시지에 대해 표시합니다. "mention" - 멘션에 대해서만 표시합니다. |
예 | 아니요 |
Post 객체#
있는 경우, Post 객체는 파일의 마지막 User 객체 다음에, 모든 DirectChannel 객체 이전에 나타나야 합니다.
Post 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "post",
"post": {
"team": "team-name",
"channel": "channel-name",
"user": "username",
"message": "The post message",
"props": {
"attachments": [{
"pretext": "This is the attachment pretext.",
"text": "This is the attachment text."
}]
},
"create_at": 140012340013,
"flagged_by": [
"username1",
"username2",
"username3"
],
"replies": [{
"user": "username4",
"message": "The reply message",
"create_at": 140012352049,
"attachments": [{
"path": "/some/valid/file/path/1"
}],
}, {
"user": "username5",
"message": "Other reply message",
"create_at": 140012353057,
}],
"reactions": [{
"user": "username6",
"emoji_name": "+1",
"create_at": 140012356032,
}, {
"user": "username7",
"emoji_name": "heart",
"create_at": 140012359034,
}],
"attachments": [{
"path": "/some/valid/file/path/1"
}, {
"path": "/some/valid/file/path/2"
}]
}
}
Post 객체의 필드#
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 팀이 존재하지 않으면 오류가 발생합니다. [2] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 팀에 해당 채널이 존재하지 않으면 오류가 발생합니다. [3] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 사용자가 존재하지 않으면 오류가 발생합니다. |
||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| team | string | 이 게시물이 속한 팀의 이름입니다. | 아니요 [1] | 예 |
| channel | string | 이 게시물이 속한 채널의 이름입니다. | 아니요 [2] | 예 |
| user | string | 이 게시물의 작성자 사용자 이름입니다. | 아니요 [3] | 예 |
| message | string | 게시물에 포함된 메시지입니다. | 예 | 예 |
| props | object | 게시물의 props입니다. 연동 및 봇 게시물에서 사용하는 추가 서식 정보를 포함합니다. 자세한 설명은 메시지 첨부 파일 문서를 참조하세요. | 예 | 예 |
| create_at | int | 게시물의 타임스탬프이며, Unix 에포크 이후의 밀리초 단위입니다. | 예 | 예 |
| flagged_by | array | 게시물에 플래그를 지정한 멤버의 목록을 포함해야 합니다. | 아니요 | 아니요 |
| replies | array | 이 게시물에 대한 답글 게시물입니다. Reply 객체의 배열이어야 합니다. | 예 | 아니요 |
| reactions | array | 이 게시물에 대한 이모지 반응입니다. Reaction 객체의 배열이어야 합니다. | 예 | 아니요 |
| attachments | array | 이 게시물과 연결된 파일 첨부입니다. Attachment 객체의 배열이어야 합니다. | 예 | 아니요 |
Reply 객체의 필드#
이 객체는 Post/DirectPost 객체의 멤버입니다.
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| user | string | 이 답글의 작성자 사용자 이름입니다. | 아니요 [3] | 예 |
| message | string | 답글에 포함된 메시지입니다. | 예 | 예 |
| create_at | int | 답글의 타임스탬프이며, Unix 에포크 이후의 밀리초 단위입니다. | 예 | 예 |
| flagged_by | array | 게시물에 플래그를 지정한 멤버의 목록을 포함해야 합니다. | 아니요 | 아니요 |
| reactions | array | 이 게시물에 대한 이모지 반응입니다. Reaction 객체의 배열이어야 합니다. | 예 | 아니요 |
| attachments | array | 이 게시물에 대한 파일 첨부입니다. Attachment 객체의 배열이어야 합니다. | 예 | 아니요 |
Reaction 객체의 필드#
이 객체는 Post/DirectPost 객체의 멤버입니다.
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| user | string | 이 답글의 작성자 사용자 이름입니다. | 아니요 [3] | 예 |
| emoji_name | string | 반응의 이모지입니다. | 예 | 예 |
| create_at | int | 답글의 타임스탬프이며, Unix 에포크 이후의 밀리초 단위입니다. | 예 | 예 |
Attachment 객체의 필드#
이 객체는 Post/DirectPost 객체의 멤버입니다.
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 파일 경로를 찾을 수 없거나 접근할 수 없으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| path | string | 게시물에 첨부할 파일의 경로입니다. | 아니요 [1] | 예 |
DirectChannel 객체#
다이렉트 채널에는 최소 2명에서 최대 8명의 멤버가 있을 수 있습니다. 멤버가 두 명뿐인 경우 Mattermost는 이를 다이렉트 메시지 채널로 처리합니다. 멤버가 세 명 이상인 경우 Mattermost는 이를 그룹 메시지 채널로 처리합니다.
DirectChannel 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "direct_channel",
"direct_channel": {
"members": [
"username1",
"username2",
"username3"
],
"header": "The Channel Header",
"favorited_by": [
"username1",
"username2",
"username3"
]
}
}
DirectChannel 객체의 필드#
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 사용자 중 한 명 이상이 존재하지 않으면 오류가 발생합니다. | ||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| members | array | 멤버 목록을 포함해야 하며, 사용자 이름은 최소 2개, 최대 8개여야 합니다. | 아니요 [1] | 예 |
| header | string | 채널 헤더입니다. | 예 | 아니요 |
| favorited_by | array | 채널을 즐겨찾기에 추가한 멤버의 목록을 포함해야 합니다. | 아니요 | 아니요 |
DirectPost 객체#
DirectPost 객체는 파일의 다른 모든 객체 다음에 나타나야 합니다.
DirectPost 객체 예시#
명확성을 위해 객체는 일반 JSON 형식으로 표시되지만, 데이터 파일에서는 여러 줄에 걸쳐 쓸 수 없습니다. 반드시 한 줄에 모두 작성해야 합니다.
{
"type": "direct_post",
"direct_post": {
"channel_members": [
"username1",
"username2",
"username3",
],
"user": "username2",
"message": "Hello Group Channel",
"create_at": 140012340013,
"flagged_by": [
"username1",
"username2",
"username3"
],
"replies": [{
"user": "username4",
"message": "The reply message",
"create_at": 140012352049,
}, {
"user": "username5",
"message": "Other reply message",
"create_at": 140012353057,
}],
"reactions": [{
"user": "username6",
"emoji_name": "+1",
"create_at": 140012356032,
}, {
"user": "username7",
"emoji_name": "heart",
"create_at": 140012359034,
}]
}
}
DirectPost 객체의 필드#
| [1] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 동일한 목록을 가진 채널이 없으면 오류가 발생합니다. [2] 검증되지는 않지만, 적용(apply) 모드에서 실행할 때 해당 사용자가 존재하지 않으면 오류가 발생합니다. |
||||
| 필드 이름 | 유형 | 설명 | 검증 여부 | 필수 여부 |
|---|---|---|---|---|
| channel_members | array | 멤버 목록을 포함해야 하며, 사용자 이름은 최소 2개, 최대 8개여야 합니다. | 아니요 [1] | 예 |
| user | string | 이 게시물의 작성자 사용자 이름입니다. | 아니요 [2] | 예 |
| message | string | 게시물에 포함된 메시지입니다. | 예 | 예 |
| create_at | int | 게시물의 타임스탬프이며, Unix 에포크 이후의 밀리초 단위입니다. | 예 | 예 |
| flagged_by | array | 게시물에 플래그를 지정한 멤버의 목록을 포함해야 합니다. | 아니요 | 아니요 |
| replies | array | 이 다이렉트 게시물에 대한 답글 게시물입니다. Reply 객체의 배열이어야 합니다. | 예 | 아니요 |
| reactions | array | 이 다이렉트 게시물에 대한 이모지 반응입니다. Reaction 객체의 배열이어야 합니다. | 예 | 아니요 |
| attachments | array | 이 다이렉트 게시물에 대한 첨부 파일입니다. Attachment 객체의 배열이어야 합니다. | 예 | 아니요 |
일반적인 문제#
대량 가져오기 명령은 mattermost 사용자로 실행하세요. root 또는 다른 사용자로 실행하면 가져온 첨부 파일의 파일 권한에 문제가 발생합니다.
파일 첨부가 활성화되어 있는지, 들어오는 첨부 파일을 지원할 수 있는 충분한 여유 공간이 파일 스토리지 시스템에 있는지, 최대 파일 크기가 적절하게 설정되어 있는지 확인하세요.
Mattermost 서버의 로그에도 충분한 여유 공간이 있는지, 그리고 데이터베이스 서버에 데이터베이스 자체와 트랜잭션 로그를 위한 여유 공간이 있는지 확인하세요.
잘못 구성된 경우 첨부 파일 업로드를 차단하고 가져오기 실패를 유발할 수 있는 바이러스 백신 또는 다른 플러그인을 비활성화하세요. 바이러스 백신 스캔이 필요한 경우 가져오기 전에 첨부 파일 폴더를 스캔하세요.
문제 해결#
대량 가져오기 도구 실행이 중단되고 완료되지 않는 경우#
Bleve 검색 인덱싱이 활성화되어 있는 경우, System Console > Experimental > Bleve에서 일시적으로 비활성화하고 명령을 다시 실행하세요.
Bleve는 여러 프로세스가 동일한 인덱스를 열고 조작하는 것을 지원하지 않습니다. 따라서 Mattermost 서버가 실행 중인 경우, 대량 가져오기 도구 실행을 시도하면 인덱스를 열려고 할 때 잠금이 발생합니다.