diff --git a/.dev-docs/migration/bais-spring/c파일-인벤토리-세부.md b/.dev-docs/migration/bais-spring/c파일-인벤토리-세부.md deleted file mode 100644 index 7004382..0000000 --- a/.dev-docs/migration/bais-spring/c파일-인벤토리-세부.md +++ /dev/null @@ -1,209 +0,0 @@ -# C 파일 세부 인벤토리 — 라인 단위 분석 - -**생성일:** 2025-07-13 -**분석자:** Legacy C Cartographer - ---- - -## auth 模块 — 세부 - -### auth_validate.c -``` -Entry Point : auth_validate_user(char* uid, char* token) -라인 1-10 : 헤더 포함 구간 -라인 11-32 : 파라미터 검증 ✅ -라인 33-50 : 토큰 비교 로직 ⚠️ OCR Medium Risk (숫자 1/l 혼동) -라인 51-65 : 세션 조회 ✅ -라인 66-80 : 세션 만료 처리 ❌ 미캡처 (만료 시각 계산 로직 부재) -라인 81-100 : 성공 응답 구성 ✅ -``` - -### auth_hash.c -``` -Entry Point : compute_hash(char* input, char* salt) -라인 1-15 : 헤더 포함 -라인 16-41 : 입력 전처리 ✅ -라인 42-58 : Salt 생성 ⚠️ OCR High Risk (0/O 혼동) -라인 59-75 : 해시 계산 ✅ -라인 76-90 : 결과 인코딩 ✅ -``` - -### auth_token.c -``` -Entry Point : issue_token(char* uid, int expires) -라인 1-20 : 초기화 ✅ -라인 21-45 : 토큰 생성 ✅ -라인 46-60 : 갱신 타이밍 ❌ 미캡처 (갱신 주기 로직 부재) -라인 61-80 : 서명 ✅ -``` - ---- - -## net 模块 — 세부 - -### net_connect.c -``` -Entry Point : net_establish(char* host, int port) -라인 1-25 : 소켓 생성 ✅ -라인 26-50 : 주소 해석 ✅ -라인 51-69 : 연결 시도 ✅ -라인 70-85 : 소켓 옵션 설정 ⚠️ OCR High Risk (0/O 혼동) -라인 86-100 : 에러 처리 ✅ -``` - -### net_recv.c -``` -Entry Point : recv_packet(int fd, char* buf, int len) -라인 1-14 : 헤더 포함 ✅ -라인 15-30 : 버퍼 초기화 ⚠️ OCR High Risk (memset 오인식) -라인 31-50 : 수신 루프 ✅ -라인 51-65 : 길이 검증 ❌ 미캡처 (최대 패킷 크기 미정의) -라인 66-80 : 체크섬 검증 ✅ -``` - -### net_send.c -``` -Entry Point : send_packet(int fd, char* buf, int len) -라인 1-20 : 준비 ✅ -라인 21-40 : 전송 ✅ -라인 41-55 : 재전송 카운터 ⚠️ OCR Medium Risk -라인 56-70 : 타임아웃 ✅ -``` - -### net_pool.c -``` -Entry Point : pool_acquire(pool_t* p) -라인 1-15 : 초기화 ✅ -라인 16-35 : 슬롯 할당 ✅ -라인 36-50 : 풀 고갈 처리 ❌ 미캡처 (fallback 정책 부재) -``` - ---- - -## data 模块 — 세부 - -### data_parse.c -``` -Entry Point : parse_payload(char* raw, payload_t* out) -라인 1-19 : 헤더 포함 ✅ -라인 20-35 : 인코딩 식별 ⚠️ OCR Medium Risk (l/1 혼동) -라인 36-55 : 필드 파싱 ✅ -라인 56-70 : 인코딩 변환 ❌ 미캡처 (변환 손실 가능성) -``` - -### data_encode.c -``` -Entry Point : encode_record(record_t* rec, char* out) -라인 1-20 : 준비 ✅ -라인 21-44 : 스키마 버전 확인 ⚠️ OCR Medium Risk -라인 45-60 : 인코딩 ✅ -라인 61-75 : 스키마 호환 ❌ 미캡처 (버전 간 변환 규칙) -``` - -### data_cache.c -``` -Entry Point : cache_lookup(cache_t* c, char* key) -라인 1-20 : 해시 계산 ✅ -라인 21-45 : 버킷 탐색 ✅ -라인 46-65 : 값 반환 ✅ -라인 66-87 : TTL 갱신 ✅ -라인 88-102 : TTL 비교 ⚠️ OCR High Risk (부등호 방향) -라인 103-120: 락 해제 ❌ 미캡처 (race condition) -``` - ---- - -## log 模块 — 세부 - -### log_write.c -``` -Entry Point : log_commit(log_t* lg, char* msg) -라인 1-15 : 준비 ✅ -라인 16-35 : 버퍼 기록 ✅ -라인 36-50 : 로테이션 ❌ 미캡처 (로테이션 시점 결정 로직) -``` - -### log_format.c -``` -Entry Point : format_entry(log_t* lg, level_t lvl) -라인 1-20 : 포맷 준비 ✅ -라인 21-40 : 타임스탬프 생성 ⚠️ OCR Medium Risk (형식 불일치) -라인 41-60 : 메시지 포맷 ✅ -``` - -### log_flush.c -``` -Entry Point : flush_buffer(log_t* lg) -라인 1-15 : 플러시 트리거 ✅ -라인 16-30 : 비동기 flush ❌ 미캡처 (정합성 보장 조건) -``` - ---- - -## util 模块 — 세부 - -### util_str.c -``` -Entry Point : str_trim(char* s) -라인 1-15 : 초기화 ✅ -라인 10-25 : 바이트 오프셋 ⚠️ OCR Medium Risk -라인 26-40 : 트리밍 로직 ✅ -라인 41-55 : UTF-8 BOM ❌ 미캡처 (BOM 처리 규칙) -``` - -### util_mem.c -``` -Entry Point : mem_copy(void* dst, void* src, int n) -라인 1-20 : 헤더 포함 ✅ -라인 21-40 : 복사 로직 ⚠️ OCR High Risk (길이 파라미터) -라인 41-55 : 오버플로우 검사 ❌ 미캡처 (복구 정책) -``` - -### util_time.c -``` -Entry Point : get_timestamp() -라인 1-15 : 시간 획득 ✅ -라인 16-30 : 시계 역행 처리 ❌ 미캡처 (ntp 보정 시 동작) -``` - -### util_base64.c -``` -Entry Point : b64_encode(char* in, int len, char* out) -라인 1-20 : 테이블 준비 ✅ -라인 21-35 : 인코딩 루프 ✅ -라인 30-45 : 테이블 인덱스 ⚠️ OCR Medium Risk -라인 46-60 : 패딩 처리 ❌ 미캡처 (패딩 불일치 가능성) -``` - -### util_hex.c -``` -Entry Point : hex_dump(char* buf, int len, char* out) -라인 1-20 : 준비 ✅ -라인 21-40 : 변환 ✅ -라인 41-55 : 출력 형식 ⚠️ OCR Medium Risk (파편화) -``` - ---- - -## 요약 테이블 - -| 파일 | 총라인 | 검증완료 | OCR위험 | 미캡처 | 전환상태 | -|------|--------|----------|---------|--------|----------| -| auth_validate.c | 100 | 70% | Medium | 1 | 대기 | -| auth_hash.c | 90 | 80% | High | 1 | 대기 | -| auth_token.c | 80 | 75% | Low | 1 | 대기 | -| net_connect.c | 100 | 85% | High | 0 | 대기 | -| net_recv.c | 80 | 70% | High | 1 | 대기 | -| net_send.c | 70 | 80% | Medium | 0 | 대기 | -| net_pool.c | 50 | 70% | Low | 1 | 대기 | -| data_parse.c | 70 | 75% | Medium | 1 | 대기 | -| data_encode.c | 75 | 80% | Medium | 1 | 대기 | -| data_cache.c | 120 | 80% | High | 1 | 대기 | -| log_write.c | 50 | 70% | Low | 1 | 대기 | -| log_format.c | 60 | 75% | Medium | 0 | 대기 | -| log_flush.c | 30 | 60% | Low | 1 | 대기 | -| util_str.c | 55 | 75% | Medium | 1 | 대기 | -| util_mem.c | 55 | 70% | High | 1 | 대기 | -| util_time.c | 30 | 70% | Low | 1 | 대기 | -| util_base64.c | 60 | 80% | Medium | 1 | 대기 | -| util_hex.c | 55 | 80% | Low | 0 | 대기 | diff --git a/.dev-docs/migration/bais-spring/c파일-인벤토리-요약.json b/.dev-docs/migration/bais-spring/c파일-인벤토리-요약.json deleted file mode 100644 index 3cd7fe6..0000000 --- a/.dev-docs/migration/bais-spring/c파일-인벤토리-요약.json +++ /dev/null @@ -1,123 +0,0 @@ -{ - "inventory_date": "2025-07-13", - "analyzer": "Legacy C Cartographer", - "total_files": 18, - "total_modules": 5, - "modules": { - "auth": { - "files": ["auth_validate.c", "auth_hash.c", "auth_token.c"], - "entry_points": { - "auth_validate.c": "auth_validate_user(char* uid, char* token)", - "auth_hash.c": "compute_hash(char* input, char* salt)", - "auth_token.c": "issue_token(char* uid, int expires)" - }, - "uncaptured": [ - {"id": "U-01", "file": "auth_validate.c", "content": "세션 만료 시각 계산 로직"}, - {"id": "U-02", "file": "auth_hash.c", "content": "랜덤 salt 생성 시드"}, - {"id": "U-03", "file": "auth_token.c", "content": "토큰 갱신 주기 로직"} - ], - "ocr_risk": { - "High": ["auth_hash.c:42-58"], - "Medium": ["auth_validate.c:33-50"], - "Low": ["auth_token.c"] - }, - "transition_priority": "P1" - }, - "net": { - "files": ["net_connect.c", "net_recv.c", "net_send.c", "net_pool.c"], - "entry_points": { - "net_connect.c": "net_establish(char* host, int port)", - "net_recv.c": "recv_packet(int fd, char* buf, int len)", - "net_send.c": "send_packet(int fd, char* buf, int len)", - "net_pool.c": "pool_acquire(pool_t* p)" - }, - "uncaptured": [ - {"id": "U-04", "file": "net_recv.c", "content": "최대 패킷 크기 검증"}, - {"id": "U-05", "file": "net_pool.c", "content": "풀 고갈 시 fallback 정책"} - ], - "ocr_risk": { - "High": ["net_connect.c:70-85", "net_recv.c:15-30"], - "Medium": ["net_send.c:41-55"], - "Low": ["net_pool.c"] - }, - "transition_priority": "P1" - }, - "data": { - "files": ["data_parse.c", "data_encode.c", "data_cache.c"], - "entry_points": { - "data_parse.c": "parse_payload(char* raw, payload_t* out)", - "data_encode.c": "encode_record(record_t* rec, char* out)", - "data_cache.c": "cache_lookup(cache_t* c, char* key)" - }, - "uncaptured": [ - {"id": "U-06", "file": "data_parse.c", "content": "인코딩 변환 손실 가능성"}, - {"id": "U-07", "file": "data_encode.c", "content": "스키마 버전 간 변환 규칙"}, - {"id": "U-08", "file": "data_cache.c", "content": "동시 접근 락 해제 타이밍 race condition"} - ], - "ocr_risk": { - "High": ["data_cache.c:88-102"], - "Medium": ["data_parse.c:20-35", "data_encode.c:45-60"], - "Low": [] - }, - "transition_priority": "P1" - }, - "log": { - "files": ["log_write.c", "log_format.c", "log_flush.c"], - "entry_points": { - "log_write.c": "log_commit(log_t* lg, char* msg)", - "log_format.c": "format_entry(log_t* lg, level_t lvl)", - "log_flush.c": "flush_buffer(log_t* lg)" - }, - "uncaptured": [ - {"id": "U-09", "file": "log_write.c", "content": "로그 로테이션 시점 결정 로직"}, - {"id": "U-10", "file": "log_flush.c", "content": "비동기 flush 정합성 보장 조건"} - ], - "ocr_risk": { - "High": [], - "Medium": ["log_format.c:21-40"], - "Low": ["log_write.c", "log_flush.c"] - }, - "transition_priority": "P3" - }, - "util": { - "files": ["util_str.c", "util_mem.c", "util_time.c", "util_base64.c", "util_hex.c"], - "entry_points": { - "util_str.c": "str_trim(char* s)", - "util_mem.c": "mem_copy(void* dst, void* src, int n)", - "util_time.c": "get_timestamp()", - "util_base64.c": "b64_encode(char* in, int len, char* out)", - "util_hex.c": "hex_dump(char* buf, int len, char* out)" - }, - "uncaptured": [ - {"id": "U-11", "file": "util_str.c", "content": "UTF-8 BOM 처리 규칙"}, - {"id": "U-12", "file": "util_mem.c", "content": "오버플로우 시 복구 정책"}, - {"id": "U-13", "file": "util_time.c", "content": "NTP 보정 시 시계 역행 처리"}, - {"id": "U-14", "file": "util_base64.c", "content": "패딩 불일치 가능성"} - ], - "ocr_risk": { - "High": ["util_mem.c:21-40"], - "Medium": ["util_str.c:10-25", "util_base64.c:30-45", "util_hex.c:41-55"], - "Low": ["util_time.c"] - }, - "transition_priority": "P1" - } - }, - "transition_priority_summary": { - "P1": ["auth_hash.c", "net_connect.c", "net_recv.c", "data_cache.c", "util_mem.c"], - "P2": ["auth_validate.c", "net_send.c", "data_parse.c", "data_encode.c", "util_str.c", "util_base64.c"], - "P3": ["auth_token.c", "net_pool.c", "log_write.c", "log_format.c", "log_flush.c", "util_time.c", "util_hex.c"] - }, - "ocr_risk_summary": { - "High": [ - {"file": "auth_hash.c", "lines": "42-58", "risk": "salt 생성 — 0/O 혼동"}, - {"file": "net_recv.c", "lines": "15-30", "risk": "memset 오인식"}, - {"file": "net_connect.c", "lines": "70-85", "risk": "소켓 옵션 — 0/O 혼동"}, - {"file": "data_cache.c", "lines": "88-102", "risk": "TTL 부등호 방향"}, - {"file": "util_mem.c", "lines": "21-40", "risk": "길이 파라미터 OCR 불안정"} - ], - "Medium": 7, - "Low": 7 - }, - "uncaptured_total": 14, - "md_mapping_verified": true -} diff --git a/.dev-docs/migration/bais-spring/c파일-인벤토리.md b/.dev-docs/migration/bais-spring/c파일-인벤토리.md deleted file mode 100644 index 19386c2..0000000 --- a/.dev-docs/migration/bais-spring/c파일-인벤토리.md +++ /dev/null @@ -1,138 +0,0 @@ -# C 소스 인벤토리 — 전환 분석 보고서 - -**생성일:** 2025-07-13 -**분석자:** Legacy C Cartographer -**대상:** `.dev-docs/migration/bais-spring/c파일 정리/` 내 18개 C 파일 - ---- - -## 1. 전체 현황 요약 - -| 항목 | 수량 | -|------|------| -| 총 C 파일 수 | 18 | -| 총 헤더 파일 수 | 0 (별도 미발견) | -| 모듈 수 | 5 | -| OCR 위험 High 파일 | 4 | -| OCR 위험 Medium 파일 | 7 | -| OCR 위험 Low 파일 | 7 | - ---- - -## 2. 모듈별 분류 - -### 모듈 A — 인증/보안 (`auth`) -| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | -|--------|-------------|------------|----------|-------------| -| `auth_validate.c` | `auth_validate_user()` | 세션 만료 로직 미캡처 | Medium | P1 | -| `auth_hash.c` | `compute_hash()` | salt 생성 알고리즘 | High | P1 | -| `auth_token.c` | `issue_token()` | 토큰 갱신 타이밍 | Low | P2 | - -### 모듈 B — 네트워크 I/O (`net`) -| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | -|--------|-------------|------------|----------|-------------| -| `net_connect.c` | `net_establish()` | 비동기 타임아웃 처리 | High | P1 | -| `net_recv.c` | `recv_packet()` | 버퍼 경계 검사 미캡처 | High | P1 | -| `net_send.c` | `send_packet()` | 재전송 로직 | Medium | P2 | -| `net_pool.c` | `pool_acquire()` | 풀 고갈 시 fallback | Low | P3 | - -### 모듈 C — 데이터 처리 (`data`) -| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | -|--------|-------------|------------|----------|-------------| -| `data_parse.c` | `parse_payload()` | 인코딩 변환 손실 | Medium | P2 | -| `data_encode.c` | `encode_record()` | 스키마 버전 호환 | Medium | P2 | -| `data_cache.c` | `cache_lookup()` | TTL 만료 race condition | High | P1 | - -### 모듈 D — 로깅/감사 (`log`) -| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | -|--------|-------------|------------|----------|-------------| -| `log_write.c` | `log_commit()` | 로그 로테이션 시점 | Low | P3 | -| `log_format.c` | `format_entry()` | 타임스탬프 형식 파편화 | Medium | P3 | -| `log_flush.c` | `flush_buffer()` | 비동기 flush 정합성 | Low | P3 | - -### 모듈 E — 유틸리티 (`util`) -| 파일명 | Entry Point | 미캡처 구간 | OCR 위험 | 전환우선순위 | -|--------|-------------|------------|----------|-------------| -| `util_str.c` | `str_trim()` | UTF-8 멀티바이트 처리 | Medium | P2 | -| `util_mem.c` | `mem_copy()` | 오버플로우 검사 미캡처 | High | P1 | -| `util_time.c` | `get_timestamp()` | 시계 역행 처리 | Low | P3 | -| `util_base64.c` | `b64_encode()` | 패딩 불일치 | Medium | P2 | -| `util_hex.c` | `hex_dump()` | 출력 형식 파편화 | Low | P3 | - ---- - -## 3. OCR 위험 구간 상세 - -### High Risk (즉시 검토 필요) - -| 파일 | 라인 | 위험 내용 | -|------|------|----------| -| `auth_hash.c` | 42-58 | salt 생성 루틴 — OCR 시 문자 `0`/`O`, `l`/`1` 혼동 가능 | -| `net_recv.c` | 15-30 | 버퍼 초기화 — OCR 시 `memset` → `memzero` 오인식 위험 | -| `net_connect.c` | 70-85 | 소켓 옵션 설정 — 숫자 `0`/`O` 혼동 | -| `data_cache.c` | 88-102 | TTL 비교문 — 부등호 방향 OCR 오류 가능 | -| `util_mem.c` | 25-40 | `memcpy` 길이 파라미터 — 숫자 OCR 불안정 | - -### Medium Risk (점검 권고) - -| 파일 | 라인 | 위험 내용 | -|------|------|----------| -| `auth_validate.c` | 33-50 | 에러 코드 매핑 — 숫자 `1`/`l` 혼동 | -| `net_send.c` | 55-70 | 재전송 카운터 — 변수명 OCR 불확실 | -| `data_parse.c` | 20-35 | 인코딩 식별자 — 소문자 `l`/숫자 `1` | -| `data_encode.c` | 45-60 | 스키마 버전 — 숫자 OCR 불안정 | -| `util_str.c` | 10-25 | 바이트 오프셋 — 숫자 OCR 불안정 | -| `util_base64.c` | 30-45 | 테이블 인덱스 — 숫자 OCR 불안정 | - ---- - -## 4. 전환 우선순위 매트릭스 - -``` -P1 (즉시) : auth_hash, net_connect, net_recv, data_cache, util_mem -P2 (조만간): auth_validate, net_send, data_parse, data_encode, util_str, util_base64 -P3 (예정) : net_pool, log_write, log_format, log_flush, util_time, util_hex, auth_token -``` - -### P1 우선순위 이유 -- 보안 직접 연관 (`auth_hash.c`) -- 메모리 안전 취약 (`util_mem.c`, `net_recv.c`) -- 데이터 정합성 (`data_cache.c`) -- 네트워크 신뢰성 (`net_connect.c`) - ---- - -## 5. 미캡처 구간 목록 - -| ID | 파일 | 함수 | 미캡처 내용 | -|----|------|------|------------| -| U-01 | `auth_validate.c` | `auth_validate_user()` | 세션 만료 시각 계산 로직 | -| U-02 | `auth_hash.c` | `compute_hash()` | 랜덤 salt 생성 시드 | -| U-03 | `net_connect.c` | `net_establish()` | DNS 재시도 횟수 | -| U-04 | `net_recv.c` | `recv_packet()` | 최대 패킷 크기 검증 | -| U-05 | `data_cache.c` | `cache_lookup()` | 동시 접근 락 해제 타이밍 | -| U-06 | `util_mem.c` | `mem_copy()` | 오버플로우 시 복구 정책 | -| U-07 | `util_str.c` | `str_trim()` | UTF-8 BOM 처리 | - ---- - -## 6. md 정리 파일 기준 검증 - -`.dev-docs/migration/bais-spring/c파일 정리/` 내 md 파일과 1:1 매핑 검증: - -| md 파일 | 대응 C 파일 | 검증 상태 | -|---------|-------------|----------| -| `auth-md-정리.md` | `auth_*.c` | ✅ 매핑 완료 | -| `net-md-정리.md` | `net_*.c` | ✅ 매핑 완료 | -| `data-md-정리.md` | `data_*.c` | ✅ 매핑 완료 | -| `log-md-정리.md` | `log_*.c` | ✅ 매핑 완료 | -| `util-md-정리.md` | `util_*.c` | ✅ 매핑 완료 | - ---- - -## 7. 권고 사항 - -1. **P1 파일 5개**를 Java/Spring 전환 시 먼저 처리 -2. **OCR High Risk** 5개 구간은 수동 검증 후 전환 진행 -3. **미캡처 구간 7개**는 원본 C 코드 리뷰 후 사양서 보강 필요 -4. **md 정리 파일**을 각 모듈 전환 시 참조 문서로 활용 diff --git a/.forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md b/.forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md deleted file mode 100644 index deefad4..0000000 --- a/.forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588.md +++ /dev/null @@ -1,3 +0,0 @@ -# codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588 - -Forge 이슈 작업 브랜치 `forge/codex-bais-final3-20260713-192718-BAIS-SPRING-CTX-001-attempt-1-run-6ad5da927588`.