Post

단순한 메시징을 넘어선 오케스트레이션: 심포니(Symphony) 아키텍처의 심층 분석과 실무적 통찰

단순한 메시징을 넘어선 오케스트레이션: 심포니(Symphony) 아키텍처의 심층 분석과 실무적 통찰

로그 지옥과 메시지 파편화 사이에서 길을 잃은 당신에게

현업에서 수십 개의 마이크로서비스(MSA)를 운영하다 보면, 어느 순간 이런 현타가 옵니다. “우리는 데이터를 주고받는 걸까, 아니면 파편화된 쓰레기를 양산하는 걸까?” 특히 금융권이나 보안이 생명인 엔터프라이즈 환경에서 일해본 분들이라면 공감하실 겁니다. 슬랙(Slack)은 너무 가볍고, 카카오톡은 사생활이 섞이며, 이메일은 이미 죽은 기술이죠. 그렇다고 직접 소켓 통신으로 사내 메신저를 짜기엔 우리에겐 ‘비즈니스 로직’이라는 더 급한 불이 있습니다.

여기서 등장하는 이름이 바로 심포니(Symphony)입니다. 누군가는 이걸 단순히 ‘금융권의 슬랙’이라고 부르지만, 그건 겉모습만 본 겁니다. 시니어 개발자로서 제가 본 심포니는 ‘보안(Security)’과 ‘상호운용성(Interoperability)’이라는 두 마리 토끼를 잡기 위해 설계된 정교한 분산 오케스트레이션 엔진에 가깝습니다. 오늘은 이 녀석의 밑바닥을 한 번 뜯어보려고 합니다.


TL;DR: Symphony의 본질

심포니는 종단간 암호화(E2EE)를 기반으로, 개별 기업의 데이터 주권을 보장하면서도 기업 간(Inter-firm) 통신을 안전하게 연결하는 Pod 기반의 분산 메시징 아키텍처입니다.


Deep Dive: Under the Hood - 심포니의 아키텍처 철학

심포니가 일반적인 메신저와 궤를 달리하는 가장 큰 지점은 바로 ‘Pod’와 ‘Key Manager(KM)’의 분리입니다. 보통의 SaaS는 중앙 서버가 모든 데이터를 쥐고 있죠. 하지만 심포니는 각 기업마다 독립적인 인스턴스인 ‘Pod’를 구성할 수 있게 합니다.

1. POD 아키텍처와 데이터 격리

심포니의 핵심은 물리적/논리적 격리입니다. 각 기업은 자신만의 POD를 가집니다. 여기서 재미있는 점은 메시지가 전달되는 방식입니다. 내가 A사 소속이고 상대가 B사 소속일 때, 메시지는 각 사의 POD를 거쳐 전달됩니다. 이때 데이터의 소유권은 각 POD에 남으며, 중앙 시스템은 오직 메시지의 경로를 가이드하는 역할만 수행하죠.

2. 종단간 암호화(E2EE)의 구현체: Key Manager

심포니에서 보안은 옵션이 아니라 기본값입니다. 모든 메시지는 전송 전 클라이언트 단에서 암호화됩니다.

“서버는 메시지 내용을 알 수 없다. 오직 Key Manager만이 암호해독의 열쇠를 쥐고 있으며, 그 Key Manager조차 기업의 온프레미스(On-premise) 환경에 구축할 수 있다.”

이것이 바로 금융권이 심포니에 열광하는 이유입니다. 클라우드를 쓰면서도 데이터의 ‘물리적 통제권’을 놓지 않을 수 있기 때문이죠.

3. MessageML: 구조화된 커뮤니케이션

심포니는 텍스트만 주고받지 않습니다. MessageML이라는 XML 기반의 자체 마크업 언어를 사용합니다. 이는 단순한 시각적 표현을 넘어, 봇(Bot)이나 자동화 엔진이 메시지를 ‘해석’할 수 있게 해줍니다.

비교 항목일반적인 REST/WebhookSymphony MessageML
데이터 형태비정형 JSON/Text규격화된 XML 기반 스키마
보안 수준TLS (전송 구간 암호화)E2EE (종단간 암호화 + HSM 지원)
상호작용단순 수신/응답버튼, 폼(Form), 테이블 등 풍부한 UI 요소
추적성별도 로깅 시스템 필요아카이빙 및 감사(Audit) 로그 기본 제공

4. 실제 동작 구조 (Datafeed & Real-time Stream)

개발자 입장에서 가장 중요한 부분은 메시지를 어떻게 실시간으로 처리하느냐입니다. 심포니는 Datafeed라는 개념을 사용합니다. 이는 일종의 Long-polling 또는 WebSocket 기반의 스트림으로, 봇이 이 스트림을 구독하고 있다가 특정 이벤트(메시지 수신, 룸 입장 등)가 발생하면 즉시 반응하는 구조입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 심포니 봇 서비스의 핵심 로직 (의사 코드)
public void startSymphonyBot() {
    // 1. 세션 인증 (RSA 키 기반)
    SymBotAuth botAuth = new SymBotAuth(config);
    botAuth.authenticate();

    // 2. Datafeed 루프 진입
    DatafeedClient datafeedClient = botClient.getDatafeedClient();
    String feedId = datafeedClient.createDatafeed();

    while (true) {
        List<EnrichedEvent> events = datafeedClient.readDatafeed(feedId);
        for (EnrichedEvent event : events) {
            if (event.getType().equals("MESSAGESENT")) {
                // MessageML을 파싱하고 비즈니스 로직 수행
                processMessage(event.getPayload().getMessage());
            }
        }
    }
}

Pragmatic Use Cases: 실무에선 어떻게 녹여낼까?

단순히 사내 공지용으로 쓰기엔 심포니는 너무나 비싼 도구입니다. 시니어라면 이 도구를 ‘워크플로우 자동화의 핵심 노드’로 활용해야 합니다.

1. 트레이딩 시스템의 장애 대응 오케스트레이션: 서버에 크리티컬한 장애가 발생했다고 가정해 봅시다. 모니터링 시스템(Prometheus 등)이 얼러트를 쏘면, 심포니 봇이 즉시 담당자들을 포함한 ‘War-room’을 자동 생성합니다. 그리고 해당 방에 현재 로그 스냅샷과 시스템 상태를 MessageML 테이블로 예쁘게 시각화해서 뿌려주죠. 담당자들은 방 안에서 봇 명령어로 서버 리부팅이나 롤백을 승인할 수 있습니다. 모든 과정은 자동으로 아카이빙되어 사후 리포트가 됩니다.

2. 복잡한 다자간 결재 프로세스: 여러 부서의 승인이 필요한 엔터프라이즈 환경에서, 심포니 폼(Form) 기능을 활용해 결재 프로세스를 구현할 수 있습니다. 외부 시스템(ERP, Jira 등)과 연동하여 메시지 안에서 ‘승인/반려’를 클릭하면 즉시 API 호출이 일어나고 상태가 업데이트됩니다. 컨텍스트 스위칭을 획기적으로 줄여줍니다.


Honest Review & Trade-offs: 현실적인 한계점

세상에 공짜 점심은 없죠. 심포니를 도입할 때 마주하게 될 쓴소리를 좀 해보겠습니다.

  • 가파른 러닝 커브와 불친절한 문서: 오픈소스 생태계만큼 친절하지 않습니다. 특히 인증(Authentication) 과정에서의 RSA 키 설정이나 포드 간 통신 이슈가 발생하면 디버깅이 정말 지옥 같습니다.
  • 인프라 오버헤드: 제대로 쓰려면 Agent 서버를 별도로 띄워야 합니다. 봇이 직접 심포니 클라우드와 통신하는 게 아니라, 중간에 보안 대리인 역할을 하는 서버가 필요하죠. 이는 관리 포인트가 하나 더 늘어난다는 뜻입니다.
  • 폐쇄성: 보안을 강조하다 보니 외부 라이브러리나 툴과의 연동이 까다롭습니다. ‘이거 그냥 슬랙이면 5분 만에 될 텐데’라는 생각이 머릿속을 떠나지 않을 때가 많을 겁니다.

Closing Thoughts: 지휘자(Conductor)가 될 것인가, 악보만 읽을 것인가

심포니는 단순히 메시지를 전달하는 ‘파이프’가 아닙니다. 그것은 파편화된 엔터프라이즈 서비스들을 하나의 흐름으로 묶어주는 ‘지휘자’에 가깝습니다.

물론 도입 비용은 비싸고, 개발은 까다롭습니다. 하지만 데이터 주권이 무엇보다 중요하고, 단순한 대화를 넘어선 ‘구조화된 업무 흐름’이 필요한 대규모 조직이라면 심포니는 대체 불가능한 선택지가 될 수 있습니다.

결국 기술을 선택하는 것은 우리 엔지니어의 몫입니다. 도구의 화려함에 매몰되지 마세요. 당신의 조직이 처한 ‘신뢰의 비용’과 ‘운영의 복잡도’를 면밀히 따져본 뒤, 이 웅장한 교향곡(Symphony)에 참여할지 결정하시길 바랍니다. 은탄환은 없습니다. 오직 최선의 트레이드오프만 있을 뿐입니다.

References

  • https://developers.symphony.com/
  • https://www.symphony.com/platform/security-compliance
  • https://github.com/symphonyoss
This post is licensed under CC BY 4.0 by the author.