NGRAS

완료

자연어로 네트워크 인증 시험을 지시하고 진행 상황을 실시간으로 확인하는 시험 자동화 콘솔

2026-04-06~ 2026-05-21
reacttypescriptwebsocketssefastapispring-bootkubernetes
이런 제품자연어 시험 실행AI 결과 실시간 스트리밍6단계 인증 시험 워크플로우실시간 작업 모니터링결과 분석 · AI 리포트

JWT 인증 SSE 스트리밍

표준 EventSource는 인증 헤더를 실을 수 없어, fetch + ReadableStream으로 SSE를 직접 파싱하고 끊기면 자동 재연결하도록 구현.

fetch + ReadableStream

React 19 다중 스토어 Tearing 해결

두 Zustand 스토어를 같은 동기 블록에서 연속 업데이트하면 useSyncExternalStore가 tearing을 감지해 무한 리렌더에 빠짐. 두 번째 업데이트를 await 경계 뒤로 옮겨 해결.

useSyncExternalStore

동시 401 → 토큰 갱신 1회로 단일화

여러 요청이 동시에 401을 받아도, 이미 진행 중인 토큰 갱신 요청을 재사용해 중복 갱신을 막음.

요청 큐잉

Overview

네트워크 장비 인증 시험은 정보 수집 → 시험 계획 → 프리셋 → 작업 실행 → 리포트 생성 → 완료까지 여러 단계를 거치는데, 이 과정이 대부분 수동이었다. NGRAS는 이 워크플로우를 자연어로 지시하고 AI가 시험 계획을 세워 실행하며, 진행 상황을 실시간으로 볼 수 있는 콘솔이다. SSAFY 자율 프로젝트(기업연계)로 실제 하드웨어 사업부와 연계해 현업 멘토 피드백을 받으며 진행했고(보안망 내부 개발이라 외부 AI·협업 도구 사용에 제약이 있었다), 6명이 참여해 프로젝트 1위·전국 113개 팀 중 전시발표회 1위를 수상했다.

핵심 기능

내 역할

디자인, 프론트엔드 및 백엔드 개발을 맡았다. 이 글은 그중에서도 가장 깊게 파고들었던 프론트엔드 문제 세 가지 — SSE 스트리밍, 리렌더링 버그, 토큰 갱신 race condition — 위주로 정리한다. 백엔드(FastAPI·Spring Boot) 쪽은 팀 공통 작업으로 함께 구현했다.

기술 선택 이유

NGRAS 선행 시스템 유지보수

NGRAS 이전에 있던 규제인증 시스템(NGRMS)의 Reference 모듈도 함께 유지보수했다. 프론트엔드에서는 국가마다 다른 동적 필드 입력과, 새 항목을 추가하면 자동으로 선택되는 인라인 추가 기능을 구현했다. 백엔드에서는 화면 그룹(국가) 단위로 페이지네이션을 맞추고, 국가별로 제각각인 필드를 JSONB로 담아 스키마 변경 없이 확장할 수 있도록 구성했다.

배운 점