25 KiB
25 KiB
.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 핸들링 로직struct bais_api_config 필드명 일부 불명확BAIS_API_ERR_*) OCR 인식 오류 가능성@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 등)bais_auth_hash_password() 내 salt 생성 로직enum bais_auth_result 값 목록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) 간격bais_config_get_string() 반환값)@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 쿼리 문자열 및 구조 명확 | | 미캡처 구간 | - 연결 풀 크기 동적 조정 로직', ;, --) 처리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) 선택 로직struct bais_session 필드명 일부 OCR 오류 가능BAIS_SESSION_TIMEOUT)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 (중간) — 로그 포맷 문자열 일부 불확실 | | 미캡처 구간 | - 로그 로테이션 정책 (크기/시간 기준)%d, %s 등) 해석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)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)BAIS_VALIDATE_*)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 (중간) — 암호화 파라미터 일부 불확실 | | 미캡처 구간 | - 키 관리 (키 로테이션, 스토어)BAIS_CRYPTO_KEY_SIZE)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 지원 여부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 (낮음) — 파서 상태 머신 일부 불명확 | | 미캡처 구간 | - 파서 상태 전이 테이블 상세bais_parser_state)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 스키마 검증 정책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 스키마 검증 정책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) 선택 정책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 (낮음) — 스레드 풀 정책 일부 불명확 | | 미캡처 구간 | - 스레드 풀 크기 동적 조정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 (낮음) — 프로토콜 버전별 호환성 로직 불명확 | | 미캡처 구간 | - 프로토콜 버전 네고시에이션BAIS_PROTOCOL_VERSION_*)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 (매우 낮음) — 메모리 관리 로직 대부분 불명확 | | 미캡처 구간 | - 버퍼 풀링 정책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 (매우 낮음) — 구조체 레이아웃 대부분 불명확 | | 미캡처 구간 | - 구조체 패킹/정렬 규칙struct 필드 순서 및 타입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