본문으로 건너뛰기

Temporal, Restate, Hatchet, Inngest 오픈소스 프로젝트 비교 분

·2221 단어수·11 분

오늘날 분산 시스템 개발의 복잡성을 줄이고 내구성 있는 워크플로우 관리를 위한 다양한 오픈소스 솔루션이 존재합니다. 이 보고서에서는 Temporal, Restate, Hatchet, Inngest라는 네 가지 주요 오픈소스 프로젝트를 심층적으로 비교 분석하겠습니다.

개요 및 핵심 개념
#

Temporal
#

Temporal은 내구성 있는 실행(Durable Execution) 플랫폼으로, 분산 시스템 구축의 복잡성을 추상화하는 오픈소스 솔루션입니다. 호스트나 소프트웨어 장애가 발생하더라도 완전한 애플리케이션 상태를 보존하고 다른 머신으로 실행을 원활하게 마이그레이션합니다1. Temporal은 타이머, 이벤트 소싱, 상태 체크포인트, 재시도, 타임아웃을 위한 커스텀 코드 작성 필요성을 제거함으로써 개발 가속화를 지원합니다2.

Temporal은 Stripe, Netflix, Datadog, HashiCorp, Alaska Airlines, Box 등 수천 개의 기업에서 미션 크리티컬한 워크로드와 기본 워크로드 모두에 사용되고 있습니다. Twilio의 모든 메시지, Coinbase의 모든 트랜잭션, Snap의 모든 스토리가 Temporal을 사용한다고 알려져 있습니다1.

Restate
#

Restate는 내구성 있는 실행 엔진(Durable Execution Engine)으로, 상태를 가진 서버리스 애플리케이션을 구축하기 위한 오픈소스 프로젝트입니다. 일반적인 RPC 서비스처럼 보이는 코드를 작성하면 엔진이 실행 진행 상황을 저장하고, 크래시 후에는 이전 상태로 복원하여 중단된 지점부터 실행을 재개합니다3.

또한 Restate는 긴 대기 시간이나 다른 서비스의 응답 지연과 같은 상황에서 실행을 자동으로 일시 중단하여 컴퓨팅 리소스를 낭비하지 않습니다. 이는 “대기 시간” 동안 Knative 서비스가 제로 스케일링될 수 있음을 의미합니다3.

Hatchet
#

Hatchet은 분산, 내결함성 작업 큐(distributed, fault-tolerant task queue)로, 동시성(concurrency), 공정성(fairness), 속도 제한(rate limiting)과 같은 확장 문제를 해결하기 위해 설계되었습니다4. 관리하기 어려운 레거시 큐나 pub/sub 시스템을 대체하여 실패로부터 복구하고 다양한 확장 문제를 해결할 수 있는 내구성 있는 워크로드를 설계할 수 있게 해줍니다5.

Hatchet은 저지연(25ms 평균 시작 시간)과 고처리량 스케줄링을 제공하며, FIFO, LIFO, Round Robin, Priority Queue와 같은 전략을 내장하여 최소한의 설정으로 일반적인 확장 문제를 우회할 수 있습니다6.

Inngest
#

Inngest는 모든 클라우드에서 작동하는 오픈소스 내구성 워크플로우 플랫폼입니다. 실패 시 자동으로 재시도하는 상태 유지, 장기 실행 단계 함수를 코드로 작성할 수 있게 해줍니다7. 큐, 이벤트 스트림, 상태에 관한 모든 것을 추상화하여 코드에 집중할 수 있게 합니다.

Inngest는 2021년 Buffer의 전 CTO인 Dan Farrelly와 Docker의 전 엔지니어인 Tony Holdstock-Brown이 설립했으며, 2023년 GGV를 필두로 300만 달러의 시드 투자를 받았습니다8.

기술적 특징 비교
#

아키텍처 및 기술 스택
#

Temporal은 Go 언어로 작성된 grpc 라이브러리를 사용하며, 완전한 애플리케이션 상태를 보존하는 개발 추상화를 제공합니다9. Worker 패턴을 사용하여 실행하며, 클라이언트는 workflow 함수를 실행하지만 실제로는 worker의 workflow를 수행하는 구조입니다9.

Restate는 HTTP/2 서버를 통해 서비스를 노출하며, Knative와 함께 사용하여 서버리스 애플리케이션을 배포할 수 있습니다3. Restate는 단일 바이너리로 제공되어 실행과 운영이 간단하며, Rust로 개발되어 자원 효율적이고 복원력이 뛰어납니다10.

Hatchet은 Postgres를 기반으로 하는 트랜잭션 큐잉과 DAG 스타일 실행을 지원합니다. SKIP LOCKED와 최근 PG 릴리스의 마일스톤(active-active 복제와 같은)을 활용하여 여러 지역에 걸쳐 Postgres를 수평적으로 확장하고 10k TPS 이상으로 수직 확장할 수 있다고 주장합니다11.

Inngest는 다중 테넌트, 배치, 디바운싱을 지원하는 자체 큐잉 시스템을 설계하고 구축했으며, FoundationDB로 전환 중입니다. 백엔드는 주로 Go로 작성되었으며, 캐싱, clickhouse, 이벤트 스트림 및 조정을 사용합니다7.

지원 언어
#

각 프로젝트가 지원하는 프로그래밍 언어는 다음과 같습니다:

  • Temporal: 검색 결과에 명확히 나와있지 않지만, Go가 주요 언어로 보입니다.
  • Restate: Golang, Java, Kotlin, Typescript, Rust, Python을 지원합니다3.
  • Hatchet: Python, Typescript, Go용 오픈소스 SDK를 제공합니다5.
  • Inngest: Typescript(47%), Go(48%), Java, Python SDK를 제공하며 교차 언어 함수 호출이 가능합니다712.

기능 비교
#

Temporal:

  • 완전한 애플리케이션 상태 보존 및 다른 머신으로의 마이그레이션1
  • 타이머, 이벤트 소싱, 상태 체크포인트, 재시도, 타임아웃 자동 처리2
  • 큐, pub/sub 시스템, 스케줄러 필요성 제거1

Restate:

  • RPC 서비스 스타일의 코드에 내구성 제공3
  • 크래시 후 이전 상태 복원 및 중단점에서 실행 재개3
  • 대기 시간이 긴 경우 실행 자동 일시 중단으로 리소스 절약3
  • 상태 기계, 이벤트 처리, 사가, 비동기 작업 등 구현 가능13

Hatchet:

  • 초저지연(25ms 평균 시작 시간) 및 고처리량 스케줄링6
  • FIFO, LIFO, Round Robin, Priority Queue 등 내장 전략4
  • 맞춤형 재시도 정책 및 통합 오류 처리4
  • Cron, 일회성 스케줄링, 스파이크 보호, 점진적 스트리밍 지원4

Inngest:

  • 다중 테넌트 인식 흐름 제어(동시성, 스로틀링, 디바운스, 우선순위)14
  • 여러 언어 간 함수 호출 지원7
  • 배치 처리, 많은 이벤트를 단일 함수 호출로 그룹화7
  • 개선된 대시보드, 추적 및 지표 내장7
  • 함수 재생, 일시 중지, 대량 취소와 같은 고급 복구 도구7

사용 사례 및 응용 분야
#

Temporal
#

Temporal은 서비스 오케스트레이션, 트랜잭션 처리, 인프라 관리, 비동기 작업, 작업 스케줄링과 같은 사용 사례에 적합합니다1. 특히 Stripe, Netflix, Datadog, HashiCorp, Alaska Airlines, Box와 같은 대형 기업에서 미션 크리티컬한 워크로드에 사용하고 있습니다1.

Restate
#

Restate는 워크플로우, 이벤트 중심 애플리케이션, 사가 패턴 구현, 상태 유지 이벤트 처리에 적합합니다3. Knative와 함께 사용하면 가용성이 부족한 상황에서도 상태 저장 서버리스 애플리케이션을 구축할 수 있습니다. 또한 워크플로우, 사가, 상태 유지 이벤트 처리(Knative Eventing과 결합)와 같은 다양한 애플리케이션을 구축할 수 있습니다3.

Hatchet
#

Hatchet은 생성형 AI를 위한 공정성(바쁜 사용자가 시스템을 압도하지 않도록 요청 공정 분배), 문서 및 이미지 색인을 위한 배치 처리, 다중 모달 시스템을 위한 워크플로우 오케스트레이션, 이벤트 기반 처리를 위한 정확성과 같은 사용 사례에 적합합니다4.

Inngest
#

Inngest는 AI 에이전트 워크플로우, 생성형 AI를 위한 공정성, 문서 색인을 위한 배치 처리, 다중 모달 시스템을 위한 워크플로우 오케스트레이션과 같은 사용 사례에 적합합니다14. 또한 AI 관련 체인 단계 함수, 검색/RAG 인덱스 및 데이터 파이프라인, 통합 및 웹훅, 결제 및 청구 흐름과 같은 사용 사례도 지원합니다7.

장단점 분석
#

Temporal
#

장점:

  • 수천 개의 기업에서 검증된 안정적인 플랫폼1
  • 완전한 애플리케이션 상태 보존으로 높은 신뢰성 제공1
  • MIT 라이센스로 제공되는 100% 오픈소스 솔루션1

단점:

  • 분석에 따르면 Go, Rust, TypeScript를 오가며 동작을 분석하기 어려울 수 있음9
  • 내부 구조가 복잡하여 프로토콜 단에서 데이터 송/수신 정보를 기반으로 분석하기 어려움9

Restate
#

장점:

  • 단일 바이너리로 제공되어 실행과 운영이 간단함10
  • 자원 효율적이고 복원력이 뛰어남(Rust 사용)10
  • 서버리스/스테이트리스 HTTP 서버로 배포 가능3

단점:

  • 비교적 새로운 프로젝트로 Temporal에 비해 생태계가 작을 수 있음
  • 배포 전략이 복잡할 수 있음(k8s 클러스터에 스테이트풀 배포 또는 Restate Cloud 관리 서비스 사용)3

Hatchet
#

장점:

  • Postgres 기반으로 데이터 손실 위험 감소(Redis 기반 솔루션과 비교)11
  • 저지연(25ms 평균 시작 시간)과 고처리량 스케줄링 제공6
  • 애플리케이션 개발자를 위한 관찰 가능성 기능 내장11

단점:

  • 현재 RabbitMQ를 pub/sub로 사용하고 있어 추가 의존성이 필요함11
  • 엔진-엔진 및 엔진-작업자 연결을 위해 NATS 사용을 고려 중으로 아직 개발 중인 부분이 있음11

Inngest
#

장점:

  • 개발자 친화적인 SDK와 간결한 API 설계7
  • 로컬 개발을 위한 Dev Server 제공으로 테스트 및 디버깅이 용이함14
  • 다중 테넌트 인식 흐름 제어 기능 제공14

단점:

  • SSPL 라이센스는 일부 기업에서 사용하기 어려울 수 있음15
  • Go(48%)와 TypeScript(47%)가 주요 언어로, 다른 언어 지원이 제한적일 수 있음12

라이센스 및 커뮤니티
#

Temporal은 MIT 라이센스로 제공되며, 활발한 커뮤니티와 함께 오픈소스로 개발되고 있습니다1. Restate의 라이센스는 검색 결과에 명확히 명시되어 있지 않습니다. Hatchet은 MIT 라이센스로 제공됩니다5. Inngest는 Server Side Public License(SSPL)로 제공되며, 지연된 오픈소스 출판(DOSP)하에 Apache 2.0 라이센스도 포함됩니다7.

결론
#

네 가지 오픈소스 프로젝트는 모두 내구성 있는 실행과 워크플로우 관리를 위한 솔루션을 제공하지만, 각각 독특한 접근 방식과 강점을 가지고 있습니다.

Temporal은 가장 성숙하고 널리 채택된 솔루션으로, 미션 크리티컬한 워크로드에 적합합니다. Restate는 상태를 가진 서버리스 애플리케이션에 초점을 맞추고 있으며, 리소스 효율성이 뛰어납니다. Hatchet은 Postgres 기반의 작업 큐로, 데이터 손실 위험을 줄이고 개발자 친화적인 관찰 가능성을 제공합니다. Inngest는 개발자 경험에 중점을 두고 있으며, 다중 테넌트 인식 흐름 제어와 함께 모든 클라우드에서 작동하는 워크플로우 플랫폼을 제공합니다.

프로젝트 선택은 특정 요구 사항, 기존 기술 스택, 팀의 전문성에 따라 달라질 수 있습니다. 하지만 이 네 가지 솔루션 모두 분산 시스템의 복잡성을 추상화하고 개발자가 비즈니스 로직에 집중할 수 있도록 하는 공통된 목표를 가지고 있습니다.

참고 자료
#

위 내용은 Temporal116217189, Restate31310192021, Hatchet452262311, Inngest87151214242526에 관한 공개된 정보를 기반으로 작성되었습니다.


Restate와 Hatchet 오픈소스 프로젝트 심층 비교 분석
#

Restate와 Hatchet은 모두 분산 시스템에서 내구성 있는 워크로드를 처리하기 위한 오픈소스 솔루션이지만, 각각의 접근 방식과 중점을 두는 영역이 다릅니다. 이 보고서에서는 두 프로젝트의 핵심 개념, 아키텍처, 기능, 사용 사례 등을 비교하여 각 솔루션의 장단점을 분석하겠습니다.

핵심 개념 및 목적
#

Restate의 접근 방식
#

Restate는 내구성 있는 실행(Durable Execution) 엔진으로, 상태를 가진 회복력 있는(resilient) 애플리케이션을 구축하는 데 중점을 둡니다. 일반적인 RPC 서비스처럼 보이는 코드를 작성하면 Restate가 실행 진행 상황을 저장하고, 장애가 발생한 후에도 이전 상태로 복원하여 중단된 지점부터 실행을 재개합니다27.

Restate는 “코드를 작성하는 방식을 바꾸지 않고도 내구성을 제공한다"는 철학을 가지고 있으며, 개발자가 일반 함수와 서비스를 작성하듯이 코드를 작성할 수 있게 합니다27. 이는 복잡한 분산 시스템의 개발 부담을 크게 줄여줍니다.

Hatchet의 접근 방식
#

반면 Hatchet은 분산, 내결함성 작업 큐(distributed, fault-tolerant task queue)로, 관리하기 어려운 레거시 큐나 pub/sub 시스템을 대체하여 실패로부터 복구하는 워크로드를 설계하는 데 중점을 둡니다28. 특히 동시성(concurrency), 공정성(fairness), 속도 제한(rate limiting)과 같은 확장 문제를 해결하기 위해 설계되었습니다28.

Hatchet은 최소한의 구성으로 작업을 여러 워커에 분산하고, 실패 시 안정적으로 복구하는 것을 목표로 합니다. 또한 애플리케이션 개발자를 위한 가시성과 관찰 가능성에 큰 중점을 둡니다29.

기술적 특징 및 아키텍처
#

Restate의 기술적 특징
#

Restate는 다음과 같은 주요 기술적 특징을 가지고 있습니다:

HTTP/2 서버를 통해 서비스를 노출하며, 단일 바이너리로 제공되어 실행과 운영이 간단합니다27. Rust로 개발되어 자원 효율적이고 복원력이 뛰어나며, FaaS, Kubernetes, 서버, 컨테이너 등 다양한 환경에서 동작할 수 있습니다27.

또한 Restate는 대기 시간이 긴 경우 실행을 자동으로 일시 중단하여 컴퓨팅 리소스를 낭비하지 않습니다. 이는 “대기 시간” 동안 리소스를 효율적으로 활용할 수 있게 해줍니다27.

Hatchet의 기술적 특징
#

Hatchet은 다음과 같은 주요 기술적 특징을 가지고 있습니다:

Postgres를 기반으로 하는 트랜잭션 큐잉과 DAG(Directed Acyclic Graph) 스타일 실행을 지원합니다28. SKIP LOCKED와 최근 PostgreSQL 릴리스의 주요 기능을 활용하여 여러 지역에 걸쳐 수평적으로 확장하고 10k TPS 이상으로 수직 확장할 수 있다고 주장합니다28.

초저지연(25ms 평균 시작 시간)과 고처리량 스케줄링을 제공하며, FIFO(First In First Out), LIFO(Last In First Out), Round Robin, Priority Queue와 같은 전략을 내장하고 있어 일반적인 확장 문제를 최소한의 설정으로 해결할 수 있습니다29.

주요 기능 비교
#

Restate의 주요 기능
#

Restate는 다음과 같은 주요 기능을 제공합니다:

워크플로우 코드: 내구성 있는 실행을 통해 장애가 발생해도 코드가 끝까지 안정적으로 실행됩니다27.

API 호출 및 웹훅: 동기 코드와 웹훅과 같은 비동기 이벤트를 안정적으로 연결합니다27.

비동기 작업: Restate를 통해 호출된 모든 함수는 내구성 있게 비동기적으로 실행됩니다27.

상태 유지 이벤트 처리: Kafka와 같은 이벤트 소스에서 이벤트를 처리하고 세분화된 재시도 및 워크플로우 의미론을 제공합니다27.

내구성 있는 신호: 외부 신호, 이벤트, 사용자 입력을 안정적으로 처리하는 워크플로우와 이벤트 핸들러를 생성합니다27.

멱등성: 모든 RPC 또는 이벤트 핸들러에 멱등성을 추가합니다27.

사가: 중단하고 롤백해야 할 때 이전 작업을 취소하는 장기 실행 트랜잭션인 사가 및 보상 패턴을 구현합니다27.

상태 머신: 데이터베이스나 트랜잭션 없이 일관되고 확장 가능한 상태 머신을 생성합니다27.

Hatchet의 주요 기능
#

Hatchet은 다음과 같은 주요 기능을 제공합니다:

관찰 가능성: 모든 실행을 완전히 검색할 수 있으며, 로그를 스트리밍하고 지연 시간, 오류율 또는 사용자 정의 메트릭을 추적합니다29.

실용적인 내구성 실행: 이벤트를 재생하고 워크플로우의 특정 단계에서 수동으로 실행을 재개할 수 있습니다29.

Cron: 함수 실행을 위한 반복 일정을 설정합니다29.

일회성 스케줄링: 특정 시간과 날짜에 실행되도록 함수 실행을 예약합니다29.

스파이크 보호: 트래픽 스파이크를 부드럽게 처리하고 시스템이 처리할 수 있는 만큼만 실행합니다29.

점진적 스트리밍: 백그라운드 워커에서 함수가 진행됨에 따라 업데이트를 구독합니다29.

맞춤형 재시도 정책 및 통합 오류 처리: 일시적인 실패로부터 신속하게 복구되도록 합니다28.

사용 사례 및 적용 분야
#

Restate의 사용 사례
#

Restate는 다음과 같은 사용 사례에 특히 적합합니다:

워크플로우 및 장기 실행 프로세스: 내구성 있는 실행 덕분에 복잡한 워크플로우와 장기 실행 프로세스를 안정적으로 관리할 수 있습니다27.

이벤트 기반 애플리케이션: Kafka와 같은 이벤트 소스에서 이벤트를 처리하고 상태를 유지하면서 처리할 수 있습니다27.

사가 패턴 구현: 장기 실행 트랜잭션과 보상 패턴을 구현하여 롤백이 필요한 경우 이전 작업을 취소할 수 있습니다27.

상태 머신: 데이터베이스나 트랜잭션 없이도 일관되고 확장 가능한 상태 머신을 생성할 수 있습니다27.

Hatchet의 사용 사례
#

Hatchet은 다음과 같은 사용 사례에 특히 적합합니다:

생성형 AI를 위한 공정성: 바쁜 사용자가 시스템을 압도하지 않도록 요청을 공정하게 분배합니다28.

문서 및 이미지 색인을 위한 배치 처리: 대규모 배치 처리를 수행하고 실패 시 작업 중간에서 재개할 수 있습니다28.

다중 모달 시스템을 위한 워크플로우 오케스트레이션: 다중 모달 입력과 출력을 오케스트레이션하고 DAG 스타일 실행을 지원합니다28.

이벤트 기반 처리를 위한 정확성: 외부 이벤트나 시스템 내부 이벤트에 응답하고 자동으로 이벤트를 재생할 수 있습니다28.

확장성 및 성능
#

Restate의 확장성과 성능
#

Restate는 단일 바이너리로 제공되어 실행과 운영이 간단하며, Rust로 개발되어 자원 효율적이고 복원력이 뛰어납니다27. 또한 Restate 1.2 버전부터는 고가용성, 분산 배포 기능을 추가하여 확장성을 강화했습니다27.

Restate는 대기 시간이 긴 경우 실행을 자동으로 일시 중단하여 컴퓨팅 리소스를 효율적으로 사용하며, FaaS, Kubernetes, 서버, 컨테이너 등 다양한 환경에서 유연하게 동작할 수 있습니다27.

Hatchet의 확장성과 성능
#

Hatchet은 초저지연(25ms 평균 시작 시간)과 고처리량 스케줄링을 제공하여 실시간 상호작용 기능과 미션 크리티컬한 작업에 필요한 안정성을 완벽하게 균형 있게 제공합니다29.

Postgres를 기반으로 하는 트랜잭션 큐잉 시스템을 사용하며, SKIP LOCKED와 최근 PostgreSQL 릴리스의 주요 기능을 활용하여 여러 지역에 걸쳐 수평적으로 확장하고 10k TPS 이상으로 수직 확장할 수 있다고 주장합니다28.

개발자 경험 및 지원 환경
#

Restate의 개발자 경험
#

Restate는 일반 함수와 서비스처럼 코드를 작성할 수 있게 하여 개발자가 분산 시스템의 복잡성에 대해 걱정할 필요가 없도록 합니다27. 또한 Restate는 Golang, Java, Kotlin, Typescript, Rust, Python 등 다양한 언어를 지원합니다27.

Restate 1.2 버전부터는 그래픽 UI를 제공하여 분산 애플리케이션 디버깅을 지원하며, 로컬 개발 서버를 통해 개발 및 테스트 환경을 향상시킵니다27.

Hatchet의 개발자 경험
#

Hatchet은 Python, Typescript, Go용 오픈소스 SDK를 제공하여 개발자가 적절한 도구를 사용하여 개발할 수 있도록 지원합니다28. 또한 애플리케이션 개발자를 위한 관찰 가능성 기능을 내장하여 개발 및 디버깅 경험을 향상시킵니다28.

Hatchet은 모든 실행을 완전히 검색할 수 있게 하여 문제를 빠르게 식별할 수 있으며, 로그를 스트리밍하고 지연 시간, 오류율 또는 사용자 정의 메트릭을 추적합니다29.

종합 비교 및 선택 기준
#

Restate와 Hatchet은 각각 고유한 강점과 최적화된 사용 사례를 가지고 있습니다.

Restate가 적합한 경우
#

코드를 최소한으로 변경하면서 내구성 있는 실행이 필요한 경우, 사가 패턴이나 상태 머신과 같은 복잡한 분산 시스템 패턴을 구현해야 하는 경우, 그리고 자원 효율성과 복원력이 중요한 경우 Restate가 더 적합할 수 있습니다.

Hatchet이 적합한 경우
#

작업 큐와 공정한 작업 분배가 필요한 경우, 관찰 가능성과 모니터링이 중요한 경우, 생성형 AI와 같은 최신 사용 사례에 최적화된 솔루션이 필요한 경우, 그리고 Postgres 기반의 안정적인 트랜잭션 큐잉 시스템을 원하는 경우 Hatchet이 더 적합할 수 있습니다.

결론
#

Restate와 Hatchet은 모두 분산 시스템에서 내구성 있는 워크로드를 처리하기 위한 강력한 오픈소스 솔루션입니다. Restate는 내구성 있는 실행과 다양한 분산 시스템 패턴 구현에 중점을 두는 반면, Hatchet은 작업 큐, 공정한 작업 분배, 관찰 가능성에 중점을 둡니다.

각 프로젝트는 고유한 강점과 최적화된 사용 사례를 가지고 있으므로, 프로젝트의 요구사항, 기존 인프라, 개발 팀의 전문성 등을 고려하여 적절한 솔루션을 선택하는 것이 중요합니다. 두 솔루션 모두 분산 시스템 개발의 복잡성을 추상화하고 개발자가 핵심 비즈니스 로직에 집중할 수 있도록 도와주는 공통된 목표를 가지고 있습니다.



  1. https://github.com/temporalio ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. https://temporal.io ↩︎ ↩︎ ↩︎

  3. https://knative.dev/blog/articles/Building-Stateful-applications-with-Knative-and-Restate/ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  4. https://news.hada.io/topic?id=13722 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  5. https://github.com/hatchet-dev/hatchet ↩︎ ↩︎ ↩︎ ↩︎

  6. https://hatchet.run ↩︎ ↩︎ ↩︎ ↩︎

  7. https://news.ycombinator.com/item?id=41604042 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  8. https://appmaster.io/ko/news/inggestneun-300man-jageum-jiweon-baegendeu-weokeupeulrou-gaebaleul-mogeumhabnida ↩︎ ↩︎

  9. https://swcho.github.io/blogs/2023-12-25-temporal-2 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  10. https://restate.dev ↩︎ ↩︎ ↩︎ ↩︎

  11. https://news.ycombinator.com/item?id=39643136 ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  12. https://openalternative.co/inngest ↩︎ ↩︎ ↩︎

  13. https://github.com/restatedev/restate ↩︎ ↩︎

  14. https://www.inngest.com ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  15. https://news.ycombinator.com/item?id=31910762 ↩︎ ↩︎

  16. https://www.opensourcealternative.to/project/temporal ↩︎

  17. https://web.temporal.io ↩︎

  18. https://aws.amazon.com/startups/offers/temporal?lang=ko ↩︎

  19. https://docs.restate.dev ↩︎

  20. https://www.contributor.fyi/restate ↩︎

  21. https://github.com/restatedev ↩︎

  22. https://docs.hatchet.run/home ↩︎

  23. https://openalternative.co/hatchet ↩︎

  24. https://www.inngest.com/blog/open-source-event-driven-queue ↩︎

  25. https://github.com/inngest ↩︎

  26. https://github.com/inngest/inngest ↩︎

  27. https://restate.dev ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  28. https://github.com/hatchet-dev/hatchet ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  29. https://hatchet.run ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎