안녕하세요.
오늘은 Slack의 무료 대안 서비스인 Mattermost를 자체 호스팅으로 구축하는 방법을 알려드리겠습니다.
비대면 협업이 일상화되면서 슬랙(Slack), 마이크로소프트 팀즈(Microsoft Teams)와 같은 서비스는 필수적인 도구가 되었습니다. 하지만 구독료 부담, 데이터 주권 문제 그리고 특정 기능의 제한은 많은 개발팀에게 고민거리가 됩니다. 특히 민감한 프로젝트를 다루거나 자체 서버에서 모든 데이터를 관리하려는 팀에게는 더욱 그렇습니다.

Slack vs Mattermost
Slack은 뛰어난 사용자 경험과 풍부한 통합 기능을 제공하며 많은 팀의 사랑을 받았습니다. 하지만 무료 플랜의 메시지 기록 제한, 유료 플랜의 높은 비용 그리고 서드파티 서버에 데이터가 저장되는 방식은 일부 기업들에게 부담으로 작용합니다. 특히 스타트업이나 중소기업 혹은 보안 규제가 엄격한 기업이라면 더욱 민감하게 반응할 수 있습니다. Mattermost는 이러한 Slack의 단점을 보완하며 등장한 오픈소스 대안입니다. Slack과 유사한 인터페이스를 제공하면서도, 자체 서버에 직접 설치하여 모든 데이터를 통제할 수 있다는 강력한 장점을 가집니다. 이는 데이터 보안, 개인정보보호 그리고 규제 준수 측면에서 큰 이점을 제공합니다. 또한, 오픈소스이기 때문에 유연한 커스터마이징과 무한한 확장 가능성을 가집니다.
Mattermost 핵심 장점
Mattermost가 단순한 Slack의 복제본이 아닌 독자적인 강점을 가진 대안인 이유는 다음과 같습니다.
강력한 보안과 데이터 주권
Mattermost는 자체 호스팅이 가능하여 모든 메시지, 파일, 사용자 데이터가 여러분의 서버에 저장됩니다
✅ 민감한 정보 관리
내부 정보를 외부 클라우드에 두는 위험을 피할 수 있습니다.
✅ 규제 준수
국내외 다양한 데이터 관련 규제(GDPR, 국내 개인정보보호법 등)를 준수하는 데 용이합니다.
✅ 완전한 통제권
데이터 접근, 백업, 복구 등 모든 측면에서 여러분이 직접 통제할 수 있습니다.
유연한 커스터마이징과 확장성
Mattermost는 오픈소스 기반으로 팀의 특정 요구사항에 맞춰 자유롭게 기능을 추가하거나 수정할 수 있습니다.
✅ API 및 플러그인
REST API와 웹훅을 통해 다른 사내 시스템(CI/CD, 모니터링 툴, 고객 지원 시스템 등)과 손쉽게 연동할 수 있습니다.
✅ 맞춤형 개발
필요하다면 자체 개발 봇을 만들거나 Mattermost 플러그인 프레임워크를 활용하여 새로운 기능을 구현할 수 있습니다.
합리적인 비용 효율성
자체 호스팅 시 초기 서버 비용 외에 별도의 사용자당 구독료가 발생하지 않습니다. 팀이 성장함에 따라 사용자 수가 늘어나더라도 비용 부담이 비례하여 증가하지 않으므로 장기적으로 매우 경제적입니다. 엔터프라이즈 기능이 필요한 경우 유료 플랜을 고려할 수 있지만 기본 Mattermost는 대부분의 무료로도 충분합니다.
익숙한 UI/UX와 강력한 기능
Mattermost는 Slack 사용자에게 매우 익숙한 인터페이스를 제공합니다. 채널 기반의 대화, 다이렉트 메시지, 파일 공유, 검색 기능 등 기본적인 협업 기능은 물론, 음성/화상 통화(플러그인 연동), 사용자 정의 이모지, 마크다운 지원 등 다양한 고급 기능을 지원합니다. 팀원들이 빠르게 적응하고 생산성을 유지할 수 있습니다.

Mattermosst 설치
✅ arm64는 아래의 이미지를 사용하세요 (amd64 포함)
Enterprise: ghcr.io/supersunho/docker-mattermost/mattermost:v10.8.1-enterprise
Team: ghcr.io/supersunho/docker-mattermost/mattermost:v10.8.1-team
Latest Enterprise: ghcr.io/supersunho/docker-mattermost/mattermost:latest-enterprise
Latest Team: ghcr.io/supersunho/docker-mattermost/mattermost:latest-team
'./data', './config', './logs', './plugins', './client' 디렉토리는 직접 chown -R 2000:2000 <디렉토리명>으로 소유권을 지정해주셔야 합니다.
version: '3.8'
services:
app:
image: ghcr.io/supersunho/docker-mattermost/mattermost:v10.8.1-team
container_name: mattermost-app
restart: unless-stopped
ports:
- "8065:8065" # Mattermost 웹 인터페이스 포트
volumes:
- ./data:/mattermost/data:rw # 사용자 파일, 이미지 등
- ./config:/mattermost/config:rw # Mattermost 설정 파일
- ./logs:/mattermost/logs:rw # Mattermost 로그
- ./plugins:/mattermost/plugins:rw # Mattermost 플러그인
- ./client/plugins:/mattermost/client/plugins:rw # 클라이언트 플러그인
environment:
# 데이터베이스 설정
- MM_SQLSETTINGS_DRIVERNAME=postgres
- MM_SQLSETTINGS_DATASOURCE=postgres://mmuser:mm_password@db:5432/mattermost?sslmode=disable
- MM_SQLSETTINGS_MAXIDLECONNS=10
- MM_SQLSETTINGS_MAXOPENCONNS=10
depends_on:
- db
networks:
- mattermost-bridge
db:
image: postgres:15.6-alpine
container_name: mattermost-db
restart: unless-stopped
volumes:
- ./db_data:/var/lib/postgresql/data:rw # DB 데이터 영구 저장
environment:
- POSTGRES_USER=mmuser
- POSTGRES_PASSWORD=mm_password # 보안을 위해 강력한 비밀번호로 변경하세요!
- POSTGRES_DB=mattermost
networks:
- mattermost-bridge
networks:
mattermost-bridge:
driver: bridge
이제 웹 브라우저를 열고 http://<서버IP주소>:8065로 접속합니다. 초기 설정 마법사가 나타나면 다음 단계를 따라 관리자 계정을 생성합니다.
✅ 관리자 계정 생성
이메일, 사용자 이름, 비밀번호를 입력하여 첫 관리자 계정을 만듭니다.
✅ 팀 생성
팀 이름을 입력하고 URL을 설정합니다.
✅ 시스템 콘솔
관리자 계정으로 로그인 후 '시스템 콘솔'에 접속하여 Mattermost의 전반적인 설정을 관리할 수 있습니다. (예: 이메일 서버 설정, 인증 방식, 보안 설정 등).
Mattermost 운영 및 관리 팁
백업 및 복구 전략
데이터 손실은 치명적이기 때문에 정기적인 백업은 필수입니다. Mattermost는 크게 두 가지 데이터를 관리합니다.
데이터베이스 데이터
PostgreSQL 컨테이너 내의 데이터입니다.
Mattermost 파일 데이터
사용자 업로드 파일, 프로필 이미지 등 './data' 볼륨에 저장된 파일들입니다.
백업 스크립트 예시 (cron을 활용한 자동화)
이 스크립트를 주기적으로 실행하도록 크론탭(crontab)에 등록하세요.
#!/bin/bash
# 백업 파일이 저장될 디렉토리 (Mattermost 설치 디렉토리 밖에 생성 권장)
BACKUP_DIR="/path/to/mattermost_backups"
DATE=$(date +%Y%m%d%H%M%S)
# DB 백업 (Mattermost 설치 디렉토리에서 실행)
docker compose exec -T db pg_dump -U mmuser -d mattermost > ${BACKUP_DIR}/mattermost_db_backup_${DATE}.sql
# 파일 시스템 백업 (Mattermost data 볼륨 디렉토리 압축)
tar -czvf ${BACKUP_DIR}/mattermost_files_backup_${DATE}.tar.gz ./data
# 오래된 백업 파일 삭제 (예: 7일 이전 파일 삭제)
find ${BACKUP_DIR} -type f -name "mattermost_*.sql" -mtime +7 -exec rm {} \;
find ${BACKUP_DIR} -type f -name "mattermost_*.tar.gz" -mtime +7 -exec rm {} \;
echo "Mattermost backup completed at ${DATE}"
성능 최적화
PostgreSQL 튜닝
-- 연결 수 최적화
ALTER SYSTEM SET max_connections = 200;
ALTER SYSTEM SET shared_buffers = '256MB';
ALTER SYSTEM SET effective_cache_size = '1GB';
ALTER SYSTEM SET work_mem = '4MB';
ALTER SYSTEM SET maintenance_work_mem = '64MB';
SELECT pg_reload_conf();
Mattermost 설정 최적화
# 성능 관련 환경 변수
MM_SQLSETTINGS_MAXIDLECONNS=20
MM_SQLSETTINGS_MAXOPENCONNS=300
MM_SQLSETTINGS_CONNMAXLIFETIMEMILLISECONDS=3600000
MM_SERVICESETTINGS_ENABLEAPITEAMDELETION=false
MM_SERVICESETTINGS_ENABLEAPIUSERDELETION=false
사용자 관리 및 권한 설정
Mattermost의 웹 UI (시스템 콘솔)를 통해 사용자 초대, 역할(멤버, 채널 관리자, 팀 관리자, 시스템 관리자) 할당, 권한 설정을 쉽게 할 수 있습니다. 대규모 조직의 경우 Active Directory (AD) 또는 LDAP, OAuth 2.0 (Google, GitLab 등)과 연동하여 사용자 인증을 자동화할 수 있습니다.
플러그인 및 통합 활용
Mattermost는 다양한 플러그인과 통합 기능을 지원합니다.
외부 서비스 연동
GitHub, GitLab, Jira, Jenkins 등 개발팀이 사용하는 주요 도구들과 연동하여 알림을 받거나 작업을 자동화할 수 있습니다.
음성/화상 통화
Jitsi, BigBlueButton 등의 플러그인 연동을 통해 Mattermost 내에서 음성 및 화상 통화를 할 수 있습니다.
봇 개발
Mattermost API를 활용하여 사내 특정 업무를 자동화하는 커스텀 봇을 개발할 수 있습니다.
활용 사례
CI/CD 알림
Jenkins, GitLab CI/CD, GitHub Actions와 연동하여 빌드 성공/실패, 배포 완료 등의 알림을 특정 채널로 받아 신속하게 대응합니다.
코드 리뷰 알림
GitHub, GitLab과 연동하여 새로운 Pull Request, 댓글, 병합 요청 등을 실시간으로 Mattermost에서 확인
오류 및 모니터링 알림
Sentry, Prometheus, ELK 스택 등에서 발생하는 오류나 시스템 경고를 Mattermost 채널로 전송하여 팀원들이 빠르게 인지하고 조치할 수 있도록 합니다.
일간/주간 회의
특정 채널을 생성하고 음성/화상 플러그인을 활용하여 매일 짧은 미팅이나 주간 회의를 진행합니다.
내부 지식 공유
특정 채널을 공지사항이나 기술 Q&A 등으로 활용하여 팀 내 지식을 축적하고 공유합니다. 신입 개발자 온보딩에도 효과적입니다.
프로젝트별 채널
각 프로젝트, 기능, 버그 추적 등에 대한 전용 채널을 만들어 관련 내용을 한 곳에 집중시키고, 외부 정보 유출 없이 민감한 내용을 논의할 수 있습니다.
마치며
지금까지 Mattermost를 구축하는 방법과 운영 팁을 살펴보았습니다. 현재 팀 커뮤니케이션은 더욱 안전하고 효율적이며 팀의 통제하에 놓여야 합니다. Mattermost는 이러한 요구사항을 완벽하게 충족하는 대안이 될 것이라 생각합니다.
긴 글 읽어주셔서 감사합니다.
'Docker' 카테고리의 다른 글
| [Docker] 멀티 스테이지 빌드 - 이미지 크기 획기적으로 줄이는 최적화 전략 (1) | 2025.06.09 |
|---|---|
| [Docker] AdguardVPN Linux버전 사용기 (AdguardVPNCLI) + qBittorrent #2 (0) | 2025.02.17 |
| [Docker] AdguardVPN Linux버전 사용기 (AdguardVPNCLI) + qBittorrent #1 (0) | 2025.01.21 |
| [Docker/arm64] Wordpress 알아보기 2편 - MiniO 적용방법 (0) | 2025.01.20 |
| [Docker/arm64] Wordpress 알아보기 1편 - Memcached 적용방법 (1) | 2025.01.20 |