InfoGrab DocsInfoGrab Docs

Slack 마이그레이션 가이드

요약

Mattermost는 Slack에서 신뢰할 수 있는 마이그레이션 경로를 제공하여, 조직의 협업 기록을 안전하고 자체 호스팅된 Mattermost 환경으로 가져올 수 있도록 합니다. Slack에서의 전환을 검토 중이십니까?

사용 가능 플랜: Entry, Professional, Enterprise, Enterprise Advanced

개요#

Mattermost는 Slack에서 신뢰할 수 있는 마이그레이션 경로를 제공하여, 조직의 협업 기록을 안전하고 자체 호스팅된 Mattermost 환경으로 가져올 수 있도록 합니다. 마이그레이션 프로세스는 사용자, 채널 및 메시지 기록, 다이렉트 메시지, 스레드를 포함한 전체 워크스페이스를 지원하므로 팀이 중요한 컨텍스트를 잃지 않고 계속 작업할 수 있습니다.

Note

Slack에서의 전환을 검토 중이십니까? 먼저 상위 수준의 마이그레이션 개요를 확인한 다음, 구현 단계를 보려면 이 문서로 돌아오세요.

이 프로세스에는 환경 준비, Slack에서 데이터 내보내기, 해당 데이터를 호환 가능한 형식으로 변환, Mattermost로 가져오기 등이 포함됩니다.

  1. Slack과 Mattermost의 기능 매핑 이해:
    • 워크스페이스, 채널, 대화, 게시물, 사용자, 연동이 어떻게 마이그레이션되는지 검토합니다.
  2. Mattermost 환경 준비:
    • 기록 범위, 내보내기 크기, 첨부 파일의 범위를 정합니다.
    • 인프라와 Mattermost 서버 설정을 확인합니다.
    • 가져오기 전에 Mattermost 환경을 백업합니다.
  3. Slack에서 데이터 내보내기:
    • Slack의 도구와 문서를 사용하여 내보내기를 생성합니다.
    • 단일 워크스페이스 내보내기인지 Enterprise Grid 내보내기인지 확인합니다.
  4. mmetl로 Slack 내보내기 변환:
    • Enterprise Grid의 경우 먼저 grid-transform으로 내보내기를 분할합니다.
    • 내보내기를 검증한 다음, 전체 변환 전에 transform slack --dry-run을 실행합니다.
    • 전체 변환은 JSONL 파일과 data/ 첨부 파일 디렉터리를 생성합니다.
    • 내보내기가 여러 개인 경우 각 아카이브를 따로 변환하고 시간순으로 가져옵니다.
  5. 데이터 패키징 및 Mattermost로 가져오기:
    • 대량 로딩 문서에 따라 변환된 데이터를 패키징합니다.
    • mmctl로 아카이브를 업로드하고 처리합니다.
  6. 마이그레이션 검증:
    • 채널, 사용자, 메시지 기록이 올바르게 가져와졌는지 확인합니다.
    • 필요하면 읽지 않은 채널과 스레드를 수정하고, 프로덕션 전환 전에 가져온 계정을 활성화합니다.

Slack의 데이터 제어 정책과 내보내기 기능은 언제든지 변경될 수 있으며, Slack이 데이터 내보내기에 비용을 청구할 수도 있습니다. Slack Enterprise에서 조직의 데이터를 내보내는 협상 지원과 팀과 함께 마이그레이션을 실행하는 지원은 전문가와 상담하여 받을 수 있습니다.

Note

조직에서 Slack에서 Mattermost로의 마이그레이션에 대한 지원이 필요한 경우 Mattermost 전문 서비스를 고려하세요.

1. Slack과 Mattermost의 기능 매핑 이해#

아래 표는 Slack에서 함께 가져오는 항목과 Mattermost에서 다시 설정해야 하는 항목을 보여줍니다.

워크스페이스 및 채널#

콘텐츠 유형 마이그레이션 여부 참고
Enterprise Grid 워크스페이스 예 Mattermost 팀에 매핑됩니다. Enterprise Grid 내보내기를 참조하세요
공개/비공개 채널 예 보관된 Slack 채널은 타임스탬프를 사용할 수 있는 경우 보관된 상태로 가져옵니다
1:1 DM 예 Mattermost 다이렉트 메시지에 그대로 매핑됩니다
그룹 DM 예 최대 8명의 멤버는 Mattermost 그룹 메시지가 되고, 더 큰 그룹은 비공개 채널이 됩니다
Slack Connect 아니요 Connect로는 마이그레이션되지 않지만, 채널을 단일 Mattermost 팀에 매핑할 수 있습니다. 이후 Mattermost 상호 운용성은 연결된 워크스페이스를 참조하세요
즐겨찾기 대화 아니요 Mattermost에서는 사용자가 메시지를 저장할 수 있습니다

게시물 및 콘텐츠#

콘텐츠 유형 마이그레이션 여부 참고
게시물 및 스레드 예 메시지 기록과 스레드 답글을 함께 가져옵니다
파일 첨부 예 메시지에 첨부된 파일을 함께 가져옵니다. 파일이 많은 게시물은 여러 답글로 나뉠 수 있습니다
리액션 예 이모지 리액션은 게시물과 함께 가져옵니다. 커스텀 이모지 이미지는 별도로 다시 추가해야 합니다. 커스텀 이모지를 참조하세요
채널 멘션 예 채널이 내보내기에 포함된 경우 Mattermost 채널 멘션이 됩니다
Slack 게시물 링크 예 원래 Slack URL이 유지되며 Slack에 계속 접근할 수 있는 동안 작동합니다
외부 링크 예 게시물 콘텐츠에서 변경 없이 유지됩니다
표준 이모지 예 피부색 변형은 유지되지 않습니다
커스텀 이모지 아니요 Mattermost에서 같은 이름으로 추가하세요. 커스텀 이모지를 참조하세요
캔버스 아니요 Slack을 떠나기 전에 canvases.json의 링크에서 필요한 캔버스를 다운로드하세요

사용자 및 봇#

콘텐츠 유형 마이그레이션 여부 참고
사용자 예 이름, 이메일, 직함을 함께 가져옵니다. 사용자 이메일과 게스트 사용자를 참조하세요
비활성화되었거나 삭제된 사용자 예 채널 멤버십을 포함하여 비활성화된 Mattermost 사용자로 가져옵니다
봇 예 --bot-owner 플래그를 통해 Mattermost 사용자가 소유해야 합니다. 유용한 변환 플래그를 참조하세요
사용자 그룹 아니요 커스텀 그룹으로 다시 만드세요
프로필 사진 아니요 사용자가 직접 사진을 추가합니다. 프로필 관리를 참조하세요
접속 상태 아니요 사용자가 Mattermost에서 상태 및 응답 가능 여부를 설정합니다
커스텀 프로필 필드 아니요 사용자 속성으로 다시 만드세요

연동#

연동은 Slack 내보내기 파일에 포함되지 않으므로 Mattermost에서 마이그레이션할 방법이 없습니다. 아래 매핑을 사용하여 각 연동을 Mattermost에서 다시 만드세요. 이미 Slack 형식을 사용하는 인커밍 웹훅 페이로드와 커스텀 슬래시 명령어 요청은 재사용할 수 있으며, 새 Mattermost URL을 가리키도록 설정하면 됩니다.

Slack 연동 마이그레이션 여부 Mattermost 매핑 다시 만들어야 할 항목
Slack Marketplace 앱 아니요 Jira, GitHub, GitLab, Zoom 등의 사전 구축된 플러그인 일치하는 플러그인을 설치하고 채널, 자격 증명, 알림을 다시 설정하세요. Mattermost에 동등한 기능이 없는 경우 웹훅, 슬래시 명령어 또는 커스텀 플러그인을 사용하세요
커스텀 앱 아니요 플러그인 및 REST API 토큰과 설치 위치를 포함하여 앱을 다시 구축하세요
인커밍 웹훅 아니요 인커밍 웹훅. 페이로드는 Slack 호환입니다 각 웹훅 URL과 게시할 채널
아웃고잉 웹훅 아니요 아웃고잉 웹훅 트리거 단어, 채널, 콜백 URL
슬래시 명령어 아니요 기본 제공 및 커스텀 슬래시 명령어. 커스텀 명령어 요청은 Slack 호환입니다 각 커스텀 명령어의 이름, 요청 URL, 채널 범위. Mattermost가 이미 제공하는 명령어가 있으면 기본 제공 명령어를 사용하세요
봇 사용자 아니요 봇 계정은 마이그레이션됩니다. 사용자 및 봇을 참조하세요. 동작은 REST API 또는 플러그인을 사용하는 봇 계정입니다 봇이 수행하는 작업. --bot-owner로 소유자를 지정하세요
Workflow Builder 아니요 채널 내 프로세스에는 플레이북, 여러 앱을 아우르는 워크플로에는 노코드 자동화(n8n, Zapier, Make) 트리거, 단계, 양식, 대상
Block Kit 아니요 Mattermost Blocks 및 인터랙티브 대화 상자 버튼, 메뉴, 양식. 게시된 메시지 텍스트는 여전히 게시물과 함께 가져옵니다
Events API 아니요 키워드 트리거에는 아웃고잉 웹훅, 기타 이벤트에는 플러그인 또는 REST API 구독과 이를 수신하는 서비스

2. Mattermost 환경 준비#

이 가이드는 데이터를 받을 준비가 된 Mattermost 서버가 이미 있다고 가정합니다. 그렇지 않은 경우 배포 문서와 아래 안내를 함께 참고하여 데이터베이스와 파일 스토리지 인프라에 대해 정보에 입각한 결정을 내리세요.

마이그레이션 범위 정의#

  • Slack 에디션: Enterprise Grid 내보내기에는 추가 매핑 단계가 필요합니다. Enterprise Grid를 참조하세요.
  • 데이터 기록: 첫 번째 가져오기에는 더 짧은 기간(예: 최근 6개월)을 권장합니다. 시험 가져오기가 성공한 후에 범위를 넓히세요.
  • 내보내기 크기: ~25 GB 미만의 파일은 하루 내에 완료되는 경우가 많지만, ~100 GB를 초과하는 내보내기는 반복당 여러 날이 걸릴 수 있습니다.
  • 첨부 파일: 반복 속도를 높이기 위해 가능하면 매우 크거나 중요하지 않은 파일(설치 프로그램, 비디오, 오래된 자산)을 제외하세요.
  • 단계별 가져오기: 여러 개의 작은 내보내기(예: 6개월 분량의 덤프 6개)를 지원하며 권장합니다. 여러 내보내기 처리를 참조하세요.

인프라#

  • 테스트 환경: 항상 개발 또는 스테이징 환경으로 먼저 마이그레이션하세요. 대부분의 마이그레이션은 여러 번의 반복이 필요합니다.
  • 운영 체제: mmetl은 Linux 및 macOS에서 지원됩니다. Windows는 지원되지 않습니다. WSL은 사용하지 마세요. 대규모 변환에는 파일 시스템 성능이 대개 너무 느립니다.
  • 스토리지: 아카이브, 압축을 푼 데이터, Mattermost 가져오기 패키지를 위해 Slack 내보내기 크기의 최소 3배를 확보하세요.
  • 파일 스토어: S3 호환 스토리지로의 가져오기는 일반적으로 로컬 디스크나 NFS보다 빠르게 완료됩니다. 대규모 가져오기에는 S3를 사용하세요.

Mattermost 서버 설정#

3. Slack에서 데이터 내보내기#

Mattermost는 Slack에서 데이터를 대신 내보내 주지 않습니다. Slack의 자체 내보내기 도구와 문서를 사용하세요.

Slack은 두 가지 일반적인 내보내기 유형을 제공합니다.

  1. 공개 채널 내보내기: 공개 채널 메시지와 파일 링크를 포함합니다. 모든 Slack 플랜에서 사용할 수 있습니다.
  2. 모든 채널 및 대화 내보내기: 공개 채널, 비공개 채널, DM, 그룹 메시지를 포함합니다. Business+(신청 필요) 및 Enterprise Grid에서 사용할 수 있습니다.

Slack Free 플랜 내보내기에는 공개 채널의 메시지와 파일 링크가 포함되지만, 최근 90일간의 파일 링크만 포함됩니다. Slack은 사전 통지 없이 내보내기 형식을 변경할 수 있으므로, 대규모 마이그레이션 전에 최신 mmetl 릴리즈를 사용하세요. 변환이 예상치 못한 파싱 오류로 실패하면 변경 로그를 확인하거나 이슈를 등록하세요.

Important

Slack 내보내기를 압축 해제한 후 다시 압축하지 마세요. 아카이브 구조가 변경되어 변환 프로세스에 문제가 발생할 수 있습니다.

단일 워크스페이스 내보내기#

일반적인 단일 워크스페이스 zip 파일에는 다음이 포함됩니다.

  • channels.json, users.json
  • dms.json, groups.json, mpims.json (모든 채널 내보내기)
  • integration_logs.json
  • 일별 게시물 JSON 파일이 들어 있는 채널별 폴더

일반적인 구조 (모든 채널 내보내기):

Slack Export/
├── general/
│   ├── 2024-01-15.json
│   └── 2024-01-16.json
├── project-alpha/
│   ├── 2024-02-01.json
│   └── 2024-02-02.json
├── private-leadership/
│   └── 2024-03-10.json
├── channels.json
├── users.json
├── groups.json
├── dms.json
├── mpims.json
└── integration_logs.json

공개 및 비공개 채널 이름은 일별 게시물 파일이 들어 있는 최상위 폴더로 나타납니다. 공개 채널만 내보낸 경우에는 groups.json, dms.json, mpims.json 및 비공개 채널 폴더가 포함되지 않습니다.

이 아카이브에는 mmetl transform slack을 사용하세요(변환 참조).

Enterprise Grid 내보내기#

Slack Enterprise Grid는 단일 관리 플레인 아래에 여러 워크스페이스를 결합합니다. 내보내기는 조직 수준 데이터와 워크스페이스별 데이터를 포함하는 단일 아카이브입니다.

데이터가 Mattermost에 매핑되는 방식

  • Slack 워크스페이스는 대략 Mattermost 팀에 해당합니다.
  • Grid의 채널은 개별 워크스페이스에 속합니다. 워크스페이스 간에 공유되는 채널은 단일 Mattermost 팀에 매핑해야 합니다. Mattermost는 Slack처럼 팀 간 공유 채널을 지원하지 않습니다.
  • 대부분의 고객에게는 하나의 Mattermost 팀으로 가져오는 것이 가장 간단합니다. 워크스페이스를 의도적으로 분리하려는 경우에만 여러 팀을 사용하세요.
  • 워크스페이스에 걸친 조직 전체 DM은 단일 팀에 할당되며, 워크스페이스 간 참가자는 자리 표시자 계정으로 가져옵니다. Enterprise Grid 내보내기에서 조직 전체 DM은 어떻게 됩니까?를 참조하세요.

일반적인 Grid 구조

Enterprise Grid Export/
├── channel1/
│   ├── 2023-01-01.json
│   └── 2023-01-02.json
├── channel2/
│   ├── 2023-05-01.json
│   └── 2023-05-02.json
├── teams/
│   ├── team1/
│   │   ├── channel3/
│   │   ├── channels.json
│   │   ├── mpims.json
│   │   ├── dms.json
│   │   ├── users.json
│   │   └── groups.json
│   └── team2/
│       ├── channel4/
│       ├── channels.json
│       ├── mpims.json
│       ├── dms.json
│       ├── users.json
│       └── groups.json
├── channels.json
├── org_users.json
├── mpims.json
├── dms.json
└── groups.json

공유 채널은 대개 루트에 나타나며, 워크스페이스별 데이터는 /teams/ 아래에 있습니다. Grid 마이그레이션은 수동 팀 매핑 때문에 보통 더 많은 시간이 걸립니다. Enterprise Grid 내보내기 변환을 참조하세요.

4. mmetl로 내보내기 변환#

mmetl은 Slack 내보내기를 Mattermost의 대량 가져오기 형식, 즉 JSONL 파일과 첨부 파일이 들어 있는 data/ 디렉터리로 변환합니다.

  1. OS 및 아키텍처에 맞는 최신 mmetl 릴리즈를 다운로드합니다.
  2. mmetl help(또는 ./mmetl help)를 실행하여 명령어를 살펴봅니다.

4.1 Enterprise Grid 내보내기 분할(선택 사항)#

Slack Enterprise Grid 내보내기가 없다면 이 하위 섹션은 건너뛰세요. Grid 아카이브는 각 팀에 mmetl transform slack을 실행하기 전에 mmetl grid-transform으로 워크스페이스별 내보내기로 분할해야 합니다.

  1. Slack에서 전체 Grid 내보내기를 다운로드합니다.
  2. 팀별 내보내기로 분할합니다.
./mmetl grid-transform -f slackexport.zip

grid-transform은 아카이브에 이미 있는 teams/<name>/ 폴더에서 각 Slack 워크스페이스 ID를 추론하고 매핑을 출력합니다. 아카이브 루트의 공유 채널은 team 필드가 있는 첫 번째 게시물에 명시된 워크스페이스로 이동합니다.

  1. 결과로 생성된 각 아카이브를 transform slack --dry-run으로 검증한 다음, 각각 Mattermost 팀에 해당하는 --team을 사용하여 변환합니다(이 플래그는 Slack의 폴더 이름과 무관합니다).

추론이 실패하면 --team-map-path teams.json을 전달합니다.

{
  "T0001": "acme",
  "T0002": "widgets-inc"
}
  • 키: 메시지의 team 필드에 나타나는 Slack 워크스페이스 ID(일반적으로 T...).
  • 값: 내보내기에 이미 있는 teams/<name>/ 폴더입니다. Slack의 폴더 이름과 정확히 일치해야 합니다. 이 값은 출력 zip 이름이며, Mattermost --team 값이 아닙니다.

4.2 Slack 내보내기 검증#

단일 워크스페이스 내보내기에는 원본 zip을 사용합니다. Enterprise Grid에는 grid-transform이 생성한 워크스페이스별 zip을 각각 사용합니다. --team을 대상 Mattermost 팀으로 설정하고 전체 실행에 사용할 변환 플래그를 동일하게 사용하세요(내보내기에 봇이 있으면 --bot-owner 포함).

./mmetl transform slack \
  --team my-team \
  --file slack_export.zip \
  --output mattermost_import.jsonl \
  --bot-owner admin \
  --dry-run

드라이 런은 JSONL을 쓰거나 첨부 파일을 복사하지 않고 내보내기를 파싱하고 변환합니다. 경고와 오류를 터미널에 기록하며, 전체 변환에서 건너뛰게 될 누락된 첨부 파일을 포함하여 문제를 발견하면 0이 아닌 값으로 종료합니다. 전체 실행 전에 보고된 문제를 수정하세요. 전체 실행에서 첨부 파일 확인과 복사를 건너뛰려는 경우에만 --skip-attachments를 사용하세요.

4.3 변환 실행#

처음 실행할 때는 작은 내보내기(또는 --skip-attachments)를 사용하여 흐름을 빠르게 익히세요.

  1. 대상 팀이 Mattermost에 이미 존재하는지 확인합니다. 팀 이름은 소문자와 하이픈으로 구성되어야 합니다(예: 팀 표시 이름 내 팀은 my-team이 됩니다). 이 서버에 계정이 있는 모든 사용자의 팀 참여 허용이 활성화되어 있어야 합니다.

  2. 변환합니다.

./mmetl transform slack \
  --team my-team \
  --file slack_export.zip \
  --output mattermost_import.jsonl \
  --bot-owner admin

Slack 사용자 중 이메일이 없는 사용자가 있으면 --default-email-domain 또는 --skip-empty-emails를 전달하지 않는 한 변환이 실패합니다. 조직 도메인과 함께 --default-email-domain을 사용하는 것이 좋습니다. 사용자 이메일을 참조하세요.

  1. 작업 디렉터리의 예상 출력:
  • mattermost_import.jsonl: 사용자, 채널, 게시물 및 관련 레코드
  • data/(또는 --attachments-dir): bulk-export-attachments/ 아래의 첨부 파일
  • transform-slack.log: INFO 레벨 진행 상황(자세한 내용은 --debug 사용). 각 단계의 의미는 부록 B를 참조하세요.
  1. 성공 여부 빠른 확인:
  • 명령이 0으로 종료됩니다.
  • JSONL이 version 라인으로 시작하며 user, channel / direct_channel, post / direct_post 라인을 포함합니다.
  • JSONL에서 참조하는 첨부 파일 경로가 data/ 아래에 존재합니다.
  • 로그에서 파싱 단계가 치명적인 오류 없이 완료되었음을 보여줍니다.
  • 이메일 플래그를 사용한 경우, JSONL에서 합성된 도메인(--skip-empty-emails를 사용한 경우 빈 이메일)을 검색하고, 패키징 전에 사용자 이메일을 따르세요.
  1. 실패했거나 부분적으로 실행된 징후:
  • 파싱/변환 중 0이 아닌 종료 코드 또는 패닉.
  • 지원되지 않는 메시지 하위 유형에 대한 경고(일부 게시물이 건너뛰어짐. 로그를 검토하세요).
  • 두 이메일 플래그를 모두 설정하지 않은 상태에서 이메일 누락(변환이 해당 사용자를 지정하며 종료됨).
  • 기본 --guest-handling=guest에서 채널이 없는 게스트가 제외된 경우의 게스트 관련 건너뛰기 경고.

권장 단계별 접근 방식

  1. --skip-attachments와 함께 한 채널 분량의 기록(또는 짧은 기간)을 변환하고 가져옵니다.
  2. Mattermost에서 검증합니다.
  3. 필요하면 여전히 첨부 파일 없이 전체 워크스페이스 내보내기로 확대합니다.
  4. 최종 패키지를 위해 첨부 파일과 함께 다시 실행합니다.

Mattermost로의 대량 가져오기는 멱등성이 있습니다. 동일한 게시물을 다시 가져와도 중복이 생성되지 않습니다. 따라서 반복 테스트가 안전합니다. 단계별 전환 중 매주 내보내기/변환/가져오기 주기를 실행하는 것은 지원되는 패턴입니다.

4.4 여러 내보내기 처리#

고객은 여러 개의 Slack 덤프(예: 6개월 분량의 아카이브 6개)를 받거나 전환 중에 매주 내보내기를 실행하는 경우가 많습니다.

권장 사항

  • 각 아카이브를 별도의 .jsonl + data/ 트리로 따로 변환합니다(대량 형식을 이해하는 경우에만 신중하게 병합하세요).
  • 가능하면 시간순으로 가져옵니다(최신 것부터).
  • Mattermost 대량 가져오기의 멱등성을 활용합니다. 작성자와 create_at이 같은 중복 게시물은 다시 생성되지 않습니다.
  • 배치 간에 팀 이름과 --guest-handling / --bot-owner 선택을 일관되게 유지합니다.
  • 기록이 매우 방대한 경우, 수백 GB를 한 번에 업로드하기보다 여러 개의 중간 규모 가져오기를 권장합니다(패키징 및 가져오기 참조).

유용한 변환 플래그#

  • --skip-attachments / -a: 첨부 파일 복사를 건너뜁니다(더 빠른 시험 실행).
  • --allow-download / -l: 필요할 때 URL에서 첨부 파일 다운로드를 허용합니다.
  • --attachments-dir / -d: 첨부 파일 출력 디렉터리(기본값 data).
  • --default-email-domain : 누락된 이메일을 username@DOMAIN으로 합성합니다. 사용자 이메일을 참조하세요.
  • --skip-empty-emails: 이메일이 비어 있는 사용자를 유지합니다(수동으로 수정해야 하는 유효하지 않은 가져오기 데이터가 생성됨). 사용자 이메일을 참조하세요.
  • --discard-invalid-props / -p: props가 Mattermost 제한을 초과하는 게시물을 삭제합니다.
  • --guest-handling=guest|user|skip: 게스트 사용자를 참조하세요.
  • --bot-owner : 내보내기에 봇 사용자가 있는 경우 필수입니다.
  • --debug: transform-slack.log에 상세 로깅을 기록합니다. 해당 로그의 단계를 읽는 방법은 부록 B를 참조하세요.

5. 데이터 패키징 및 Mattermost로 가져오기#

mmetl이 완료되면 다음이 있어야 합니다.

  • .jsonl 대량 가져오기 파일
  • 첨부 파일이 들어 있는 data/ 디렉터리

5.1 가져오기 데이터 검토#

변환 구성에 따라 경우에 따라 zip으로 압축하고 업로드하기 전에 JSONL을 검토하거나 편집해야 할 수 있습니다. 누락되었거나 합성된 이메일(--default-email-domain, --skip-empty-emails 또는 @local 자리 표시자)은 사용자 이메일을 참조하세요.

5.2 가져오기 패키징#

두 항목을 함께 zip으로 압축합니다.

zip -r mattermost-bulk-import.zip data mattermost_import.jsonl

로컬에서 내보내기를 검증합니다.

mmctl import validate ./mattermost-bulk-import.zip

그런 다음 Mattermost 대량 데이터 로딩 가이드에 따라 mmctl로 zip을 가져옵니다. 해당 가이드는 인증, 작업 상태, 전체 가져오기 데이터 형식을 다룹니다.

5.3 업로드 방법 선택#

상황 권장 방법
작은 패키지(대략 ~25 GB 미만) mmctl import upload 후 mmctl import process (대량 로딩 참조)
큰 패키지(수 GB 이상 / 수년간의 기록, 수만 개의 채널) zip을 Mattermost 서버에 두고 그 자리에서 처리합니다. API를 통한 업로드는 피하세요

대규모 가져오기(파일 스토어 / 로컬 프로세스)

대규모 데이터 세트의 경우 파일을 서버에 복사하는 것이 mmctl import upload보다 대개 더 안정적입니다.

  1. mattermost-bulk-import.zip을 서버에 복사합니다(예: Mattermost data/import 디렉터리 또는 서버 프로세스가 읽을 수 있는 다른 경로).
  2. 서버에서 mmctl 로컬 모드로 파일을 직접 처리합니다.
mmctl import process --bypass-upload ./mattermost-bulk-import.zip --local

참고:

  • --bypass-upload는 --local과 함께 사용할 때만 작동합니다.
  • 서버가 고가용성(HA) 상태일 때는 지원되지 않습니다. 가져오기 기간 동안 HA를 비활성화하거나 표준 업로드 경로를 사용하세요.
  • S3 기반 파일 스토리지로의 가져오기는 대규모 작업에서 일반적으로 로컬/NFS 디스크보다 성능이 좋습니다.

6. 마이그레이션 검증#

각 가져오기 후 작업이 완료되었는지 확인하고 Mattermost의 대표 데이터를 Slack 내보내기와 비교하세요. 프로덕션 전환 전에 기능 매핑에 설명된 차이를 고려하세요.

6.1 가져오기 작업 확인#

mmctl import job list와 mmctl import job show --json을 사용하여 작업이 완료되었는지 확인하고 오류를 검토하세요. 작업 세부 정보는 대량 로딩 및 mmctl 문서를 참조하세요.

6.2 마이그레이션된 데이터 확인#

가져온 데이터를 Slack 내보내기와 대조하여 표본 검사를 하세요.

  • 예상한 사용자, 봇, 게스트, 공개 및 비공개 채널, 보관된 채널이 있는지 확인합니다.
  • 1:1 DM, 그룹 메시지, 비공개 채널로 변환된 대규모 다자간 DM의 표본을 엽니다. Enterprise Grid의 경우 조직 전체 DM과 자리 표시자 사용자도 확인하세요.
  • 표본 게시물, 스레드 답글, 리액션, 파일 첨부를 비교합니다. 변환 로그에서 건너뛴 콘텐츠를 확인하고, 일치하는 이모지를 추가한 후 커스텀 이모지 리액션이 표시되는지 확인합니다.
  • 활성화 후 가져온 사용자로 계정 접근을 테스트합니다.

6.3 필요한 경우 읽지 않은 채널 및 스레드 수정#

가져온 메시지가 사용자에게 읽지 않은 상태로 표시되면 데이터베이스를 백업한 다음 PostgreSQL에서 다음 SQL을 실행하세요.

begin;
UPDATE channelmembers
SET
    msgcount = channels.totalmsgcount,
    lastupdateat = channels.lastpostat,
    lastviewedat = channels.lastpostat,
    msgcountroot = channels.totalmsgcountroot
FROM channels
WHERE channelmembers.channelid = channels.id;

INSERT INTO preferences (UserId, Category, Name, Value)
SELECT
    cm.userid,
    'channel_approximate_view_time',
    cm.channelid,
    cm.lastupdateat
FROM
    channelmembers cm
ON CONFLICT (userid, category, name)
DO UPDATE SET
    Value = EXCLUDED.Value;

update preferences
  set value = false
  where category = 'direct_channel_show';

update preferences
  set value = false
  where category = 'group_channel_show';

commit;

6.4 가져온 계정 활성화#

대량 가져오기(이 가이드의 mmetl + mmctl import 경로)는 가져온 사용자 이메일을 항상 확인된 상태로 표시합니다. 사용자는 별도의 이메일 확인 단계를 거칠 필요가 없습니다.

가져온 사용자는 본인이 알지 못하는 생성된 비밀번호를 받습니다. 사용자는 가져오기에 포함된 이메일 주소(보통 Slack 이메일)로 Mattermost 로그인 페이지의 비밀번호 재설정을 사용하여 계정을 활성화합니다.

가져오기 후 인증을 LDAP 또는 SAML로 전환하려면 mmctl user migrate-auth를 참조하세요.

FAQ#

일괄 처리로 가져올 수 있나요, 아니면 한 번에 모두 가져와야 합니까?#

일괄 처리를 사용해도 되며 권장합니다. 점진적으로 변환하고 가져오세요. Mattermost 대량 가져오기는 멱등성이 있습니다. 여러 내보내기 처리를 참조하세요.

가져오기를 실행하기 전에 사용자를 만들어야 합니까?#

아니요. 사용자(그리고 --bot-owner를 사용한 봇)는 가져오기 파일에서 생성됩니다. 대상 팀은 미리 만들어 두세요.

메시지보다 먼저 커스텀 이모지를 가져와야 합니까?#

아니요. 리액션은 이모지 이름으로 저장되므로 커스텀 이모지가 존재하기 전에 가져올 수 있습니다. 편한 때에 일치하는 커스텀 이모지를 추가하세요. Mattermost에 해당 이름이 존재하게 되면 해당 리액션이 표시됩니다. 커스텀 이모지를 참조하세요.

같은 가져오기를 두 번 실행하면 어떻게 됩니까?#

중복 게시물은 생성되지 않습니다. 일치하는 레코드는 대량 가져오기 규칙에 따라 건너뛰거나 업데이트됩니다. 재시도와 단계별 전환에 안전합니다.

Slack Connect 채널은 어떻게 처리해야 합니까?#

Slack Connect 마이그레이션 경로는 없습니다. mmetl은 외부 조직 멤버십이나 Connect 의미 체계를 매핑하지 않습니다. 내보내기에 Connect 채널이 있으면 워크스페이스의 멤버만 포함된 일반 공개 또는 비공개 채널로 변환될 수 있습니다. Mattermost에서 조직 간 협업을 계속하려면 연결된 워크스페이스를 사용하세요.

매우 큰 가져오기(수 GB)는 어떻게 처리합니까?#

mmetl로 패키징하고 zip을 Mattermost 서버에 복사한 다음 mmctl import process --bypass-upload --local을 사용하세요. 업로드 방법 선택 및 대량 데이터 로딩을 참조하세요.

메시지에 포함된 Slack URL은 계속 작동합니까?#

채널 멘션은 가능한 경우 Mattermost ~channel 형식으로 변환됩니다. 특정 Slack 게시물에 대한 링크는 Slack URL로 유지되며 Slack에 접근할 수 있는 동안 작동합니다.

Enterprise Grid 내보내기에서 조직 전체 DM은 어떻게 됩니까?#

mmetl grid-transform에는 조직 전체 대화에 대한 특별한 처리가 없습니다. 루트 레벨의 dms.json 및 mpims.json 항목은 다른 모든 대화와 같은 경로를 따릅니다. grid-transform은 대화의 게시물 파일을 읽고 team 필드가 있는 첫 번째 게시물에 명시된 워크스페이스에 대화 전체를 할당합니다. 따라서 두 워크스페이스에 걸친 DM은 정확히 하나의 Mattermost 팀에 들어가며, 팀 간에 분할되거나 양쪽에 복제되는 일은 없습니다. 계획해야 할 두 가지 결과가 있습니다.

  • 다른 워크스페이스의 참가자는 자리 표시자 계정이 됩니다. grid-transform은 워크스페이스 간에 사용자 목록을 병합하지 않으므로, 할당된 워크스페이스의 멤버가 아닌 참가자는 해당 팀의 users.json에서 빠집니다. 그러면 mmetl transform slack이 Slack 사용자 ID 이름을 가지며 @local 이메일 주소를 가진 비활성화된 자리 표시자 사용자를 만듭니다. 가져오기 전에 해당 주소를 수정하세요. 사용자 이메일을 참조하세요.
  • 할당할 수 없는 대화는 제외됩니다. 대화의 게시물에 team 필드가 없거나 워크스페이스 ID가 팀 매핑에 없으면, grid-transform은 grid-transform-slack.log에 오류를 기록하고 해당 대화를 건너뜁니다. 건너뛴 대화는 어떤 워크스페이스별 zip에도 기록되지 않으므로, 종료 코드에 의존하지 말고 계속 진행하기 전에 해당 로그를 검토하세요.

워크스페이스 간 DM 기록을 보존하는 것이 중요하다면, 어느 팀이 해당 대화를 소유할지 미리 결정하고 시험 가져오기에서 일부 대화를 확인하세요.

Slack 게스트는 어떻게 가져옵니까?#

기본값(--guest-handling=guest)에서는 게스트 계정이 활성화되어 있고 라이선스가 있는 경우 Slack 게스트가 Mattermost 게스트로 내보내집니다. 공개/비공개 채널 멤버십이 없는 게스트는 건너뜁니다. 이러한 게스트를 일반 멤버로 가져오려면 --guest-handling=user를 사용하세요. 게스트 사용자를 참조하세요.

예전에는 작동하던 내보내기를 mmetl이 갑자기 파싱하지 못하면 어떻게 합니까?#

Slack이 내보내기 형식을 변경했을 수 있습니다. GitHub Releases에서 mmetl을 업데이트하고, 전체 변환에 사용할 동일한 플래그로 mmetl transform slack --dry-run을 다시 실행하세요. 새로운 형식 변경이 확인되면 이슈를 등록하세요.

Slack Enterprise Grid에 대한 추가 고려 사항은 무엇입니까?#

mmetl grid-transform을 사용하여 아카이브를 분할한 다음, 각 워크스페이스 아카이브를 따로 변환하세요. grid-transform은 teams/<name>/ 폴더에서 워크스페이스 ID를 추론합니다. 추론이 실패하는 경우에만 --team-map-path teams.json을 전달하세요. 공유 채널은 단일 Mattermost 팀에 들어가야 합니다. Enterprise Grid 내보내기를 참조하세요.

지원되지 않는 Slack 기능이 있습니까?#

Slack과 Mattermost의 기능 매핑을 참조하세요. 핵심 협업 데이터는 해당 표에 따라 마이그레이션할 수 있으며, 앱, 워크플로 및 이와 유사한 연동은 Mattermost 연동을 사용하여 다시 구축해야 합니다.

부록 A: 커스텀 이모지, 게스트, 사용자 이메일#

커스텀 이모지, 게스트 계정, 사용자 이메일은 각각 마이그레이션 중에 결정이 필요합니다. Slack 내보내기는 이 항목들을 Mattermost가 그대로 사용할 수 있는 형태로 가져오지 않습니다. 이 사항을 정리하는 동안에도 메시지 기록은 가져올 수 있습니다.

  • 커스텀 이모지. 가져온 게시물의 리액션은 이모지 이름을 유지합니다. 리액션이 표시되려면 Mattermost에 이미지를 추가하세요.
  • 게스트 사용자. Slack 게스트를 Mattermost 게스트로 할지, 일반 멤버로 할지, 가져오기에서 제외할지 결정하세요.
  • 사용자 이메일. 가져오는 모든 사용자에게는 이메일 주소가 필요합니다. Slack 내보내기에 이메일이 없는 사용자는 가져오기 전에 주소가 필요합니다.

커스텀 이모지#

리액션은 이모지 이름으로 저장되어 게시물과 함께 가져옵니다. 커스텀 이모지 이미지는 Mattermost에 추가해야 합니다.

  • thumbsup, heart 같은 표준 이모지는 추가 설정 없이 표시됩니다.
  • 각 커스텀 이모지를 같은 이름으로, 소문자로 추가하세요. 해당 이름이 존재하는 즉시 과거 리액션이 표시됩니다. 메시지 가져오기 전이나 후에 커스텀 이모지 UI에서 추가하거나, 대량 가져오기의 emoji 객체로 추가할 수 있습니다. 필요한 경우 System Console에서 커스텀 이모지를 켜세요.
  • 피부색 변형은 삭제됩니다. +1::skin-tone-3은 +1이 됩니다.

게스트 사용자#

mmetl transform slack에서 --guest-handling을 설정하여 Slack 게스트의 처리 방식을 선택합니다.

모드 동작
guest(기본값) Mattermost 게스트가 되며, 참여했던 공개 및 비공개 채널로 제한됩니다. 게스트 계정을 활성화해야 하며 라이선스가 있어야 합니다.
user 일반 멤버가 됩니다.
skip 채널 멤버십, 게시물, 리액션과 함께 제외됩니다.

다이렉트 메시지 또는 그룹 메시지에만 있던 게스트는 Mattermost 게스트가 될 수 없습니다. 해당 계정은 --guest-handling=user를 사용하지 않으면 건너뜁니다.

사용자 이메일#

가져오는 모든 사용자에게는 이메일 주소가 필요합니다. Slack 내보내기에 이메일이 없으면 플래그를 선택하지 않는 한 변환이 중단되고 해당 사용자를 지정합니다.

선택 해야 할 일
--default-email-domain example.com 누락된 이메일이 username@example.com이 됩니다. 조직 도메인을 사용하세요. 다른 주소여야 하는 경우 가져오기 전에 수정하세요.
--skip-empty-emails 이메일이 빈 상태로 유지됩니다. 가져오기 전에 영향을 받는 각 사용자에게 실제 주소를 설정하세요. 그렇지 않으면 가져오기 검증이 실패합니다.
플래그 없음 변환이 중단됩니다. 내보내기를 수정하거나 플래그와 함께 다시 실행하세요.

Enterprise Grid 가져오기에서는 <userid>@local 주소를 가진 자리 표시자 사용자가 생성될 수도 있습니다. 가져오기 전에 이를 실제 주소로 교체하세요.

가져오기 파일에서 도메인 또는 @local을 검색하고, 주소를 수정한 다음 mmctl import validate를 실행하세요.

부록 B: mmetl 파싱 단계#

대규모 변환은 4단계를 거칩니다. transform-slack.log(및 콘솔 출력)를 확인하여 진행 상황을 가늠하세요. 2~4단계의 채널별 진행 상황은 DEBUG 레벨로 기록되므로, 해당 라인을 보려면 --debug와 함께 실행하세요. 단계 완료 메시지와 파일 읽기 진행 상황은 INFO를 사용합니다.

  1. 가져오기 파일 읽기: 아카이브 크기에 따라 보통 5~10분 걸립니다.

    예시:

    {"file":"parse.go:226","level":"info","msg":"Processing file 1 of 10335: aluminum-white-lightbulb/","time":"2024-03-11T20:41:09-04:00"}
    
  2. 사용자 멘션 변환: 대규모 내보내기에서는 몇 시간이 걸릴 수 있습니다.

    예시(--debug 필요):

    {"file":"parse.go:109","level":"debug","msg":"Slack Import: converting user mentions for channel touchscreen-headphones-sleek. 1 of 400","time":"2024-03-11T20:41:10-04:00"}
    

    단계가 완료되면(INFO):

    {"level":"info","msg":"Slack Import: Converted user mentions"}
    
  3. 채널 멘션 변환: 일반적으로 사용자 멘션의 약 절반 정도 걸립니다.

    예시(--debug 필요):

    {"file":"parse.go:132","level":"debug","msg":"Slack Import: converting channel mentions for channel robust-smart-home-device-matrix. 95 of 400","time":"2024-03-11T20:41:48-04:00"}
    

    단계가 완료되면(INFO):

    {"level":"info","msg":"Slack Import: Converted channel mentions"}
    
  4. 게시물 마크업 변환: Slack 서식을 Mattermost Markdown으로 변환합니다. 보통 가장 빠른 단계입니다.

    예시(--debug 필요):

    {"file":"parse.go:196","level":"debug","msg":"Slack Import: converting markdown for channel vertex-robust-vacuum. 120 of 400","time":"2024-03-11T20:41:58-04:00"}
    

    단계가 완료되면(INFO):

    {"level":"info","msg":"Slack Import: Converted markdown"}
    

Slack 마이그레이션 가이드

Mattermost v12.0
원문 보기

요약

Mattermost는 Slack에서 신뢰할 수 있는 마이그레이션 경로를 제공하여, 조직의 협업 기록을 안전하고 자체 호스팅된 Mattermost 환경으로 가져올 수 있도록 합니다. Slack에서의 전환을 검토 중이십니까?

사용 가능 플랜: Entry, Professional, Enterprise, Enterprise Advanced

개요#

Mattermost는 Slack에서 신뢰할 수 있는 마이그레이션 경로를 제공하여, 조직의 협업 기록을 안전하고 자체 호스팅된 Mattermost 환경으로 가져올 수 있도록 합니다. 마이그레이션 프로세스는 사용자, 채널 및 메시지 기록, 다이렉트 메시지, 스레드를 포함한 전체 워크스페이스를 지원하므로 팀이 중요한 컨텍스트를 잃지 않고 계속 작업할 수 있습니다.

Note

Slack에서의 전환을 검토 중이십니까? 먼저 상위 수준의 마이그레이션 개요를 확인한 다음, 구현 단계를 보려면 이 문서로 돌아오세요.

이 프로세스에는 환경 준비, Slack에서 데이터 내보내기, 해당 데이터를 호환 가능한 형식으로 변환, Mattermost로 가져오기 등이 포함됩니다.

  1. Slack과 Mattermost의 기능 매핑 이해:
    • 워크스페이스, 채널, 대화, 게시물, 사용자, 연동이 어떻게 마이그레이션되는지 검토합니다.
  2. Mattermost 환경 준비:
    • 기록 범위, 내보내기 크기, 첨부 파일의 범위를 정합니다.
    • 인프라와 Mattermost 서버 설정을 확인합니다.
    • 가져오기 전에 Mattermost 환경을 백업합니다.
  3. Slack에서 데이터 내보내기:
    • Slack의 도구와 문서를 사용하여 내보내기를 생성합니다.
    • 단일 워크스페이스 내보내기인지 Enterprise Grid 내보내기인지 확인합니다.
  4. mmetl로 Slack 내보내기 변환:
    • Enterprise Grid의 경우 먼저 grid-transform으로 내보내기를 분할합니다.
    • 내보내기를 검증한 다음, 전체 변환 전에 transform slack --dry-run을 실행합니다.
    • 전체 변환은 JSONL 파일과 data/ 첨부 파일 디렉터리를 생성합니다.
    • 내보내기가 여러 개인 경우 각 아카이브를 따로 변환하고 시간순으로 가져옵니다.
  5. 데이터 패키징 및 Mattermost로 가져오기:
    • 대량 로딩 문서에 따라 변환된 데이터를 패키징합니다.
    • mmctl로 아카이브를 업로드하고 처리합니다.
  6. 마이그레이션 검증:
    • 채널, 사용자, 메시지 기록이 올바르게 가져와졌는지 확인합니다.
    • 필요하면 읽지 않은 채널과 스레드를 수정하고, 프로덕션 전환 전에 가져온 계정을 활성화합니다.

Slack의 데이터 제어 정책과 내보내기 기능은 언제든지 변경될 수 있으며, Slack이 데이터 내보내기에 비용을 청구할 수도 있습니다. Slack Enterprise에서 조직의 데이터를 내보내는 협상 지원과 팀과 함께 마이그레이션을 실행하는 지원은 전문가와 상담하여 받을 수 있습니다.

Note

조직에서 Slack에서 Mattermost로의 마이그레이션에 대한 지원이 필요한 경우 Mattermost 전문 서비스를 고려하세요.

1. Slack과 Mattermost의 기능 매핑 이해#

아래 표는 Slack에서 함께 가져오는 항목과 Mattermost에서 다시 설정해야 하는 항목을 보여줍니다.

워크스페이스 및 채널#

콘텐츠 유형 마이그레이션 여부 참고
Enterprise Grid 워크스페이스 예 Mattermost 팀에 매핑됩니다. Enterprise Grid 내보내기를 참조하세요
공개/비공개 채널 예 보관된 Slack 채널은 타임스탬프를 사용할 수 있는 경우 보관된 상태로 가져옵니다
1:1 DM 예 Mattermost 다이렉트 메시지에 그대로 매핑됩니다
그룹 DM 예 최대 8명의 멤버는 Mattermost 그룹 메시지가 되고, 더 큰 그룹은 비공개 채널이 됩니다
Slack Connect 아니요 Connect로는 마이그레이션되지 않지만, 채널을 단일 Mattermost 팀에 매핑할 수 있습니다. 이후 Mattermost 상호 운용성은 연결된 워크스페이스를 참조하세요
즐겨찾기 대화 아니요 Mattermost에서는 사용자가 메시지를 저장할 수 있습니다

게시물 및 콘텐츠#

콘텐츠 유형 마이그레이션 여부 참고
게시물 및 스레드 예 메시지 기록과 스레드 답글을 함께 가져옵니다
파일 첨부 예 메시지에 첨부된 파일을 함께 가져옵니다. 파일이 많은 게시물은 여러 답글로 나뉠 수 있습니다
리액션 예 이모지 리액션은 게시물과 함께 가져옵니다. 커스텀 이모지 이미지는 별도로 다시 추가해야 합니다. 커스텀 이모지를 참조하세요
채널 멘션 예 채널이 내보내기에 포함된 경우 Mattermost 채널 멘션이 됩니다
Slack 게시물 링크 예 원래 Slack URL이 유지되며 Slack에 계속 접근할 수 있는 동안 작동합니다
외부 링크 예 게시물 콘텐츠에서 변경 없이 유지됩니다
표준 이모지 예 피부색 변형은 유지되지 않습니다
커스텀 이모지 아니요 Mattermost에서 같은 이름으로 추가하세요. 커스텀 이모지를 참조하세요
캔버스 아니요 Slack을 떠나기 전에 canvases.json의 링크에서 필요한 캔버스를 다운로드하세요

사용자 및 봇#

콘텐츠 유형 마이그레이션 여부 참고
사용자 예 이름, 이메일, 직함을 함께 가져옵니다. 사용자 이메일과 게스트 사용자를 참조하세요
비활성화되었거나 삭제된 사용자 예 채널 멤버십을 포함하여 비활성화된 Mattermost 사용자로 가져옵니다
봇 예 --bot-owner 플래그를 통해 Mattermost 사용자가 소유해야 합니다. 유용한 변환 플래그를 참조하세요
사용자 그룹 아니요 커스텀 그룹으로 다시 만드세요
프로필 사진 아니요 사용자가 직접 사진을 추가합니다. 프로필 관리를 참조하세요
접속 상태 아니요 사용자가 Mattermost에서 상태 및 응답 가능 여부를 설정합니다
커스텀 프로필 필드 아니요 사용자 속성으로 다시 만드세요

연동#

연동은 Slack 내보내기 파일에 포함되지 않으므로 Mattermost에서 마이그레이션할 방법이 없습니다. 아래 매핑을 사용하여 각 연동을 Mattermost에서 다시 만드세요. 이미 Slack 형식을 사용하는 인커밍 웹훅 페이로드와 커스텀 슬래시 명령어 요청은 재사용할 수 있으며, 새 Mattermost URL을 가리키도록 설정하면 됩니다.

Slack 연동 마이그레이션 여부 Mattermost 매핑 다시 만들어야 할 항목
Slack Marketplace 앱 아니요 Jira, GitHub, GitLab, Zoom 등의 사전 구축된 플러그인 일치하는 플러그인을 설치하고 채널, 자격 증명, 알림을 다시 설정하세요. Mattermost에 동등한 기능이 없는 경우 웹훅, 슬래시 명령어 또는 커스텀 플러그인을 사용하세요
커스텀 앱 아니요 플러그인 및 REST API 토큰과 설치 위치를 포함하여 앱을 다시 구축하세요
인커밍 웹훅 아니요 인커밍 웹훅. 페이로드는 Slack 호환입니다 각 웹훅 URL과 게시할 채널
아웃고잉 웹훅 아니요 아웃고잉 웹훅 트리거 단어, 채널, 콜백 URL
슬래시 명령어 아니요 기본 제공 및 커스텀 슬래시 명령어. 커스텀 명령어 요청은 Slack 호환입니다 각 커스텀 명령어의 이름, 요청 URL, 채널 범위. Mattermost가 이미 제공하는 명령어가 있으면 기본 제공 명령어를 사용하세요
봇 사용자 아니요 봇 계정은 마이그레이션됩니다. 사용자 및 봇을 참조하세요. 동작은 REST API 또는 플러그인을 사용하는 봇 계정입니다 봇이 수행하는 작업. --bot-owner로 소유자를 지정하세요
Workflow Builder 아니요 채널 내 프로세스에는 플레이북, 여러 앱을 아우르는 워크플로에는 노코드 자동화(n8n, Zapier, Make) 트리거, 단계, 양식, 대상
Block Kit 아니요 Mattermost Blocks 및 인터랙티브 대화 상자 버튼, 메뉴, 양식. 게시된 메시지 텍스트는 여전히 게시물과 함께 가져옵니다
Events API 아니요 키워드 트리거에는 아웃고잉 웹훅, 기타 이벤트에는 플러그인 또는 REST API 구독과 이를 수신하는 서비스

2. Mattermost 환경 준비#

이 가이드는 데이터를 받을 준비가 된 Mattermost 서버가 이미 있다고 가정합니다. 그렇지 않은 경우 배포 문서와 아래 안내를 함께 참고하여 데이터베이스와 파일 스토리지 인프라에 대해 정보에 입각한 결정을 내리세요.

마이그레이션 범위 정의#

  • Slack 에디션: Enterprise Grid 내보내기에는 추가 매핑 단계가 필요합니다. Enterprise Grid를 참조하세요.
  • 데이터 기록: 첫 번째 가져오기에는 더 짧은 기간(예: 최근 6개월)을 권장합니다. 시험 가져오기가 성공한 후에 범위를 넓히세요.
  • 내보내기 크기: ~25 GB 미만의 파일은 하루 내에 완료되는 경우가 많지만, ~100 GB를 초과하는 내보내기는 반복당 여러 날이 걸릴 수 있습니다.
  • 첨부 파일: 반복 속도를 높이기 위해 가능하면 매우 크거나 중요하지 않은 파일(설치 프로그램, 비디오, 오래된 자산)을 제외하세요.
  • 단계별 가져오기: 여러 개의 작은 내보내기(예: 6개월 분량의 덤프 6개)를 지원하며 권장합니다. 여러 내보내기 처리를 참조하세요.

인프라#

  • 테스트 환경: 항상 개발 또는 스테이징 환경으로 먼저 마이그레이션하세요. 대부분의 마이그레이션은 여러 번의 반복이 필요합니다.
  • 운영 체제: mmetl은 Linux 및 macOS에서 지원됩니다. Windows는 지원되지 않습니다. WSL은 사용하지 마세요. 대규모 변환에는 파일 시스템 성능이 대개 너무 느립니다.
  • 스토리지: 아카이브, 압축을 푼 데이터, Mattermost 가져오기 패키지를 위해 Slack 내보내기 크기의 최소 3배를 확보하세요.
  • 파일 스토어: S3 호환 스토리지로의 가져오기는 일반적으로 로컬 디스크나 NFS보다 빠르게 완료됩니다. 대규모 가져오기에는 S3를 사용하세요.

Mattermost 서버 설정#

3. Slack에서 데이터 내보내기#

Mattermost는 Slack에서 데이터를 대신 내보내 주지 않습니다. Slack의 자체 내보내기 도구와 문서를 사용하세요.

Slack은 두 가지 일반적인 내보내기 유형을 제공합니다.

  1. 공개 채널 내보내기: 공개 채널 메시지와 파일 링크를 포함합니다. 모든 Slack 플랜에서 사용할 수 있습니다.
  2. 모든 채널 및 대화 내보내기: 공개 채널, 비공개 채널, DM, 그룹 메시지를 포함합니다. Business+(신청 필요) 및 Enterprise Grid에서 사용할 수 있습니다.

Slack Free 플랜 내보내기에는 공개 채널의 메시지와 파일 링크가 포함되지만, 최근 90일간의 파일 링크만 포함됩니다. Slack은 사전 통지 없이 내보내기 형식을 변경할 수 있으므로, 대규모 마이그레이션 전에 최신 mmetl 릴리즈를 사용하세요. 변환이 예상치 못한 파싱 오류로 실패하면 변경 로그를 확인하거나 이슈를 등록하세요.

Important

Slack 내보내기를 압축 해제한 후 다시 압축하지 마세요. 아카이브 구조가 변경되어 변환 프로세스에 문제가 발생할 수 있습니다.

단일 워크스페이스 내보내기#

일반적인 단일 워크스페이스 zip 파일에는 다음이 포함됩니다.

  • channels.json, users.json
  • dms.json, groups.json, mpims.json (모든 채널 내보내기)
  • integration_logs.json
  • 일별 게시물 JSON 파일이 들어 있는 채널별 폴더

일반적인 구조 (모든 채널 내보내기):

Slack Export/
├── general/
│   ├── 2024-01-15.json
│   └── 2024-01-16.json
├── project-alpha/
│   ├── 2024-02-01.json
│   └── 2024-02-02.json
├── private-leadership/
│   └── 2024-03-10.json
├── channels.json
├── users.json
├── groups.json
├── dms.json
├── mpims.json
└── integration_logs.json

공개 및 비공개 채널 이름은 일별 게시물 파일이 들어 있는 최상위 폴더로 나타납니다. 공개 채널만 내보낸 경우에는 groups.json, dms.json, mpims.json 및 비공개 채널 폴더가 포함되지 않습니다.

이 아카이브에는 mmetl transform slack을 사용하세요(변환 참조).

Enterprise Grid 내보내기#

Slack Enterprise Grid는 단일 관리 플레인 아래에 여러 워크스페이스를 결합합니다. 내보내기는 조직 수준 데이터와 워크스페이스별 데이터를 포함하는 단일 아카이브입니다.

데이터가 Mattermost에 매핑되는 방식

  • Slack 워크스페이스는 대략 Mattermost 팀에 해당합니다.
  • Grid의 채널은 개별 워크스페이스에 속합니다. 워크스페이스 간에 공유되는 채널은 단일 Mattermost 팀에 매핑해야 합니다. Mattermost는 Slack처럼 팀 간 공유 채널을 지원하지 않습니다.
  • 대부분의 고객에게는 하나의 Mattermost 팀으로 가져오는 것이 가장 간단합니다. 워크스페이스를 의도적으로 분리하려는 경우에만 여러 팀을 사용하세요.
  • 워크스페이스에 걸친 조직 전체 DM은 단일 팀에 할당되며, 워크스페이스 간 참가자는 자리 표시자 계정으로 가져옵니다. Enterprise Grid 내보내기에서 조직 전체 DM은 어떻게 됩니까?를 참조하세요.

일반적인 Grid 구조

Enterprise Grid Export/
├── channel1/
│   ├── 2023-01-01.json
│   └── 2023-01-02.json
├── channel2/
│   ├── 2023-05-01.json
│   └── 2023-05-02.json
├── teams/
│   ├── team1/
│   │   ├── channel3/
│   │   ├── channels.json
│   │   ├── mpims.json
│   │   ├── dms.json
│   │   ├── users.json
│   │   └── groups.json
│   └── team2/
│       ├── channel4/
│       ├── channels.json
│       ├── mpims.json
│       ├── dms.json
│       ├── users.json
│       └── groups.json
├── channels.json
├── org_users.json
├── mpims.json
├── dms.json
└── groups.json

공유 채널은 대개 루트에 나타나며, 워크스페이스별 데이터는 /teams/ 아래에 있습니다. Grid 마이그레이션은 수동 팀 매핑 때문에 보통 더 많은 시간이 걸립니다. Enterprise Grid 내보내기 변환을 참조하세요.

4. mmetl로 내보내기 변환#

mmetl은 Slack 내보내기를 Mattermost의 대량 가져오기 형식, 즉 JSONL 파일과 첨부 파일이 들어 있는 data/ 디렉터리로 변환합니다.

  1. OS 및 아키텍처에 맞는 최신 mmetl 릴리즈를 다운로드합니다.
  2. mmetl help(또는 ./mmetl help)를 실행하여 명령어를 살펴봅니다.

4.1 Enterprise Grid 내보내기 분할(선택 사항)#

Slack Enterprise Grid 내보내기가 없다면 이 하위 섹션은 건너뛰세요. Grid 아카이브는 각 팀에 mmetl transform slack을 실행하기 전에 mmetl grid-transform으로 워크스페이스별 내보내기로 분할해야 합니다.

  1. Slack에서 전체 Grid 내보내기를 다운로드합니다.
  2. 팀별 내보내기로 분할합니다.
./mmetl grid-transform -f slackexport.zip

grid-transform은 아카이브에 이미 있는 teams/<name>/ 폴더에서 각 Slack 워크스페이스 ID를 추론하고 매핑을 출력합니다. 아카이브 루트의 공유 채널은 team 필드가 있는 첫 번째 게시물에 명시된 워크스페이스로 이동합니다.

  1. 결과로 생성된 각 아카이브를 transform slack --dry-run으로 검증한 다음, 각각 Mattermost 팀에 해당하는 --team을 사용하여 변환합니다(이 플래그는 Slack의 폴더 이름과 무관합니다).

추론이 실패하면 --team-map-path teams.json을 전달합니다.

{
  "T0001": "acme",
  "T0002": "widgets-inc"
}
  • 키: 메시지의 team 필드에 나타나는 Slack 워크스페이스 ID(일반적으로 T...).
  • 값: 내보내기에 이미 있는 teams/<name>/ 폴더입니다. Slack의 폴더 이름과 정확히 일치해야 합니다. 이 값은 출력 zip 이름이며, Mattermost --team 값이 아닙니다.

4.2 Slack 내보내기 검증#

단일 워크스페이스 내보내기에는 원본 zip을 사용합니다. Enterprise Grid에는 grid-transform이 생성한 워크스페이스별 zip을 각각 사용합니다. --team을 대상 Mattermost 팀으로 설정하고 전체 실행에 사용할 변환 플래그를 동일하게 사용하세요(내보내기에 봇이 있으면 --bot-owner 포함).

./mmetl transform slack \
  --team my-team \
  --file slack_export.zip \
  --output mattermost_import.jsonl \
  --bot-owner admin \
  --dry-run

드라이 런은 JSONL을 쓰거나 첨부 파일을 복사하지 않고 내보내기를 파싱하고 변환합니다. 경고와 오류를 터미널에 기록하며, 전체 변환에서 건너뛰게 될 누락된 첨부 파일을 포함하여 문제를 발견하면 0이 아닌 값으로 종료합니다. 전체 실행 전에 보고된 문제를 수정하세요. 전체 실행에서 첨부 파일 확인과 복사를 건너뛰려는 경우에만 --skip-attachments를 사용하세요.

4.3 변환 실행#

처음 실행할 때는 작은 내보내기(또는 --skip-attachments)를 사용하여 흐름을 빠르게 익히세요.

  1. 대상 팀이 Mattermost에 이미 존재하는지 확인합니다. 팀 이름은 소문자와 하이픈으로 구성되어야 합니다(예: 팀 표시 이름 내 팀은 my-team이 됩니다). 이 서버에 계정이 있는 모든 사용자의 팀 참여 허용이 활성화되어 있어야 합니다.

  2. 변환합니다.

./mmetl transform slack \
  --team my-team \
  --file slack_export.zip \
  --output mattermost_import.jsonl \
  --bot-owner admin

Slack 사용자 중 이메일이 없는 사용자가 있으면 --default-email-domain 또는 --skip-empty-emails를 전달하지 않는 한 변환이 실패합니다. 조직 도메인과 함께 --default-email-domain을 사용하는 것이 좋습니다. 사용자 이메일을 참조하세요.

  1. 작업 디렉터리의 예상 출력:
  • mattermost_import.jsonl: 사용자, 채널, 게시물 및 관련 레코드
  • data/(또는 --attachments-dir): bulk-export-attachments/ 아래의 첨부 파일
  • transform-slack.log: INFO 레벨 진행 상황(자세한 내용은 --debug 사용). 각 단계의 의미는 부록 B를 참조하세요.
  1. 성공 여부 빠른 확인:
  • 명령이 0으로 종료됩니다.
  • JSONL이 version 라인으로 시작하며 user, channel / direct_channel, post / direct_post 라인을 포함합니다.
  • JSONL에서 참조하는 첨부 파일 경로가 data/ 아래에 존재합니다.
  • 로그에서 파싱 단계가 치명적인 오류 없이 완료되었음을 보여줍니다.
  • 이메일 플래그를 사용한 경우, JSONL에서 합성된 도메인(--skip-empty-emails를 사용한 경우 빈 이메일)을 검색하고, 패키징 전에 사용자 이메일을 따르세요.
  1. 실패했거나 부분적으로 실행된 징후:
  • 파싱/변환 중 0이 아닌 종료 코드 또는 패닉.
  • 지원되지 않는 메시지 하위 유형에 대한 경고(일부 게시물이 건너뛰어짐. 로그를 검토하세요).
  • 두 이메일 플래그를 모두 설정하지 않은 상태에서 이메일 누락(변환이 해당 사용자를 지정하며 종료됨).
  • 기본 --guest-handling=guest에서 채널이 없는 게스트가 제외된 경우의 게스트 관련 건너뛰기 경고.

권장 단계별 접근 방식

  1. --skip-attachments와 함께 한 채널 분량의 기록(또는 짧은 기간)을 변환하고 가져옵니다.
  2. Mattermost에서 검증합니다.
  3. 필요하면 여전히 첨부 파일 없이 전체 워크스페이스 내보내기로 확대합니다.
  4. 최종 패키지를 위해 첨부 파일과 함께 다시 실행합니다.

Mattermost로의 대량 가져오기는 멱등성이 있습니다. 동일한 게시물을 다시 가져와도 중복이 생성되지 않습니다. 따라서 반복 테스트가 안전합니다. 단계별 전환 중 매주 내보내기/변환/가져오기 주기를 실행하는 것은 지원되는 패턴입니다.

4.4 여러 내보내기 처리#

고객은 여러 개의 Slack 덤프(예: 6개월 분량의 아카이브 6개)를 받거나 전환 중에 매주 내보내기를 실행하는 경우가 많습니다.

권장 사항

  • 각 아카이브를 별도의 .jsonl + data/ 트리로 따로 변환합니다(대량 형식을 이해하는 경우에만 신중하게 병합하세요).
  • 가능하면 시간순으로 가져옵니다(최신 것부터).
  • Mattermost 대량 가져오기의 멱등성을 활용합니다. 작성자와 create_at이 같은 중복 게시물은 다시 생성되지 않습니다.
  • 배치 간에 팀 이름과 --guest-handling / --bot-owner 선택을 일관되게 유지합니다.
  • 기록이 매우 방대한 경우, 수백 GB를 한 번에 업로드하기보다 여러 개의 중간 규모 가져오기를 권장합니다(패키징 및 가져오기 참조).

유용한 변환 플래그#

  • --skip-attachments / -a: 첨부 파일 복사를 건너뜁니다(더 빠른 시험 실행).
  • --allow-download / -l: 필요할 때 URL에서 첨부 파일 다운로드를 허용합니다.
  • --attachments-dir / -d: 첨부 파일 출력 디렉터리(기본값 data).
  • --default-email-domain : 누락된 이메일을 username@DOMAIN으로 합성합니다. 사용자 이메일을 참조하세요.
  • --skip-empty-emails: 이메일이 비어 있는 사용자를 유지합니다(수동으로 수정해야 하는 유효하지 않은 가져오기 데이터가 생성됨). 사용자 이메일을 참조하세요.
  • --discard-invalid-props / -p: props가 Mattermost 제한을 초과하는 게시물을 삭제합니다.
  • --guest-handling=guest|user|skip: 게스트 사용자를 참조하세요.
  • --bot-owner : 내보내기에 봇 사용자가 있는 경우 필수입니다.
  • --debug: transform-slack.log에 상세 로깅을 기록합니다. 해당 로그의 단계를 읽는 방법은 부록 B를 참조하세요.

5. 데이터 패키징 및 Mattermost로 가져오기#

mmetl이 완료되면 다음이 있어야 합니다.

  • .jsonl 대량 가져오기 파일
  • 첨부 파일이 들어 있는 data/ 디렉터리

5.1 가져오기 데이터 검토#

변환 구성에 따라 경우에 따라 zip으로 압축하고 업로드하기 전에 JSONL을 검토하거나 편집해야 할 수 있습니다. 누락되었거나 합성된 이메일(--default-email-domain, --skip-empty-emails 또는 @local 자리 표시자)은 사용자 이메일을 참조하세요.

5.2 가져오기 패키징#

두 항목을 함께 zip으로 압축합니다.

zip -r mattermost-bulk-import.zip data mattermost_import.jsonl

로컬에서 내보내기를 검증합니다.

mmctl import validate ./mattermost-bulk-import.zip

그런 다음 Mattermost 대량 데이터 로딩 가이드에 따라 mmctl로 zip을 가져옵니다. 해당 가이드는 인증, 작업 상태, 전체 가져오기 데이터 형식을 다룹니다.

5.3 업로드 방법 선택#

상황 권장 방법
작은 패키지(대략 ~25 GB 미만) mmctl import upload 후 mmctl import process (대량 로딩 참조)
큰 패키지(수 GB 이상 / 수년간의 기록, 수만 개의 채널) zip을 Mattermost 서버에 두고 그 자리에서 처리합니다. API를 통한 업로드는 피하세요

대규모 가져오기(파일 스토어 / 로컬 프로세스)

대규모 데이터 세트의 경우 파일을 서버에 복사하는 것이 mmctl import upload보다 대개 더 안정적입니다.

  1. mattermost-bulk-import.zip을 서버에 복사합니다(예: Mattermost data/import 디렉터리 또는 서버 프로세스가 읽을 수 있는 다른 경로).
  2. 서버에서 mmctl 로컬 모드로 파일을 직접 처리합니다.
mmctl import process --bypass-upload ./mattermost-bulk-import.zip --local

참고:

  • --bypass-upload는 --local과 함께 사용할 때만 작동합니다.
  • 서버가 고가용성(HA) 상태일 때는 지원되지 않습니다. 가져오기 기간 동안 HA를 비활성화하거나 표준 업로드 경로를 사용하세요.
  • S3 기반 파일 스토리지로의 가져오기는 대규모 작업에서 일반적으로 로컬/NFS 디스크보다 성능이 좋습니다.

6. 마이그레이션 검증#

각 가져오기 후 작업이 완료되었는지 확인하고 Mattermost의 대표 데이터를 Slack 내보내기와 비교하세요. 프로덕션 전환 전에 기능 매핑에 설명된 차이를 고려하세요.

6.1 가져오기 작업 확인#

mmctl import job list와 mmctl import job show --json을 사용하여 작업이 완료되었는지 확인하고 오류를 검토하세요. 작업 세부 정보는 대량 로딩 및 mmctl 문서를 참조하세요.

6.2 마이그레이션된 데이터 확인#

가져온 데이터를 Slack 내보내기와 대조하여 표본 검사를 하세요.

  • 예상한 사용자, 봇, 게스트, 공개 및 비공개 채널, 보관된 채널이 있는지 확인합니다.
  • 1:1 DM, 그룹 메시지, 비공개 채널로 변환된 대규모 다자간 DM의 표본을 엽니다. Enterprise Grid의 경우 조직 전체 DM과 자리 표시자 사용자도 확인하세요.
  • 표본 게시물, 스레드 답글, 리액션, 파일 첨부를 비교합니다. 변환 로그에서 건너뛴 콘텐츠를 확인하고, 일치하는 이모지를 추가한 후 커스텀 이모지 리액션이 표시되는지 확인합니다.
  • 활성화 후 가져온 사용자로 계정 접근을 테스트합니다.

6.3 필요한 경우 읽지 않은 채널 및 스레드 수정#

가져온 메시지가 사용자에게 읽지 않은 상태로 표시되면 데이터베이스를 백업한 다음 PostgreSQL에서 다음 SQL을 실행하세요.

begin;
UPDATE channelmembers
SET
    msgcount = channels.totalmsgcount,
    lastupdateat = channels.lastpostat,
    lastviewedat = channels.lastpostat,
    msgcountroot = channels.totalmsgcountroot
FROM channels
WHERE channelmembers.channelid = channels.id;

INSERT INTO preferences (UserId, Category, Name, Value)
SELECT
    cm.userid,
    'channel_approximate_view_time',
    cm.channelid,
    cm.lastupdateat
FROM
    channelmembers cm
ON CONFLICT (userid, category, name)
DO UPDATE SET
    Value = EXCLUDED.Value;

update preferences
  set value = false
  where category = 'direct_channel_show';

update preferences
  set value = false
  where category = 'group_channel_show';

commit;

6.4 가져온 계정 활성화#

대량 가져오기(이 가이드의 mmetl + mmctl import 경로)는 가져온 사용자 이메일을 항상 확인된 상태로 표시합니다. 사용자는 별도의 이메일 확인 단계를 거칠 필요가 없습니다.

가져온 사용자는 본인이 알지 못하는 생성된 비밀번호를 받습니다. 사용자는 가져오기에 포함된 이메일 주소(보통 Slack 이메일)로 Mattermost 로그인 페이지의 비밀번호 재설정을 사용하여 계정을 활성화합니다.

가져오기 후 인증을 LDAP 또는 SAML로 전환하려면 mmctl user migrate-auth를 참조하세요.

FAQ#

일괄 처리로 가져올 수 있나요, 아니면 한 번에 모두 가져와야 합니까?#

일괄 처리를 사용해도 되며 권장합니다. 점진적으로 변환하고 가져오세요. Mattermost 대량 가져오기는 멱등성이 있습니다. 여러 내보내기 처리를 참조하세요.

가져오기를 실행하기 전에 사용자를 만들어야 합니까?#

아니요. 사용자(그리고 --bot-owner를 사용한 봇)는 가져오기 파일에서 생성됩니다. 대상 팀은 미리 만들어 두세요.

메시지보다 먼저 커스텀 이모지를 가져와야 합니까?#

아니요. 리액션은 이모지 이름으로 저장되므로 커스텀 이모지가 존재하기 전에 가져올 수 있습니다. 편한 때에 일치하는 커스텀 이모지를 추가하세요. Mattermost에 해당 이름이 존재하게 되면 해당 리액션이 표시됩니다. 커스텀 이모지를 참조하세요.

같은 가져오기를 두 번 실행하면 어떻게 됩니까?#

중복 게시물은 생성되지 않습니다. 일치하는 레코드는 대량 가져오기 규칙에 따라 건너뛰거나 업데이트됩니다. 재시도와 단계별 전환에 안전합니다.

Slack Connect 채널은 어떻게 처리해야 합니까?#

Slack Connect 마이그레이션 경로는 없습니다. mmetl은 외부 조직 멤버십이나 Connect 의미 체계를 매핑하지 않습니다. 내보내기에 Connect 채널이 있으면 워크스페이스의 멤버만 포함된 일반 공개 또는 비공개 채널로 변환될 수 있습니다. Mattermost에서 조직 간 협업을 계속하려면 연결된 워크스페이스를 사용하세요.

매우 큰 가져오기(수 GB)는 어떻게 처리합니까?#

mmetl로 패키징하고 zip을 Mattermost 서버에 복사한 다음 mmctl import process --bypass-upload --local을 사용하세요. 업로드 방법 선택 및 대량 데이터 로딩을 참조하세요.

메시지에 포함된 Slack URL은 계속 작동합니까?#

채널 멘션은 가능한 경우 Mattermost ~channel 형식으로 변환됩니다. 특정 Slack 게시물에 대한 링크는 Slack URL로 유지되며 Slack에 접근할 수 있는 동안 작동합니다.

Enterprise Grid 내보내기에서 조직 전체 DM은 어떻게 됩니까?#

mmetl grid-transform에는 조직 전체 대화에 대한 특별한 처리가 없습니다. 루트 레벨의 dms.json 및 mpims.json 항목은 다른 모든 대화와 같은 경로를 따릅니다. grid-transform은 대화의 게시물 파일을 읽고 team 필드가 있는 첫 번째 게시물에 명시된 워크스페이스에 대화 전체를 할당합니다. 따라서 두 워크스페이스에 걸친 DM은 정확히 하나의 Mattermost 팀에 들어가며, 팀 간에 분할되거나 양쪽에 복제되는 일은 없습니다. 계획해야 할 두 가지 결과가 있습니다.

  • 다른 워크스페이스의 참가자는 자리 표시자 계정이 됩니다. grid-transform은 워크스페이스 간에 사용자 목록을 병합하지 않으므로, 할당된 워크스페이스의 멤버가 아닌 참가자는 해당 팀의 users.json에서 빠집니다. 그러면 mmetl transform slack이 Slack 사용자 ID 이름을 가지며 @local 이메일 주소를 가진 비활성화된 자리 표시자 사용자를 만듭니다. 가져오기 전에 해당 주소를 수정하세요. 사용자 이메일을 참조하세요.
  • 할당할 수 없는 대화는 제외됩니다. 대화의 게시물에 team 필드가 없거나 워크스페이스 ID가 팀 매핑에 없으면, grid-transform은 grid-transform-slack.log에 오류를 기록하고 해당 대화를 건너뜁니다. 건너뛴 대화는 어떤 워크스페이스별 zip에도 기록되지 않으므로, 종료 코드에 의존하지 말고 계속 진행하기 전에 해당 로그를 검토하세요.

워크스페이스 간 DM 기록을 보존하는 것이 중요하다면, 어느 팀이 해당 대화를 소유할지 미리 결정하고 시험 가져오기에서 일부 대화를 확인하세요.

Slack 게스트는 어떻게 가져옵니까?#

기본값(--guest-handling=guest)에서는 게스트 계정이 활성화되어 있고 라이선스가 있는 경우 Slack 게스트가 Mattermost 게스트로 내보내집니다. 공개/비공개 채널 멤버십이 없는 게스트는 건너뜁니다. 이러한 게스트를 일반 멤버로 가져오려면 --guest-handling=user를 사용하세요. 게스트 사용자를 참조하세요.

예전에는 작동하던 내보내기를 mmetl이 갑자기 파싱하지 못하면 어떻게 합니까?#

Slack이 내보내기 형식을 변경했을 수 있습니다. GitHub Releases에서 mmetl을 업데이트하고, 전체 변환에 사용할 동일한 플래그로 mmetl transform slack --dry-run을 다시 실행하세요. 새로운 형식 변경이 확인되면 이슈를 등록하세요.

Slack Enterprise Grid에 대한 추가 고려 사항은 무엇입니까?#

mmetl grid-transform을 사용하여 아카이브를 분할한 다음, 각 워크스페이스 아카이브를 따로 변환하세요. grid-transform은 teams/<name>/ 폴더에서 워크스페이스 ID를 추론합니다. 추론이 실패하는 경우에만 --team-map-path teams.json을 전달하세요. 공유 채널은 단일 Mattermost 팀에 들어가야 합니다. Enterprise Grid 내보내기를 참조하세요.

지원되지 않는 Slack 기능이 있습니까?#

Slack과 Mattermost의 기능 매핑을 참조하세요. 핵심 협업 데이터는 해당 표에 따라 마이그레이션할 수 있으며, 앱, 워크플로 및 이와 유사한 연동은 Mattermost 연동을 사용하여 다시 구축해야 합니다.

부록 A: 커스텀 이모지, 게스트, 사용자 이메일#

커스텀 이모지, 게스트 계정, 사용자 이메일은 각각 마이그레이션 중에 결정이 필요합니다. Slack 내보내기는 이 항목들을 Mattermost가 그대로 사용할 수 있는 형태로 가져오지 않습니다. 이 사항을 정리하는 동안에도 메시지 기록은 가져올 수 있습니다.

  • 커스텀 이모지. 가져온 게시물의 리액션은 이모지 이름을 유지합니다. 리액션이 표시되려면 Mattermost에 이미지를 추가하세요.
  • 게스트 사용자. Slack 게스트를 Mattermost 게스트로 할지, 일반 멤버로 할지, 가져오기에서 제외할지 결정하세요.
  • 사용자 이메일. 가져오는 모든 사용자에게는 이메일 주소가 필요합니다. Slack 내보내기에 이메일이 없는 사용자는 가져오기 전에 주소가 필요합니다.

커스텀 이모지#

리액션은 이모지 이름으로 저장되어 게시물과 함께 가져옵니다. 커스텀 이모지 이미지는 Mattermost에 추가해야 합니다.

  • thumbsup, heart 같은 표준 이모지는 추가 설정 없이 표시됩니다.
  • 각 커스텀 이모지를 같은 이름으로, 소문자로 추가하세요. 해당 이름이 존재하는 즉시 과거 리액션이 표시됩니다. 메시지 가져오기 전이나 후에 커스텀 이모지 UI에서 추가하거나, 대량 가져오기의 emoji 객체로 추가할 수 있습니다. 필요한 경우 System Console에서 커스텀 이모지를 켜세요.
  • 피부색 변형은 삭제됩니다. +1::skin-tone-3은 +1이 됩니다.

게스트 사용자#

mmetl transform slack에서 --guest-handling을 설정하여 Slack 게스트의 처리 방식을 선택합니다.

모드 동작
guest(기본값) Mattermost 게스트가 되며, 참여했던 공개 및 비공개 채널로 제한됩니다. 게스트 계정을 활성화해야 하며 라이선스가 있어야 합니다.
user 일반 멤버가 됩니다.
skip 채널 멤버십, 게시물, 리액션과 함께 제외됩니다.

다이렉트 메시지 또는 그룹 메시지에만 있던 게스트는 Mattermost 게스트가 될 수 없습니다. 해당 계정은 --guest-handling=user를 사용하지 않으면 건너뜁니다.

사용자 이메일#

가져오는 모든 사용자에게는 이메일 주소가 필요합니다. Slack 내보내기에 이메일이 없으면 플래그를 선택하지 않는 한 변환이 중단되고 해당 사용자를 지정합니다.

선택 해야 할 일
--default-email-domain example.com 누락된 이메일이 username@example.com이 됩니다. 조직 도메인을 사용하세요. 다른 주소여야 하는 경우 가져오기 전에 수정하세요.
--skip-empty-emails 이메일이 빈 상태로 유지됩니다. 가져오기 전에 영향을 받는 각 사용자에게 실제 주소를 설정하세요. 그렇지 않으면 가져오기 검증이 실패합니다.
플래그 없음 변환이 중단됩니다. 내보내기를 수정하거나 플래그와 함께 다시 실행하세요.

Enterprise Grid 가져오기에서는 <userid>@local 주소를 가진 자리 표시자 사용자가 생성될 수도 있습니다. 가져오기 전에 이를 실제 주소로 교체하세요.

가져오기 파일에서 도메인 또는 @local을 검색하고, 주소를 수정한 다음 mmctl import validate를 실행하세요.

부록 B: mmetl 파싱 단계#

대규모 변환은 4단계를 거칩니다. transform-slack.log(및 콘솔 출력)를 확인하여 진행 상황을 가늠하세요. 2~4단계의 채널별 진행 상황은 DEBUG 레벨로 기록되므로, 해당 라인을 보려면 --debug와 함께 실행하세요. 단계 완료 메시지와 파일 읽기 진행 상황은 INFO를 사용합니다.

  1. 가져오기 파일 읽기: 아카이브 크기에 따라 보통 5~10분 걸립니다.

    예시:

    {"file":"parse.go:226","level":"info","msg":"Processing file 1 of 10335: aluminum-white-lightbulb/","time":"2024-03-11T20:41:09-04:00"}
    
  2. 사용자 멘션 변환: 대규모 내보내기에서는 몇 시간이 걸릴 수 있습니다.

    예시(--debug 필요):

    {"file":"parse.go:109","level":"debug","msg":"Slack Import: converting user mentions for channel touchscreen-headphones-sleek. 1 of 400","time":"2024-03-11T20:41:10-04:00"}
    

    단계가 완료되면(INFO):

    {"level":"info","msg":"Slack Import: Converted user mentions"}
    
  3. 채널 멘션 변환: 일반적으로 사용자 멘션의 약 절반 정도 걸립니다.

    예시(--debug 필요):

    {"file":"parse.go:132","level":"debug","msg":"Slack Import: converting channel mentions for channel robust-smart-home-device-matrix. 95 of 400","time":"2024-03-11T20:41:48-04:00"}
    

    단계가 완료되면(INFO):

    {"level":"info","msg":"Slack Import: Converted channel mentions"}
    
  4. 게시물 마크업 변환: Slack 서식을 Mattermost Markdown으로 변환합니다. 보통 가장 빠른 단계입니다.

    예시(--debug 필요):

    {"file":"parse.go:196","level":"debug","msg":"Slack Import: converting markdown for channel vertex-robust-vacuum. 120 of 400","time":"2024-03-11T20:41:58-04:00"}
    

    단계가 완료되면(INFO):

    {"level":"info","msg":"Slack Import: Converted markdown"}