기술 구조운영 기준

시스템 아키텍처

Flutter, Firebase, Node API, MSSQL과 R2를 분리한 운영 구조입니다.

구성 요소

계층 역할
Flutter iOS·Android 사용자 경험, 로컬 캐시와 재시도
Firebase Auth 이메일·Google·Apple 사용자 인증
App Check 승인된 앱 인스턴스의 API 접근 증명
Node API 토큰 검증, 요청 계약, 저장 프로시저 호출
MSSQL 2016 교육과정, 문제은행, 진도와 운영 데이터
Cloudflare R2 이미지와 고정 음성 에셋
Firebase Hosting 공개 소개·법적 문서와 API 진입점

데이터 접근

Flutter 앱은 데이터베이스에 직접 연결하지 않는다. API는 Firebase ID token과 App Check를 검증하고, 승인 목록에 있는 저장 프로시저만 실행한다. 애플리케이션 코드에 업무 SQL 쿼리를 직접 작성하지 않는다.

교육과정·단원·대화·문법·어휘·문항·정답·배치평가·게시 상태·에셋 연결·진도·복습의 단일 원천은 MSSQL이다. Flutter는 게시 package를 렌더링하며 로컬 상수나 로컬 난수로 운영 콘텐츠와 결과를 만들지 않는다.

콘텐츠와 사용자 데이터

게시 콘텐츠는 안정 ID와 버전 ID를 분리한다. 콘텐츠가 수정되면 기존 행을 덮어쓰지 않고 새 버전을 만든다. 이미 시작한 학습 세션은 원래 버전을 계속 사용해 결과 재현성을 유지한다.

파일 전달

R2 원본 객체는 공개 주소로 직접 노출하지 않는다. 인증된 앱 요청을 API가 검증하고 필요한 에셋만 전달한다. 에셋 메타데이터와 콘텐츠 연결은 DB에서 관리한다.

시간 기준

사용자에게 보이는 학습일, 주간 계획과 알림 판단은 기기 로컬시간을 사용한다. 서버 UTC는 감사와 동기화 충돌 해결을 위한 별도 기준으로 기록한다.

문서 업데이트 원칙

구현 상태가 바뀌면 코드·DB·테스트와 같은 변경에서 이 문서도 함께 갱신합니다.

개발 현황으로 돌아가기