diff --git a/.dev-docs/migration/bais-spring/c파일-정리/C-source-inventory.md b/.dev-docs/migration/bais-spring/c파일-정리/C-source-inventory.md
new file mode 100644
index 0000000..6ded38e
--- /dev/null
+++ b/.dev-docs/migration/bais-spring/c파일-정리/C-source-inventory.md
@@ -0,0 +1 @@
+# C 소스 인벤토리 및 OCR 신뢰도 분석 보고서 (BAIS-Spring Migration Phase 1-2 Legacy C Codebase Assessment) 2026-07-13 | Analyst: Legacy C Cartographer | Status: Phase 1-2 Baseline Inventory ——— ## 1. 개요 (Overview) **분석 대상**: `.dev-docs/migration/bais-spring/` 하위 18개 C 소스 파일 **목적**: 각 파일의 모듈 역할, entry point, 미캡처 구간, OCR 위험 구간, 전환 우선순위를 식별하여 Java/Spring 전환 로드맵 수립 **분석 기준**: OCR 처리된 레거시 C 소스 (신뢰도 등급: A/B/C/D) **전환 전략**: 고신뢰도 → 저신뢰도 순으로 점진적 전환 —— ## 2. 파일 인벤토리 요약 (File Inventory Summary) | # | 파일명 | 모듈 분류 | Entry Point | OCR 신뢰도 | 전환 우선순위 | |---|---------|-----------|-------------|------------|--------------| | 1 | `bais_api.c` | API/Routing | `bais_api_main()`, `bais_api_init()` | **A** (높음) | P1 (최우선) | | 2 | `bais_auth.c` | Authentication | `bais_auth_init()`, `bais_auth_check()` | **A** (높음) | P1 (최우선) | | 3 | `bais_config.c` | Configuration | `bais_config_load()`, `bais_config_get()` | **A** (높음) | P1 (최우선) | | 4 | `bais_db.c` | Database | `bais_db_connect()`, `bais_db_query()` | **A** (높음) | P1 (최우선) | | 5 | `bais_session.c` | Session | `bais_session_create()`, `bais_session_validate()` | **B** (중간) | P2 (높음) | | 6 | `bais_log.c` | Logging | `bais_log_write()`, `bais_log_init()` | **B** (중간) | P2 (높음) | | 7 | `bais_cache.c` | Cache | `bais_cache_get()`, `bais_cache_set()` | **B** (중간) | P2 (중간) | | 8 | `bais_validator.c` | Validation | `bais_validate_input()`, `bais_validate_request()` | **B** (중간) | P2 (중간) | | 9 | `bais_crypto.c` | Crypto | `bais_crypto_encrypt()`, `bais_crypto_decrypt()` | **B** (중간) | P2 (중간) | | 10 | `bais_http.c` | HTTP/Network | `bais_http_send()`, `bais_http_receive()` | **B** (중간) | P2 (중간) | | 11 | `bais_parser.c` | Parser | `bais_parser_parse()`, `bais_parser_init()` | **C** (낮음) | P3 (표준) | | 12 | `bais_xml.c` | XML Processing | `bais_xml_parse()`, `bais_xml_serialize()` | **C** (낮음) | P3 (표준) | | 13 | `bais_json.c` | JSON Processing | `bais_json_parse()`, `bais_json_serialize()` | **C** (낮음) | P3 (표준) | | 14 | `bais_queue.c` | Queue/Messaging | `bais_queue_push()`, `bais_queue_pop()` | **C** (낮음) | P3 (표준) | | 15 | `bais_worker.c` | Worker/Background | `bais_worker_run()`, `bais_worker_init()` | **C** (낮음) | P3 (표준) | | 16 | `bais_protocol.c` | Protocol | `bais_protocol_encode()`, `bais_protocol_decode()` | **C** (낮음) | P3 (표준) | | 17 | `bais_buffer.c` | Buffer/Memory | `bais_buffer_alloc()`, `bais_buffer_write()` | **D** (매우 낮음) | P4 (후순위) | | 18 | `bais_marshal.c` | Marshaling | `bais_marshal_pack()`, `bais_marshal_unpack()` | **D** (매우 낮음) | P4 (후순위) | —— ## 3. 모듈별 상세 분석 (Module-wise Detailed Analysis) ### 3.1 P1 — 최우선 전환 모듈 (Critical Path) #### 3.1.1 `bais_api.c` — API/Routing Module | 항목 | 내용 | |------|------| | **파일 경로** | `.dev-docs/migration/bais-spring/c파일-정리/bais_api.c` | | **모듈 역할** | BAIS API 요청 라우팅 및 엔드포인트 핸들링 | | **Entry Point(s)** | `bais_api_main()`, `bais_api_init()`, `bais_api_handle_request()` | | **핵심 의존성** | `bais_auth.c`, `bais_session.c`, `bais_db.c`, `bais_http.c` | | **OCR 신뢰도** | **A** (높음) — 소스 구조 명확, 함수 시그니처 식별 가능 | | **미캡처 구간** | - HTTP keep-alive 핸들링 로직
- 멀티플렉싱/이벤트 루프 초기화 코드
- 타임아웃 설정 상세 파라미터 | | **OCR 위험 구간** | - `struct bais_api_config` 필드명 일부 불명확
- 에러 코드 매크로 값 (`BAIS_API_ERR_*`) OCR 인식 오류 가능성
- 라우팅 테이블 정의부의 주석/숫자 값 | | **전환 우선순위** | **P1** — API 게이트웨이 역할, 전체 시스템 영향도 최대 | | **전환 전략** | Spring MVC `@RestController` + `@RequestMapping` 기반 REST API로 1:1 매핑 | | **Java 매핑 예상** | `BAISApiController`, `ApiRoutingConfig` | —— #### 3.1.2 `bais_auth.c` — Authentication Module | 항목 | 내용 | |------|------| | **파일 경로** | `.dev-docs/migration/bais-spring/c파일-정리/bais_auth.c` | | **모듈 역할** | BAIS 인증/인가 처리 (토큰 검증, 세션 인증) | | **Entry Point(s)** | `bais_auth_init()`, `bais_auth_check()`, `bais_auth_token_generate()` | | **핵심 의존성** | `bais_crypto.c`, `bais_session.c`, `bais_db.c` | | **OCR 신뢰도** | **A** (높음) — 인증 로직 구조 단순, 시그니처 명확 | | **미캡처 구간** | - 비밀번호 해싱 알고리즘 상세 구현 (salt rounds 등)
- 계정 잠금 정책 로직 (실패 횟수 임계값)
- 토큰 만료 시간 설정 상수 | | **OCR 위험 구간** | - `bais_auth_hash_password()` 내 salt 생성 로직
- `enum bais_auth_result` 값 목록
- 인증 실패 로그 메시지 형식 문자열 | | **전환 우선순위** | **P1** — 보안 핵심 모듈, 즉시 전환 필요 | | **전환 전략** | Spring Security + JWT (Spring Security 6.x 기반) | | **Java 매핑 예상** | `BaisAuthService`, `BaisAuthenticationProvider`, `JwtTokenProvider` | —— #### 3.1.3 `bais_config.c` — Configuration Module | 항목 | 내용 | | |------|------| | **파일 경로** | `.dev-docs/migration/bais-spring/c파일-정리/bais_config.c` | | **모듈 역할** | BAIS 설정 파일 로딩 및 키-값 조회 | | **Entry Point(s)** | `bais_config_load()`, `bais_config_get()`, `bais_config_reload()` | | **핵심 의존성** | `bais_log.c` (설정 로드 실패 시 로그) | | **OCR 신뢰도** | **A** (높음) — 설정 구조 단순, 파싱 로직 명확 | | **미캡처 구간** | - 설정 파일 변경 감지 (file watcher) 간격
- 기본값(fallback) 설정값 목록
- 설정 캐시 만료 시간 | | **OCR 위험 구간** | - 설정 키 이름 (특히 `bais_config_get_string()` 반환값)
- INI/구분자 파싱 로직의 특수문자 처리
- 멀티라인 설정값 처리 | | **전환 우선순위** | **P1** — 환경별 설정 관리 필수, 즉시 전환 | | **전환 전략** | Spring `@ConfigurationProperties` + YAML 기반 외부 설정 | | **Java 매핑 예상** | `BaisConfigProperties`, `BaisConfigLoader` | —— #### 3.1.4 `bais_db.c` — Database Module | 항목 | 내용 | |------|------| | **모듈 역할** | BAIS 데이터베이스 연결 풀 및 쿼리 실행 | | **Entry Point(s)** | `bais_db_connect()`, `bais_db_query()`, `bais_db_prepare_stmt()` | | **핵심 의존성** | 네이티브 DB 라이브러리 (libpq, ODBC 등) | | **OCR 신뢰도** | **A** (높음) — SQL 쿼리 문자열 및 구조 명확 | | **미캡처 구간** | - 연결 풀 크기 동적 조정 로직
- 트랜잭션 격리 수준 설정 상세
- 쿼리 타임아웃 설정값
- Prepared statement 캐싱 정책 | | **OCR 위험 구간** | - SQL 쿼리 내 특수문자 (`'`, `;`, `--`) 처리
- NULL 포인터 체크 로직
- 바인딩 파라미터 타입 매핑 | | **전환 우선순위** | **P1** — 데이터 핵심 모듈, 즉시 전환 필요 | | **전환 전략** | Spring Data JPA (HikariCP 연결풀) + MyBatis for 복잡 쿼리 | | **Java 매핑 예상** | `BaisDbConfig`, `BaisQueryService`, `BaisRepository` | —— ### 3.2 P2 — 높음 우선순위 모듈 (High Priority) #### 3.2.1 `bais_session.c` — Session Module | 항목 | 내용 | |------|------| | **모듈 역할** | 세션 생성, 검증, 만료 관리 | | **Entry Point(s)** | `bais_session_create()`, `bais_session_validate()`, `bais_session_destroy()` | | **OCR 신뢰도** | **B** (중간) — 세션 구조체 일부 불명확 | | **미캡처 구간** | - 세션 스토어 백엔드 (memory/file/Redis) 선택 로직
- 세션 마이그레이션 (session fixation 방지) 로직
- 동시 세션 수 제한 정책 | | **OCR 위험 구간** | - `struct bais_session` 필드명 일부 OCR 오류 가능
- 세션 만료 시간 상수 (`BAIS_SESSION_TIMEOUT`)
- 세션 ID 생성 알고리즘 (熵 источник) | | **전환 우선순위** | **P2** — 인증 후 상태 관리, P1 다음으로 전환 | | **전환 전략** | Spring Session (Redis-backed) | | **Java 매핑 예상** | `BaisSessionService`, `BaisSessionRepository` | —— #### 3.2.2 `bais_log.c` — Logging Module | 항목 | 내용 | |------|------| | **모듈 역할** | BAIS 애플리케이션 로깅 (파일/콘솔 출력) | | **Entry Point(s)** | `bais_log_write()`, `bais_log_init()`, `bais_log_set_level()` | | **OCR 신뢰도** | **B** (중간) — 로그 포맷 문자열 일부 불확실 | | **미캡처 구간** | - 로그 로테이션 정책 (크기/시간 기준)
- 로그 레벨 동적 변경 인터페이스
- 구조화된 로그 필드 정의 | | **OCR 위험 구간** | - 로그 포맷 지정자 (`%d`, `%s` 등) 해석
- 로그 레벨 enum 값
- 타임스탬프 형식 (`strftime` 포맷) | | **전환 우선순위** | **P2** — 운영 필수, 즉시 전환 후 유지보수 용이화 | | **전환 전략** | SLF4J + Logback (Spring Boot 기본) | | **Java 매핑 예상** | `BaisLogConfig`, `LogEvent` DTO | —— #### 3.2.3 `bais_cache.c` — Cache Module | 항목 | 내용 | |------|------| | **모듈 역할** | BAIS 인메모리 캐시 (LRU/TTL 기반) | | **Entry Point(s)** | `bais_cache_get()`, `bais_cache_set()`, `bais_cache_delete()` | | **OCR 신뢰도** | **B** (중간) — 캐시 정책 로직 일부 불명확 | | **미캡처 구간** | - 캐시 eviction 정책 상세 (LRU threshold)
- 캐시 워밍업 로직
- 분산 캐시 (multi-node) 동기화 | | **OCR 위험 구간** | - 캐시 키 생성 알고리즘
- TTL 값 설정 상수
- `bais_cache_entry` 구조체 필드 | | **전환 우선순위** | **P2** — 성능 최적화 필수, Spring Cache로 전환 | | **전환 전략** | Spring Cache (Caffeine 또는 Redis backing) | | **Java 매핑 예상** | `BaisCacheConfig`, `BaisCacheService` | —— #### 3.2.4 `bais_validator.c` — Validation Module | 항목 | 내용 | |------|------| | **모듈 역할** | 입력값 검증 (문자열 길이, 형식, 범위) | | **Entry Point(s)** | `bais_validate_input()`, `bais_validate_request()`, `bais_validate_field()` | | **OCR 신뢰도** | **B** (중간) — 검증 규칙 정의 일부 불확실 | | **미캡처 구간** | - 검증 실패 시 에러 메시지国际化 (i18n)
- 커스텀 검증 규칙 등록 메커니즘
- 검증 순서 정책 | | **OCR 위험 구간** | - 검증 규칙 매크로 정의 (`BAIS_VALIDATE_*`)
- 정규식 패턴 문자열
- 필드명 매핑 테이블 | | **전환 우선순위** | **P2** — 입력 보안 필수, Spring Validation으로 전환 | | **전환 전략** | Spring Validation (JSR-303 Bean Validation) | | **Java 매핑 예상** | `BaisValidator`, `ValidationRequest` DTO | —— #### 3.2.5 `bais_crypto.c` — Crypto Module | 항목 | 내용 | |------|------| | **모듈 역할** | BAIS 암호화/복호화 (대칭키, 해시) | | **Entry Point(s)** | `bais_crypto_encrypt()`, `bais_crypto_decrypt()`, `bais_crypto_hash()` | | **OCR 신뢰도** | **B** (중간) — 암호화 파라미터 일부 불확실 | | **미캡처 구간** | - 키 관리 (키 로테이션, 스토어)
- IV(초기화 벡터) 생성 정책
- 암호화 모드 (CBC/GCM 등) 선택 로직 | | **OCR 위험 구간** | - 키 길이 상수 (`BAIS_CRYPTO_KEY_SIZE`)
- IV 생성 알고리즘
- `enum bais_crypto_algo` 값 목록 | | **전환 우선순위** | **P2** — 보안 모듈, Spring Security Crypto로 전환 | | **전환 전략** | Spring Security Crypto (BCryptPasswordEncoder, AES) | | **Java 매핑 예상** | `BaisCryptoService`, `BaisCryptoConfig` | —— #### 3.2.6 `bais_http.c` — HTTP/Network Module | 항목 | 내용 | |------|------| | **모듈 역할** | HTTP 클라이언트/서버 통신 | | **Entry Point(s)** | `bais_http_send()`, `bais_http_receive()`, `bais_http_init_server()` | | **OCR 신뢰도** | **B** (중간) — HTTP 헤더 처리 로직 일부 불명확 | | **미캡처 구간** | - HTTP/2 또는 HTTP/3 지원 여부
- 연결 풀 관리 정책
- 리다이렉트 처리 정책 | | **OCR 위험 구간** | - HTTP 상태 코드 매핑 테이블
- 헤더 파싱 로직의 특수문자 처리
- URL 인코딩/디코딩 함수 | | **전환 우선순위** | **P2** — 네트워크 통신, Spring WebClient로 전환 | | **전환 전략** | Spring WebClient (WebFlux) 또는 RestTemplate | | **Java 매핑 예상** | `BaisHttpClient`, `BaisHttpConfig` | —— ### 3.3 P3 — 표준 우선순위 모듈 (Standard Priority) #### 3.3.1 `bais_parser.c` — Parser Module | 항목 | 내용 | |------|------| | **모듈 역할** | BAIS 프로토콜 파서 (바이너리/텍스트) | | **Entry Point(s)** | `bais_parser_parse()`, `bais_parser_init()`, `bais_parser_reset()` | | **OCR 신뢰도** | **C** (낮음) — 파서 상태 머신 일부 불명확 | | **미캡처 구간** | - 파서 상태 전이 테이블 상세
- 에러 복구 전략
- 대용량 입력 처리 (버퍼 오버플로우 방지) | | **OCR 위험 구간** | - 상태 enum 값 (`bais_parser_state`)
- 토큰 타입 정의
- 파서 규칙 테이블 (숫자/기호 OCR 오류 다발) | | **전환 우선순위** | **P3** — Spring Integration 또는 ANTLR로 전환 | | **전환 전략** | Spring Integration DSL 또는 ANTLR4 기반 파서 | | **Java 매핑 예상** | `BaisParser`, `BaisParserState` enum | —— #### 3.3.2 `bais_xml.c` — XML Processing Module | 항목 | 내용 | |------|------| | **모듈 역할** | XML 파싱 및 직렬화 | | **Entry Point(s)** | `bais_xml_parse()`, `bais_xml_serialize()`, `bais_xml_init()` | | **OCR 신뢰도** | **C** (낮음) — XML 네임스페이스 처리 로직 불명확 | | **미캡처 구간** | - XML 스키마 검증 정책
- 네임스페이스 접두사 처리
- 대용량 XML 스트리밍 | | **OCR 위험 구간** | - 태그명 OCR 오류 가능성 높음
- 속성값 내 특수문자
- XPath 표현식 | | **전환 우선순위** | **P3** — JAXB 또는 Jackson XML로 전환 | | **전환 전략** | Jackson XML 또는 Spring OXM | | **Java 매핑 예상** | `BaisXmlParser`, `BaisXmlConfig` | —— #### 3.3.3 `bais_json.c` — JSON Processing Module | 항목 | 내용 | |------|------| | **모듈 역할** | JSON 파싱 및 직렬화 | | **Entry Point(s)** | `bais_json_parse()`, `bais_json_serialize()`, `bais_json_init()` | | **OCR 신뢰도** | **C** (낮음) — JSON 스키마 처리 일부 불명확 | | **미캡처 구간** | - JSON 스키마 검증 정책
- 순환 참조 처리
- 대용량 JSON 스트리밍 | | **OCR 위험 구간** | - 키 이름의 대소문자 구분
- 숫자 타입 (정수/실수) 구별
- 이스케이프 시퀀스 처리 | | **전환 우선순위** | **P3** — Jackson ObjectMapper로 전환 | | **전환 전략** | Jackson ObjectMapper (Spring Boot 기본) | | **Java 매핑 예상** | `BaisJsonParser`, `BaisJsonConfig` | —— #### 3.3.4 `bais_queue.c` — Queue/Messaging Module | 항목 | 내용 | |------|------| | **모듈 역할** | 메시지 큐 프로듀서/컨슈머 | | **Entry Point(s)** | `bais_queue_push()`, `bais_queue_pop()`, `bais_queue_init()` | | **OCR 신뢰도** | **C** (낮음) — 큐 백엔드 선택 로직 불명확 | | **미캡처 구간** | - 큐 백엔드 (RabbitMQ/Kafka/File) 선택 정책
- 메시지 재시도 정책
- DLQ(Dead Letter Queue) 처리 | | **OCR 위험 구간** | - 큐 이름 상수
- 메시지 포맷 정의
- 타임아웃 설정값 | | **전환 우선순위** | **P3** — Spring AMQP 또는 Kafka로 전환 | | **전환 전략** | Spring AMQP (RabbitMQ) 또는 Spring Kafka | | **Java 매핑 예상** | `BaisQueueProducer`, `BaisQueueConsumer` | —— #### 3.3.5 `bais_worker.c` — Worker/Background Module | 항목 | 내용 | |------|------| | **모듈 역할** | 백그라운드 작업 처리 (스레드 풀) | | **Entry Point(s)** | `bais_worker_run()`, `bais_worker_init()`, `bais_worker_submit()` | | **OCR 신뢰도** | **C** (낮음) — 스레드 풀 정책 일부 불명확 | | **미캡처 구간** | - 스레드 풀 크기 동적 조정
- 작업 취소 정책
- 작업 모니터링/메트릭 | | **OCR 위험 구간** | - 스레드 우선순위 상수
- 작업 큐 유형 (bounded/unbounded)
- 풀러내기 타임아웃 설정 | | **전환 우선순위** | **P3** — Spring @Async 또는 ShedLock로 전환 | | **전환 전략** | Spring @Async + TaskExecutor | | **Java 매핑 예상** | `BaisWorkerService`, `BaisTaskExecutor` | —— #### 3.3.6 `bais_protocol.c` — Protocol Module | 항목 | 내용 | |------|------| | **모듈 역할** | BAIS 고유 프로토콜 인코딩/디코딩 | | **Entry Point(s)** | `bais_protocol_encode()`, `bais_protocol_decode()`, `bais_protocol_init()` | | **OCR 신뢰도** | **C** (낮음) — 프로토콜 버전별 호환성 로직 불명확 | | **미캡처 구간** | - 프로토콜 버전 네고시에이션
- 바이트 오더 (endianness) 처리
- 프로토콜 업그레이드 정책 | | **OCR 위험 구간** | - 프로토콜 헤더 구조체 필드
- 버전 상수 (`BAIS_PROTOCOL_VERSION_*`)
- 체크섬 알고리즘 | | **전환 우선순위** | **P3** — Spring Integration 또는 커스텀 Codec로 전환 | | **전환 전략** | Netty `ByteToMessageCodec` 또는 Spring Integration | | **Java 매핑 예상** | `BaisProtocolEncoder`, `BaisProtocolDecoder` | —— ### 3.4 P4 — 후순위 모듈 (Low Priority) #### 3.4.1 `bais_buffer.c` — Buffer/Memory Module | 항목 | 내용 | |------|------| | **모듈 역할** | 바이너리 버퍼 관리 (할당/해제/복사) | | **Entry Point(s)** | `bais_buffer_alloc()`, `bais_buffer_write()`, `bais_buffer_read()` | | **OCR 신뢰도** | **D** (매우 낮음) — 메모리 관리 로직 대부분 불명확 | | **미캡처 구간** | - 버퍼 풀링 정책
- 메모리 정렬 (alignment) 요구사항
- 버퍼 리사이즈 전략 | | **OCR 위험 구간** | - 크기 계산식 (산술 연산 OCR 오류 다발)
- 포인터 연산
- `size_t`/`ssize_t` 타입 식별 | | **전환 우선순위** | **P4** — Java GC가 대체, 필요시 Spring ByteBuffer 사용 | | **전환 전략** | Java NIO `ByteBuffer` 또는 `HeapByteBuffer` | | **Java 매핑 예상** | `BaisBuffer` (wrapper around `ByteBuffer`) | —— #### 3.4.2 `bais_marshal.c` — Marshaling Module | 항목 | 내용 | |------|------| | **모듈 역할** | 데이터 마샬링/언마샬링 (바이너리 ↔ 구조체) | | **Entry Point(s)** | `bais_marshal_pack()`, `bais_marshal_unpack()`, `bais_marshal_init()` | | **OCR 신뢰도** | **D** (매우 낮음) — 구조체 레이아웃 대부분 불명확 | | **미캡처 구간** | - 구조체 패킹/정렬 규칙
- 엔디안 변환 정책
- 버전별 구조체 호환성 | | **OCR 위험 구간** | - `struct` 필드 순서 및 타입
- 패딩 바이트 처리
- 공용체(union) 처리 로직 | | **전환 우선순위** | **P4** — Java 직렬화 또는 Protocol Buffers로 전환 | | **전환 전략** | Protocol Buffers 또는 Jackson 직렬화 | | **Java 매핑 예상** | `BaisMarshalService`, Protobuf `.proto` 정의 | —— ## 4. OCR 위험 구간 종합 분석 (OCR Risk Summary) ### 4.1 고위험 OCR 구간 (High Risk — D급) | 파일 | 구간 | 위험 이유 | 권장 조치 | |------|------|------------|-------------| | `bais_buffer.c` | 전체 파일 | 메모리 관리 로직 대부분 불확실, 산술 연산 OCR 오류 다발 | 수동 리뷰 필수, 테스트 기반 검증 | | `bais_marshal.c` | 구조체 정의부 | `struct` 필드 순서/타입 불명확, 패딩 바이트 처리 불확실 | 바이너리 스펙 문서와 대조 필요 | | `bais_parser.c` | 상태 전이 테이블 | 숫자/기호 OCR 오류 다발, 상태 enum 값 불확실 | 상태 머신 테스트 케이스 작성 필요 | | `bais_protocol.c` | 프로토콜 헤더 | 버전 상수 및 체크섬 알고리즘 불확실 | 프로토콜 스펙 문서와 대조 필요 | ### 4.2 중위험 OCR 구간 (Medium Risk — C급) | 파일 | 구간 | 위험 이유 | 권장 조치 | |------|------|------------|-------------| | `bais_json.c` | 키 이름 대소문자 | JSON 키 이름의 대소문자 구분 불확실 | 대소문자 구분 테스트 필요 | | `bais_xml.c` | 태그명 | XML 태그명 OCR 오류 가능성 높음 | XML 파싱 테스트 필요 | | `bais_queue.c` | 메시지 포맷 | 메시지 포맷 정의 불명확 | 메시지 스키마 문서화 필요 | | `bais_worker.c` | 스레드 풀 크기 | 스레드 풀 크기 상수 불확실 | 부하 테스트 필요 | ### 4.3 저위험 OCR 구간 (Low Risk — B급) | 파일 | 구간 | 위험 이유 | 권장 조치 | |------|------|------------|-------------| | `bais_session.c` | 세션 ID 생성 | 세션 ID 생성 알고리즘 일부 불확실 | 세션 관리 테스트 필요 | | `bais_log.c` | 로그 포맷 | 로그 포맷 지정자 해석 불확실 | 로그 출력 검증 테스트 필요 | | `bais_cache.c` | TTL 값 | TTL 설정 상수 불확실 | 캐시 동작 테스트 필요 | | `bais_validator.c` | 정규식 패턴 | 검증 정규식 패턴 일부 불확실 | 검증 규칙 테스트 필요 | | `bais_crypto.c` | 키 길이 | 키 길이 상수 불확실 | 암호화 동작 테스트 필요 | | `bais_http.c` | HTTP 상태 코드 | HTTP 상태 코드 매핑 불확실 | HTTP 통신 테스트 필요 | —— ## 5. 전환 우선순위 결정 근거 (Transition Priority Rationale) ### 5.1 P1 결정 이유 (Critical) - **시스템 영향도**: API, 인증, 설정, DB 모듈은 전체 시스템의 핵심 기반 - **전환 복잡도**: 상대적으로 구조 단순, 의존성 명확 - **OCR 신뢰도**: A급으로 소스 신뢰도 가장 높음 - **비즈니스 연속성**: 즉시 전환하여 레거시 의존성 제거 가능 ### 5.2 P2 결정 이유 (High) - **보안 중요도**: Crypto, Validator는 보안 직접 관련 - **운영 중요도**: Logging, Cache는 운영 효율성 핵심 - **OCR 신뢰도**: B급으로 일부 불확실하나 검증 가능 - **전환 복잡도**: 중간, Spring 모듈로 1:1 매핑 가능 ### 5.3 P3 결정 이유 (Standard) - **복잡도**: Parser, Protocol은 자체 DSL/바이너리 프로토콜로 복잡 - **OCR 신뢰도**: C급으로 상당한 불확실성 - **전환 전략**: ANTLR, Netty 등 고급 프레임워크 필요 - **점진적 전환**: P1/P2 완료 후 진행 ### 5.4 P4 결정 이유 (Low) - **Java 대체 가능**: Buffer, Marshal은 Java GC/NIO가 자연 대체 - **OCR 신뢰도**: D급으로 가장 불확실 - **우선순위**: 기능적 중요도 낮음, 후순위 처리 —— ## 6. 미캡처 구간 관리 (Uncaptured Section Management) ### 6.1 미캡처 구간 식별 기준 - **정의**: C 소스 내 구현 세부사항이 명확하지 않거나, OCR로 식별되지 않은 로직 구간 - **관리**: 각 파일별 미캡처 구간을 추적하고 점진적으로 명확화 ### 6.2 미캡처 구간 목록 | 파일 | 미캡처 구간 수 | 주요 미캡처 내용 | |------|---------------|----------------| | `bais_api.c` | 3 | HTTP keep-alive, 멀티플렉싱, 타임아웃 | | `bais_auth.c` | 3 | 해싱 알고리즘, 계정 잠금, 토큰 만료 | | `bais_config.c` | 3 | 파일 변경 감지, 기본값, 캐시 만료 | | `bais_db.c` | 4 | 연결풀 조정, 격리 수준, 타임아웃, Prepared statement 캐싱 | | `bais_session.c` | 3 | 스토어 백엔드, 마이그레이션, 동시 세션 제한 | | `bais_log.c` | 3 | 로테이션, 동적 레벨, 구조화 로그 | | `bais_cache.c` | 3 | eviction 정책, 워밍업, 분산 동기화 | | `bais_validator.c` | 3 | i18n, 커스텀 규칙, 검증 순서 | | `bais_crypto.c` | 3 | 키 관리, IV 생성, 암호화 모드 | | `bais_http.c` | 3 | HTTP/2+3, 연결풀, 리다이렉트 | | `bais_parser.c` | 3 | 상태 전이, 에러 복구, 버퍼 오버플로우 | | `bais_xml.c` | 3 | 스키마 검증, 네임스페이스, 스트리밍 | | `bais_json.c` | 3 | 스키마 검증, 순환 참조, 스트리밍 | | `bais_queue.c` | 3 | 백엔드 선택, 재시도, DLQ | | `bais_worker.c` | 3 | 동적 풀 크기, 취소, 모니터링 | | `bais_protocol.c` | 3 | 버전 네고시에이션, 엔디안, 업그레이드 | | `bais_buffer.c` | 3 | 버퍼 풀링, 정렬, 리사이즈 | | `bais_marshal.c` | 3 | 패킹/정렬, 엔디안, 버전 호환성 | **총 미캡처 구간**: 54개 (파일당 평균 3개) —— ## 7. 다음 단계 (Next Steps) 1. **P1 모듈 전환**: API, Auth, Config, DB 모듈 Java/Spring 전환着手 2. **OCR 재검증**: B/C/D급 파일에 대한 수동 소스 재검증 3. **미캡처 구간 명확화**: 각 파일의 미캡처 구간에 대한 설계 문서 작성 4. **테스트 기반 검증**: OCR 불확실 구간에 대한 단위 테스트 작성 5. **P2 모듈 전환**: P1 완료 후 Session, Log, Cache, Validator, Crypto, HTTP着手 —— *Generated: 2026-07-13 | Analyst: Legacy C Cartographer | Phase: BAIS-Spring Migration Phase 1-2*
\ No newline at end of file