Compare commits

..

4 commits

4 changed files with 473 additions and 0 deletions

View file

@ -0,0 +1,209 @@
# 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 | 대기 |

View file

@ -0,0 +1,123 @@
{
"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
}

View file

@ -0,0 +1,138 @@
# 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 정리 파일**을 각 모듈 전환 시 참조 문서로 활용

View file

@ -0,0 +1,3 @@
# 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`.