Go 언어, 워크플로우(Workflow)를 위한 새로운 도전!

by DD
3개월 전
조회수 20

Go 언어의 context.Context 인터페이스 확장을 통해 내구성을 갖춘 워크플로우(Workflow) 구현

단일 인터페이스(Single Interface) 제공 및 컴파일 타임 타입 안전성(Compile-time Type Safety) 확보

RunWorkflowRunAsStep 메서드를 활용하여 워크플로우 및 스텝 함수 실행

Go의 context.Context를 활용하여 데드라인(Deadline) 및 취소(Cancellation) 기능 지원

JSON 인코딩(JSON Encoding)을 사용하여 워크플로우의 입출력(I/O)을 직렬화(Serialization)

Go context.Context를 활용한 내구성 있는 워크플로우(Workflow) 구현

저자는 Go의 context.Context 인터페이스를 확장하여 워크플로우의 실행 상태를 관리하고, 워크플로우와 스텝 간의 관계를 표현한다. durable.Context 인터페이스를 통해 워크플로우 및 스텝 함수를 실행하며, Go의 context 기능을 활용하여 데드라인(Deadline) 및 취소(Cancellation) 기능을 지원한다. 특히, RunWorkflow 메서드는 워크플로우 실행 상태를 관리하고, RunAsStep 메서드는 스텝 함수를 실행하는 데 사용된다.

컴파일 타임 타입 안전성(Compile-time Type Safety) 확보를 위한 설계

저자는 워크플로우(Workflow) 및 스텝 함수의 컴파일 타임 타입 안전성을 보장하기 위해, 유연한 함수 시그니처(Signature)를 채택했다. Workflow[P any, R any]Step[R any] 타입을 정의하여, 다양한 입력 및 출력 타입을 지원하면서도 컴파일 시점에 타입 검사를 수행한다. 이러한 설계는 런타임(Runtime) 오류를 줄이고, 개발자가 안전하게 워크플로우를 구축할 수 있도록 돕는다.

단일 인터페이스(Single Interface) 제공 및 Go 개발자 친숙성

저자는 durable.Context를 통해 단일 인터페이스를 제공하여, 사용자가 워크플로우 라이브러리를 쉽게 이해하고 사용할 수 있도록 설계했다. 또한, Go 개발자에게 친숙한 context.Context 인터페이스를 활용하여, 기존 Go 코드와의 통합을 용이하게 했다. RunWorkflowRunAsStep 메서드는 Go 개발자들이 일반적으로 사용하는 패턴을 따르도록 설계되어, 학습 곡선을 최소화한다.

JSON 기반 직렬화(Serialization) 방식 채택

저자는 워크플로우의 입출력(I/O)을 직렬화하기 위해 JSON 인코딩(JSON Encoding)을 선택했다. 초기에는 encoding/gob을 사용했지만, 제네릭(Generic) 슬라이스(Slice)를 지원하는 데 어려움이 있어 JSON으로 변경했다. JSON은 다양한 환경에서 쉽게 사용할 수 있으며, 워크플로우의 상태를 저장하고 복원하는 데 유연성을 제공한다. JSON 기반 직렬화는 워크플로우의 내구성을 확보하는 데 중요한 역할을 한다.

Go-Native Durable Execution