
Mattermost 팀 에디션의 10,000개 메시지 제한, 이제 무료 버전의 종말인가?
Mattermost 팀 에디션에 갑작스럽게 도입된 10,000개 메시지 제한 정책의 배경과 기술적 변화, 그리고 실무적인 대응 방안을 8년차 개발자의 시선에서 정리합니다.
김영태
테크리드

안녕하세요, 8년차 백엔드 개발자 김테크입니다.
오늘은 오픈소스 협업 도구의 대명사였던 Mattermost(매터모스트)에 대해 조금 무거운 이야기를 해보려고 합니다. 최근 제 주변 개발자 커뮤니티와 GitHub 이슈 트래커가 이 주제로 아주 뜨겁습니다. 바로 Mattermost Team Edition(무료 버전)에 갑작스럽게 적용된 메시지 조회 제한 정책 때문입니다.
우리가 슬랙(Slack)의 훌륭한 대안으로, 혹은 내부망 구축이 필요한 환경에서 '가성비 끝판왕'으로 써왔던 그 매터모스트가 맞나 싶을 정도로 당황스러운 소식인데요. 이슈의 내용을 살펴보고, 우리가 어떻게 대응해야 할지 실무자의 관점에서 정리해 보겠습니다.
갑자기 사라진 메시지들, 무슨 일이 벌어진 걸까요?
사건의 발단은 GitHub의 Mattermost 저장소에 올라온 하나의 이슈 제보였습니다. 독일의 한 학교에서 시스템을 관리하는 분이 올린 글이었는데, 상황은 이렇습니다.
"업그레이드 이후 갑자기 '10,000 메시지 제한에 도달했습니다'라는 경고가 떴습니다. 2025년 9월 26일 이전의 메시지들은 숨겨졌고 더 이상 접근할 수 없다고 나오네요. 우리 학교는 사용자만 2000명이 넘고 게시물은 47만 개가 넘는데, 이게 무슨 일입니까?"
이 내용을 보자마자 등골이 서늘해지더군요. 보통 이런 제한은 SaaS(서비스형 소프트웨어)인 슬랙의 무료 플랜에서나 보던 것입니다. 하지만 Mattermost Team Edition은 우리가 직접 서버에 설치해서 쓰는(Self-hosted) 방식입니다. 내 서버, 내 DB에 데이터가 고스란히 저장되어 있는데 소프트웨어단에서 조회를 막아버린다는 것은 꽤 충격적인 정책 변경입니다.
기술적으로 무엇이 변했나?
Mattermost는 크게 무료인 Team Edition과 유료인 Enterprise Edition으로 나뉩니다. 지금까지 Team Edition은 기능상의 제약(LDAP 연동 불가, 상세 권한 설정 불가 등)은 있었지만, 데이터의 양에 대한 제한은 없었습니다.
하지만 최근 버전 업데이트(v10 또는 v11으로 추정되는 시점)를 통해 비즈니스 모델을 강화하려는 움직임이 포착되었습니다.
하드 리미트 적용: 데이터베이스에는 여전히 데이터가 존재하지만, 애플리케이션 레벨에서 최근 10,000개 메시지만 보여주도록 쿼리나 로직을 수정한 것으로 보입니다.
접근 차단: 기준 날짜 혹은 개수를 초과한 과거 데이터에 대해 API 호출 시 블라인드 처리를 하거나 조회를 막습니다.
라이선스 유도: "액세스를 복원하려면 업그레이드하세요"라는 문구를 통해 유료 플랜 전환을 강력하게 압박합니다.
개발자 입장에서 추측해보자면, 아마 백엔드 로직에서 메시지를 가져오는 서비스 계층에 다음과 유사한 카운트 체크 로직이 들어갔을 겁니다.
// (가상의 예시 코드입니다)
func (a *App) GetPosts(channelId string, offset int, limit int) (*model.PostList, *model.AppError) {
// 1. 현재 라이선스 체크
license := a.Srv().License()
// 2. 무료 버전(Team Edition)이고 총 메시지 수가 10,000개를 넘는지 확인
if license == nil && a.TotalPostCount() > 10000 {
// 3. 요청한 데이터가 허용된 범위를 벗어나면 에러 반환 또는 빈 데이터 리턴
if isOldData(offset) {
return nil, model.NewAppError("GetPosts", "limit_reached", nil, "Please upgrade license", http.StatusForbidden)
}
}
// ... 기존 로직 실행
return a.Srv().Store.Post().GetPosts(channelId, offset, limit, true)
}내 서버의 디스크 용량을 내가 쓰는데, 소프트웨어가 "너 너무 많이 썼어, 돈 내"라고 하는 상황인 셈이죠.
왜 이런 결정을 내렸을까?
기업 입장에서 생각해보면 이해가 안 가는 것은 아닙니다. 오픈소스 프로젝트를 유지보수하고 개발하는 데는 막대한 비용이 듭니다. Docker가 데스크탑 버전을 유료화하고, ElasticSearch가 라이선스 정책을 변경했던 것처럼, Mattermost도 수익성을 확보해야 생존할 수 있습니다.
특히 2,000명이 사용하는 학교나 대규모 조직에서 무료 버전만 계속 사용한다면, Mattermost 입장에서는 "헤비 유저인데 돈은 한 푼도 안 내는 고객"으로 보일 수밖에 없었을 겁니다. 하지만 설치형 소프트웨어의 가장 큰 장점이었던 '데이터 주권'을 건드린 방식은 커뮤니티의 거센 반발을 불러올 수밖에 없습니다.
우리는 어떻게 대응해야 할까?
지금 당장 Mattermost를 운영 중인 팀이나 회사라면 발등에 불이 떨어진 상황일 수 있습니다. 몇 가지 현실적인 대응 방안을 정리해 봤습니다.
1. 업데이트 보류 (가장 시급한 조치)
아직 문제가 되는 버전으로 업그레이드하지 않으셨다면, 당분간 업데이트를 멈추세요. 보안 패치가 아쉽긴 하지만, 데이터 접근이 막히는 것보다는 낫습니다. 릴리즈 노트를 꼼꼼히 확인하고, 해당 제한이 적용되지 않은 마지막 안정 버전을 유지하는 것이 좋습니다.
2. 유료 플랜 전환 검토
가장 깔끔한 해결책은 비용을 지불하는 것입니다. 만약 회사의 규모가 있고 Mattermost가 업무에 필수적이라면, 비용을 투자하여 정식 라이선스를 구매하는 것이 안정성 측면에서 가장 유리합니다.
3. 데이터 백업 및 마이그레이션 준비
만약 예산이 없거나 유료화 정책에 동의할 수 없다면, 다른 대안을 찾아야 합니다.
Rocket.Chat: Mattermost의 강력한 경쟁자이며 여전히 설치형 오픈소스 버전이 강력합니다.
Zulip: 스레드 중심의 독특한 오픈소스 협업 도구입니다.
이때 가장 중요한 것은 데이터 백업입니다. mmctl 도구를 사용하거나 DB 덤프를 통해 주기적으로 데이터를 백업해 두세요. 나중에 제한이 걸리더라도 원본 데이터가 있으면 다른 도구로 마이그레이션할 수 있습니다.
# PostgreSQL 덤프 예시
pg_dump -U mmuser -h localhost -d mattermost > mattermost_backup_2025.sql4. 오픈소스 포크(Fork) 버전 주시
오픈소스 생태계는 자정 작용이 있습니다. 과거에도 기업 주도 오픈소스가 폐쇄적으로 변하면, 커뮤니티가 이를 포크하여 새로운 프로젝트를 시작하곤 했습니다. (예: Hudson -> Jenkins, MySQL -> MariaDB). Mattermost의 이번 정책에 반발하여 제한을 푼 포크 버전이 등장할 가능성도 있으니 GitHub 커뮤니티의 동향을 주시할 필요가 있습니다.
마치며
오픈소스는 '공짜'가 아니라 '자유'를 의미한다는 말이 있습니다. 하지만 그 자유를 누리기 위해서는 때로는 비용을 지불해야 하고, 때로는 기술적인 불편함을 감수해야 합니다.
이번 Mattermost의 정책 변경은 설치형 협업 도구 시장에 큰 파장을 일으킬 것으로 보입니다. 개발자로서, 그리고 인프라 관리자로서 우리 조직의 커뮤니케이션 도구가 특정 벤더의 정책에 휘둘리지 않도록 미리미리 대안을 고민해봐야 할 시점입니다.
여러분의 팀은 어떤 도구를 사용하고 계신가요? 혹시 Mattermost 업데이트 후 비슷한 문제를 겪으셨다면 댓글로 경험을 공유해 주세요. 함께 머리를 맞대고 해결책을 찾아봅시다.
지금까지 김테크였습니다. 감사합니다.


