애플리케이션 아키텍처
Mattermost v12.0요약
Mattermost는 팀 커뮤니케이션을 위한 보안 메시지, 파일 공유, 연동 기능을 제공하는 오픈 소스 협업 플랫폼입니다. 사용자는 다양한 접근 포인트(웹, 모바일, 데스크톱, 이메일)를 통해 연결합니다. 백엔드 인프라는 잘 설계된 스토리지 시스템에 모든 데이터와 파일을 저장하여 이러한 작업을 지원합니다.
Mattermost는 팀 커뮤니케이션을 위한 보안 메시지, 파일 공유, 연동 기능을 제공하는 오픈 소스 협업 플랫폼입니다. 셀프 호스팅으로 IT 관리자가 데이터, 보안, 연동 및 커스터마이징에 대한 완전한 제어권을 갖습니다. 플랫폼은 확장성, 유연성, 확장 가능성을 보장하기 위해 모듈형 구성 요소로 구축되었습니다.
워크플로 개요#
사용자는 다양한 접근 포인트(웹, 모바일, 데스크톱, 이메일)를 통해 연결합니다. 요청은 API 통신, 인증, 알림 및 데이터 워크플로를 관리하는 애플리케이션 계층(Mattermost 서버)에서 처리됩니다.
백엔드 인프라는 잘 설계된 스토리지 시스템에 모든 데이터와 파일을 저장하여 이러한 작업을 지원합니다.
확장성 및 보안 계층은 플랫폼이 민감한 데이터를 보호하면서 엔터프라이즈 시스템과 원활하게 연동되도록 합니다.
핵심 구성 요소#
기술 아키텍처는 접근 계층, 애플리케이션 계층, 백엔드 인프라 세 가지 주요 계층을 중심으로 합니다.
접근 계층#
접근 계층은 사용자가 Mattermost와 상호 작용하는 모든 방법을 포함하여 선호하는 플랫폼 전반에 걸쳐 안전하고 확장 가능하며 신뢰할 수 있는 통신을 보장합니다. 고가용성 조치는 서버 또는 네트워크 장애에도 불구하고 사용자에게 중단 없는 기능을 제공합니다.
- 웹 인터페이스: 사용자는 웹 브라우저(Chrome, Firefox, Safari, Edge)를 통해 Mattermost에 접근할 수 있습니다. 웹 클라이언트는 HTTPS 프로토콜을 통해 Mattermost 서버와 통신합니다. 웹 인터페이스의 고가용성은 여러 Mattermost 서버 인스턴스에 사용자 트래픽을 분산하는 로드 밸런싱 역방향 프록시(예: NGINX 또는 HAProxy)를 통해 달성할 수 있습니다. 백업 프록시 서버는 중단 중에 웹 인터페이스가 작동 상태를 유지하도록 장애 조치 시나리오를 보장합니다.
- 데스크톱 및 모바일 앱: iOS, Android, macOS, Windows, Linux용 네이티브 앱은 디바이스 전반에 걸쳐 원활한 기능을 제공합니다. 이 앱은 보안 API에 의존하여 실시간 메시지 및 업데이트를 위해 서버와 상호 작용합니다. 고가용성은 API 요청을 처리하는 중복 서버 클러스터를 배포하고 자동으로 트래픽을 정상 서버로 리디렉션하는 장애 조치 메커니즘을 통해 보장할 수 있습니다. 모바일 앱도 실시간 응답성을 유지하기 위한 재시도 메커니즘 및 푸시 알림 폴백 서비스의 이점을 받습니다.
- 이메일 상호 작용: Outlook, Gmail, Thunderbird와 같은 이메일 클라이언트 지원은 이메일 알림(예: 새 메시지 알림, 초대)을 사용자의 일반적인 워크플로에 통합합니다. 접근 계층은 사용자가 선택한 플랫폼을 통해 항상 연결되면서 안전하고 동기화된 통신 경로를 유지하도록 합니다. 이메일 서비스는 기본 메일 서버를 사용할 수 없게 되더라도 알림이 지연 없이 전송되도록 중복성을 위해 여러 SMTP 서버로 구성할 수 있습니다.
접근 계층은 사용자가 선택한 플랫폼을 통해 항상 연결되면서 안전하고 동기화된 통신 경로를 유지하는 데 중요한 역할을 합니다. 고가용성 조치가 적용되면 조직은 배포의 규모나 복잡성에 관계없이 원활한 사용자 경험을 보장할 수 있습니다.
애플리케이션 계층#
Mattermost 서버는 플랫폼의 핵심으로 모든 사용자 및 시스템 작업 처리를 담당합니다. 다음과 같이 여러 모듈형 요소로 구성됩니다.
RESTful JSON 웹 서비스: 모든 수신 API 요청(웹 클라이언트, 앱, 연동에서)을 처리하고 응답이 JSON 형식으로 포맷되도록 합니다. 클라이언트(접근 계층)와 백엔드 시스템 사이의 통신 브리지 역할을 합니다. 고가용성을 보장하기 위해 이 계층은 여러 서버에 분산되어 로드 밸런싱될 수 있어 높은 트래픽 또는 서버 장애로 인한 서비스 중단을 방지합니다.
인증 클라이언트: 사용자 인증을 관리하여 안전한 로그인 세션을 보장합니다. 기존 사용자 이름/비밀번호 기반 인증 또는 Active Directory/LDAP를 통한 SSO(Single Sign-On)와 같은 엔터프라이즈급 솔루션과 연동됩니다. 기본 인증 서비스가 실패하더라도 중단 없는 접근을 보장하는 중복 인증 노드와 장애 조치 메커니즘을 통해 고가용성이 유지됩니다.
인증 공급자: OAuth, SSO 및 서드파티 ID 서비스를 지원하는 플러그인 가능한 인증 프레임워크를 제공합니다. 중앙 집중식 ID 관리가 있는 엔터프라이즈 환경에서 특히 중요합니다. 중복성 및 장애 조치 전략은 여러 서버에 인증 프레임워크를 분산하고 원활한 ID 관리를 위한 폴백 옵션을 제공하여 신뢰성을 보장합니다.
알림 서비스: 지원되는 매체를 통해 알림을 전송합니다.
- 푸시 알림: iOS 및 Android 디바이스에 대한 실시간 알림(푸시 알림 서비스 경유). 여러 알림 서버와 재시도 메커니즘을 통해 고가용성이 보장되어 서비스 중단 시에도 알림이 전달됩니다.
- 이메일 알림: 사용자가 오프라인이거나 이벤트 알림이 필요할 때 전달됩니다. 로드 밸런싱과 백업 메일 서버 구성은 이메일 전달이 일관되고 신뢰할 수 있도록 합니다.
데이터 관리 서비스: 메시지 데이터, 메타데이터, 사용자 프로필 및 로그 관리를 담당합니다. 데이터베이스와 서버 사이에서 전달되는 데이터의 무결성을 보장합니다. 이 계층은 플랫폼의 운영 핵심 역할을 하며 데이터 처리 및 연동 기능으로 사용자 활동을 조율합니다.
고가용성은 데이터베이스 복제, 장애 조치 전략 및 분산 데이터 처리 메커니즘을 통해 달성됩니다. 이러한 조치는 데이터에 대한 중단 없는 접근을 보장하고 구성 요소 장애 또는 다운타임으로부터 보호합니다. 데이터 관리 서비스는 플랫폼의 운영 핵심 역할을 하며 확장 가능하고 내결함성 있는 데이터 처리 기능으로 사용자 활동을 조율합니다.
백엔드 인프라#
백엔드 인프라는 Mattermost 작업에 필요한 스토리지 및 데이터 처리 기능을 제공합니다. 다음 구성 요소로 구성됩니다.
데이터베이스 시스템: Mattermost는 다음과 같은 모든 영구 데이터를 저장하는 기본 데이터베이스로 PostgreSQL을 사용합니다(클라우드 호스팅 PostgreSQL을 위한 Amazon RDS 지원).
- 메시지
- 사용자 계정 및 자격 증명
- 구성 설정
- 팀/채널 메타데이터
고가용성을 보장하기 위해 데이터베이스 시스템은 클러스터링, 복제 및 장애 조치 메커니즘을 활용할 수 있습니다. PostgreSQL은 중복성을 위한 복제본 생성을 위해 동기식 및 비동기식 복제와 같은 기능을 지원합니다. Amazon RDS와 같은 클라우드 호스팅 솔루션은 시스템 장애 중에도 지속적인 운영을 보장하는 자동 장애 조치 및 백업 기능을 제공합니다.
파일 스토리지: 채널 전반에 공유되는 모든 멀티미디어 에셋(예: 파일 업로드, 이미지, 비디오)을 관리합니다. 스토리지 솔루션에는 다음 옵션이 포함됩니다.
- 로컬 스토리지: 서버 파일시스템에 직접 저장된 파일. 고가용성을 위해 RAID 구성이나 디스크 장애에서 복구하기 위한 백업을 통해 중복성을 달성할 수 있습니다.
- NAS (네트워크 연결 스토리지): 네트워크 내 파일 스토리지를 중앙 집중화하는 기업에 일반적으로 사용됩니다. NAS 설정은 중단 없는 접근을 위해 분산 시스템이나 복제와 같은 내결함성 구성을 포함할 수 있습니다.
- S3: 분산 배포를 가진 더 큰 환경이나 조직을 위한 클라우드 기반 확장 가능한 스토리지를 제공합니다. 데이터베이스와 파일 스토리지는 확장성을 처리하여 데이터 일관성을 보장하면서 수백만 개의 메시지와 파일을 효율적으로 지원합니다. S3는 여러 가용성 영역에 데이터를 분산하여 본질적으로 고가용성을 지원하며 단일 장애 지점이 없습니다.
고가용성 조치는 데이터 일관성을 보장하면서 수백만 개의 메시지와 파일을 위한 확장 가능하고 안전한 지원을 보장합니다.
시스템 확장: Mattermost는 협업 도구일 뿐만 아니라 확장 가능성을 위해 설계된 플랫폼입니다. 주요 확장 기능에는 다음이 포함됩니다.
셀프 호스팅 연동: Mattermost를 Jira, GitLab 또는 팀에 필요한 커스텀 연동과 같은 다른 로컬 또는 클라우드 기반 시스템에 연결하세요. 내장 API 및 웹훅을 활용하여 워크플로를 자동화하고 시스템 간 통신을 트리거하세요. 고가용성을 위해 연동은 중복 통신 채널과 재시도 메커니즘을 사용하여 일시적인 장애를 원활하게 처리할 수 있습니다.
서드파티 인증: 연동을 서드파티 플랫폼(예: Slack 가져오기 API, OAuth 서비스)에 바인딩하세요. 서드파티 ID 서비스는 일관되고 안전한 사용자 접근 흐름을 보장합니다. 서드파티 ID 서비스는 로드 밸런싱 및 장애 조치 전략을 활용하여 높은 트래픽이나 중단 시에도 일관되고 안전한 사용자 접근 흐름을 보장할 수 있습니다.
보안 및 확장성 기능: 보안 및 확장성이 아키텍처에 내장되어 있어 Mattermost를 엔터프라이즈 사용 사례에 이상적으로 만듭니다.
보안
- NGINX나 하드웨어 프록시와 같은 역방향 프록시가 외부 트래픽을 관리하기 위해 배포됩니다. 서버를 보호하고, HTTPS를 강제하며, 로드 밸런싱을 처리합니다.
- 구성 가능한 SSL/TLS 암호화는 전송 중 데이터 보안을 보장합니다.
- 세분화된 사용자 권한 및 역할이 팀 내 민감한 정보를 보호합니다.
확장성 및 고가용성: Enterprise Edition은 대규모 조직에서 신뢰성과 성능을 위해 여러 서버에 사용자 요청을 분산하는 클러스터 환경에 여러 Mattermost 서버를 배포하는 것을 지원합니다. 클러스터링은 중단 시 사용자 트래픽이 정상 서버로 전환되는 자동 장애 조치를 보장합니다.
알림 및 통신 서비스: Mattermost는 다양한 워크플로에 맞게 조정된 알림 시스템으로 향상된 비동기식 및 실시간 통신을 지원합니다.
- 푸시 알림: 메시지 알림 또는 멘션을 위해 모바일 디바이스에 전달됩니다. 고가용성은 백업 알림 서비스와 신뢰할 수 있는 전달을 위한 재시도 메커니즘으로 달성됩니다.
- 이메일 연동: 사용자가 오프라인이거나 비활성 상태일 때 정기적인 알림을 제공합니다. 장애 조치 메일 서버와 분산 구성은 이메일 알림이 중단 없이 전송되도록 합니다.
이러한 서비스는 지속적인 참여와 통신을 보장합니다.
통신 프로토콜#
사용자가 Mattermost 서버와 만드는 연결 유형을 정의하는 통신 프로토콜(HTTPS 및 WS)도 있습니다. 고가용성 조치는 특히 프로덕션 환경에서 클라이언트와 Mattermost 서버 간의 신뢰할 수 있고 탄력적인 연결을 보장합니다.
HTTPS 연결 (보안 하이퍼텍스트 전송 프로토콜)
- Mattermost 서버에 대한 HTTPS 연결은 페이지를 렌더링하고 핵심 플랫폼 기능에 대한 접근을 제공하지만 실시간 상호 작용은 포함되지 않습니다(WSS 연결로 활성화됨).
- HTTPS는 안전하고 암호화된 프로토콜로 프로덕션 환경에 강력히 권장됩니다. 암호화되지 않은 HTTP 연결은 초기 테스트 및 구성에서 사용할 수 있지만 프로덕션 환경에서는 절대로 사용해서는 안 됩니다. 고가용성을 위해 HTTPS 트래픽은 여러 Mattermost 서버 인스턴스에 연결을 분산하는 로드 밸런서 구성이 있는 역방향 프록시(예: NGINX 또는 HAProxy)로 처리해야 합니다. 중복 프록시 서버는 중단 없는 서비스를 제공하는 장애 조치 기능을 보장합니다.
WSS 연결 (보안 WebSocket 프로토콜)
Mattermost 서버에 대한 보안 WebSocket (WSS) 연결은 클라이언트와 서버 사이의 실시간 업데이트 및 알림을 가능하게 합니다.
WSS 연결을 사용할 수 없고 HTTPS가 대체되면 시스템이 작동하는 것처럼 보이지만 실시간 업데이트 및 알림은 작동하지 않습니다. 이 작동 모드에서 업데이트는 페이지 새로 고침 시에만 표시됩니다. WSS는 클라이언트가 연결된 경우 Mattermost 서버에 영구적인 연결을 가지는 반면, HTTPS는 간헐적인 연결을 가지며 페이지나 파일이 요청될 때만 서버에 연결합니다.
WSS 연결의 고가용성은 Mattermost 서버를 클러스터링하고 해당 클러스터 노드에 걸쳐 WebSocket 연결을 로드 밸런싱하여 달성할 수 있습니다. 프록시 서버 및 WebSocket 특정 구성(예: 스티키 세션 또는 연결 지속성)은 서버 또는 네트워크 장애 중에 실시간 상호 작용성을 유지하는 데 필수적입니다.
통신 프로토콜에 고가용성 전략을 통합함으로써 플랫폼은 일반 사용자 상호 작용(HTTPS 경유)과 실시간 업데이트(WSS 경유) 모두에 대해 안전하고 확장 가능하며 신뢰할 수 있는 연결을 보장합니다. 이러한 조치는 지속적인 통신이 필요한 미션 크리티컬 환경 및 분산 배포에 중요합니다.
VPN 뒤에서
Mattermost는 웹, 데스크톱, 모바일 경험을 위한 연결에 컴퓨팅 디바이스 및 물리적 위치에 대한 보안 접근을 포함하는 다중 인증 요소를 제공할 수 있는 개인 네트워크 내에 설치되도록 설계되었습니다. 외부 접근이 필요한 경우 추가 인증과 함께 사용되는 OpenVPN과 같은 가상 사설망 클라이언트(VPN)를 권장합니다.
VPN 미사용 설정
Mattermost를 공개 인터넷에서 접근 가능하게 하는 경우 다음을 권장합니다.
- IT 관리자가 적절한 네트워크 보안을 설정하고, Mattermost 보안 공지를 구독하며, 새 보안 업데이트를 적용할 담당자를 지정해야 합니다.
- 조직이 SAML Single Sign-on을 활성화하거나 MFA를 활성화해야 합니다.
VPN이나 MFA 설정 없이 공개 인터넷에서 Mattermost에 접근 가능한 경우, 시스템 침해의 영향이 중요하지 않은 비기밀이면서 중요하지 않은 대화에만 사용하는 것을 권장합니다.
Mattermost 서비스 포트#
다음 표들은 Mattermost 서버, 푸시 프록시, 모바일 앱 클라이언트에 대한 Mattermost 서비스 포트 목록입니다. 프록시 없이 Mattermost 서버와 통신해야 하는 클라이언트가 있는 시스템 관리자는 필요에 따라 특정 방화벽 포트를 열 수 있습니다.
Mattermost 서버
인바운드 포트
| 서비스 | 구성 설정 | 포트 (기본값) | 프로토콜 | 비고 |
|---|---|---|---|---|
| HTTP/WebSocket | ServiceSettings.ListenAddress |
8065 / 80 / 443 (TLS) | TCP | 외부 (프록시 없음) / 내부 (프록시 있음). HTTPS 실행 시 일반적으로 포트 80과 443이 사용됩니다. |
| 클러스터 (HA) | ClusterSettings.GossipPort |
8074 | TCP/UDP | 내부 전용. 모든 Mattermost 서버 노드 간에 연결 가능해야 합니다. TCP와 UDP 모두 열려 있어야 합니다. HA 전용. |
| 메트릭 | MetricsSettings.ListenAddress |
8067 | TCP | 내부 전용. 신뢰할 수 있는 모니터링 호스트(예: Prometheus)로 접근을 제한하세요. 공개 인터넷에 노출되어서는 안 됩니다. 메트릭 수집이 활성화된 경우에만 필요합니다. |
아웃바운드 포트
| 서비스 | 구성 설정 | 포트 (기본값) | 프로토콜 | 비고 |
|---|---|---|---|---|
| 데이터베이스 | SqlSettings.DataSource |
5432 (PostgreSQL) | TCP | 일반적으로 내부 (권장). |
| LDAP | LdapSettings.LdapPort |
389 | TCP/UDP | |
| S3 스토리지 | FileSettings.AmazonS3Endpoint |
443 (TLS) | TCP | |
| SMTP | EmailSettings.SMTPPort |
10025 | TCP/UDP | |
| 푸시 알림 | EmailSettings.PushNotificationServer |
443 (TLS) | TCP |
푸시 프록시
인바운드 포트
| 서비스 | 구성 설정 | 포트 (기본값) | 프로토콜 | 비고 |
|---|---|---|---|---|
| 푸시 프록시 | ListenAddress |
8066 | TCP | 내부 전용. Mattermost 서버 노드에서만 연결 가능해야 합니다. 셀프 호스팅 푸시 프록시를 실행하는 경우 필요합니다. |
모바일 클라이언트
푸시 알림을 받으려면 네트워크에서 iOS 디바이스의 경우 포트 5223과 Android의 경우 포트 5228-5230의 트래픽을 허용해야 합니다.