최근 액션 단위로 작업을 구성하는 워크플로우 구조를 다루는 프로젝트를 경험하면서
다음과 같은 고민이 생겼다.
Connection getDb(config)FtpClient getFtp(config)void closeAll()void updateFrom(Result result)Map<String, Object> buildNextConfig(Step step)Result run(Step step, Map<String, Object> config, ResourceManager resourceManager)Step findNext(Step current, String resultKey)// 자원 준비
Connection conn = resourceManager.getDb(config.get("db"));
// 다음 Step 확인
Step nextStep = stepResolver.findNext(currentStep, resultKey);
// 실행
Result result = stepExecutor.run(nextStep, config, resourceManager);
// 결과 저장
sharedStateContext.updateFrom(result);
// 다음 config 준비
Map<String, Object> nextConfig = sharedStateContext.buildNextConfig(nextStep);
com.workflow.engine
├── WorkflowEngine # 전체 흐름 제어
├── StepExecutor # Step 실행 책임
├── StepResolver # 분기 판단
├── SharedStateContext # 상태/결과 공유
├── ResourceManager # 외부 자원 연결