나열된 할 일을 실행 가능한 순서로 바꾼다
학교 안내 답변을 만들기 위해 질문 정리, 사용자 권한 확인, 문서 검색, 개인정보 검사, 답변 생성, 출처 확인이 필요하다고 합시다. 목록에는 여섯 일이 보이지만 시작 조건은 보이지 않습니다. 문서 검색은 권한 확인 뒤에 시작해야 하고, 답변 생성은 검색과 개인정보 검사가 모두 끝나야 합니다. 의존 그래프에서는 작업을 노드로, 선행 작업에서 후속 작업으로 향하는 화살표를 간선으로 그립니다. 화살표는 시간의 앞뒤보다 ‘이 결과가 있어야 다음 일이 가능하다’는 조건을 뜻합니다.[1]
원문에서 의존 관계를 찾을 때는 ‘후에’라는 표현만 보지 않습니다. “검사 결과를 반영해 작성한다”, “승인된 자료만 사용한다”, “두 확인이 끝나면 게시한다”처럼 필요한 산출물이 드러나는 문장을 찾습니다. 각 문장을 작업 ID와 연결하고, 시간상 먼저 일어났지만 결과를 쓰지 않는 관계는 의존선에서 제외합니다.
노드·화살표·합류 조건을 문장으로 읽는다
노드에는 행동이 분명한 이름과 고유 ID를 적습니다. ‘자료’보다 ‘관련 문서 검색’이 낫습니다. A→B는 A 완료가 B 시작의 선행 조건이라는 뜻입니다. B로 화살표 두 개가 들어올 때 기본 해석은 두 선행 작업을 모두 기다리는 AND 합류입니다. 하나만 충족해도 되는 선택 관계는 조건 라벨이나 별도 결정 규칙으로 밝혀야 합니다. 화살표가 단지 정보 전달인지 실행 조건인지도 범례에 씁니다. 같은 선을 두 의미로 쓰면 계산이 흔들립니다.
합류 조건은 특히 꼼꼼히 적습니다. 두 선행 작업 가운데 하나만 성공해도 되는지, 둘 다 성공해야 하는지, 하나가 실패하면 다른 결과를 사용해 계속할 수 있는지가 실행 결과를 바꿉니다. 단순한 화살표 개수만으로 이를 추측하게 두지 않고 노드 옆에 ALL, ANY 또는 구체적인 시작 문장을 씁니다.
| 표현 | 읽는 문장 | 추가 표기 |
|---|---|---|
| A → B | A가 끝나야 B 시작 | 필요하면 전달 산출물 |
| A·C → B | A와 C를 모두 기다림 | AND 합류 |
| A 또는 C → B | 선택된 하나를 기다림 | 조건과 선택 주체 |
서로 이어지지 않은 작업은 같은 시각에 시작할 수 있다
질문 정리 뒤 문서 검색과 문체 기준 확인이 서로의 결과를 쓰지 않는다면 두 작업은 병렬 후보입니다. 그래프에서 같은 선행 노드에서 갈라지고 서로 연결되지 않은 노드로 보입니다. 다만 그래프에 선이 없다는 사실이 실제로 독립임을 보증하지는 않습니다. 같은 계정 잠금, 하나뿐인 담당자, 호출 한도처럼 숨은 자원 제약이 있을 수 있습니다. 도표에는 논리적 의존을, 별도 주석에는 자원 제약을 적어 실행 가능성을 다시 확인합니다.
자원 제약을 함께 검토하면 그래프가 실제 일정으로 바뀝니다. 담당자 한 명이 두 검사를 맡으면 논리적으로 독립이어도 동시에 할 수 없습니다. 반대로 자동 검사 도구를 별도로 배치하면 병렬화할 수 있습니다. 이때 의존선을 새로 긋기보다 자원표에 담당자와 동시 처리 한도를 적어 논리 조건과 운영 제약을 분리합니다.
문서 검색 ∥ 문체 검사
서로의 결과를 기다리지 않음
동시 호출 한도 1개
실제 실행은 차례로 진행
답변 제작·자료 갱신·게시 승인에서 다른 선행 조건을 찾는다
답변 제작은 검색과 안전 검사를 함께 시작한 뒤 생성으로 합류할 수 있습니다. 자료 갱신은 새 파일 수집 뒤 형식 검사와 중복 검사를 병렬로 실행하고, 둘을 통과한 자료만 색인합니다. 게시 승인은 사실 확인과 저작권 확인을 모두 마친 뒤 편집자 승인을 요청합니다. 세 사례의 모양은 비슷해도 실패 처리 규칙은 다릅니다. 검색 실패는 재시도할 수 있고, 저작권 확인 실패는 게시를 중단하며, 중복 자료는 해당 항목만 제외할 수 있습니다. 화살표 옆에 산출물과 실패 규칙을 적으면 실행 설계로 쓸 수 있습니다.
실패 처리도 후속 작업의 상태를 결정합니다. 선행 작업이 실패했을 때 후속 작업을 건너뛸지, 제한된 결과로 계속할지, 사람에게 넘길지를 화살표 라벨에 기록합니다. 같은 노드가 성공 경로와 실패 경로에서 다른 입력을 받는다면 별도 노드로 나누는 편이 좋습니다. 숨은 예외가 줄어들수록 그래프를 실행 규칙으로 옮기기 쉬워집니다.
| 흐름 | 합류 조건 | 실패 시 |
|---|---|---|
| 답변 제작 | 검색+안전 검사 | 검색 재시도 또는 답변 보류 |
| 자료 갱신 | 형식+중복 검사 | 해당 파일 제외 |
| 게시 승인 | 사실+권리 확인 | 게시 중단 후 보완 |
가장 많은 작업이 아니라 가장 늦게 끝나는 경로를 찾는다
각 작업에 예상 시간을 붙이면 가장 빠른 시작 시각을 계산할 수 있습니다. 한 노드의 시작 시각은 모든 선행 노드 종료 시각 가운데 가장 늦은 값입니다. 질문 정리 2분 뒤 검색 4분과 검사 3분이 시작되면 합류는 6분에 가능합니다. 이어서 생성 5분, 출처 확인 2분이 필요하므로 전체는 13분입니다. 이때 검색 쪽 경로가 임계 경로입니다. 검사 시간을 1분 줄여도 전체가 그대로인 반면 검색을 1분 줄이면 전체도 1분 줄어듭니다.
임계 경로 계산에는 여유 시간도 도움이 됩니다. 검사 작업이 3분에서 4분으로 늘어도 검색과 같은 4분에 끝나므로 전체 일정은 바뀌지 않습니다. 1분의 여유가 있는 셈입니다. 여유가 0인 작업을 우선 살피고, 품질을 해치면서 임계 경로 밖 작업만 무리하게 줄이는 최적화를 피합니다.
2분검색
4분생성
5분확인
2분정리
2분검사
3분합류 대기
1분이후 공통
작업표와 의존 조건을 분리해 제공한다
LLM에 업무 설명만 주고 그래프를 요청하면 상식적인 순서를 임의로 보탤 수 있습니다. 작업표에는 ID·행동·소요 시간·산출물을, 의존표에는 선행 ID·후속 ID·조건·실패 처리를 적습니다. 원문에 없는 의존은 점선 후보로 표시하고 확정선에 넣지 말라고 지시합니다. 위상 순서, 병렬 묶음, 가장 빠른 완료 시간, 순환 연결과 도달 불가능 작업을 각각 출력하게 하면 결과를 점검하기 쉽습니다.
LLM 결과를 받은 뒤에는 노드 수와 원문 작업 수를 맞추고, 모든 간선을 의존표의 한 행으로 되돌려 봅니다. 계산된 위상 순서를 실제로 한 번 따라가며 필요한 입력이 도착했는지 확인합니다. 도식이 깔끔해도 원문 작업 하나가 빠졌거나 간선 방향이 뒤집히면 실행 계획으로 쓸 수 없습니다.
다음 작업표와 의존표로 방향성 작업 그래프를 작성해 주세요. 작업표: ID / 행동 / 예상 시간 / 산출물 / 담당 자원. 의존표: 선행 ID / 후속 ID / 시작 조건 / 실패 시 처리. 규칙: 화살표는 ‘선행 작업 완료가 후속 작업 시작에 필요함’만 뜻한다. 계산: 실행 가능한 위상 순서, 병렬 후보, 가장 빠른 완료 시각, 임계 경로를 구한다. 검사: 자기 자신으로 돌아오는 경로, 시작점이 없는 작업, 도달할 수 없는 작업을 표시한다. 금지: 원문에 없는 의존 관계와 담당자를 확정하지 않는다. 출력: ①그래프 ②작업별 시작·종료표 ③오류 ④확인이 필요한 후보.
순환 연결은 모든 작업이 서로를 기다리게 한다
A가 끝나야 B를 시작하고, B가 끝나야 C를 시작하며, C가 끝나야 A를 시작한다면 최초로 시작할 작업이 없습니다. 이것이 순환입니다. 실제 업무에는 ‘검토 결과가 나쁘면 초안 수정으로 돌아간다’는 반복이 존재하지만, 한 번의 실행 의존 그래프에서는 회차를 나누어 A1→B1→C1→A2처럼 표현하거나 15회의 평가·수정 순환도로 옮깁니다. 반복 규칙을 DAG 안에 그대로 되감으면 실행 순서 계산이 불가능해집니다.
순환 검사는 시작 조건이 없는 노드를 하나씩 제거하는 방식으로 손으로도 해볼 수 있습니다. 먼저 선행 작업이 없는 노드를 지우고, 그 노드에서 나간 선도 지웁니다. 이 과정을 반복했는데 노드가 남으면 그 안에 순환이 있습니다. 어느 노드가 문제인지 찾을 때는 남은 노드만 확대해 화살표 방향을 따라갑니다. 실행 전에 이 검사를 하면 서로 기다리며 멈춘 작업을 운영 중에 발견하는 일을 줄일 수 있습니다.
시작 가능한 노드 0개
종료 조건 없음
기준 미달이면 A2 시작
최대 3회·통과 기준 표시
간선 하나씩 ‘없애도 실행 가능한가’를 시험한다
의존 관계가 과도하면 병렬 기회가 줄고, 부족하면 필요한 결과 없이 후속 작업이 시작됩니다. 각 간선을 하나씩 가리고 “이 선행 결과 없이도 후속 작업을 안전하게 시작할 수 있는가”를 묻습니다. 가능하면 불필요한 간선 후보이고, 불가능하면 어떤 산출물이 필요한지 선 옆에 적습니다. 반대로 각 노드에서 필요한 입력을 거꾸로 추적해 빠진 선을 찾습니다. DAG의 작업 관계는 명시적인 upstream·downstream 조건으로 구성되며, 복잡해질수록 그룹과 간선 라벨이 읽기를 돕습니다.[1]
반대 방향 검사도 필요합니다. 최종 산출물에서 시작해 어떤 입력이 필요한지 거슬러 올라가고, 모든 경로가 실제 시작 노드에 닿는지 봅니다. 어디에서도 도달할 수 없는 노드는 누락된 간선이 있거나 현재 범위에 필요하지 않은 작업일 수 있습니다. 삭제하기 전에 담당자와 원문 근거를 확인합니다.
| 선 | 제거 뒤 시작 가능 | 필요 산출물 | 판정 |
|---|---|---|---|
| B→C | 가능 | 없음 | 삭제 후보 |
| C→E | 불가 | 검색 문서 | 유지 |
| D→E | 불가 | 안전 판정 | 유지 |
정상 DAG와 순환 그래프의 실행 가능성을 비교하자
교육용 작업은 A 질문 정리 2분, B 문서 검색 4분, C 안전 검사 3분, D 답변 생성 5분, E 출처 확인 2분입니다. 정상 구조는 A 뒤 B·C를 함께 실행하고 두 결과 뒤 D, 이어서 E가 실행됩니다. 순환 구조를 선택하면 E가 A의 선행 조건으로 추가되어 시작점이 사라집니다. 실행 가능성, 병렬 묶음과 총시간이 어떻게 달라지는지 확인해 보세요.
먼저 정상 그래프에서 검색 시간을 4분과 8분으로 바꾸어 전체 완료 시간이 얼마나 늘어나는지 비교합니다. 다음에는 순환을 추가해 시작 가능한 작업 수를 확인합니다. 검색 시간은 일정 계산 변수이고 E→A는 구조 변수이므로 두 입력이 바꾸는 결과가 다릅니다. 숫자 하나를 바꾼 결과와 화살표 하나를 바꾼 결과를 나란히 읽으면 일정 지연과 실행 불가를 구별할 수 있습니다.