# PoC 개발 할 일 목록 (To-Do List) 이 문서는 Memgraph 기반 터널 시공 관리 PoC를 위해 수행해야 할 작업들을 순서대로 나열합니다. ### 단계 1: 환경 설정 및 데이터 모델링 (하이브리드 아키텍처) - [x] `docker-compose.yml`에 데이터 영속성을 위한 볼륨 설정 추가 - [ ] **데이터 모델 재설계:** - [ ] `Job` 노드에 `base_duration`, `base_cost` 속성 추가 - [ ] `Scenario` 노드 정의 (`id`, `description`) - [ ] `MODIFIES` 관계 정의 (`Scenario` -> `Job`, 변경될 속성 포함. 예: `new_duration`) - [ ] `PRECEDES` 관계는 `scenario` 속성 대신 기본 공정 흐름으로 단일화 - [ ] Memgraph 서비스 재시작하여 안정적인 환경 확보 ### 단계 2: 샘플 데이터 준비 - [ ] `import_embedded_clean.cypher` 스크립트 수정 - [ ] `Job` 노드 생성 시 `duration`, `cost`를 `base_duration`, `base_cost`로 변경 - [ ] 기본 분석 시나리오를 위한 `Scenario` 노드 생성 (예: `id: 'what-if-1', description: 'TBM 지연 가정'`) - [ ] `MODIFIES` 관계 생성: 'what-if-1' 시나리오가 특정 `Job`의 `duration`을 변경하도록 설정 ### 단계 3: 데이터 가져오기 및 확인 - [ ] 수정된 `import_embedded_clean.cypher` 스크립트 실행 - [ ] 데이터 확인: `MATCH (s:Scenario)-[r:MODIFIES]->(j:Job) RETURN s, r, j` 쿼리로 변경점 데이터 확인 ### 단계 4: 동적 분석 기능 개발 (쿼리 작성) - [ ] **(쿼리 1) 동적 Critical Path 분석 쿼리 작성 (`dynamic_cp_analysis.cypher`)** - [ ] 시나리오 ID를 파라미터로 받도록 작성 (`$scenario_id`) - [ ] **핵심 로직:** 1. 모든 `Job` 노드를 가져옴 2. `$scenario_id`에 해당하는 `Scenario`와 연결된 `MODIFIES` 관계를 찾음 3. `MODIFIES` 관계가 있는 `Job`은 변경된 속성(예: `new_duration`)을 `effective_duration`으로 사용 4. `MODIFIES` 관계가 없는 `Job`은 `base_duration`을 `effective_duration`으로 사용 5. 계산된 `effective_duration`의 합계를 기준으로 Critical Path 분석 - [ ] **(쿼리 2) 신규 시나리오(변경점) 생성 쿼리 작성 (`create_scenario_delta.cypher`)** - [ ] 신규 시나리오 ID, 설명, 변경할 Job ID, 변경할 속성값을 파라미터로 받음 - [ ] `Scenario` 노드를 생성하고 `MODIFIES` 관계를 설정하는 기능 ### 단계 5: PoC 시나리오 검증 - [ ] **(검증 1) 베이스라인 분석** - `dynamic_cp_analysis.cypher` 쿼리에 존재하지 않는 시나리오 ID (예: 'base')를 넣어 실행 -> 모든 Job이 `base_duration`을 사용하여 Critical Path 계산 결과 확인 - [ ] **(검증 2) 변경점 시나리오 분석** - `dynamic_cp_analysis.cypher` 쿼리에 `scenario_id: 'what-if-1'`을 넣어 실행 - 변경된 `duration`이 적용되어 Critical Path가 다르게 계산되는지 확인 - [ ] **(검증 3) 신규 시나리오 동적 생성 및 분석** - `create_scenario_delta.cypher` 쿼리를 이용해 'what-if-2' 시나리오와 새로운 변경점을 즉석에서 생성 - `dynamic_cp_analysis.cypher`로 'what-if-2'를 분석하여 결과가 예상대로 나오는지 확인 ### 단계 6: 데이터 무결성 및 검증 (연구) - [ ] 데이터 임포트 시 순환 관계(Cycle) 발생을 방지하기 위한 검증 로직 연구 - [ ] 방법 1: 애플리케이션 레이어에서 데이터 입력/수정 시 검증 - [ ] 방법 2: Memgraph의 제약(Constraint) 또는 트리거(Trigger) 기능 활용 가능성 조사 - [ ] 방법 3: 주기적으로 순환을 탐지하는 Cypher 쿼리 스크립트 작성 및 실행