Initial commit: AI platform app (server, views, lib, data, deploy docs)
Made-with: Cursor
This commit is contained in:
44
docs/AX-APPLY-ARRAY-ERROR-ANALYSIS.md
Normal file
44
docs/AX-APPLY-ARRAY-ERROR-ANALYSIS.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# AX 과제 신청 "malformed array literal: """ 오류 원인 분석
|
||||
|
||||
## 1. 오류 발생 조건
|
||||
|
||||
- **오류 메시지**: `malformed array literal: ""`
|
||||
- **발생 시점**: 필수값만 입력 후 저장 시 (techStack, risks 필드 비어 있음)
|
||||
- **PostgreSQL**: `text[]` 컬럼에 빈 문자열 `""`이 전달되면 발생
|
||||
|
||||
## 2. 데이터 흐름 추적
|
||||
|
||||
### 2.1 프론트엔드 (ax-apply.ejs)
|
||||
|
||||
```
|
||||
FormData 수집 → fd.forEach로 data 객체 생성 → JSON.stringify(data) → POST /api/ax-apply
|
||||
```
|
||||
|
||||
**techStackStr, risksStr가 비어 있을 때:**
|
||||
- `fd.forEach`: k="techStackStr", v="" (빈 문자열)
|
||||
- `k === 'techStackStr' && v` → v가 ""(falsy)이므로 **건너뜀**
|
||||
- `k !== 'techStackStr'` → k가 techStackStr이므로 **건너뜀**
|
||||
- **결과**: data에 techStackStr, risksStr가 **포함되지 않음** (undefined)
|
||||
|
||||
→ 이론상 빈 문자열이 전송되지 않아야 함.
|
||||
|
||||
### 2.2 백엔드 (server.js)
|
||||
|
||||
**node-pg 알려진 이슈**: JavaScript 빈 배열 `[]`을 `text[]` 파라미터로 전달하면, node-pg가 `""`로 직렬화함.
|
||||
- PostgreSQL은 `""`를 배열 리터럴로 파싱할 수 없음 → `malformed array literal: ""` 발생
|
||||
|
||||
**해결책**: 배열 컬럼에 **파라미터 대신 SQL 리터럴 `'{}'`** 사용 (이미 server.js에 적용됨)
|
||||
|
||||
## 3. 가능한 원인
|
||||
|
||||
| 원인 | 가능성 | 설명 |
|
||||
|------|--------|------|
|
||||
| **배포 서버 미재시작** | 높음 | 수정된 server.js가 반영되지 않음. PM2 등으로 재시작 필요 |
|
||||
| **브라우저/FormData 차이** | 낮음 | 일부 환경에서 빈 필드가 ""로 전송될 수 있음 |
|
||||
| **기타 배열 필드** | 낮음 | dataTypes, qualitativeEffects 등 (폼에 없음) |
|
||||
|
||||
## 4. 권장 조치
|
||||
|
||||
1. **서버 재시작**: `pm2 restart webplatform` (배포 환경)
|
||||
2. **프론트엔드 방어**: 전송 직전 배열 관련 빈 문자열 제거
|
||||
3. **배포 반영**: 최신 server.js가 배포 서버에 반영되었는지 확인
|
||||
Reference in New Issue
Block a user