본문으로 건너뛰기

© 2026 Molayo

HN요약2026. 05. 17. 01:28

Show HN: DBOS Java – Postgres 기반의 내구성 있는 워크플로 (Durable Workflows)

요약

DBOS는 Postgres 데이터베이스를 기반으로 하는 경량 내구성 있는 워크플로(Durable Workflows) 라이브러리입니다. 이 시스템은 애플리케이션이 충돌, 재시작 또는 장애가 발생하더라도 작업의 체크포인트(checkpoint)를 DB에 기록하여 정확한 상태에서 복구하고 작업을 중단된 지점부터 계속할 수 있도록 보장합니다. 이를 통해 AI 에이전트, 데이터 동기화, 결제 시스템 등 신뢰성이 필수적인 장기 실행 워크플로 구축을 용이하게 합니다.

핵심 포인트

  • DBOS는 Postgres 기반으로 작동하는 경량 내구성 있는 워크플로 솔루션을 제공합니다.
  • 워크플로는 각 단계의 체크포인트를 DB에 기록하여 장애 발생 시에도 정확한 상태 복구를 보장합니다.
  • 별도의 오케스트레이터나 외부 의존성 없이, 기존 Java 프로그램에 쉽게 통합할 수 있습니다.
  • 비동기 실행 및 내구성 있는 큐 기능을 제공하여 장시간/분산 작업을 안정적으로 관리할 수 있습니다.
<div align="center">

DBOS Transact: 경량 내구성 있는 워크플로 (Lightweight Durable Workflows)

Documentation   •   Examples   •   Github   •   Discord

</div>

DBOS란 무엇인가요?

DBOS는 Postgres 상에 구축된 경량 내구성 있는 워크플로 (Durable Workflows)를 제공합니다.
본질적으로, DBOS는 상태를 잃거나 작업을 중복하지 않고도 충돌(crash), 재시작, 그리고 장애(failure)로부터 살아남을 수 있는 장기 실행 가능하고 신뢰할 수 있는 코드를 작성할 수 있도록 도와줍니다.

워크플로가 실행됨에 따라, DBOS는 각 단계의 체크포인트 (checkpoint)를 Postgres 데이터베이스에 기록합니다.
프로세스가 중단되면 (장애 발생, 의도적인 일시 중단, 또는 머신 종료), 프로그램은 해당 체크포인트로부터 복구하여 정확한 상태를 복원하고, 마치 아무 일도 없었던 것처럼 중단된 지점부터 다시 계속할 수 있습니다.

실제로 이는 AI 에이전트 (AI agents), 데이터 동기화 (data synchronization), 결제 (payments), 또는 완료하는 데 몇 분, 며칠, 혹은 몇 주가 걸리는 모든 사례와 같이 신뢰할 수 있는 시스템을 구축하는 것을 더 쉽게 만들어 줍니다.
임시방편적인 재시도 로직 (retry logic)이나 데이터베이스 체크포인트를 덧붙이는 대신, DBOS 워크플로는 프로그램이 중단된 정확한 지점부터 어떤 장애로부터든 복구할 수 있도록 보장하는 하나의 일관된 모델을 제공합니다.

이 라이브러리에는 프로그램에 내구성 있는 워크플로를 추가하는 데 필요한 모든 것이 포함되어 있습니다. Postgres를 제외하고 별도의 서비스나 오케스트레이터 (orchestrator), 또는 어떠한 외부 의존성도 없습니다.
단순한 라이브러리이기 때문에 프로젝트에 점진적으로 추가할 수 있으며, Spring과 같은 프레임워크와 함께 즉시 사용할 수 있습니다.
또한 Postgres를 기반으로 구축되었기 때문에, 여러분에게 익숙한 모든 도구 (백업, GUI, CLI 도구)를 네이티브로 지원하며 모든 Postgres 제공업체와 함께 작동합니다.

특징 (Features)

<details open><summary><strong>💾 내구성 있는 워크플로 (Durable Workflows)</strong></summary>

워크플로 (Workflows)는 Postgres에 상태를 체크포인트 (checkpointing) 함으로써 프로그램을 내구성 있게 (durable) 만듭니다.
프로그램이 실패하더라도, 재시작 시 모든 워크플로가 마지막으로 완료된 단계부터 자동으로 재개됩니다.

일반 함수를 워크플로와 단계 (steps)로 등록함으로써, 단 몇 줄의 코드만으로 기존 Java 프로그램에 내구성 있는 워크플로를 추가할 수 있습니다:


interface Example {
    public void workflow();
...

워크플로는 특히 다음과 같은 경우에 유용합니다:

  • 비즈니스 프로세스를 오케스트레이션 (Orchestrating) 하여 어떤 실패로부터도 원활하게 복구하도록 함.
  • 관찰 가능하고 (observable) 결함 허용 (fault-tolerant) 가능한 데이터 파이프라인 (data pipelines) 구축.
  • AI 에이전트 (AI agent) 또는 신뢰할 수 없거나 비결정론적인 (non-deterministic) API에 의존하는 애플리케이션 운영.

Read more ↗️

</details> <details><summary><strong>📒 비동기 실행 (Asynchronous execution) </strong></summary>

인터페이스나 구현을 변경하지 않고도 워크플로를 비동기적으로 실행할 수 있습니다.

이는 장시간 실행되는 백그라운드 워크플로에 이상적입니다. 코드는 나중에 반환될 수 있으며, 완료 상태를 확인하거나 결과를 가져올 수 있습니다.

var handle = DBOS.startWorkflow(()->example.exampleWorkflow("HelloDBOS"));
result = handle.getResult();

Read more ↗️

</details> <details><summary><strong>📒 내구성 있는 큐 (Durable Queues)</strong></summary>

DBOS 큐는 분산 작업 (distributed tasks)을 내구성 있게 실행할 수 있도록 도와줍니다.
내구성 있는 워크플로에서 작업을 인큐 (enqueue) 할 수 있으며, 프로세스 중 하나가 이를 가져와 실행합니다.
DBOS는 작업의 실행을 관리합니다. 애플리케이션이 중단되더라도 작업이 완료됨을 보장하며, 호출자가 작업을 다시 제출할 필요 없이 결과를 받을 수 있도록 보장합니다.

큐는 흐름 제어 (flow control) 기능도 제공하므로, 큐별 또는 프로세스별로 작업의 동시성 (concurrency)을 제한할 수 있습니다.
또한 작업에 대한 타임아웃 (timeouts) 설정, 큐에 쌓인 작업의 실행 빈도 제한 (rate limit), 작업 중복 제거 (deduplicate), 또는 작업 우선순위 지정 (prioritize)이 가능합니다.

단 몇 줄의 코드만으로 워크플로 (workflows)에 큐 (queues)를 추가할 수 있습니다.
별도의 큐잉 서비스 (queueing service)나 메시지 브로커 (message broker)가 필요하지 않으며, 오직 Postgres만 있으면 됩니다.

 public void queuedTasks() {
    for (int i = 0; i < 3; i++) {
        String workflowId = "child" + i;
...

Read more ↗️

</details> <details><summary><strong>📅 내구성 있는 스케줄링 (Durable Scheduling)</strong></summary>

cron 구문을 사용하여 워크플로를 스케줄링하거나, 내구성 있는 슬립 (durable sleep)을 사용하여 실행 전 원하는 만큼(며칠 또는 몇 주 동안이라도) 워크플로를 일시 중지할 수 있습니다.

단 하나의 어노테이션 (annotation)을 사용하여 워크플로를 스케줄링할 수 있습니다:


public class SchedulerImpl implements Scheduler {
    
...

Read more ↗️

</details> <details><summary><strong>📫 내구성 있는 알림 (Durable Notifications)</strong></summary>

알림 (notification)이 수신될 때까지 워크플로 실행을 일시 중지하거나, 워크플로에서 이벤트를 방출 (emit)하여 외부 클라이언트에 진행 상황 업데이트를 보낼 수 있습니다.
모든 알림은 Postgres에 저장되므로, 정확히 한 번 (exactly-once) 의미론 (semantics)으로 송수신할 수 있습니다.
이벤트를 기다릴 때 내구성 있는 타임아웃 (durable timeouts)을 설정하면, 중단 (interruptions)이나 재시작 (restarts)이 발생하더라도 원하는 만큼(며칠 또는 몇 주 동안이라도) 기다릴 수 있으며, 알림이 도착하거나 타임아웃에 도달하면 다시 재개할 수 있습니다.

예를 들어, 결제 서비스 (payments service)로부터의 알림을 내구성 있게 기다리며 이를 정확히 한 번 처리하는 신뢰할 수 있는 결제 워크플로를 구축해 보세요:

@Workflow(name = "billing")
public void billingWorkflow() {
    // 요금을 계산한 다음, 결제 서비스로 청구서를 제출합니다
...
</details>

시작하기 (Getting Started)

시작하려면 quickstart를 따라 이 오픈 소스 라이브러리를 설치하고 Postgres 데이터베이스에 연결하세요.
그 다음, programming guide를 확인하여 내구성 있는 워크플로와 큐를 사용하여 구축하는 방법을 배워보세요.

문서 (Documentation)

https://docs.dbos.dev

Examples

https://docs.dbos.dev/examples

DBOS vs. Other Systems

<details><summary><strong>DBOS vs. Temporal</strong></summary>

DBOS와 Temporal 모두 내구성 있는 실행 (Durable Execution)을 제공하지만, DBOS는 가벼운 Postgres 기반 라이브러리로 구현된 반면 Temporal은 외부에서 오케스트레이션 (Orchestration)되는 서버로 구현되었습니다.

오픈 소스 라이브러리를 설치하고, Postgres에 연결하며, 워크플로 (Workflows)와 스텝 (Steps)에 어노테이션 (Annotation)을 추가함으로써 프로그램에 DBOS를 추가할 수 있습니다.
이와 대조적으로, 프로그램에 Temporal을 추가하려면 워크플로와 스텝 (Activities)을 Temporal 워커 (Worker)로 이동시키고, 해당 워크플로를 오케스트레이션할 Temporal 서버를 구성하며, 오직 Temporal 클라이언트 (Client)를 통해서만 워크플로에 접근할 수 있도록 프로그램을 재설계 (Rearchitect)해야 합니다.
이 페이지에서 더 자세한 비교 내용을 확인할 수 있습니다.

</details>

Community

질문을 하거나 커뮤니티와 함께하고 싶다면, Discord에 참여하세요!
버그를 발견하거나 기능 요청 (Feature Request)이 있다면, 주저하지 말고 이곳 GitHub에 이슈 (Issue)를 생성해 주세요.
기여 (Contributing)에 관심이 있다면, 우리의 기여 가이드 (Contributions Guide)를 확인해 보세요.

AI 자동 생성 콘텐츠

본 콘텐츠는 HN AI Engineering의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0