1. 사가 패턴을 처음 접했을 때
학부 시절, 인문학을 전공하며 문학에 빠져살던 시절이 있었다. 풋풋한 날들에 접했던 '사가'라는 단어는 고대와 중세 문학에서 전해져 내려온 영웅들의 이야기, 그리고 그 안에 담긴 인간의 고뇌와 승리에 대한 이야기였다. 즉, '서사'였다. 예를 들어, 미겔 데 세르반테스의 돈키호테에서는 현실과 이상 사이에서 갈등하는 기사도 정신이 그려지고, 호메로스의 일리아스에서는 그리스 영웅들의 전투와 그 안에 깃든 인간의 본성이 서사적으로 펼쳐진다.
이런 이야기들은 단순한 사건의 나열이 아니라, 인간 존재에 대한 깊은 통찰을 담아내며, 하나의 거대한 사가를 형성한다.
서버 개발 일을 하면서 만나는 사가라는 단어는 완전히 다른 의미이다. 바로 마이크로서비스 아키텍처에서 데이터 일관성을 유지하는 방법론으로서의 사가 패턴(Saga Pattern)이 그것이다.
사가 패턴에서 사가란 무엇일까? 사가 패턴에서 사가는 영어의 acronym이 아니다. 이 단어는 그 자체로 '서사'를 뜻하는 고유 명사이다. 즉, 사가 패턴에서 사가는 한 편의 이야기가 여러 사건들로 이어지는 것처럼, 마이크로서비스 간의 트랜잭션들이 연속적으로 이어지는 과정을 비유적으로 나타내는 용어이다.
사가 패턴의 사가의 의미가 문학에서 유래해 온 그 서사라는 것을 깨달았을 때, 정말 묘한 기분이 스쳐갔던 것 같다. 그 중에는 마치 오래된 친구를 다시 만난 듯한 감정도 있었다. 한때 문학 속에서 만났던 사가가, 이제는 기술 세계에서 새로운 의미로 다가와 나타났다니. 뭔가 구슬 여러개가 사사삭 꿰이는 것 같은 기분이라고 할까. 소프트웨어 엔지니어라는 현재의 역할 속에서도, 한때 심취했던 문학적 배경이 이렇게 자연스럽게 이어진다는 사실에 참으로 감회가 새로웠다.
소프트웨어 개발을 하고 있는 지금의 내가 하는 일은 더 이상 문학적인 서사를 풀어내는 일은 아니다. 대신, 수많은 마이크로서비스를 다루며 각 도메인 서비스가 서로 조화를 이루도록 설계하고, 데이터 일관성을 유지하며 안정적인 트랜잭션을 보장하는 일을 한다. 과거에 문학 작품을 분석하며 각 사건의 흐름과 캐릭터 간의 상호작용을 이해했던 것처럼, 이제는 각 마이크로서비스가 연결되고 협력하는 방식을 설계하고 조정하는 데 몰두한다. 한때는 이야기 속 영웅들이 세상을 구원했고, 그것이 인문학도로서의 내가 만나던 세상이었다. 지금은 코드로서 사가를 연결하며 창조하며, 비즈니스라는 목표 하에 하나 혹은 여러 개의 서사를 만들어내는 것이 내가 매일 접하는 세상이다.
조금 더 이 글에서의 '사가'를 풀어나가 보자면, 먼저 사가의 문학적 의미부터 살펴보자.
2. 사가의 문학적 의미
사가라는 단어는 본래 중세 아이슬란드 문학에서 유래했다. 이 문학 장르는 영웅의 이야기나 역사적인 사건을 서술하며, 긴 시간에 걸친 일련의 사건들을 연결해 서술하는 것이 특징다. 그리고 이 이야기들은 단순한 서술 이상의 의미를 지닌다. 그들은 그 당시 사람들의 가치관, 사회적 구조, 그리고 인간 본성에 대한 깊은 통찰을 담고 있다.
사가가 왜 MSA 방법론에서 거론되는 사가 패턴에 등장하게 된 것일까?
2. 사가 패턴의 유래: 기술과 문학의 만남
1987년, 프린스턴 대학교의 Hector Garcia-Molina와 Kenneth Salem이 발표한 논문에서 'Saga'라는 용어가 처음 등장했다. 이 논문에서 두 연구자는 Long Lived Transaction(LLT)의 개념을 설명하면서, 이 문제를 해결하기 위한 새로운 접근법으로 Saga라는 용어를 도입했다. LLT는 말 그대로 긴 시간 동안 실행되는 트랜잭션을 의미한다. 이러한 트랜잭션이 다른 트랜잭션과 섞여 실행될 수 있도록 하기 위해 일련의 서브 트랜잭션으로 나누는 방식을 제안한 것이 바로 사가 패턴이다.
논문에서는 사가의 개념을 다음과 같이 설명한다.
Long lived transactions (LLTs) hold on to database resources for relatively long periods of time, significantly delaying the termination of shorter and more common transactions. To alleviate these problems, we propose the notion of a saga. A LLT is a saga if it can be written as a sequence of transactions that can be interleaved with other transactions.¹
이 부분에서 볼 수 있듯이, 사가는 하나의 LLT를 여러 개의 트랜잭션으로 나누어, 이들이 다른 트랜잭션과 겹쳐서 실행될 수 있도록 하는 방법을 의미한다.
논문에서 이 개념은 긴 시간 동안 실행되는 트랜잭션이 데이터베이스 리소스를 오래 점유함으로써 발생하는 문제를 해결하는 데 초점을 맞추고 있다. 이를 통해 시스템은 각 트랜잭션이 성공적으로 완료되거나, 만약 실패할 경우 보상 트랜잭션을 실행하여 부분적으로 완료된 작업을 수정할 수 있도록 보장한다.
이러한 논문 속 사가의 정의는, 오늘날 우리가 마이크로서비스 아키텍처에서 사용하는 사가 패턴의 기초가 되었다.
4. 결국, 도메인은 이야기다.
사가라는 용어의 선택은 우연이 아닐 것이다. 문학적 개념을 다시 상기시켜보면, 사가는 긴 시간 동안 연결된 사건들을 다루는 이야기이다. 마이크로서비스 간의 상호작용은 일종의 이야기처럼 연결된 사건들로 구성된다. 각 마이크로서비스는 독립적으로 존재하지만, 이들이 서로 얽혀 전체적인 흐름을 만들어간다.
이러한 관점에서 보면, 사가 패턴을 단순히 기술 용어로만 보기는 힘들 것 같다. 그것은 마이크로서비스의 복잡한 상호작용을 한 편의 서사로 이해하게 도와주는 은유적 표현이 아닐까. 그리고 이러한 이해는 시스템의 작동을 더욱 명확하게 해준다. 결국, 사가 패턴은 각각의 주체적인 개성을 가진 하나 하나의 서비스들이 자기만의 '이야기'를 들고 와서 보다 큰 서사를 완성해 나가는 과정과도 같다.
마이크로서비스 아키텍처에서는 각 도메인이 독립적으로 관리된다. 예를 들어, 주문 처리 도메인, 결제 도메인, 배송 도메인 등은 각각의 독립된 서비스로 존재한다. 하지만 이 서비스들은 함께 협력하여 하나의 완결된 사용자 경험을 제공한다. 주문이 생성되면 결제가 이루어지고, 이후 배송이 이루어지는 일련의 과정이 바로 이러한 도메인 간의 상호작용을 통해 완성된다.
이처럼, 도메인 서비스들이 서로 연결되고, 서로의 데이터를 주고받으며, 각 도메인이 맡은 역할을 다하는 과정을 통해 하나의 이야기가 완성된다. 사가 패턴은 이 이야기가 중단 없이 매끄럽게 이어질 수 있도록 보장하는 역할을 한다. 예를 들어, 결제 과정에서 오류가 발생하면, 이미 이루어진 주문과 결제는 원상복구되어야 한다. 이는 마치 이야기가 중단되지 않도록 하기 위해 이전 장면으로 돌아가 잘못된 부분을 수정하는 것과 같다.
결국, 도메인은 이야기이다. 우리가 개발하는 시스템의 각 부분이 어떻게 협력하고, 데이터를 주고받고, 결정을 내리는지에 대한 이야기이다. 사가 패턴은 이 이야기가 혼란 없이, 중단 없이, 처음부터 끝까지 자연스럽게 흘러갈 수 있도록 해준다. 각 도메인 서비스가 독립적으로 기능을 수행하지만, 그들이 협력하여 하나의 큰 이야기를 완성하는 과정을 통해, 우리는 더 나은 시스템을 구축할 수 있다.
기술적인 문제를 해결하기 위해 도입된 이 개념이, 중세 문학에서의 서사적인 의미와 맞닿아 있다는 점에서, 과거 문학을 전공했던 나에게는 매우 흥미로운 발견이었다.
5. 사가 패턴과 현재
이렇게 기술과 문학의 세계가 맞닿는 순간들은 참 흥미롭다. 어쩌면, 사가 패턴을 통해 기술 속에서도 문학적인 감동을 찾고 있었는지도 모르겠다. 각 도메인이 저마다의 이야기를 가지고 있고, 그 이야기들이 모여 하나의 큰 그림을 완성해가는 과정은 여전히 매력적이다.
우리가 매일같이 접하는 코드는 단순한 명령어들의 나열이 아니다. 삭막하게만 느껴질 수 있는 코드의 행간 속에도, 사실은 수많은 이야기들이 엮여 하나의 거대한 서사를 만들어내고 있다. 이 과정을 통해 문학적인 감수성을 다시금 떠올리며, 지금까지 걸어온 길과 앞으로 걸어갈 길을 되새긴다. 오늘도 새로운 이야기를 써 내려가기로 다짐할때, 서사는 성장한다.
우리의 삶 속에서도 수많은 사가들이 흘러가고 있음을 기억하자. 각자의 이야기는 소중하다! 자신만의 서사를 완성해 나가는 길에서 언제나 즐거움과 의미를 찾을 수 있으면 좋겠다. 🌱
【1】 Hector Garcia-Molina and Kenneth Salem, Sagas. Department of Computer Science, Princeton University. https://www.cs.cornell.edu/andru/cs711/2002fa/reading/sagas.pdf
'회고' 카테고리의 다른 글
항해 플러스 백엔드 5기 수료 회고 - 여름 방학 경험치 이벤트가 끝나면? (8) | 2024.08.28 |
---|---|
2024년 8월 3-4주차 내가 깨야했던 퀘스트에 대해서 (feat. 패시브 스킬 회고) (0) | 2024.08.26 |
1년차 백엔드 개발자의 퇴사 회고 a.k.a 이직 후기 인트로 (3) | 2024.07.26 |
항해 플러스 백엔드 5기 1~5주차 현실 100% 회고 (1+1=N) (2) | 2024.07.19 |
넥스트스텝 ATDD, 클린 코드 with Spring 8기 수료 회고 (1) | 2024.03.15 |