Fix UTF-8 request body handling

This commit is contained in:
2026-06-25 08:41:33 +09:00
parent 6ee328e4fc
commit efb5d0cd73
3 changed files with 194 additions and 18 deletions

View File

@@ -37,11 +37,14 @@
"지형,지층 보정 모델"
],
"format": "glb",
"programType": "internal",
"predecessors": [],
"successors": [
"wayPrimal",
"program-1782180934346"
"program-1782180934346",
"program-1782264403218"
],
"mergeGroup": "",
"detailGates": [
{
"key": "gate1",
@@ -88,7 +91,7 @@
},
{
"title": "노폭계획",
"feature": "선형계획, 노즈, 편경사,\n구조물, 시설계획 입력",
"feature": "선형계획, 노즈, 편경사, 구조물,\n시설계획 입력",
"note": "노선의 폭, 선형, 구조물 조건 입력"
},
{
@@ -106,13 +109,17 @@
"deliverables": [
"평면도, 횡단면도, 종평면도, 기본설계모델"
],
"programType": "internal",
"predecessors": [
"cheonjiin"
],
"successors": [
"program-1782180934346",
"program-1782201626309"
"program-1782201626309",
"program-1782264403218",
"program-1782264979690"
],
"mergeGroup": "",
"linkLabel": "천지인 결과물을 WayPrimal로 연계",
"linkSourceIds": [
"cheonjiin"
@@ -166,6 +173,42 @@
}
]
},
"comparisons": [
{
"id": "comparison-program-1782180934346__program-1782264403218",
"title": "",
"leftProgramId": "program-1782264403218",
"rightProgramId": "program-1782180934346",
"stepMatches": [
{
"id": "step-0",
"leftStepIndex": "0",
"rightStepIndex": "0",
"reason": "현재 Visual Script 기능인 [redbold]GrassHopper[/redbold]로 작성하여 작업하는 단계들은 EG-BIM Modeler에서 구현 불가능함"
},
{
"id": "step-1",
"leftStepIndex": "1",
"rightStepIndex": "1",
"reason": "사내에서 개발한 [redbold]Plugin[/redbold]으로 Rhino에서 도로에 대한 속성정보(WBS)는 선택하여 입력 가능하며, 그 외는 사용자가 직접 입력해야함\nEG-BIM Modeler에서도 사용자가 직접 입력하는 기능은 있음"
},
{
"id": "step-2",
"leftStepIndex": "2",
"rightStepIndex": "2",
"reason": "위의 Plugin에는 [redbold]wpbifc로 저장하는 기능[/redbold]도 있어서 wpbifc로 저장하지만 EG-BIM Modeler에서는 obj와 hmeg 저장 지원"
},
{
"id": "step-3",
"leftStepIndex": "3",
"rightStepIndex": "3",
"reason": "PJT 제출 파일은 작업원본과 ifc 파일\n위의 2,3단계에서 변환포맷(wpbifc)을\n사내에서 개발한 [redbold]DataChange[/redbold] 프로그램으로\n ifc로 변환하여 제출 가능\nEG-BIM Modeler는 변환포맷(wpbifc)\n지원하지 않음"
}
],
"note": "EG-BIM Modeler은 모델병합 및 수정, 속성정보, 변환포맷, 중립포맷 생성에서 기능 구현 또는 자동화 범위에 한계가 있어 Rhino의 기능 보완이 필요합니다.\n\n주요 사유\n- 현재 Visual Script 기능인 [redbold]GrassHopper[/redbold]로 작업하는 단계들은 EG-BIM Modeler에서 구현 불가능함\n- 사내에서 개발한 [redbold]Plugin[/redbold]으로 Rhino에서 도로에 대한 속성정보(WBS)는 선택하여 입력 가능하며, 그 외는 사용자가 직접 입력해야함\n (EG-BIM Modeler에서도 사용자가 직접 입력하는 기능은 있음)\n- 위의 Plugin에는 [redbold]wpbifc[/redbold]로 저장하는 기능도 있음 (EG-BIM Modeler에서는 obj와 hmeg 저장만 지원)\n\n따라서 현재 업무 흐름에서는 해당 구간을 Rhino으로 연계하여 결과 품질과 작업 연속성을 확보하는 것이 적절합니다.",
"updatedAt": "2026-06-24T05:30:17.265Z"
}
],
"extraPrograms": [
{
"id": "program-1782201626309",
@@ -189,9 +232,13 @@
"successors": [
"program-1782180934346",
"program-1782191391645",
"program-1782194494893"
"program-1782194494893",
"program-1782264403218",
"program-1782264979690"
],
"linkLabel": "이전 프로그램 산출물을 새 프로그램 입력으로 연계"
"linkLabel": "이전 프로그램 산출물을 새 프로그램 입력으로 연계",
"programType": "internal",
"mergeGroup": ""
},
{
"id": "program-1782194494893",
@@ -262,8 +309,11 @@
"program-1782201626309"
],
"successors": [
"program-1782180934346"
]
"program-1782180934346",
"program-1782264403218"
],
"programType": "internal",
"mergeGroup": ""
},
{
"id": "program-1782191391645",
@@ -291,7 +341,7 @@
{
"id": "program-1782191391645-4",
"title": "교각",
"feature": "교좌면, 코핑, 기둥, 기초 형 및 상세치수 입력",
"feature": "교좌면, 코핑, 기둥, 기초 형 및 상세치수 입력",
"note": "교대 변수 입력\n(전환BIM - 도면 치수 입력)"
}
],
@@ -341,8 +391,90 @@
"program-1782201626309"
],
"successors": [
"program-1782180934346"
]
"program-1782180934346",
"program-1782264403218"
],
"programType": "internal",
"mergeGroup": ""
},
{
"id": "program-1782264979690",
"name": "WayDraw",
"description": "새 프로그램 업무 플로우",
"steps": [
{
"id": "program-1782264979690-1",
"title": "1단계",
"feature": "주요 기능 입력",
"note": "단계 설명을 입력합니다."
},
{
"id": "program-1782264979690-2",
"title": "2단계",
"feature": "주요 기능 입력",
"note": "단계 설명을 입력합니다."
}
],
"format": "",
"deliverables": [
"grm, dwg, dfx"
],
"programType": "internal",
"predecessors": [
"program-1782201626309",
"wayPrimal"
],
"successors": [
"program-1782264980554"
],
"linkLabel": "이전 프로그램 산출물을 새 프로그램 입력으로 연계",
"mergeGroup": ""
},
{
"id": "program-1782264403218",
"name": "EG-BIM Modeler",
"description": "새 프로그램 업무 플로우",
"steps": [
{
"id": "program-1782264403218-1",
"title": "모델병합 및 수정",
"feature": "기본기능만 가능",
"note": ""
},
{
"id": "program-1782264403218-2",
"title": "속성정보",
"feature": "탬플릿만 불러오기 가능하며, 사용자가 입력해야함",
"note": ""
},
{
"id": "program-1782264403218-1782264427883-3",
"title": "변환포맷",
"feature": "obj, hmeg로만 저장 가능",
"note": ""
},
{
"id": "program-1782264403218-1782264428058-4",
"title": "중립포맷 생성",
"feature": "기능 없음",
"note": ""
}
],
"format": "",
"deliverables": [
"성과물"
],
"programType": "internal",
"predecessors": [
"cheonjiin",
"program-1782201626309",
"program-1782191391645",
"wayPrimal",
"program-1782194494893"
],
"successors": [],
"linkLabel": "이전 프로그램 산출물을 새 프로그램 입력으로 연계",
"mergeGroup": "program-1782264403218"
},
{
"id": "program-1782180934346",
@@ -353,7 +485,7 @@
"id": "program-1782180934346-1",
"title": "모델병합 및 수정",
"feature": "모델의 정합성 확인 및 편집\n기본기능 및 Grasshopper 사용",
"note": "Way 파일 내 도로 형상 모델 추출 시WayExport3DAppo를 사용하여 obj 모델 생성\n그 외의 구조물 각 프로그램에서 obj 불러오기"
"note": "Way 파일에서 형상 모델 추출 시WayExport3DAppo를 사용하여 obj 모델 생성\n그 외의 구조물 각 프로그램에서 obj 불러오기"
},
{
"id": "program-1782180934346-2",
@@ -363,7 +495,7 @@
},
{
"id": "program-1782180934346-3",
"title": "3단계",
"title": "변환포맷",
"feature": "wpbifc 포맷으로 저장",
"note": "설치된 Plugin에서 wbpifc 포맷으로 저장"
},
@@ -417,10 +549,52 @@
"wayPrimal",
"program-1782201626309"
],
"successors": []
"successors": [],
"programType": "commercial",
"mergeGroup": "program-1782264403218"
},
{
"id": "program-1782264980554",
"name": "EG-BIM Drawer",
"description": "새 프로그램 업무 플로우",
"steps": [
{
"id": "program-1782264980554-1",
"title": "1단계",
"feature": "주요 기능 입력",
"note": "단계 설명을 입력합니다."
},
{
"id": "program-1782264980554-2",
"title": "2단계",
"feature": "주요 기능 입력",
"note": "단계 설명을 입력합니다."
}
],
"format": "",
"deliverables": [
""
],
"programType": "internal",
"predecessors": [
"program-1782264979690"
],
"successors": [],
"linkLabel": "이전 프로그램 산출물을 새 프로그램 입력으로 연계",
"mergeGroup": "",
"detailGates": [
{
"key": "gate1",
"targetProgramId": "program-1782264980554",
"stepId": "program-1782264980554-1",
"question": "변경?",
"yes": "예: 계 재진입",
"no": "아니오: 변경사항 없음"
}
]
}
]
},
"programStates": {},
"updatedAt": "2026-06-23T08:50:22.594Z"
"updatedAt": "2026-06-24T23:37:33.312Z"
}

Binary file not shown.

View File

@@ -92,17 +92,19 @@ async function writeDatabase(data) {
function readRequestBody(request) {
return new Promise((resolve, reject) => {
let body = '';
const chunks = [];
let bodyLength = 0;
request.on('data', (chunk) => {
body += chunk;
if (body.length > 5_000_000) {
chunks.push(chunk);
bodyLength += chunk.length;
if (bodyLength > 5_000_000) {
reject(new Error('Request body is too large'));
request.destroy();
}
});
request.on('end', () => resolve(body));
request.on('end', () => resolve(Buffer.concat(chunks).toString('utf8')));
request.on('error', reject);
});
}