Go 언어, 워크플로우(Workflow)를 위한 새로운 도전!
Go 언어의 context.Context 인터페이스 확장을 통해 내구성을 갖춘 워크플로우(Workflow) 구현
단일 인터페이스(Single Interface) 제공 및 컴파일 타임 타입 안전성(Compile-time Type Safety) 확보
RunWorkflow 및 RunAsStep 메서드를 활용하여 워크플로우 및 스텝 함수 실행
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 코드와의 통합을 용이하게 했다. RunWorkflow 및 RunAsStep 메서드는 Go 개발자들이 일반적으로 사용하는 패턴을 따르도록 설계되어, 학습 곡선을 최소화한다.
JSON 기반 직렬화(Serialization) 방식 채택
저자는 워크플로우의 입출력(I/O)을 직렬화하기 위해 JSON 인코딩(JSON Encoding)을 선택했다. 초기에는 encoding/gob을 사용했지만, 제네릭(Generic) 슬라이스(Slice)를 지원하는 데 어려움이 있어 JSON으로 변경했다. JSON은 다양한 환경에서 쉽게 사용할 수 있으며, 워크플로우의 상태를 저장하고 복원하는 데 유연성을 제공한다. JSON 기반 직렬화는 워크플로우의 내구성을 확보하는 데 중요한 역할을 한다.