From 7adf6be87c9b7f1edde629c21a9c9ff1ce4ed007 Mon Sep 17 00:00:00 2001 From: happybell80 Date: Tue, 2 Dec 2025 02:22:59 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=EC=9B=90=EC=B9=99=20=EB=AC=B8=EC=84=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B5=AC=EC=B2=B4=EC=A0=81=20=EC=98=88?= =?UTF-8?q?=EC=8B=9C=20=EC=A0=9C=EA=B1=B0,=20=EC=9B=90=EC=B9=99=EB=A7=8C?= =?UTF-8?q?=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 313_React_구조_원칙.md: 배열/객체 필드 검증 원칙 간소화 (구체적 필드명/코드 예시 제거) - 311_FastAPI_구조_원칙.md: Nginx 타임아웃 설정 원칙 간소화 (구체적 경로/값 제거) --- .../311_FastAPI_구조_원칙.md | 8 ++----- .../313_React_구조_원칙.md | 21 ++++--------------- 2 files changed, 6 insertions(+), 23 deletions(-) diff --git a/book/300_architecture/311_FastAPI_구조_원칙.md b/book/300_architecture/311_FastAPI_구조_원칙.md index c286e7a..9cd8d50 100644 --- a/book/300_architecture/311_FastAPI_구조_원칙.md +++ b/book/300_architecture/311_FastAPI_구조_원칙.md @@ -247,14 +247,10 @@ utils **핵심 원칙**: 장기 작업을 위한 프록시 엔드포인트는 HTTP/HTTPS 블록 모두에 충분한 타임아웃 설정 필요 **필수 확인 사항**: -- Nginx 설정 파일에서 `/rb8001/` 또는 해당 프록시 경로의 `location` 블록 확인 +- Nginx 설정 파일에서 프록시 경로의 `location` 블록 확인 - `proxy_read_timeout`, `proxy_connect_timeout`, `proxy_send_timeout` 설정 확인 - HTTP(port 80)와 HTTPS(port 443) 블록 모두에 동일한 타임아웃 설정 적용 -- 권장 값: `proxy_read_timeout 300s; proxy_connect_timeout 75s; proxy_send_timeout 300s;` - -**교훈**: -- HTTP 블록에 타임아웃 설정 누락 시 HTTPS만 설정되어 있어도 HTTP 요청에서 504 Gateway Timeout 발생 가능 -- 프록시 타임아웃은 백엔드 작업 시간보다 충분히 길게 설정 (백엔드 작업 시간 + 여유분) +- 프록시 타임아웃은 백엔드 작업 시간보다 충분히 길게 설정 ## 15. 모범 사례 참고 diff --git a/book/300_architecture/313_React_구조_원칙.md b/book/300_architecture/313_React_구조_원칙.md index a905026..0113541 100644 --- a/book/300_architecture/313_React_구조_원칙.md +++ b/book/300_architecture/313_React_구조_원칙.md @@ -157,24 +157,11 @@ src/ ### 배열/객체 필드 검증 필수 -**문제**: 백엔드가 배열을 예상했지만 `null` 또는 `undefined`를 반환할 경우 `TypeError: Cannot read property 'map' of null` 발생 +**원칙**: 배열 필드는 `Array.isArray()` 체크 후 사용, 객체 필드는 옵셔널 체이닝(`?.`) 사용, 기본값 설정 필수 -**해결책**: -- 배열 필드: `Array.isArray(data.field) ? data.field : []` 또는 `data.field ?? []` -- 객체 필드: 옵셔널 체이닝(`?.`) 사용 -- 기본값 설정: `const items = result.page_evaluations ?? [];` - -**예시**: -```typescript -// ❌ 금지: 직접 map 사용 -result.page_evaluations.map(...) - -// ✅ 권장: Array.isArray 체크 -const evaluations = Array.isArray(result.page_evaluations) - ? result.page_evaluations - : []; -evaluations.map(...) -``` +**금지 사항**: +- ❌ 배열 필드에 직접 `.map()` 호출 (null/undefined 체크 없이) +- ❌ 객체 필드에 직접 속성 접근 (옵셔널 체이닝 없이) ## 11. 체크리스트