본문으로 건너뛰기

개요

동시성 원칙은 하나의 애플리케이션을 여러 작업 단위로 나누고, 필요한 만큼 프로세스나 작업자를 늘려 처리량을 확장하라는 뜻입니다. 모든 일을 하나의 긴 실행 흐름에 묶으면 장애와 병목을 분리하기 어렵습니다.

HandStack에서는 웹 요청, 계약 기반 거래, 서버 함수, 파일 처리, 관리작업, 스케줄 작업을 구분해서 생각해야 합니다. 모두 같은 ack 프로세스 안에서 시작될 수 있지만 업무 성격은 다릅니다.

HandStack 동시성 관점

HandStack에서 동시성을 볼 때는 다음 단위를 구분합니다.

  • 웹 요청: 브라우저와 API 클라이언트의 요청
  • 거래 실행: transact가 계약을 해석하고 라우팅하는 작업
  • 함수 실행: function 모듈의 Node.js, C#, Python 기능
  • DB 작업: dbclient를 통한 SQL 실행
  • 그래프 작업: graphclient를 통한 Cypher 실행
  • 명령 작업: command를 통한 CLI 또는 HTTP 호출
  • 프롬프트 작업: prompter를 통한 LLM 요청과 도구 호출
  • 프록시 작업: forwarder를 통한 브라우저 컨텍스트 재사용
  • 파일 작업: 업로드, 다운로드, 리포지토리 처리
  • 관리작업: task 스크립트를 통한 일회성 작업
  • 배포 작업: 빌드, 복사, 번들링, 재시작

동시성 설계의 핵심은 오래 걸리는 작업과 즉시 응답해야 하는 작업을 분리하는 것입니다.

확장 기준

HandStack은 모듈러 모놀리식 구조를 따르지만, 운영에서는 여러 인스턴스나 보조 프로세스를 둘 수 있습니다. 트래픽이 늘면 ack 인스턴스를 늘리거나, 배치성 작업을 별도 실행 경로로 분리할 수 있습니다.

다만 프로세스를 늘리려면 다음 전제가 필요합니다.

  • 세션과 캐시가 인스턴스에만 묶이지 않아야 합니다.
  • 파일 저장소 경로와 권한이 일관되어야 합니다.
  • 중복 실행되면 안 되는 작업은 잠금이나 큐 기준이 있어야 합니다.
  • 로그에서 인스턴스와 요청을 구분할 수 있어야 합니다.

마치며

HandStack에서 동시성은 무조건 프로세스 수를 늘리는 문제가 아닙니다. 업무 작업의 성격을 나누고, 병목이 되는 작업을 식별하고, 안전하게 병렬화할 수 있는 경계를 만드는 것이 핵심입니다.