중요 업그레이드 참고사항#

중요

Mattermost Server v9.11 Extended Support Release 의 지원이 2025년 5월 15일에 수명 주기를 마감했습니다. Mattermost Server v10.5 이상 으로 업그레이드가 필요합니다.

참고

  • Microsoft Teams Calling 플러그인을 v2.0.0으로 업그레이드하려면 사용자가 계정을 다시 연결해야 합니다.

  • Go 버전 1.22.0 및 1.22.1로 빌드된 Mattermost 플러그인은 작동하지 않습니다. 플러그인 개발자는 대신 Go 1.22.2 이상을 사용해야 합니다.

  • Keybase가 Ubuntu 저장소 서명 키 제공을 중단했습니다. 이를 사용 중이었다면 문서에 언급된 대로 키를 검색하도록 설치 스크립트를 업데이트하세요: https://docs.mattermost.com/deploy/server/deploy-linux.

  • MySQL 8.0.22에는 문자열 값을 정수로 변경하는 JSON 열 유형 문제 가 있어 Mattermost가 제대로 작동하지 않습니다. 사용자는 이 데이터베이스 버전을 피하는 것이 좋습니다.

  • 5.x 릴리스에서 7.x로 업그레이드할 때는 업그레이드가 성공적으로 완료되도록 먼저 5.37.10으로 업그레이드해야 합니다.

다음 버전보다 이전 버전에서 업그레이드하는 경우…

그러면…

v10.8

새로운 테이블 AccessControlPoliciesAcessControlPolicyHistory 가 생성됩니다. 마이그레이션은 완전히 이전 버전과 호환되며, 잠금이 없고 다운타임이 발생하지 않을 것으로 예상됩니다.

레거시 SKU E10 및 E20 라이선스 지원이 제거되었습니다. 도움이 필요하시면 Mattermost 전문가와 상담 하세요.

v10.7

향후 라이선스 기능을 위한 메타데이터를 저장하기 위해 Channels 테이블에 새로운 열 BannerInfo 가 추가되었습니다. 마이그레이션은 완전히 이전 버전과 호환되며, 잠금이 없고 다운타임이 발생하지 않을 수 있습니다. 다음은 스키마 변경에 포함된 SQL 쿼리입니다:

PostgreSQL:

ALTER TABLE channels ADD COLUMN IF NOT EXISTS bannerinfo jsonb;

MySQL:

SET @preparedStatement = (SELECT IF(

   NOT EXISTS(

       SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS

       WHERE table_name = 'Channels'

       AND table_schema = DATABASE()

       AND column_name = 'BannerInfo'

   ),

   'ALTER TABLE Channels ADD COLUMN BannerInfo json;',

   'SELECT 1;'

));

PREPARE addColumnIfNotExists FROM @preparedStatement;
EXECUTE addColumnIfNotExists;
DEALLOCATE PREPARE addColumnIfNotExists;

인덱스 생성을 위한 SQL 마이그레이션을 포함하여 속성 아키텍처 테이블에 커서 기반 페이지네이션 지원이 추가되었습니다. 마이그레이션은 완전히 이전 버전과 호환되며, 잠금이 없고 다운타임이 발생하지 않을 수 있습니다. 다음은 스키마 변경에 포함된 SQL 쿼리입니다:

MySQL:

SET @preparedStatement = (SELECT IF(
    (
        SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
        WHERE table_name = 'PropertyValues'
        AND table_schema = DATABASE()
        AND index_name = 'idx_propertyvalues_create_at_id'
    ) > 0,
    'SELECT 1',
    'CREATE INDEX idx_propertyvalues_create_at_id ON PropertyValues(CreateAt, ID);'
));

PREPARE createIndexIfNotExists FROM @preparedStatement;
EXECUTE createIndexIfNotExists;
DEALLOCATE PREPARE createIndexIfNotExists;
SET @preparedStatement = (SELECT IF(
    (
        SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
        WHERE table_name = 'PropertyFields'
        AND table_schema = DATABASE()
        AND index_name = 'idx_propertyfields_create_at_id'
    ) > 0,
    'SELECT 1',
    'CREATE INDEX idx_propertyfields_create_at_id ON PropertyFields(CreateAt, ID);'
));

PREPARE createIndexIfNotExists FROM @preparedStatement;
EXECUTE createIndexIfNotExists;
DEALLOCATE PREPARE createIndexIfNotExists;

PostgreSQL:

CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyvalues_create_at_id ON PropertyValues(CreateAt, ID)
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_propertyfields_create_at_id ON PropertyFields(CreateAt, ID)

v10.6

PostgreSQL v11 및 v12 지원이 제거되었습니다. 새로운 최소 PostgreSQL 버전은 v13+입니다. 자세한 내용은 minimum supported PostgreSQL version policy 문서를 참조하세요.

마이그레이션 시간: 12M 게시물과 1M fileinfo 항목이 있는 시스템에서 마이그레이션은 15초가 소요됩니다. 이 마이그레이션은 잠금이 없습니다. 이 최적화는 PostgreSQL에만 적용되므로 MySQL 배포에는 마이그레이션이 없습니다.

v10.5

Mattermost 버전 v10.5.0 및 v10.5.1에는 플러그인 구성 설정이 사라질 수 있는 버그가 포함된 번들 Jira 플러그인(v4.2.0)이 포함되어 있습니다. 잠재적인 중단을 피하기 위해 이러한 버전으로 업그레이드하지 않는 것을 강력히 권장합니다. 이미 v10.5.0 또는 v10.5.1로 업그레이드한 경우, Jira 플러그인을 v4.2.1 버전으로 업데이트하거나, 더 나은 방법으로 Mattermost와 Jira 플러그인을 모두 최신 버전으로 업그레이드하는 것을 권장합니다.

웹 앱의 PluginLinkComponent 내부 작동이 기본적으로 DOM에서 링크 툴팁을 언마운트하도록 변경되어 성능이 크게 향상되었습니다. registerLinkTooltipComponent 를 사용하여 링크 툴팁을 등록하는 플러그인은 툴팁 구성 요소 관리 방식의 변경을 경험하게 됩니다—이제는 링크에 마우스를 올리거나 포커스할 때만 마운트됩니다. 결과적으로 플러그인은 마운트 및 언마운트 시나리오를 적절히 처리하기 위해 구성 요소를 업데이트해야 할 수 있습니다. 예를 들어, mattermost-plugin-jira 에서 componentDidUpdate 라이프사이클 훅이 componentDidMount로 대체되었습니다. 플러그인의 툴팁 구성 요소가 함수형 React 구성 요소인 경우, 빈 종속성 배열로 useEffect에 의해 관리되므로 이 동작이 자동으로 처리될 가능성이 높습니다.

Mattermost 서버는 수동 플러그인 배포 지원을 중단했습니다. 플러그인은 관리자나 배포 자동화가 플러그인 번들의 내용을 서버의 작업 디렉토리에 복사할 때 수동으로 배포되었습니다. 수동 또는 자동화된 배포 워크플로우가 여전히 필요한 경우, 관리자는 대신 플러그인 번들을 사전 패키징할 수 있습니다. 자세한 내용은 this forum post 를 참조하세요.

Mattermost는 Microsoft Windows 운영체제용 공식 Mattermost 서버 빌드를 중단했습니다. 관리자는 기존 Mattermost 서버 설치를 공식 Linux 빌드를 사용하도록 마이그레이션해야 합니다. 자세한 내용은 this forum post 를 참조하세요.

v10.5는 Compliance Export 기능에 대한 업데이트를 도입하여 내보낸 데이터의 구조, 저장 및 처리 방식을 수정합니다. 이러한 변경 사항은 주로 시스템 관리자에게 영향을 미치며 주요 변경 사항은 아래에 설명되어 있습니다. 자세한 내용은 Compliance Export documentation 를 참조하세요.

출력 파일 및 디렉토리가 변경되었습니다 - 이전에는 모든 배치 디렉토리를 포함하는 단일 zip을 내보냈습니다. 이제는 단일 디렉토리를 내보내고, 해당 디렉토리 아래에서 각 배치가 자체 zip이 됩니다.

Compliance 내보내기 성능 개선 - Compliance 내보내기가 이제 최소 50% 더 빠르고, 가능한 더 빠를 것입니다.

로직 개선 - 발견된 버그를 수정하고 개선했습니다.

각 내보내기 유형별 변경 사항 - 내보내기 출력 형식이 변경되었습니다. 일부 필드의 의미가 명확해졌으며, 여러 새로운 필드가 추가되었습니다. 우리의 목표는 로직 버그를 수정하면서 이전 버전과의 호환성을 유지하는 것이었습니다.

자세한 내용은 compliance export 제품 문서를 참조하세요.

Property System Architecture 기능의 일부로, Mattermost v10.5는 스키마에 새 테이블을 추가하기 위한 일련의 마이그레이션을 실행할 예정입니다. 이 마이그레이션은 새 테이블과 인덱스만 생성하므로 기존 데이터에는 영향을 미치지 않습니다.

새로운 테이블 PropertyGroups, PropertyFieldsPropertyValues 가 생성될 예정입니다.

PostgreSQL의 경우, PropertyFields 테이블의 Type 열에서 사용될 새로운 enum 타입 property_field_type 이 생성될 예정입니다.

PropertyFieldsPropertyValues 테이블은 MySQL에서 인덱스를 생성할 고유 제약 조건을 가지며, PostgreSQL의 경우 이 제약 조건을 적용하기 위해 UNIQUE INDEX 를 직접 사용합니다.

PropertyValues 테이블을 위해 새로운 인덱스 idx_propertyvalues_targetid_groupid 가 생성될 예정입니다.

마이그레이션은 데이터 없이 새 테이블만 생성합니다. 마이그레이션은 이전 버전과 호환되며, 이전 버전의 Mattermost가 새 스키마 변경 사항으로 실행될 수 있습니다. 이 업그레이드로 인해 테이블 잠금이나 기존 테이블 작업에 영향을 받지 않습니다. 이 릴리스로 업그레이드할 때 다운타임이 발생하지 않습니다.

스키마 변경에 포함된 SQL 쿼리는 다음과 같습니다:

MySQL:

CREATE TABLE IF NOT EXISTS PropertyGroups (
 ID varchar(26) PRIMARY KEY,
 Name varchar(64) NOT NULL,
 UNIQUE(Name)
);

CREATE TABLE IF NOT EXISTS PropertyFields (
 ID varchar(26) PRIMARY KEY,
 GroupID varchar(26) NOT NULL,
 Name varchar(255) NOT NULL,
 Type enum('text', 'select', 'multiselect', 'date', 'user', 'multiuser'),
 Attrs json,
 TargetID varchar(255),
 TargetType varchar(255),
 CreateAt bigint(20),
 UpdateAt bigint(20),
 DeleteAt bigint(20),
 UNIQUE(GroupID, TargetID, Name, DeleteAt)
);

CREATE TABLE IF NOT EXISTS PropertyValues (
 ID varchar(26) PRIMARY KEY,
 TargetID varchar(255) NOT NULL,
 TargetType varchar(255) NOT NULL,
 GroupID varchar(26) NOT NULL,
 FieldID varchar(26) NOT NULL,
 Value json,
 CreateAt bigint(20),
 UpdateAt bigint(20),
 DeleteAt bigint(20),
 UNIQUE(GroupID, TargetID, FieldID, DeleteAt)
);

SET @preparedStatement = (SELECT IF(
 (
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
    WHERE table_name = 'PropertyValues'
    AND table_schema = DATABASE()
    AND index_name = 'idx_propertyvalues_targetid_groupid'
 ) > 0,
 'SELECT 1',
 'CREATE INDEX idx_propertyvalues_targetid_groupid ON PropertyValues (TargetID, GroupID);'
));

PREPARE createIndexIfNotExists FROM @preparedStatement;
EXECUTE createIndexIfNotExists;
DEALLOCATE PREPARE createIndexIfNotExists;

PostgreSQL:

CREATE TABLE IF NOT EXISTS PropertyGroups (
 ID varchar(26) PRIMARY KEY,
 Name varchar(64) NOT NULL,
 UNIQUE(Name)
);

DO
BEGIN
  IF NOT EXISTS (SELECT * FROM pg_type typ
                        INNER JOIN pg_namespace nsp ON nsp.oid = typ.typnamespace
                    WHERE nsp.nspname = current_schema()
                        AND typ.typname = 'property_field_type') THEN
 CREATE TYPE property_field_type AS ENUM (
    'text',
    'select',
    'multiselect',
    'date',
    'user',
    'multiuser'
 );
  END IF;
END;
LANGUAGE plpgsql;

CREATE TABLE IF NOT EXISTS PropertyFields (
 ID varchar(26) PRIMARY KEY,
 GroupID varchar(26) NOT NULL,
 Name varchar(255) NOT NULL,
 Type property_field_type,
 Attrs jsonb,
 TargetID varchar(255),
 TargetType varchar(255),
 CreateAt bigint NOT NULL,
 UpdateAt bigint NOT NULL,
 DeleteAt bigint NOT NULL
);

CREATE UNIQUE INDEX IF NOT EXISTS idx_propertyfields_unique ON PropertyFields (GroupID, TargetID, Name) WHERE DeleteAt = 0;

CREATE TABLE IF NOT EXISTS PropertyValues (
 ID varchar(26) PRIMARY KEY,
 TargetID varchar(255) NOT NULL,
 TargetType varchar(255) NOT NULL,
 GroupID varchar(26) NOT NULL,
 FieldID varchar(26) NOT NULL,
 Value jsonb NOT NULL,
 CreateAt bigint NOT NULL,
 UpdateAt bigint NOT NULL,
 DeleteAt bigint NOT NULL
);

CREATE UNIQUE INDEX IF NOT EXISTS idx_propertyvalues_unique ON PropertyValues (GroupID, TargetID, FieldID) WHERE DeleteAt = 0;
CREATE INDEX IF NOT EXISTS idx_propertyvalues_targetid_groupid ON PropertyValues (TargetID, GroupID);
    ``

v10.3

Classic Mobile App이 단계적으로 중단되었습니다. Apple App Store 또는 Google Play Store 에서 새로운 v2 Mobile App을 다운로드하세요. 자세한 내용은 classic mobile app deprecation Mattermost 포럼 게시물을 참조하세요.

v10.2

Docker 이미지 아티팩트 서명을 위한 Docker Content Trust(DCT)가 v10.2(2024년 11월)에서 Sigstore Cosign으로 대체되었습니다. DCT를 사용하여 아티팩트 검증에 의존하는 경우 Cosign 사용으로 전환 하세요. 자세한 내용은 DCT 중단 예정 Mattermost 포럼 게시물을 참조하세요.

v10.0

v10부터 MySQL을 사용한 새로운 설치를 더 이상 지원하지 않습니다. 모든 신규 고객 및/또는 배포는 PostgreSQL 데이터베이스의 최소 지원 버전으로만 지원됩니다. MySQL 지원 종료는 Mattermost v11을 목표로 합니다.

Apps Framework는 새로운 설치에서 더 이상 사용되지 않습니다. 웹훅, 슬래시 명령어, OAuth2 앱 및 플러그인을 사용하여 Mattermost를 확장하세요.

Mattermost v10은 모든 Enterprise 라이선스 고객을 위한 Playbooks v2를 도입합니다. Professional SKU 고객은 2025년 9월까지 유지 및 지원되는 Playbooks v1을 중단 없이 계속 사용할 수 있으며, 그 후 적절한 grandfathering 전략이 적용됩니다. 자세한 정보와 논의는 포럼 에서 확인할 수 있습니다.

System Console 의 채널 관리 섹션에서 Channel ModerationAdvanced Access Control 로 이름을 변경했습니다.

공지 배너 기능을 “시스템 전체 알림”으로 이름을 변경했습니다.

System Console에서 “Collapsed Reply Threads”를 “Threaded Discussions”로 이름을 변경했습니다.

System Console에서 “System Roles”를 “Delegated Granular Administration”으로 이름을 변경했습니다.

SSO 로그인을 위해 “Office 365”를 “Entra ID”로 이름을 변경했습니다.

이미지 프록시가 비활성화된 경우 /api/v4/image 엔드포인트를 완전히 중단했습니다.

Calls plugin v1.0.1 을 사전 패키징했습니다. 이는 라이선스가 있는 서버의 지원성과 품질에 집중하기 위해 라이선스가 없는 서버에서 그룹 통화를 제거하는 등 주요 변경 사항을 포함합니다. 라이선스가 없는 서버는 대부분의 활동을 차지하는 다이렉트 메시지 채널에서 Calls를 계속 사용할 수 있습니다.

더 이상 사용되지 않는 Config.ProductSettings, LdapSettings.Trace, AdvancedLoggingConfig 구성 필드를 제거했습니다.

대부분의 API 엔드포인트에서 더 이상 사용되지 않는 pageSize 쿼리 매개변수를 제거했습니다.

실험적인 Strict CSRF 토큰 적용을 중단했습니다. 이 기능은 Mattermost v11에서 완전히 제거될 예정입니다.

v9.11

Elasticsearch v8 지원이 추가되었습니다. 또한 Opensearch v1.x 및 v2.x에 대한 베타 지원도 추가되었습니다. Elasticsearch와 Opensearch를 구분하기 위해 새로운 구성 설정 ElasticsearchSettings.Backend 가 추가되었습니다. 기본값은 elasticsearch 이며, 공식 v8 클라이언트가 Elasticsearch v7.11+ 버전에서만 작동하기 때문에 AWS Elasticsearch v7.10.x에 대한 지원이 중단됩니다.

참고

  • Opensearch를 사용하는 AWS 고객은 Mattermost 구성을 elasticsearch 에서 opensearch 로 변경하고 호환성 모드를 비활성화해야 합니다. 업그레이드에 대한 자세한 내용은 Opensearch 문서 를 참조하세요.

  • Mattermost 서버를 업그레이드한 후 mmctl 를 사용하거나 구성을 수동으로 편집한 다음 Mattermost 서버를 재시작하세요.

  • Opensearch를 사용하는 경우 백엔드를 opensearch반드시 설정해야 합니다. 그렇지 않으면 Mattermost가 작동하지 않습니다.

Elasticsearch v8을 사용하는 경우 와일드카드 작업이 작동하도록 elasticsearch.yml 에서 action.destructive_requires_namefalse 로 설정해야 합니다.

v9.5

MySQL v5.7이 수명 종료에 도달했기 때문에 지원을 중단했습니다. 고객에게는 가능한 빨리 MySQL 인스턴스를 업그레이드할 것을 권장합니다.

엔터프라이즈 규모 및 액세스 제어 자동화 기능을 사용할 수 없고 등록되었지만 비활성화되지 않은 사용자 수가 10,000명을 초과하는 경우 컴파일된 Team Edition 및 Enterprise Edition 배포에 안전 제한 오류 메시지를 추가했습니다. ERROR_SAFETY_LIMITS_EXCEEDED.

v9.2

전역 보존 정책이 “keep-forever” 로 설정되어 있더라도 사용자 정의 보존 정책이 활성화된 경우 작업을 실행하도록 데이터 보존 정책을 수정했습니다. 이 수정 전에는 전역 데이터 보존 정책이 “keep-forever” 로 설정되어 있거나 비활성화되어 있는 한 활성화된 사용자 정의 데이터 보존 정책이 실행되지 않았습니다. 수정 후에는 전역 데이터 보존 정책이 “keep-forever”로 설정되어 있더라도 사용자 정의 데이터 보존 정책이 자동으로 실행됩니다. 서버가 업그레이드되면 게시물이 의도치 않게 삭제될 수 있습니다. 관리자는 업그레이드 전에 모든 사용자 정의 데이터 보존 정책을 비활성화하고 업그레이드 후 다시 활성화해야 합니다.

v9.1

이제 지원되는 최소 데스크톱 앱 버전은 v5.3입니다. OAuth/SAML 흐름이 desktop_login 을 포함하도록 수정되어 이전 버전과 호환되지 않습니다.

v9.0

더 이상 사용되지 않는 Insights 기능이 제거되었습니다.

Mattermost Boards와 다양한 다른 플러그인이 완전한 커뮤니티 지원으로 전환되었습니다. 자세한 내용은 이 포럼 게시물 을 참조하세요.

channel_viewed 웹소켓 이벤트가 multiple_channels_viewed 로 변경되었으며, 이제는 실제로 읽지 않은 메시지가 있는 채널에 대해서만 트리거됩니다.

v8.1

v8.1.2에서 데이터 보존 DeleteOrphanedRows 쿼리의 성능이 개선되었습니다.

새 테이블을 위한 새로운 마이그레이션:

MySQL:

CREATE TABLE

IF NOT EXISTS
  RetentionIdsForDeletion(Id
    VARCHAR(26) NOT NULL,
    TableName VARCHAR(64),
    Ids json, PRIMARY KEY (Id
      ), KEY
    idx_retentionidsfordeletion_tablename
    (TableName)) ENGINE =
  InnoDB DEFAULT CHARSET =
  utf8mb4;
  ``

PostgreSQL:

CREATE TABLE

IF NOT EXISTS
  retentionidsfordeletion(id
    VARCHAR(26) PRIMARY KEY,
    tablename VARCHAR(64),
    ids VARCHAR(26) []);
  CREATE INDEX

IF NOT EXISTS
  idx_retentionidsfordeletion_tablename
  ON retentionidsfordeletion(
    tablename);
  ``

사용자나 채널을 하드 삭제하면 이제 관련된 반응도 함께 정리됩니다.

DataRetentionConcurrencyEnabled 기능 플래그가 제거되었습니다. 성능 저하를 방지하기 위해 데이터 보존이 이제 동시성 없이 실행됩니다.

관리자가 고아 반응을 삭제할 때 한 번에 가져올 ID 배치 수를 구성할 수 있는 새로운 구성 설정 DataRetentionSettings.RetentionIdsBatchSize 가 추가되었습니다. 기본값은 100입니다.

v8.0

Insights는 모든 새로운 인스턴스와 v8.0으로 업그레이드하는 기존 서버에서 더 이상 사용되지 않습니다. Insights가 더 이상 사용되지 않는 이유에 대한 자세한 내용은 이 포럼 게시물 을 참조하세요.

Focalboard 플러그인은 이제 모든 새로운 인스턴스에서 기본적으로 비활성화되어 있으며 시스템 콘솔 > 플러그인 설정 에서 활성화할 수 있습니다.

Channel Export와 Apps 플러그인은 이제 기본적으로 비활성화되어 있습니다.

온프레미스 서버에서 Apps Bar가 이제 기본적으로 활성화됩니다. ExperimentalSettings.EnableAppBarExperimentalSettings.DisableAppBar 로 이름이 변경되었습니다. 자세한 내용은 :ref: configuration settings <configure/experimental-configuration-settings:disable-apps-bar> 문서와 이 포럼 게시물 을 참조하세요.

메인 server package 에서 Go 모듈 경로가 github.com/mattermost/mattermost-server/server/v8 에서 github.com/mattermost/mattermost/server/v8 로 변경되었습니다. 하지만 public 서브모듈의 도입으로 인해 서드파티 코드가 이 server 패키지를 가져올 필요가 없어졌습니다.

익숙한 modelplugin 패키지를 포함하는 public 서브모듈이 도입되었으며, 이제 서버와 별도로 버전 관리됩니다. Go 프로그램과 플러그인은 이제 github.com/mattermost/mattermost-server/server/public 을 가져오고 버전을 관용적으로 관리할 수 있으므로 특정 커밋 해시를 go get 할 필요가 없어졌습니다. 이 서브모듈은 아직 v1을 출시하지 않았고 API를 안정화하기 전에 호환성이 깨지는 변경사항을 도입할 예정이지만, Mattermost 서버 자체와는 앞뒤로 호환됩니다.

위의 public 서브모듈의 일부로, context.Context 가 이제 model.Client4 메서드에 전달됩니다.

PostgreSQL v10 지원이 제거되었습니다. 새로운 최소 PostgreSQL 버전은 v11입니다.

Mattermost Go용 공개 API가 이제 별도로 버전 관리되는 패키지로 제공됩니다. 특정 커밋 해시를 고정하는 대신 관용적인 Go를 사용하여 이 패키지를 의존성으로 추가하세요: go get github.com/mattermost/mattermost-server/server/public . 이 재배치된 Go API는 Mattermost v7과의 하위 호환성을 유지합니다. 또한 이전에 github.com/mattermost/mattermost-server/v6/model에 있던 기존 Go API는 Mattermost v8과의 상위 호환성을 유지하지만 최신 기능이 포함되지 않을 수 있습니다. 플러그인은 재컴파일할 필요가 없지만, 개발자는 빌드 프로세스를 단순화하기 위해 새 패키지 사용을 선택할 수 있습니다. 새로운 공개 패키지는 올해 말 v1으로 출시하기 전에 추가 코드 리팩토링을 허용하기 위해 Mattermost v8과 함께 버전 0.5.0으로 제공됩니다.

다중 줄 JSON, 문자열로 이스케이프된 JSON 또는 JSON을 포함하는 파일을 가리키는 파일 이름을 지원하는 세 가지 구성 필드가 추가되었습니다: LogSettings.AdvancedLoggingJSON, ExperimentalAuditSettings.AdvancedLoggingJSON, NotificationLogSettings.AdvancedLoggingJSON. AdvancedLoggingConfig 필드는 더 이상 사용되지 않습니다.

Go MySQL 드라이버가 maxAllowedPacket 크기를 4MiB에서 64MiB로 변경했습니다. 이는 MySQL 5.7에서 MySQL 8.0으로 서버 측 기본값 변경과 일관성을 유지하기 위한 것입니다. max_allowed_packet 설정이 64MiB가 아닌 경우, 서버 측 값과 일치하도록 MySQL config DSN에 maxAllowedPacket 매개변수를 추가하여 업데이트하세요. 또는 성능 오버헤드가 있는 새 연결마다 서버 측 값을 자동으로 가져오도록 0으로 설정할 수 있습니다.

ExperimentalSettings.PatchPluginsReactDOM 가 제거되었습니다. 이전에 이 설정이 활성화되었다면 다음을 확인하세요:

  1. 모든 Mattermost 지원 플러그인이 최신 버전으로 업데이트되었습니다.

  2. 다른 모든 플러그인이 React 17을 지원하도록 업데이트되었습니다. 자세한 내용은 v7.7 릴리스 섹션을 참조하세요.

더 이상 사용되지 않는 PermissionUseSlashCommands 가 제거되었습니다.

더 이상 사용되지 않는 model.CommandArgs.Session 이 제거되었습니다.

사이트 URL의 출처가 아닌 다른 출처에서 웹소켓 연결을 허용하려는 서버의 경우, ServiceSettings.AllowCorsFrom 구성 설정 을 설정하세요. 또한 siteURL 이 올바르게 설정되어 있는지 확인하세요.

v8.0 릴리스에서 다음 저장소가 하나로 병합되었습니다: mattermost-server, mattermost-webapp, mmctl. 개발자는 자세한 내용을 위해 업데이트된 개발자 가이드 를 읽어야 합니다.

이전 릴리스의 마이그레이션으로 인한 문제가 수정되었습니다. PostgreSQL 14 DB t3.medium RDS 인스턴스에서 쿼리는 약 11ms가 소요됩니다. preferences 테이블의 잠금은 삭제할 행이 있는 경우에만 획득되며, 소요 시간은 무시할 수 있습니다.

사용자가 나간 채널의 스레드 보기에 여전히 스레드가 표시되는 문제가 수정되었습니다. PostgreSQL의 마이그레이션 실행 시간: 실행 시간: 58.11초, DELETE 2766690. MySQL의 마이그레이션 실행 시간: Query OK, 2766769개 행 영향 (4분 47.57초).

다른 출처에서 웹소켓 연결을 허용하려는 서버의 경우 ServiceSettings.AllowCorsFrom 구성 설정을 설정하세요.

channelID 열을 테이블 자체에 비정규화하여 파일 정보 통계 쿼리가 최적화되었습니다. 이는 오른쪽 패널을 선택할 때 채널의 파일 수를 가져오는 쿼리 속도를 향상시킵니다. 마이그레이션 시간:

FileInfo에 1731개 행과 1100만 개의 게시물이 있는 PostgreSQL 12.14 DB에서 약 0.27초가 소요되었습니다.

FileInfo에 1405개 행과 1100만 개의 게시물이 있는 MySQL 8.0.31 DB에서 약 0.3초가 소요되었습니다.

v7.10

v7.10.1에서 이전 릴리스의 마이그레이션으로 인한 문제가 수정되었습니다. PostgreSQL 14 DB t3.medium RDS 인스턴스에서 쿼리는 약 11ms가 소요됩니다. preferences 테이블의 잠금은 삭제할 행이 있는 경우에만 획득되며, 소요 시간은 무시할 수 있습니다.

v7.10.1에서 사용자가 나간 채널의 스레드 보기에 여전히 스레드가 표시되는 문제가 수정되었습니다. MySQL의 마이그레이션 실행 시간: Query OK, 2766769개 행 영향 (4분 47.57초). PostgreSQL의 마이그레이션 실행 시간: 58.11초, DELETE 2766690.

v7.10.3에서 사이트 URL의 출처가 아닌 다른 출처에서 웹소켓 연결을 허용하려는 서버의 경우, ServiceSettings.AllowCorsFrom 구성 설정 을 설정하세요. 또한 siteURL 이 올바르게 설정되어 있는지 확인하세요.

v7.9

Posts(OriginalId) 에 새 인덱스가 추가되었습니다. 1180만 개의 게시물이 있는 데이터베이스에서 i7-11800H CPU(8코어, 16스레드), 32GiB RAM 및 SSD가 있는 시스템에서 인덱스 생성은 MySQL에서 98.51초, PostgreSQL에서 2.6초가 소요됩니다.

  • PostgreSQL 데이터베이스에서는 인덱스 생성 중에 Posts 테이블이 잠깁니다. 이 테이블의 잠금을 방지하기 위해 관리자는 업그레이드 수행 전에 다음과 같은 비차단 쿼리를 사용하여 수동으로 인덱스를 생성할 수 있습니다: CREATE INDEX CONCURRENTLY idx_posts_original_id ON Posts(OriginalId);.

  • 게시물이 적은 PostgreSQL 배포를 관리하는 관리자는 마이그레이션 프로세스가 인덱스를 생성하고 마이그레이션이 완료될 때까지 Posts 테이블이 잠긴 상태로 유지되는 것을 수용할 수 있습니다.

v7.9.4에서 사용자가 나간 채널의 스레드 보기에 여전히 스레드가 표시되는 문제가 수정되었습니다. MySQL의 마이그레이션 실행 시간: Query OK, 2766769개 행 영향 (4분 47.57초). PostgreSQL의 마이그레이션 실행 시간: 58.11초, DELETE 2766690.

v7.9.4에서 Oauth 2 관련 수정사항이 백포트되었습니다. 쿼리 시간은 삭제할 행이 있는지 여부에 따라 달라집니다.

삭제할 행이 없는 경우:

  • MySQL v5.7.12: 9ms

  • PostgreSQL v10: 21ms

4개 행:

  • MySQL v5.7.12: 17.2ms

  • PostgreSQL v10: 9.9ms

이 시간은 다음과 같은 테이블 크기를 기준으로 합니다:

  • Preferences: 200만 개의 레코드

  • oauthaccessdata 및 sessions: 10개의 레코드

다음을 실행하여 영향받는 행의 수를 확인할 수 있습니다:

PostgreSQL:

SELECT count(o.*)
FROM oauthaccessdata o
 WHERE NOT EXISTS (
    SELECT p.*
    FROM preferences p
    WHERE o.clientid = p.name
      AND o.userid = p.
      userid
      AND p.category =
      'oauth_app'
    );

MySQL:

SELECT COUNT(o.`Token`)
FROM OAuthAccessData o
LEFT JOIN Preferences p ON o.
  clientid = p.name
  AND o.userid = p.userid
  AND p.category = 'oauth_app'
INNER JOIN Sessions s ON o.token = s
  .token
WHERE p.name IS NULL;

삭제할 행이 있는 경우에만 oauthaccessdata 및 sessions 테이블에 대한 잠금이 획득됩니다.

v7.9.5에서 사이트 URL의 출처가 아닌 다른 출처에서 웹소켓 연결을 허용하려는 서버의 경우 ServiceSettings.AllowCorsFrom 설정 을 설정하세요. 또한 siteURL 이 올바르게 설정되어 있는지 확인하세요.

v7.8

메시지 우선순위 및 확인 가 이제 모든 인스턴스에서 기본적으로 활성화됩니다. System Console에서 게시물 > 메시지 우선순위 로 이동하거나 PostPriority 설정을 통해 이 기능을 비활성화할 수 있습니다.

v7.8.5에서 사용자가 나간 채널의 스레드 보기에 여전히 스레드가 표시되는 문제가 수정되었습니다. MySQL의 마이그레이션 실행 시간: Query OK, 2766769개 행 영향 (4분 47.57초). PostgreSQL의 마이그레이션 실행 시간: 58.11초, DELETE 2766690.

v7.8.5에서 Oauth 2 관련 수정사항이 백포트되었습니다. 쿼리 시간은 삭제할 행이 있는지 여부에 따라 달라집니다.

삭제할 행이 없는 경우:

  • MySQL v5.7.12: 9ms

  • PostgreSQL v10: 21ms

4개 행:

  • MySQL v5.7.12: 17.2ms

  • PostgreSQL v10: 9.9ms

이 시간은 다음과 같은 테이블 크기를 기준으로 합니다:

  • Preferences: 200만 개의 레코드

  • oauthaccessdata 및 sessions: 10개의 레코드

다음을 실행하여 영향받는 행의 수를 확인할 수 있습니다:

PostgreSQL:

SELECT count(o.*)
 FROM oauthaccessdata o
 WHERE NOT EXISTS (
    SELECT p.*
    FROM preferences p
    WHERE o.clientid = p.name
      AND o.userid = p.
      userid
      AND p.category =
      'oauth_app'
    );

MySQL:

SELECT COUNT(o.`Token`)
FROM OAuthAccessData o
LEFT JOIN Preferences p ON o.
  clientid = p.name
  AND o.userid = p.userid
  AND p.category = 'oauth_app'
INNER JOIN Sessions s ON o.token = s
  .token
WHERE p.name IS NULL;

삭제할 행이 있는 경우에만 oauthaccessdata 및 sessions 테이블에 대한 잠금이 획득됩니다.

v7.8.7에서 사이트 URL의 출처가 아닌 다른 출처에서 웹소켓 연결을 허용하려는 서버의 경우 ServiceSettings.AllowCorsFrom 설정 을 설정하세요. 또한 siteURL 이 올바르게 설정되어 있는지 확인하세요.

v7.8.11에서 데이터 보존 DeleteOrphanedRows 쿼리의 성능이 개선되었습니다.

새 테이블을 위한 새로운 마이그레이션:

MySQL:

CREATE TABLE

IF NOT EXISTS
  RetentionIdsForDeletion(Id
    VARCHAR(26) NOT NULL,
    TableName VARCHAR(64),
    Ids json, PRIMARY KEY (Id
      ), KEY
    idx_retentionidsfordeletion_tablename
    (TableName)) ENGINE =
  InnoDB DEFAULT CHARSET =
  utf8mb4;
  ``

PostgreSQL:

CREATE TABLE

IF NOT EXISTS
  retentionidsfordeletion(id
    VARCHAR(26) PRIMARY KEY,
    tablename VARCHAR(64),
    ids VARCHAR(26) []);
  CREATE INDEX

IF NOT EXISTS
  idx_retentionidsfordeletion_tablename
  ON retentionidsfordeletion(
    tablename);
  ``

사용자나 채널을 하드 삭제하면 이제 관련된 반응도 함께 정리됩니다.

DataRetentionConcurrencyEnabled 기능 플래그가 제거되었습니다. 성능 저하를 방지하기 위해 데이터 보존이 이제 동시성 없이 실행됩니다.

관리자가 고아 반응을 삭제할 때 한 번에 가져올 ID 배치 수를 구성할 수 있는 새로운 구성 설정 DataRetentionSettings.RetentionIdsBatchSize 가 추가되었습니다. 기본값은 100입니다.

v7.7

웹앱 구성 요소가 있는 플러그인은 Mattermost v7.7 릴리스 및 업데이트된 React v17 종속성과 함께 작동하도록 업데이트해야 할 수 있습니다.

이는 마운트 해제된 컴포넌트에서 findDOMNode 가 호출되는 오류로 인한 플러그인 충돌을 방지하기 위한 것입니다. 우리의 starter templateReact 의 외부 버전에 의존했지만 ReactDOM 에 대해서는 동일하게 하지 않았습니다. 플러그인은 ReactDOM 을 외부화하기 위해 webpack.config.js 지시문을 업데이트해야 합니다. 참조: https://github.com/mattermost/mattermost-plugin-playbooks/pull/1489. 서버 측 전용 플러그인은 영향을 받지 않습니다. 이 변경은 Mattermost v7.7로 업그레이드하기 전에 언제든지 기존 플러그인에 대해 수행할 수 있으며 Mattermost의 이전 버전과 역호환됩니다. 문제가 발생하면 ExperimentalSettings.PatchPluginsReactDOM 을 활성화하거나 업데이트하는 동안 영향을 받는 플러그인을 비활성화할 수 있습니다.

ThreadTeamId 열을 추가하여 Threads 테이블을 비정규화했습니다. 스키마를 비정규화하더라도 불필요한 조인을 제거하여 성능을 향상시켰습니다.

스키마 변경에 대한 테스트 결과는 다음과 같습니다:

인스턴스: db.r5.large

Threads 테이블 크기: 846313행

게시물 수: 1200만 개

반응 수: 250만 개

MySQL:

-- Drop any existing TeamId column from 000094_threads_teamid.up.sql

SET @preparedStatement = (SELECT IF(
    EXISTS(``
        SELECT 1 FROM INFORMATION_SCHEMA.STATISTICS
        WHERE table_name = 'Threads'
        AND table_schema = DATABASE()
        AND column_name = 'TeamId'
    ),
    'ALTER TABLE Threads DROP COLUMN TeamId;',
    'SELECT 1;'
));

PREPARE removeColumnIfExists FROM @preparedStatement;
EXECUTE removeColumnIfExists;
DEALLOCATE PREPARE removeColumnIfExists;

SET @preparedStatement = (SELECT IF(
    NOT EXISTS(
        SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_name = 'Threads'
        AND table_schema = DATABASE()
        AND column_name = 'ThreadTeamId'

    ),
    'ALTER TABLE Threads ADD COLUMN ThreadTeamId varchar(26) DEFAULT NULL;',
    'SELECT 1;'
));

PREPARE addColumnIfNotExists FROM @preparedStatement;
EXECUTE addColumnIfNotExists;
DEALLOCATE PREPARE addColumnIfNotExists;

Query OK, 0 rows affected (7.71 sec)

UPDATE Threads, Channels
SET Threads.ThreadTeamId = Channels.TeamId
WHERE Channels.Id = Threads.ChannelId
AND Threads.ThreadTeamId IS NULL;

Query OK, 846313 rows affected (51.32 sec)

Rows matched: 846313 Changed: 846313 Warnings: 0

PostgreSQL:

-- Drop any existing TeamId column from 000094_threads_teamid.up.sql

ALTER TABLE threads DROP COLUMN IF EXISTS teamid;

ALTER TABLE threads ADD COLUMN IF NOT EXISTS threadteamid VARCHAR(26);

ALTER TABLE

Time: 2.236 ms

UPDATE threads
SET threadteamid = channels.
  teamid
FROM channels
WHERE threads.threadteamid IS
  NULL
  AND channels.id = threads.
  channelid;

UPDATE 847646

Time: 29744.608 ms (00:29.745)

**Backwards-compatibility:**

A previous version of Mattermost can run with the new schema changes

**Table locks or impact to existing operations on the table:**

Table locks - Threads table

위에 게시된 쿼리는 MySQL과 PostgreSQL 모두 Mattermost 업그레이드 전에 실행할 수 있습니다. 스키마 변경 후 마이그레이션이 즉시(0.78초) 완료됩니다.

v7.7과 함께 제공되는 Calls 버전부터는 외부 RTCD 서비스를 사용할 때 최소 버전 요구사항이 있습니다. 이는 Calls가 외부 서비스를 사용하도록 구성된 경우, 고객이 먼저 RTCD를 최소 버전 0.8.0으로 업그레이드해야 하며, 그렇지 않으면 플러그인이 시작되지 않는다는 것을 의미합니다.

v7.7.2에서는 메시지 우선순위 및 확인 기능이 모든 인스턴스에서 기본적으로 활성화됩니다. System Console에서 게시물 > 메시지 우선순위 로 이동하거나 PostPriority 설정을 통해 이 기능을 비활성화할 수 있습니다.

v7.5

Posts 테이블에서 ParentId 열이 삭제되도록 새로운 스키마 마이그레이션이 추가되었습니다. 테이블 크기에 따라 이전에 열이 삭제되지 않은 경우 MySQL 데이터베이스에서 데이터베이스 CPU 사용량이 크게 증가할 것으로 예상됩니다. 마이그레이션 중에는 테이블 쓰기가 제한됩니다.

PluginRegistry.registerCustomRoute 의 경우 사용자 정의 라우트 컴포넌트를 등록할 때 루트 레이아웃에 올바르게 배치되도록 CSS grid-area 를 지정해야 합니다(권장: grid-area: center).

v7.3

Boards가 채널 기반에서 역할 기반 권한 시스템으로 이동하고 있습니다. 마이그레이션은 자동으로 실행되지만, 관리자는 업그레이드 전에 백업을 수행해야 합니다. 워크스페이스가 제거되었으므로 마이그레이션 전에 여러 보드의 구성원이었다면 이제 모두 동일한 사이드바 아래에 표시됩니다.

v7.2

데이터를 더 엄격하게 만들기 위해 여러 스키마 변경으로 추가 데이터베이스 제약 조건이 적용됩니다. 아래 나열된 모든 명령은 8코어, 16GB RAM 머신에서 테스트되었습니다. 기록된 시간은 다음과 같습니다:

PostgreSQL (131869 채널, 2팀):

  • CREATE TYPE channel_type AS ENUM ('P', 'G', 'O', 'D'); 실행 시간: 14.114 밀리초

  • ALTER TABLE channels alter column type type channel_type using type::channel_type; 실행 시간: 3856.790 밀리초(3.857초)

  • CREATE TYPE team_type AS ENUM ('I', 'O'); 실행 시간: 4.191 밀리초

  • ALTER TABLE teams alter column type type team_type using type::team_type; 실행 시간: 116.205 밀리초

  • CREATE TYPE upload_session_type AS ENUM ('attachment', 'import'); 실행 시간: 4.266 밀리초

  • ALTER TABLE uploadsessions alter column type type upload_session_type using type::upload_session_type; 실행 시간: 37.099 밀리초

MySQL (270959 채널, 2팀):

  • ALTER TABLE Channels MODIFY COLUMN Type ENUM("D", "O", "G", "P"); 실행 시간: 13.24초

  • ALTER TABLE Teams MODIFY COLUMN Type ENUM("I", "O"); 실행 시간: 0.04초

  • ALTER TABLE UploadSessions MODIFY COLUMN Type ENUM("attachment", "import"); 실행 시간: 0.03초

v7.1

새로운 구성 옵션 MaxImageDecoderConcurrency 는 한 번에 동시에 디코딩할 수 있는 이미지 수를 지정합니다. 기본값은 -1이며, 이 값은 현재 CPU 수를 나타냅니다. 이는 서버의 총 메모리 사용량에 영향을 줍니다. 단일 이미지의 최대 메모리는 MaxImageResolution * 24 bytes 에 의해 결정됩니다. 따라서 MaxImageResolution * MaxImageDecoderConcurrency * 24 가 이미지 디코딩을 위해 할당된 메모리보다 작아야 합니다.

Mattermost v7.1은 새로운 열과 인덱스 형태로 스키마 변경을 도입했습니다. 스키마 변경에 대한 테스트 결과는 다음과 같습니다:

  • MySQL 12M 게시물, 2.5M 반응 - ~1분 34초 (인스턴스: 8코어, 16GB RAM PC)

  • PostgreSQL 12M 게시물, 2.5M 반응 - ~1분 18초 (인스턴스: db.r5.2xlarge)

마이그레이션이 완료될 때까지 이 시간 동안 게시된 사용자의 반응이 데이터베이스에 반영되지 않도록 업그레이드 전에 다음 SQL 쿼리를 실행하여 Reactions 테이블에 잠금을 얻을 수 있습니다. 이는 완전히 이전 버전과 호환됩니다.

MySQL:

  • ALTER TABLE Reactions ADD COLUMN ChannelId varchar(26) NOT NULL DEFAULT "";

  • UPDATE Reactions SET ChannelId = COALESCE((select ChannelId from Posts where Posts.Id = Reactions.PostId), '') WHERE ChannelId="";

  • CREATE INDEX idx_reactions_channel_id ON Reactions(ChannelId) LOCK=NONE;

PostgreSQL:

  • ALTER TABLE reactions ADD COLUMN IF NOT EXISTS channelid varchar(26) NOT NULL DEFAULT '';

  • UPDATE reactions SET channelid = COALESCE((select channelid from posts where posts.id = reactions.postid), '') WHERE channelid='';

  • CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_reactions_channel_id on reactions (channelid);

v7.0

중요: 세션 길이 구성 설정이 단위에서 시간 단위로 변경되었습니다. config.json 파일이나 데이터베이스 구성을 사용하는 인스턴스는 다음 값들이 자동으로 새로운 단위로 마이그레이션되지만, 환경 변수를 사용하는 인스턴스는 다음과 같이 변경해야 합니다:

  1. MM_SERVICESETTINGS_SESSIONLENGTHWEBINDAYSMM_SERVICESETTINGS_SESSIONLENGTHWEBINHOURS 로 변경하세요 (값에 24를 곱하세요).

  2. MM_SERVICESETTINGS_SESSIONLENGTHMOBILEINDAYSMM_SERVICESETTINGS_SESSIONLENGTHMOBILEINHOURS 로 변경하세요 (값에 24를 곱하세요).

  3. MM_SERVICESETTINGS_SESSIONLENGTHSSOINDAYSMM_SERVICESETTINGS_SESSIONLENGTHSSOINHOURS 로 변경하세요 (값에 24를 곱하세요).

MySQL 자체 호스팅 고객은 FileInfo 테이블에 많은 행이 있을 때 마이그레이션이 평소보다 오래 걸리는 것을 알 수 있습니다. MySQL의 경우 700,000행 크기의 테이블에 약 19초가 소요됩니다. PostgreSQL에 필요한 시간은 무시할 만합니다. 테스트는 CPU - Intel i7 6-cores @ 2.6 GHzMemory - 16 GB 사양의 기계에서 수행되었습니다.

시스템 콘솔 > 실험적 기능 > 기능 > 앱 바 활성화 를 통해 새로운 구성 설정이 활성화되면, 플러그인에 의해 등록된 모든 채널 헤더 아이콘이 새로운 앱스 바로 이동됩니다. 이는 새로운 레지스트리 함수를 명시적으로 사용하지 않더라도 마찬가지입니다. 자체 호스팅 배포의 경우 앱스 바 설정은 기본값이 false 입니다.

ServiceSettings.TrustedProxyIPHeader 의 값은 이제부터 기본값이 비어 있습니다. 이전 버그로 인해 특정 조건에서 이 기능이 작동하지 않았습니다. 고객은 구성에서 이러한 값을 확인하고 필요한 경우 nil로 설정해야 합니다. 자세한 내용은 여기 를 참조하세요.

접힌 답글 스레드 는 이제 일반적으로 사용 가능하며 새로운 Mattermost 서버에서 기본적으로 활성화됩니다. v7.0 이상으로 업그레이드하는 서버의 경우, 기능 활성화에 대한 자세한 정보와 지침은 이 문서 를 참조하세요.

v6.7

새로운 인덱스 형태로 스키마 변경이 도입되었습니다. 다음은 이러한 스키마 변경으로 데이터베이스 쿼리 실행에 소요된 시간을 측정한 테스트 결과 요약입니다:

MySQL 7M 게시물 - ~17초 (인스턴스: db.r5.xlarge)

MySQL 9M 게시물 - 2분 12초 (인스턴스: db.r5.large)

Postgres 7M 게시물 - ~9초 (인스턴스: db.r5.xlarge)

다운타임 없는 업그레이드를 원하는 고객은 업그레이드 전에 이 인덱스를 적용하는 것이 좋습니다. 이는 완전히 하위 호환되며 수동으로 실행할 때 테이블 잠금을 발생시키지 않고 테이블의 기존 작업에 영향을 주지 않습니다. 그렇지 않으면 쿼리가 업그레이드 프로세스 중에 실행되며 MySQL이 아닌 환경에서 테이블이 잠깁니다. 다음 명령을 실행하여 이 인덱스를 적용하세요:

MySQL의 경우: CREATE INDEX idx_posts_create_at_id on Posts(CreateAt, Id) LOCK=NONE;

Postgres의 경우: CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_posts_create_at_id on posts(createat, id);

v6.7.1부터 ServiceSettings.TrustedProxyIPHeader 의 값은 이제 기본값이 비어 있습니다. 이전 버그로 인해 특정 조건에서 이 기능이 작동하지 않았습니다. 고객은 구성에서 이러한 값을 확인하고 필요한 경우 nil로 설정해야 합니다. 자세한 내용은 여기 를 참조하세요.

v6.6

바인딩/폼 제출을 위한 앱스 프레임워크 프로토콜이 변경되어 단일 call 을 개별 submit, form, refresh, lookup 호출로 분리했습니다. 사용자가 자체 앱을 만든 경우 새 시스템으로 업데이트해야 합니다.

이제 채널 관리자는 코드 작성 없이도 트리거 조건에 따라 자동으로 실행되도록 특정 작업 을 구성할 수 있습니다. 채널 작업 기능을 활용하려면 이전 Playbooks 릴리스를 실행하는 사용자가 Playbooks 인스턴스를 최소 v1.26으로 업그레이드해야 합니다.

v6.6.2부터 ServiceSettings.TrustedProxyIPHeader 의 값은 이제 기본값이 비어 있습니다. 이전 버그로 인해 특정 조건에서 이 기능이 작동하지 않았습니다. 고객은 구성에서 이러한 값을 확인하고 필요한 경우 nil로 설정해야 합니다. 자세한 내용은 여기 를 참조하세요.

v6.5

mattermost version CLI 명령은 더 이상 데이터베이스와 상호작용하지 않습니다. 따라서 데이터베이스 버전이 출력되지 않습니다. 또한 데이터베이스 마이그레이션이 버전 하위 명령으로 적용되지 않습니다. 관리자가 마이그레이션을 트리거할 수 있도록 새로운 db migrate 하위 명령 이 추가되었습니다.

v6.5.2부터 ServiceSettings.TrustedProxyIPHeader 의 값은 이제 기본값이 비어 있습니다. 이전 버그로 인해 특정 조건에서 이 기능이 작동하지 않았습니다. 고객은 구성에서 이러한 값을 확인하고 필요한 경우 nil로 설정해야 합니다. 자세한 내용은 여기 를 참조하세요.

v6.4

새로운 스키마 마이그레이션 시스템이 도입되었으므로 서버를 이 버전으로 업데이트하기 전에 데이터베이스를 백업하는 것을 강력히 권장합니다. 새로운 마이그레이션 시스템은 모든 기존 마이그레이션을 실행하여 새 테이블에 기록합니다. 이는 애플리케이션을 새 시스템으로 마이그레이션하기 위해 첫 실행에서만 발생합니다. 마이그레이션 정보가 저장되는 테이블은 db_migrations 라고 합니다. 또한 db_lock 테이블은 여러 설치가 병렬로 마이그레이션을 실행하는 것을 방지하는 데 사용됩니다. 마이그레이션 적용 중 오류가 발생하면 먼저 이 테이블을 확인하세요. 다운타임은 데이터베이스의 레코드 수와 스키마에 누락된 마이그레이션이 있는지 여부에 따라 달라집니다. 문제가 발생하면 실패한 마이그레이션 이름, 데이터베이스 드라이버/버전, 서버 로그를 포함하여 이슈 를 제출하세요.

MySQL에서 v6.4.0으로 업그레이드할 때 “Failed to apply database migrations” 오류가 발생하면 테이블 정렬과 기본 데이터베이스 정렬 사이에 불일치가 있다는 의미입니다. ALTER DATABASE <YOUR_DB_NAME> COLLATE = 'utf8mb4_general_ci', 를 사용하여 데이터베이스 정렬을 변경하여 수동으로 이 문제를 해결할 수 있습니다. 그런 다음 서버 업그레이드를 다시 수행하면 마이그레이션이 성공적으로 완료됩니다.

MySQL 8+ 시스템에서는 기본 정렬을 변경하여 업그레이드할 때 Error 1267: Illegal mix of collations 오류가 자주 발생합니다. 이는 데이터베이스와 테이블의 정렬이 다르기 때문입니다. 이 오류가 발생하면 예를 들어 ALTER DATABASE <db_name> COLLATE = '<collation>' 를 사용하여 정렬을 동일한 값으로 변경하세요.

새로운 마이그레이션 시스템은 스키마 마이그레이션을 실행하기 위해 MySQL 데이터베이스 사용자에게 추가적인 EXECUTE, CREATE ROUTINE, ALTER ROUTINEREFERENCES 권한이 필요합니다.

v6.3

v6.3.3에서 ThreadAutoFollow 의 기본값이 false 로 변경되었습니다. 이는 이미 이 값이 true 로 설정된 기존 구성에는 영향을 미치지 않습니다.

v6.3.9부터 ServiceSettings.TrustedProxyIPHeader 의 값이 기본적으로 비어있게 됩니다. 이전 버그로 인해 특정 조건에서 이 변경이 적용되지 않았습니다. 고객은 구성에서 이러한 값을 확인하고 필요한 경우 nil로 설정해야 합니다. 자세한 내용은 여기 를 참조하세요.

v6.2

채널 자동완성 결과에 비공개 채널이 포함됩니다. 자동완성을 위해 Bleve 또는 Elasticsearch 를 사용하는 고객은 새로운 결과를 얻기 위해 데이터를 재인덱싱해야 합니다. 이 작업은 시간이 오래 걸릴 수 있으므로 자동완성을 비활성화하고 백그라운드에서 인덱싱을 실행하는 것을 권장합니다. 완료되면 자동완성을 다시 활성화하세요.

참고

자동완성 결과에서 비공개 채널 이름은 채널 구성원만 볼 수 있습니다.

v6.2.3에서 ThreadAutoFollow 의 기본값이 false 로 변경되었습니다. 이는 이미 이 값이 true 로 설정된 기존 구성에는 영향을 미치지 않습니다.

Mattermost Boards는 실시간 업데이트가 올바르게 표시되도록 EnableReliableWebSockets 설정을 수동으로 true 로 설정해야 합니다.

v6.1

v6.1로 업그레이드할 때는 스키마 마이그레이션 분석 을 참조하세요.

Bleve 인덱스가 scorch 인덱스 타입을 사용하도록 업데이트되었습니다. 이 새로운 기본 인덱스 타입은 효율성이 개선되어 인덱스가 훨씬 적은 디스크 공간을 사용합니다. 이 새로운 인덱스 타입을 사용하려면 서버 버전을 업그레이드한 후 정리 작업을 실행하고 System Console의 Bleve 섹션에서 재인덱싱을 실행하세요. Bleve는 여전히 이전 인덱스와 호환되므로 정리 및 재인덱싱을 실행하지 않아도 현재 인덱싱된 데이터는 정상적으로 작동합니다.

쿼리 성능 향상을 위해 jobs 테이블에 복합 인덱스가 추가되었습니다. 대규모 jobs 테이블이 있는 일부 고객의 경우 이 작업이 오래 걸릴 수 있으므로, 업무 시간 외에 인덱스를 추가한 후 마이그레이션을 실행하는 것을 권장합니다. 100만 개 이상의 행이 있는 테이블은 업그레이드 전에 업데이트할 만큼 충분히 큰 것으로 간주할 수 있습니다.

  • PostgreSQL의 경우: create index concurrently idx_jobs_status_type on jobs (status,type);

  • MySQL의 경우: create index idx_jobs_status_type on Jobs (Status,Type);

v6.1.3에서 ThreadAutoFollow 의 기본값이 false 로 변경되었습니다. 이 값이 이미 true 로 설정된 기존 구성에는 영향을 미치지 않습니다.

Mattermost Boards는 실시간 업데이트가 올바르게 표시되도록 EnableReliableWebSockets 설정을 수동으로 true 로 설정해야 합니다.

v6.0

마이그레이션 시간이 더 길어질 것으로 예상됩니다.

  • 1,000만 개 이상의 게시물이 있는 데이터셋의 예상 업그레이드 시간은 이 문서 를 참조하세요.

  • 7,000만 개 이상의 게시물이 있는 데이터셋의 예상 업그레이드 시간은 이 문서 를 참조하세요.

model.ClusterMessage 의 Data 필드 타입이 string에서 []byte로 변경되었습니다. v6 서버는 클러스터에서 v5 서버와 함께 실행할 수 없습니다. 5.x에서 6.x로 업그레이드하는 고객은 고가용성 업그레이드를 수행할 수 없습니다. 업그레이드 중에는 v6 서버가 시작될 때 다른 v5 서버가 실행되지 않아야 합니다. v6 서버는 데이터셋 크기에 따라 시작 시간이 길어질 수 있는 상당한 데이터베이스 스키마 변경을 실행합니다. 다운타임을 완전히 제거할 수는 없지만, 마이그레이션 과정에서 노력한 정도에 따라 크게 최소화할 수 있습니다.

1. 낮은 노력, 긴 다운타임 - 이는 v6 서버를 일반적으로 시작하는 일반적인 프로세스입니다. 이는 두 가지 의미가 있습니다: 마이그레이션 프로세스 중에 다양한 테이블이 잠겨 해당 기간 동안 해당 테이블이 읽기 전용이 됩니다. 둘째, 서버가 마이그레이션을 완료하고 애플리케이션을 시작하면 클러스터에서 다른 v5 서버를 실행할 수 없습니다.

2. 중간 노력, 중간 다운타임 - 이 프로세스는 서버에서 SQL 쿼리를 수동으로 실행해야 합니다. 테이블 잠금을 방지하기 위해 고객은 MySQL용 pt-online-schema-change 도구를 사용할 수 있습니다. Postgres의 경우 테이블 잠금이 매우 최소화됩니다. 장점은 쿼리가 많기 때문에 고객이 휴무 시간에 개별 쿼리를 실행하는 데 자신의 시간을 할애할 수 있다는 것입니다. #11을 제외한 모든 쿼리는 이 방식으로 안전하게 실행할 수 있습니다. 그런 다음 (1)의 일반적인 방법을 따를 수 있습니다.

3. 높은 노력, 낮은 다운타임 - 이 프로세스는 (2)의 모든 것이 필요하며, 쿼리 #11의 영향을 최소화하려고 시도합니다. 2단계를 따르고 실행 중인 v5 서버와 함께 v6를 시작한 다음 애플리케이션 로그를 모니터링하여 이를 수행할 수 있습니다. v6 애플리케이션이 시작되자마자 v5 노드를 종료해야 합니다. 이렇게 하면 다운타임이 몇 초로 최소화됩니다.

마이그레이션 중에 서버 프로세스가 종료되는 것을 방지하기 위해 systemctl을 통하지 않고 Mattermost를 직접 시작하는 것이 좋습니다. 이는 제공된 systemctl 서비스 파일의 TimeoutStartSec 값이 1시간으로 설정되어 있기 때문에 발생할 수 있습니다.

Mattermost Kubernetes operator를 사용하는 고객은 위의 마이그레이션 정보를 인지하고 자신에게 가장 적합한 경로를 선택해야 합니다. (1)이 허용 가능하다면 operator를 사용한 일반 업그레이드 프로세스로 충분합니다. 최소 다운타임을 위해서는 일반 업그레이드 프로세스에 따라 Mattermost를 업데이트하기 전에 (2)를 따르세요.

Mattermost 버전 >= 6.0.x로 업그레이드하려고 할 때 다음과 같은 오류가 발생할 수 있습니다: Failed to alter column type. It is likely you have invalid JSON values in the column. Please fix the values manually and run the migration again.

이는 해당 열에 수동으로 수정해야 하는 잘못된 JSON 값이 있다는 의미입니다. 작동하는 것으로 알려진 일반적인 수정 방법은 모든 \u0000 문자를 제거하는 것입니다.

다음 단계를 따르세요:

  1. SELECT COUNT(*) FROM <table> WHERE <column> LIKE '%\u0000%'; 를 사용하여 영향을 받는 값을 확인하세요.

  2. 0보다 큰 수가 나오면 해당 값들을 수동으로 확인하고 제거해도 괜찮은지 확인하세요.

  3. UPDATE <table> SET <column> = regexp_replace(<column>, '\\u0000', '', 'g') where <column> like '%\u0000%'; 를 사용하여 제거하세요.

그런 다음 Mattermost를 다시 시작해보세요.

이 릴리스의 지원 중단 목록은 unsupported legacy releases 문서를 참조하세요.

Focalboard 플러그인이 Mattermost Boards로 이름이 변경되었으며, v0.9.1(Mattermost v6.0과 함께 출시)이 이제 기본적으로 활성화됩니다.

고급 로깅 구성 스키마가 변경되었습니다. 이는 5.x 버전과 비교하여 호환성이 깨지는 변경사항입니다. 업데이트된 documentation 을 참조하세요.

“Mattermost”, “Organization”, “Mattermost Dark”, “Windows Dark”를 포함한 기존 테마 이름과 색상이 각각 새로운 “Denim”, “Quartz”, “Indigo”, “Onyx” 테마 이름과 색상으로 업데이트되었습니다. 기존 테마를 사용하는 사용자는 서버나 워크스페이스가 업그레이드된 후 약간 수정된 테마 색상을 보게 됩니다. 기존 “Mattermost”, “Organization”, “Mattermost Dark”, “Windows Dark” 테마의 테마 변수는 our documentation 에서 계속 접근할 수 있으므로, 원하는 경우 이러한 테마 변수를 사용하여 사용자 정의 테마를 만들 수 있습니다. 사용자 정의 테마는 이 변경의 영향을 받지 않습니다.

플러그인에 대한 일부 호환성이 깨지는 변경사항이 포함되어 있습니다:

  • 왼쪽 측면 전용 봇 아이콘 지원이 제거되었습니다.

  • 플러그인 매니페스트에서 더 이상 사용되지 않는 “Backend” 필드가 제거되었습니다.

  • 플러그인 매니페스트의 “Executables” 필드가 맵으로 변환되었습니다.

Mattermost Boards는 실시간 업데이트가 올바르게 표시되도록 EnableReliableWebSockets 설정을 수동으로 true 로 설정해야 합니다.

v5.38.0

“config watcher”(config.json 파일을 자동으로 다시 로드하는 메커니즘)가 제거되고 mmctl config reload 명령어로 대체되었습니다. 디스크에 변경사항을 적용한 후에는 이 명령어를 실행해야 합니다. 이 변경으로 구성 성능과 안정성이 향상되었습니다.

v5.38은 Collapsed Reply Threads(Beta) 도입 이후 스레드와 채널 주변의 잘못된 멘션 수와 읽지 않은 메시지 수에 대한 수정사항을 추가했습니다. 이 수정은 SQL 마이그레이션을 통해 이루어지며, 대규모 데이터베이스의 경우 완료하는 데 몇 분이 걸릴 수 있습니다. fixCRTChannelMembershipCounts 수정은 약 400만 개의 채널 멤버십과 약 130,000개의 채널이 있는 데이터베이스에서 1분 20초가 걸립니다. fixCRTThreadCountsAndUnreads 수정은 56,367개의 스레드, 124,587개의 스레드 멤버십, 220,801개의 채널 멤버십이 있는 데이터베이스에서 약 3분 30초가 걸립니다. 이는 MySQL v5.6.51에서의 결과입니다.

Focalboard v0.8.2(Mattermost v5.38.0과 함께 출시)는 새로운 데이터베이스 연결 시스템으로 인해 Mattermost v5.37 이상이 필요합니다.

v5.37.0

platform 바이너리와 “–platform” 플래그가 제거되었습니다. systemd 파일이나 사용자 정의 스크립트를 통해 Mattermost 서버 애플리케이션을 실행하기 위해 “–platform” 플래그나 platform 바이너리를 직접 사용하고 있다면, mattermost 바이너리만 사용해야 합니다.

Collapsed Reply Threads 가 Mattermost Server v5.37 이상에서 Beta로 제공됩니다. 기능을 안정화하는 동안 버그가 발생할 수 있습니다. 특히 여기에 문서화된 알려진 문제 를 참고하세요.

v5.37은 이모지 표준 v13.0을 지원합니다. 과거에 새로운 시스템 이름 중 하나를 사용하는 사용자 정의 이모지를 추가했다면, 시스템 이모지에 의해 덮어쓰기될 것입니다. 해결 방법은 사용자 정의 이모지 이름을 변경하는 것입니다.

이제 모든 Mattermost 버전에서 Incident Collaboration의 일부 기능을 사용할 수 있습니다. 이 업데이트의 일환으로 Incident Collaboration는 최소 서버 버전 v5.37이 필요합니다. 각 버전에서 사용 가능한 기능에 대한 자세한 내용은 가격 정책 페이지 를 방문하세요.

v5.37.8에서 ThreadAutoFollow 의 기본값이 false 로 변경되었습니다. 이 값이 이미 true 로 설정된 기존 구성에는 영향을 미치지 않습니다.

v5.36.0

Gossip 클러스터링 모드가 이제 정식 출시되었으며 더 이상 옵션으로 사용할 수 없습니다. 모든 클러스터 트래픽은 항상 gossip 프로토콜을 사용합니다. UseExperimentalGossip 설정은 호환성 목적으로만 유지되며 효과가 없습니다. gossip 사용 설정은 시스템 콘솔에서 제거되었습니다.

참고

고가용성 업그레이드의 경우 클러스터의 모든 노드는 단일 프로토콜을 사용해야 합니다. 기존 시스템이 현재 gossip을 사용하지 않는 경우, 클러스터의 다른 노드가 이전 버전을 사용하는 동안 하나의 노드를 업그레이드할 수 없습니다. 고객은 고가용성 업그레이드를 위해 gossip을 사용하거나, 모든 노드를 종료하고 업그레이드를 수행한 후 모든 노드를 다시 시작해야 합니다.

Focalboard를 활성화하려면 사이드바 메뉴에서 Marketplace를 열고 Focalboard 플러그인을 설치한 다음 Configure 를 클릭하고 활성화한 후 저장하세요. NGINX 또는 Apache 웹 프록시 구성을 업데이트하세요.

v5.35.0

Shared Channels와 Collapsed Reply Threads와 같은 새로운 기능에 필요한 백엔드 데이터베이스 아키텍처 도입으로 v5.35 릴리스(2021년 5월 16일)의 마이그레이션 프로세스 성능이 크게 영향을 받았습니다. 데이터베이스의 크기, 유형 및 버전에 따라 평소보다 더 긴 업그레이드 시간이 예상됩니다. 이는 몇 분(평균적인 경우)에서 수 시간(최악의 경우, MySQL 5.x 전용)까지 다양할 수 있습니다. 이 과정에서 데이터베이스 CPU 사용량이 중간에서 상당한 수준으로 급증할 것으로 예상됩니다. 마이그레이션의 성능 영향과 가능한 완화 전략 에 대한 자세한 내용을 확인할 수 있습니다.

대량 사용자 가져오기 과정에서 사용된 기존 비밀번호 생성 로직이 상대적으로 취약했습니다. 따라서 관리자는 대량 가져오기 과정에서 생성되었고 비밀번호가 한 번도 변경되지 않은 모든 사용자의 비밀번호를 즉시 재설정하는 것이 좋습니다.

v5.35.0에서 파일 검색 기능이 새로 도입되었습니다. 과거에 공유된 파일의 검색 결과는 콘텐츠 추출 명령 을 실행하여 데이터베이스에 이미 있는 파일의 콘텐츠를 추출하고 인덱싱할 때까지 불완전할 수 있습니다. Elasticsearch 또는 Bleve 검색 백엔드를 실행하는 인스턴스는 콘텐츠 추출이 완료된 후 대량 인덱싱을 실행해야 합니다. 자세한 내용은 ` 이 블로그 게시물 <https://mattermost.com/blog/file-search/>`_ 을 참조하세요.

v5.34.1

v5.34.1은 v5.34.0으로 업그레이드할 때 MySQL 설치에서 타임아웃을 일으킬 수 있는 마이그레이션 문제를 수정합니다. v5.34.1로 업그레이드하면 v5.32.0에 예정되었던 누락된 마이그레이션도 실행될 수 있습니다. 이러한 추가 작업은 매우 큰 MySQL(버전 5.x) 설치에서 시간이 오래 걸릴 수 있습니다.

  • Posts.FileIds 타입 변경(PostgreSQL 전용)

  • 새로운 열 ThreadMemberships.UnreadMentions 추가

  • 새로운 열 Channels.Shared 추가

  • 새로운 열 Reactions.UpdateAt 추가

  • 새로운 열 Reactions.DeleteAt 추가

v5.33.0

이제 반응 삭제는 Reactions 테이블에서 소프트 삭제로 처리됩니다. 스키마 업데이트가 필요하며 대용량 데이터 세트로 처음 실행할 때 최대 15초가 걸릴 수 있습니다.

HTTP 버전 1.1 미만으로 수행된 WebSocket 핸드셰이크는 경고를 발생시키며, 서버는 WebSocket RFC를 준수하기 위해 버전을 1.1로 투명하게 업그레이드합니다. 이는 proxy_http_version 지시문을 1.1로 설정하지 않는 잘못된 Nginx(및 기타 프록시) 구성을 해결하기 위한 것입니다. 이 기능은 향후 Mattermost 버전에서 제거될 예정이므로 WebSocket 프로토콜을 올바르게 사용하도록 프록시 구성을 수정하는 것이 강력히 권장됩니다.

v5.32.0

ExperimentalChannelOrganization, EnableXToLeaveChannelsFromLHS, CloseUnusedDirectMessages, ExperimentalHideTownSquareinLHS 설정은 새로운 사이드바 경험과 호환되지 않기 때문에 레거시 사이드바(EnableLegacySidebar)가 활성화된 경우에만 작동합니다. 새로운 사이드바가 이제 모든 사용자에게 활성화 되었기 때문에 ExperimentalChannelSidebarOrganization 은 더 이상 사용되지 않습니다.

Golang 클라이언트 API에 호환성이 깨지는 변경사항이 도입되었습니다: GetPostThread, GetPostsForChannel, GetPostsSince, GetPostsAfter, GetPostsBefore, GetPostsAroundLastUnread 는 이제 추가 collapsedThreads 매개변수를 전달해야 합니다. 이러한 함수를 사용하는 모든 클라이언트는 의존성을 업그레이드할 때 이를 업데이트해야 합니다.

Go 버전을 v1.15.5로 업그레이드할 때 호환성이 깨지는 변경사항 이 도입되었습니다. LDAP 서버의 인증서에 Subject Alternative Name(SAN)이 없는 경우 AD/LDAP 동기화로 사용자 로그인이 실패합니다. AD/LDAP 서버에 SAN이 포함된 새 인증서를 생성하면 이 문제가 해결됩니다.

TLS 버전 1.0과 1.1은 브라우저 벤더에 의해 더 이상 사용되지 않습니다. Mattermost 서버 v5.32(2월 16일)부터 이러한 TLS 버전으로 배포된 Mattermost 서버에 연결할 때 mmctl이 오류를 반환합니다. 시스템 관리자는 계속 사용하기 위해 명령에 명시적으로 플래그를 추가해야 합니다. TLS 버전 1.2 이상으로 업그레이드하는 것을 권장합니다.

v5.31.0

모바일 앱 v1.42.0+의 경우, 서버 버전이 v5.30.0으로 보고되는 문제를 5.31.3에서 수정 했기 때문에 최소 서버 버전이 5.31.3으로 설정되었습니다.

v5.29.0

2021년 1분기에 베타로 출시되는 Collapsed Reply Threads 를 지원하기 위해 새로운 구성 설정 ThreadAutoFollow 가 추가되었습니다. 이 설정은 기본적으로 활성화되어 있으며 서버 성능에 영향을 줄 수 있습니다. 서버가 사용자 기반 규모에 맞게 적절히 확장되었는지 확인하기 위해 하드웨어 요구사항 문서 를 검토하는 것이 좋습니다.

재활성화되고 개선된 SAML 라이브러리를 위해 xmlsec1 기반 SAML 라이브러리를 비활성화했습니다.

v5.28.0

서비스가 충돌할 때 이제 콘솔에 스택 트레이스만 덤프하는 대신 coredump를 생성합니다. 이를 통해 디버깅에 도움이 되는 충돌의 전체 정보를 보존할 수 있습니다.

coredump에 대한 자세한 내용은 https://man7.org/linux/man-pages/man5/core.5.html을 참조하세요.

새로운 서버 및 데스크톱 버전에서 사용 가능한 최신 제품 개선 사항에 대해 시스템 관리자와 최종 사용자에게 알리기 위해 제품 내 알림이 도입되었습니다. 제품 내 알림에 대해 자세히 알아보기 및 문서에서 이를 비활성화하는 방법을 확인하세요.

재활성화되고 개선된 SAML 라이브러리를 위해 xmlsec1 기반 SAML 라이브러리를 비활성화했습니다.

v5.27.0

재활성화되고 개선된 SAML 라이브러리를 위해 xmlsec1 기반 SAML 라이브러리를 비활성화했습니다.

v5.26.0

v5.26에서는 Elasticsearch 인덱스를 재생성해야 합니다. 관리자는 Purge indexIndex now 버튼을 사용하여 Elasticsearch를 재인덱싱하여 모든 변경 사항이 인덱스에 포함되도록 해야 합니다. 인덱싱 중에는 검색 기능이 제한될 수 있으므로, 몇 시간이 걸릴 수 있으므로 활동이 거의 없거나 없는 시간에 수행해야 합니다.

ClusterSettings 아래에 EnableExperimentalGossipEncryption 옵션이 추가되었습니다. 이 옵션이 true 로 설정되고 UseExperimentalGossiptrue 인 경우, gossip 프로토콜을 사용하는 클러스터의 모든 통신이 암호화됩니다. 암호화는 기본적으로 AES-256``을 사용하며, 설계상 구성 가능하지 않습니다. 그러나 원하는 경우 ``ClusterEncryptionKey 행에 대해 Systems 테이블에서 수동으로 값을 설정할 수 있습니다. 키는 base64로 변환된 바이트 배열입니다. AES-128, AES-192 또는 AES-256을 선택하려면 16, 24 또는 32바이트여야 합니다.

키를 업데이트하려면 MySQL에서는 UPDATE Systems SET Value='<value>' WHERE Name='ClusterEncryptionKey'; 를, PostgreSQL에서는 UPDATE systems SET value='<value>' WHERE name='ClusterEncryptionKey' 를 실행하면 됩니다.

이 구성 설정의 변경사항이 적용되려면 먼저 전체 클러스터를 종료해야 합니다. 그런 다음 구성 변경을 수행하고 다시 시작해야 합니다. 클러스터에서는 모든 서버가 암호화를 완전히 사용하거나 사용하지 않아야 합니다. 부분적인 사용은 불가능합니다.

SAML 설정 “Use Improved SAML Library (Beta)”가 강제로 비활성화되었습니다.

PostgreSQL은 2020년 2월에 버전 9.4에 대한 장기 지원을 종료 했습니다. PostgreSQL 9.4가 더 이상 지원되지 않기 때문에 v5.26부터 Mattermost는 공식적으로 PostgreSQL 버전 10을 지원합니다. 새로운 설치에는 PostgreSQL 10+가 필요합니다. 현재 ESR을 포함한 이전 Mattermost 버전은 PostgreSQL 9.4와 계속 호환됩니다. PostgreSQL 9.4 및 모든 9.x 버전은 v5.30 릴리스(2020년 12월 16일)에서 완전히 지원 중단되었습니다. PostgreSQL 문서 의 업그레이드 섹션을 참조하세요.

v5.25.0

Active Directory ADFS를 사용한 SAML 설정에서 “Relying Party Trust Identifier” 설정에 대한 일부 잘못된 지침이 수정되었습니다. 설정이 계속 작동하더라도 해당 설정을 수정 하는 것이 좋습니다.

재활성화되고 개선된 SAML 라이브러리를 위해 xmlsec1 기반 SAML 라이브러리를 비활성화했습니다.

v5.24.0

새로운 구성 설정 ExtendSessionLengthWithActivity 는 사용자가 Mattermost 앱에서 활동 중일 때 자동으로 세션을 연장하여 로그인 상태를 유지합니다. 조직의 정책을 준수한다면 사용자 경험을 개선하기 위해 이 설정을 활성화하는 것이 좋습니다. 자세한 내용은 여기 에서 확인하세요.

Enterprise Edition의 mattermost_http_request_duration_seconds 히스토그램 메트릭이 제거되었습니다. 이 정보는 API 핸들러 이름, HTTP 메서드, 응답 코드를 포함하는 mattermost_api_time 에 이미 캡처되어 있습니다.

예를 들어, 평균 호출 지속 시간을 측정하기 위해 rate(mattermost_http_request_duration_seconds_sum{server=~"$var"}[5m]) / rate(mattermost_http_request_duration_seconds_count{server=~"$var"}[5m]) 를 사용하는 경우, 이를 sum(rate(mattermost_api_time_sum{server=~"$var"}[5m])) by (instance) / sum(rate(mattermost_api_time_count{server=~"$var"}[5m])) by (instance) 로 대체해야 합니다.

이모지 반응과 관련된 성능 문제를 수정함에 따라, 데이터베이스에 많은 반응이 있는 환경에서 스키마 업그레이드에 더 많은 시간이 소요되어 업그레이드 성능에 영향을 미쳤습니다. 이러한 환경에서는 사용량이 적은 시간에 스키마 마이그레이션을 수행하고, 가능하면 업그레이드 전에 미리 수행하는 것이 좋습니다. 이 마이그레이션은 Mattermost 서버가 완전히 시작되기 전에 발생하므로, 이 시간 동안 High Availability가 아닌 설치에서는 접근이 불가능합니다.

마이그레이션은 단일 SQL 라인이며, Mattermost 서버 재시작과 분리하기를 원하는 경우 MySQL/PSQL 명령줄 클라이언트를 통해 데이터베이스에 직접 적용할 수 있습니다. 완전히 이전 버전과 호환되므로 스키마 변경을 이전 버전의 Mattermost에 문제 없이 적용할 수 있습니다. 스키마 변경이 실행되는 동안(Reactions 테이블의 백만 행당 약 30초), 최종 사용자가 게시물에 반응하려고 하면 이모지 반응이 최종 사용자에게 로드되지 않습니다.

MySQL: ALTER TABLE Reactions DROP PRIMARY KEY, ADD PRIMARY KEY (PostId, UserId, EmojiName);

PostgreSQL: ALTER TABLE reactions DROP CONSTRAINT reactions_pkey, ADD PRIMARY KEY (PostId, UserId, EmojiName);

모바일 앱에서는 자동완성 드롭다운에서 LDAP 그룹 멘션(E20 기능)을 볼 수 없습니다. 사용자가 LDAP 그룹의 일부인 경우에도 알림은 계속 받게 됩니다. 그러나 그룹 멘션 키워드는 강조 표시되지 않습니다.

“Use Improved SAML Library (Beta)” SAML 설정이 강제로 비활성화되었습니다. 기능적으로 동등한 xmlsec1 유틸리티를 사용하여 SAML을 활성화하려면 https://docs.mattermost.com/onboard/sso-saml.html의 지침을 따르세요.

v5.22.0

이모지 반응과 관련된 성능 문제를 수정함에 따라, 데이터베이스에 많은 반응이 있는 환경에서 스키마 업그레이드에 더 많은 시간이 소요되어 업그레이드 성능에 영향을 미쳤습니다. 이러한 환경에서는 사용량이 적은 시간에 스키마 마이그레이션을 수행하고, 가능하면 업그레이드 전에 미리 수행하는 것이 좋습니다. 이 마이그레이션은 Mattermost 서버가 완전히 시작되기 전에 발생하므로, 이 시간 동안 High Availability가 아닌 설치에서는 접근이 불가능합니다.

마이그레이션은 단일 SQL 라인이며, Mattermost 서버 재시작과 분리하기를 원하는 경우 MySQL/PSQL 명령줄 클라이언트를 통해 데이터베이스에 직접 적용할 수 있습니다. 완전히 이전 버전과 호환되므로 스키마 변경을 이전 버전의 Mattermost에 문제 없이 적용할 수 있습니다. 스키마 변경이 실행되는 동안(Reactions 테이블의 백만 행당 약 30초), 최종 사용자가 게시물에 반응하려고 하면 이모지 반응이 최종 사용자에게 로드되지 않습니다.

MySQL: ALTER TABLE Reactions DROP PRIMARY KEY, ADD PRIMARY KEY (PostId, UserId, EmojiName);

Postgres: ALTER TABLE reactions DROP CONSTRAINT reactions_pkey, ADD PRIMARY KEY (PostId, UserId, EmojiName);

채널 조정 설정 기능은 모바일 앱 버전 v1.30 이상에서 지원됩니다. 이전 버전의 모바일 앱에서는 적절한 권한 없이 게시물을 게시하거나 반응하려는 사용자에게 오류가 표시됩니다.

model.Post 구조의 Props 필드에 직접 접근하는 것은 더 이상 사용되지 않습니다. 이제 사용 가능한 GetProps()SetProps() 메서드를 사용해야 합니다. 또한 model.Post 구조의 직접 복사는 제공된 Clone() 메서드를 사용하는 것이 좋습니다.

“Use Improved SAML Library (Beta)” SAML 설정이 강제로 비활성화되었습니다. 기능적으로 동등한 xmlsec1 유틸리티를 사용하여 SAML을 활성화하려면 https://docs.mattermost.com/onboard/sso-saml.html의 지침을 따르세요.

v5.21.0

KVCompareAndSet, KVCompareAndDelete 및 KVList에서 키 값 만료를 준수합니다. 또한 Postgres에서 플러그인 키 값 경쟁 조건과 삭제된 키의 처리를 개선했습니다.

“Use Improved SAML Library (Beta)” SAML 설정이 강제로 비활성화되었습니다. 기능적으로 동등한 xmlsec1 유틸리티를 사용하여 SAML을 활성화하려면 https://docs.mattermost.com/onboard/sso-saml.html의 지침을 따르세요.

v5.20.0

config.json 에서 활성화되지 않은 pre-packaged plugin 은 더 이상 자동으로 설치되지 않지만, Plugin Marketplace 를 통해 계속 설치할 수 있습니다.

대화형 대화 상자의 부울 요소는 더 이상 문자열로 직렬화되지 않습니다. 호환성 변경을 피하려고 노력하지만, 이 변경은 v5.16에서 도입된 부울 요소로 웹 및 모바일 앱이 모두 작동할 수 있도록 하는 데 필요했습니다.

v5.19.0

LockTeammateNameDisplay 설정은 Team Edition과 Enterprise Edition E10에서 잘못 사용 가능했기 때문에 Enterprise Edition E20으로 이동되었습니다.

v5.18.0

모바일 앱에서 게시물을 읽지 않음으로 표시하려면 v1.26 이상이 필요합니다. v5.18을 사용 중이지만 모바일이 v1.25 이전 버전인 경우, 웹앱/데스크톱에서 게시물을 읽지 않음으로 표시하면 앱이 다음에 시작되거나 전경으로 가져올 때만 모바일에 반영됩니다.

mattermost-server 의 Go 모듈 경로가 Go 모듈 버전 사양을 준수하도록 변경되었습니다. mattermost-server 를 의존성으로 사용하는 Go 모듈 개발자는 이 의존성을 v5.18`로 업그레이드할 때 모듈 및 가져오기 경로를 ``github.com/mattermost/mattermost-server/v5` 로 변경해야 합니다. 자세한 내용은 https://go.dev/blog/v2-go-modules 를 참조하세요.

관련 Websocket 이벤트에서 Team.InviteId 를 제거하고 초대 권한이 없는 사용자를 위한 모든 팀 API 엔드포인트에서 이를 정리했습니다.

PUT /channels/{channel_id} API 엔드포인트를 사용하여 채널 유형을 변경하는 기능이 제거되었습니다. 이 목적을 위해서는 새로운 PUT /channels/{channel_id}/privacy 엔드포인트를 사용해야 합니다.

v5.16.0

Internet Explorer(IE11) 지원이 제거되었습니다. 자세한 내용은 이 포럼 게시물 을 참조하세요.

Mattermost Desktop v4.3.0 릴리스에는 비보안 URL http:// 에서 데스크톱 알림을 보내는 방식이 변경되었습니다. 비보안 Mattermost 서버 http:// 를 사용하는 조직은 Mattermost Desktop v4.3.0 이상을 사용할 때 데스크톱 알림을 계속 받으려면 Mattermost 서버 버전 5.16.0+, 5.15.1, 5.14.4 또는 5.9.5(ESR)로 업데이트해야 합니다.

게스트 계정 을 활성화할 때 사용자 초대 권한이 있는 모든 사용자는 기본적으로 게스트를 초대할 수 있습니다. 시스템 관리자는 시스템 콘솔 > 권한 구성 을 통해 각 역할에서 이 권한을 제거해야 합니다. Mattermost 서버 버전 5.17에서는 시스템 관리자만 게스트 초대 권한을 자동으로 받게 되지만, 데이터베이스 마이그레이션 프로세스로 인해 이 수정사항은 5.16에 적용되지 않습니다.

v5.14.0

웹훅은 이제 사용자가 웹훅 생성자이거나 시스템 관리자인 경우에만 표시됩니다.

Google+에서 Google People로 업데이트됨에 따라 시스템 관리자는 업데이트된 문서 에 따라 GoogleSettings.Scope config.json 설정이 profile email 로 설정되어 있고 UserAPIEndpoint 설정이 https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses,nicknames,metadata 로 설정되어 있는지 확인해야 합니다.

v5.12.0

플러그인이 DeleteEphemeralMessage 플러그인 API를 사용하는 경우 postId string 매개변수를 허용하도록 업데이트하세요. 자세한 내용은 문서 를 참조하세요.

시스템 콘솔 > 링크 미리보기 활성화 가 활성화되어 있지 않으면 이미지 링크와 YouTube 미리보기가 표시되지 않습니다. Mattermost 서버가 인터넷에 연결되어 있고 미리보기가 표시될 것으로 예상되는 웹사이트에 네트워크 액세스 권한이 있는지 확인하세요. 자세한 내용은 여기 를 참조하세요.

ExperimentalEnablePostMetadata 설정이 제거되었습니다. 게시물 차원을 포함한 게시물 메타데이터는 이제 채널에서 콘텐츠가 로드될 때 스크롤 위치를 수정하고 스크롤 점프를 제거하기 위해 데이터베이스에 저장됩니다.

그룹 동기화를 통한 팀/채널 관리 강제 적용 기능이 추가되었습니다. 그룹 동기화가 활성화된 경우 업그레이드 시 모든 팀 및 채널 관리자 지정이 손실됩니다. 업그레이드 전에 팀 및 채널 관리자를 해당 팀 및 채널에 해당하는 관리자별 LDAP 그룹에 추가하는 것이 좋습니다. 업그레이드 후에는 해당 그룹을 팀 또는 채널 관리자 역할과 역할 동기화해야 합니다.

v5.11.0

통합에서 Props 를 지우기 위해 Update.Props == nil 을 사용하는 경우 5.11+에서는 더 이상 작동하지 않습니다. 대신 Update.Props == {} 를 사용하여 속성을 지우세요.

이 변경은 Update.Props == nil 이 프로필 사진과 같은 모든 Props 를 보존하는 대신 의도치 않게 지웠기 때문에 이루어졌습니다.

v5.10.0

config.json의 SupportedTimezonesPath 설정과 timezones.json 파일을 기반으로 한 UI의 시간대 변경이 제거되었습니다. 이는 데이터베이스에 구성 저장 을 지원하기 위해 이루어졌습니다.

v5.9.0

config.jsonDisableLegacyMfa 설정이 true 로 설정되어 있고 다중 인증 이 활성화된 경우 사용자가 모바일 앱 버전 1.17 이상으로 업그레이드했는지 확인하세요. 그렇지 않으면 MFA가 활성화된 사용자가 성공적으로 로그인하지 못할 수 있습니다.

config.json 파일에 설정이 정의되어 있지 않은 경우, 호환성 문제를 방지하기 위해 DisableLegacyMfa 설정은 기본적으로 false 로 설정됩니다.

보안 강화를 위해 DisableLegacyMfatrue 로 설정하는 것을 권장합니다.

Mattermost 애플리케이션 서버의 공용 IP는 Open Graph 메타데이터, 웹훅 또는 슬래시 명령과 같은 신뢰할 수 없는 외부 요청의 맥락에서 추가 보안 강화를 위한 예약된 IP로 간주됩니다. 자세한 내용은 문서 를 참조하세요.

v5.8.0

로컬 이미지 프록시가 추가되었으며, 클라이언트 내에 표시되는 이미지는 이제 AllowUntrustedInternalConnections 설정의 영향을 받습니다. 이미지 로딩에 문제가 있는 경우 자세한 내용은 문서 를 참조하세요.

v5.6.0

내장 WebRTC가 제거되었습니다. 자세한 내용은 여기 를 참조하세요.

config.jsonEnablePublicChannelsMaterialization 설정이 false 로 설정된 경우, 채널 전환기(CTRL/CMD+K), 채널 자동완성(~) 및 UI의 다른 곳에서 채널 검색 성능을 향상시키기 위해 공개 채널의 구체화된 테이블을 동기화하기 위해 업그레이드 전 오프라인 마이그레이션이 필요할 수 있습니다. 다음 단계를 사용하세요:

  1. 애플리케이션 서버를 종료하세요.

  2. Mattermost 데이터베이스에 연결하세요.

  3. 다음 쿼리를 실행하세요:

DELETE FROM PublicChannels;
INSERT INTO PublicChannels
    (Id, DeleteAt, TeamId, DisplayName, Name, Header, Purpose)
SELECT
    c.Id, c.DeleteAt, c.TeamId, c.DisplayName, c.Name, c.Header, c.Purpose
FROM
    Channels c
WHERE
    c.Type = 'O';

위의 쿼리는 권한이 있는 Channels 테이블을 수정하지 않고 구체화된 PublicChannels 테이블을 다시 빌드합니다.

참고

실험적인 PublicChannels 기능이 비활성화되지 않았다면 이 마이그레이션은 필요하지 않습니다. 이 기능은 Mattermost v5.4에서 문제가 발생할 경우 비활성화할 수 있는 임시 플래그와 함께 출시되었지만, 그렇게 할 필요가 없었습니다. 이 설정을 수정하지 않았다면 이 마이그레이션을 수행할 필요가 없습니다.

v5.4.0

Mattermost 모바일 앱 버전 1.13 이상이 필요합니다. 이전 모바일 앱 버전에서는 파일 업로드가 실패합니다.

특정 업그레이드 시나리오에서 일반 아래의 사용자 및 팀 에 있는 새로운 팀 관리자가 다른 사람의 게시물을 편집할 수 있도록 허용 설정이 True 로 설정될 수 있으며, Mattermost 5.1 이전 버전과 새로운 5.4+ 설치의 기본값은 False 입니다.

v5.3.0

Elasticsearch가 활성화된 서버에서는 해시태그 검색이 대소문자를 구분합니다.

v5.2.0

v4.1 - v4.4에서 v5.2 이상으로 직접 업그레이드하고 Jira가 활성화된 서버는 업그레이드 후 Jira 플러그인을 다시 활성화해야 합니다.

v5.1.0

mattermost export CLI 명령어가 mattermost export schedule 로 이름이 변경되었습니다. 이 명령어를 사용하는 경우 스크립트를 업데이트하세요.

v5.0.0

모든 API v3 엔드포인트가 제거되었습니다. 통합 기능을 API v4로 마이그레이션하는 방법은 문서 를 참조하세요.

더 명확한 설치 및 업그레이드 경험을 위해 platform 바이너리가 mattermost 로 이름이 변경되었습니다. systemd 서비스 파일을 새로운 mattermost 바이너리를 가리키도록 해야 합니다. 대량 로딩 도구와 개발자 도구를 포함한 모든 명령줄 도구도 platform 에서 mattermost 로 이름이 변경되었습니다.

계정 설정 > 알림 > 데스크톱 알림 에서 데스크톱 알림 지속 시간을 구성하는 Mattermost 사용자 설정이 제거되었습니다.

GET 요청을 받도록 구성된 슬래시 명령어는 요청 본문 대신 쿼리 문자열에 페이로드가 인코딩됩니다. 이는 표준 HTTP 요청과 일치합니다. 가능성은 낮지만, GET 요청을 잘못 사용하는 사용자 정의 슬래시 명령어가 작동하지 않을 수 있습니다.

자동 링크를 위한 프로토콜 유형을 허용 목록에 추가하는 새로운 config.json 설정이 추가됩니다. Mattermost에서 사용자 정의 프로토콜 자동 링크를 사용하는 경우 업그레이드 전에 config.json 에서 이를 허용 목록에 추가하세요.

permanent APIv4 delete team 매개변수 <https://api.mattermost.com/#tag/teams%2Fpaths%2F~1teams~1%7Bteam_id%7D%2Fput>`__ 를 비활성화하는 새로운 config.json 설정이 추가됩니다. GitLab Omnibus에 배포된 것을 제외한 모든 새 설치 및 기존 설치에서 이 설정은 기본적으로 꺼져 있습니다. APIv4 매개변수를 사용하는 경우 업그레이드 전에 config.json 에서 이 설정을 활성화하세요.

사용되지 않는 ExtraUpdateAt 필드가 채널 모달에서 제거됩니다.

이 릴리스는 기본값인 4000자보다 긴 게시물 메시지를 지원하지만 수동 데이터베이스 마이그레이션이 필요할 수 있습니다. 이 마이그레이션은 완전히 선택 사항이며, 16383자까지의 게시물 메시지를 활성화하려는 경우에만 필요합니다. 대부분의 설치에서는 마이그레이션이 필요하지 않거나 기존 제한이 충분합니다.

5.0.0으로 업그레이드한 후 현재 게시물 제한을 확인하려면 시작 시 로그 메시지를 확인하세요:

[2018/03/27 09:08:00 EDT] [INFO] Post.Message는 최대 16383자(65535바이트)를 지원합니다

5.0.0부터 최대 게시물 메시지 크기는 16383(멀티바이트) 문자입니다. 로그에 이 제한보다 작은 숫자가 표시되고 더 긴 게시물 메시지를 활성화하려면 아래에 설명된 대로 데이터베이스를 수동으로 마이그레이션해야 합니다. 이 마이그레이션은 더 큰 Posts 테이블의 경우 느릴 수 있으므로 피크 시간 외에 이 업그레이드를 예약하는 것이 좋습니다.

MySQL 데이터베이스를 마이그레이션하려면 데이터베이스에 연결하고 다음을 실행하세요:

ALTER TABLE Posts MODIFY COLUMN Message TEXT;

PostgreSQL 데이터베이스를 마이그레이션하려면 데이터베이스에 연결하고 다음을 실행하세요:

ALTER TABLE Posts ALTER COLUMN Message TYPE VARCHAR(65535);

Mattermost 인스턴스를 재시작하세요.

Enterprise E20 배포에서는 Team Override Schemes 를 사용하기 전에 config.json 에서 RunJobs 를 활성화하고 권한 마이그레이션이 완료되도록 해야 합니다.

v4.10.0

팀을 링크를 통해 다시 참여할 수 있었던 버그 수정으로 인해 이전 이메일 초대 링크가 더 이상 작동하지 않습니다. 팀 초대 링크 대화상자에서 복사한 팀 초대 링크, 비밀번호 재설정 링크 및 이메일 확인 링크는 영향을 받지 않으며 여전히 유효합니다.

System Console > LogsSystem Console > Logging > File Log Directory 에 지정된 mattermost.log 파일에 기록되는 서버 로그는 이제 JSON 형식을 사용합니다. 서버 로그를 구문 분석하여 외부 시스템으로 전송하는 도구를 구축한 경우 JSON 형식을 지원하는지 확인하세요.

팀 사이드바에서 투명한 팀 아이콘은 흰색 배경으로 채워집니다.

SAML 인증이 활성화된 서버는 피크 시간이 아닌 시간에 업그레이드해야 합니다. 로그인 문제를 방지하기 위해 SAML 이메일 주소가 소문자로 마이그레이션되며, 이로 인해 평소보다 업그레이드 시간이 더 오래 걸릴 수 있습니다.

PostgreSQL 데이터베이스를 사용하고 비밀번호에 특수 문자(예: [])가 포함된 경우 비밀번호에서 이스케이프해야 합니다. 예를 들어, xxx[]xxx는 xxx%5B%5Dxxx가 됩니다.

v4.9.0

Docker와 함께 Mattermost의 프로덕션 사용을 개선하기 위해 Docker 이미지는 이제 비루트 사용자로 실행되며 포트 8000에서 수신 대기합니다. 기존 설치의 중요한 변경 사항에 대해서는 업그레이드 지침 을 참조하세요.

여러 구성 설정이 데이터베이스의 역할로 마이그레이션되었으며 config.json 값을 변경해도 더 이상 효과가 없습니다. 이러한 권한은 이전과 같이 각각의 System Console 설정을 통해 수정할 수 있습니다. 영향을 받는 config.json 설정은 다음과 같습니다:

  • RestrictPublicChannelManagement,

  • RestrictPrivateChannelManagement,

  • RestrictPublicChannelCreation,

  • RestrictPrivateChannelCreation,

  • RestrictPublicChannelDeletion,

  • RestrictPrivateChannelDeletion,

  • RestrictPrivateChannelManageMembers,

  • EnableTeamCreation,

  • EnableOnlyAdminIntegrations,

  • RestrictPostDelete,

  • AllowEditPost,

  • RestrictTeamInvite,

  • RestrictCustomEmojiCreation.

역할 기반 권한 시스템으로의 마이그레이션을 위해 config.json 설정 PostEditTimeLimit``의 동작이 업데이트되었습니다. 게시물 편집이 허용된 경우, ``"PostEditTimeLimit": -1 로 설정하여 언제든지 편집을 허용하거나, "PostEditTimeLimit" 을 양의 정수로 설정하여 편집 시간을 초 단위로 제한할 수 있습니다. 게시물 편집이 비활성화된 경우 이 설정은 적용되지 않습니다.

프록시 서버 없이 Let’s Encrypt를 사용하는 경우, Forward80To443 config.json 설정이 true 로 설정되지 않으면 서버가 오류 메시지와 함께 시작되지 않습니다.

포트 80을 443으로 전달하는 경우, ListenAddress config.json 설정이 포트 443에서 수신하도록 설정되지 않으면 서버가 오류 메시지와 함께 시작되지 않습니다.

v4.6.2

프록시 서버 없이 Let’s Encrypt를 사용하는 경우, Let’s Encrypt 인증을 완료하기 위해 방화벽을 통해 포트 80을 전달하고 Forward80To443 config.json 설정을 true 로 설정하세요.

v4.4.0

Posts 테이블에 복합 데이터베이스 인덱스가 추가되었습니다. 이로 인해 백만 개 이상의 메시지가 있는 서버의 업그레이드 시간이 더 길어질 수 있습니다.

LDAP 동기화가 이제 이메일에 의존합니다. AD/LDAP 서버의 모든 사용자가 이메일 주소를 가지고 있거나 Mattermost에서 계정이 비활성화되어 있는지 확인하세요.

v4.2.0

Mattermost는 이제 일반 텍스트 콘텐츠 유형을 포함한 여러 콘텐츠 유형을 처리합니다. 통합이 생성된 메시지를 렌더링하는 대신 JSON 페이로드 데이터를 갑자기 출력하는 경우, 이전 동작을 유지하기 위해 통합이 application/json 콘텐츠 유형을 반환하는지 확인하세요.

기본적으로 Open Graph 메타데이터, 웹훅 또는 슬래시 명령에 사용되는 사용자 제공 URL은 내부 네트워크에 사용되는 루프백 또는 링크 로컬 주소를 포함한 예약된 IP 주소에 연결할 수 없습니다.

이 변경으로 인해 테스트 환경에서 http://127.0.0.1:1021/my-command와 같은 URL을 가리키는 개인 통합이 중단될 수 있습니다.

개인 통합을 이러한 URL로 가리키는 경우, 로컬 환경에서 AllowedUntrustedInternalConnections config setting 설정을 통해 이러한 도메인, IP 주소 또는 CIDR 표기법을 화이트리스트에 추가할 수 있습니다. 권장되지는 않지만 프로덕션 환경에서도 주소를 화이트리스트에 추가할 수 있습니다. 자세한 내용은 documentation to learn more 를 참조하세요.

푸시 알림, OAuth 2.0 및 WebRTC 서버 URL은 신뢰할 수 있으며 이 설정의 영향을 받지 않습니다.

업로드된 파일 첨부 파일은 이제 일별로 그룹화되어 파일 스토리지 시스템의 /data/<date-of-upload-as-YYYYMMDD>/teams/... 에 저장됩니다.

Mattermost /platform 저장소가 /mattermost-webapp/mattermost-server 로 분리되었습니다. /platform 저장소의 개인 포크가 있는 경우 영향을 받을 수 있습니다. 자세한 내용은 여기 를 참조하세요.

v4.0.0

(고가용성 전용)

기존 config.jsonClusterSettings 섹션에 새 항목을 수동으로 추가해야 합니다.

v3.9.0

보안 변경으로 인해 이전 이메일 초대 링크, 비밀번호 재설정 링크 및 이메일 인증 링크가 더 이상 작동하지 않습니다. 팀 초대 링크 대화상자에서 복사한 팀 초대 링크는 영향을 받지 않으며 여전히 유효합니다.

v3.8.0

프록시 구성에 변경이 필요합니다. NGINX를 사용하는 경우:

  1. root 권한으로 NGINX 구성 파일을 엽니다. 파일은 일반적으로 /etc/nginx/sites-available/mattermost 이지만 시스템에 따라 다를 수 있습니다.

  2. location /api/v3/users/websocket { 줄을 찾습니다.

  3. 해당 줄을 location ~ /api/v[0-9]+/(users/)?websocket$ { 로 교체합니다.

NGINX 이외의 프록시를 사용하는 경우 해당 프록시의 구성에 동일한 변경을 적용하세요.

보안 관련 변경으로 인해 시스템 콘솔의 설정을 확인해야 합니다.

  1. 시스템 콘솔의 GENERAL 섹션으로 이동합니다.

  2. Logging 을 클릭합니다.

  3. File Log Directory 필드가 비어 있거나 디렉토리 경로만 포함되어 있는지 확인하세요. 경로에 파일 이름이 포함되어 있으면 안 됩니다.

이전 CLI 도구와의 하위 호환성이 제거되었습니다. 이전 CLI에 의존하는 스크립트가 있는 경우 new CLI 를 사용하도록 수정해야 합니다.

v3.6.0

열 수 있는 최대 파일 수를 업데이트합니다.

RHEL6 및 Ubuntu 14.04에서:
  • /etc/init/mattermost.conf 파일에 limit nofile 50000 50000 줄이 포함되어 있는지 확인합니다.

RHEL7 및 Ubuntu 16.04에서:
  • /etc/systemd/system/mattermost.service 파일에 LimitNOFILE=49152 줄이 포함되어 있는지 확인합니다.

(Enterprise 전용)

Public 및 Private 채널 관리를 제한하는 이전 config.json 값이 Public 및 Private 채널 생성 및 삭제를 제한하는 새로운 설정의 기본값으로 사용됩니다.

v3.4.0

공개 링크가 활성화된 경우 기존 공개 링크는 더 이상 유효하지 않습니다. 이는 이전 버전에서 Public Link Salt가 재생성될 때 기존 공개 링크가 무효화되지 않았기 때문입니다. 이러한 링크를 게시한 모든 위치를 업데이트해야 합니다.