← 주요 프로젝트← Key projects

2024 교내 해커톤 대상

2024 SCHOOL HACKATHON GRAND PRIZE

SDGM

SDGM

교내 층별 안내를 제공하는 캠퍼스 가이드입니다. Flutter 앱에서 교실 위치를 3D 모델로 확인할 수 있습니다.

A campus guide with floor-level information and a Flutter app for locating classrooms in 3D models.

FLUTTERFIREBASE AUTH3D MODELGLB / FBXANIMATION
담당 작업Work involved

앱 구조 · 인증 UI · 3D 자산 연동 · 화면 애니메이션

App structure, authentication UI, 3D asset integration and screen animation

현재 상태Current status

앱 소스와 3D 자산 공개 · 운영 데이터 서비스는 확인되지 않음

App source and 3D assets published; a production data service has not been verified

01

프로젝트 개요

3D 캠퍼스 탐색과 웰니스 화면을 결합한 Flutter 앱 범위

SDGM은 학교 공간을 층별 3D 모델로 확인하는 Flutter 캠퍼스 안내 앱이다. Firebase 로그인과 하단 메뉴를 제공하며, 중앙 버튼으로 3D 지도를 연다. 식단·물·운동·신체 정보를 보여주는 대시보드도 포함한다.

영역 코드에서 확인되는 구현 현재 경계
인증 이메일 가입·로그인·비밀번호 재설정, Google 로그인, Facebook UI Facebook 토큰의 Firebase 교환은 미완성
앱 셸 네 개 탭, 중앙 3D 지도 버튼, 화면별 애니메이션 제어 라우팅과 상태가 화면 코드에 결합
웰니스 식단·물·운동·신체 측정 카드와 파형 애니메이션 표시 데이터의 영속 저장은 확인되지 않음
캠퍼스 지도 B2·B1·1F–4F GLB와 경로 FBX, 카메라·텍스처·재생 제어 큰 로컬 자산과 렌더러 호환성에 의존

구현 범위

Flutter 화면 구조, Firebase 인증 UI, 커스텀 하단 바, 웰니스 카드와 애니메이션, flutter_3d_controller 기반 모델 뷰어, Android·iOS·web runner 구성이 저장소에 포함된다.

현재 상태

공개 저장소에서 실행 가능한 앱 소스와 3D 자산을 제공하지만 앱 배포 주소나 운영 데이터 서비스는 확인되지 않는다. 해커톤 수상 이력 외의 사용자 수, 길찾기 성공률, 3D 로딩 성능과 접근성은 측정되지 않음이다.

01

Project overview

Scope of the Flutter app combining 3D campus discovery and wellness views

SDGM is a Flutter campus guide with floor-level 3D models. It provides Firebase sign-in and bottom navigation, with a center button for the 3D map. A dashboard also shows meals, water, exercise and body information.

Area Confirmed implementation Current boundary
Identity Email sign-up/sign-in/reset, Google sign-in, Facebook UI Facebook token is not exchanged for Firebase credentials
App shell Four tabs, center map action and screen animation control Routing and state remain coupled to views
Wellness Meal, water, exercise and body cards with wave animations Persistent user data is not confirmed
Campus map B2, B1 and 1F–4F GLB plus route FBX, camera and playback Depends on bundled assets and renderer compatibility

Implementation

The repository includes Flutter application structure, Firebase authentication UI, custom navigation, wellness cards and animation, a flutter_3d_controller viewer and Android, iOS and web runners.

Current status

The public repository provides app source and 3D assets, but no public application deployment or operational data service is confirmed. User volume, wayfinding success, 3D loading performance and accessibility are not measured.

02

아키텍처

인증, Flutter 내비게이션, 애니메이션 화면과 3D 자산의 상세 경계

1. 부트스트랩과 인증 경계

main.dart가 Firebase를 초기화하고 LoginPage를 시작 화면으로 연다. 이메일 로그인·가입·비밀번호 재설정은 Firebase Auth를 직접 호출하며 Google은 provider credential을 Firebase 세션으로 교환한다. 성공 시 pushReplacement로 MainPage에 진입하므로 인증 화면이 뒤로가기 스택에 남지 않는다.

2. 앱 셸과 내비게이션 경계

MainPage가 선택 탭과 화면 전환용 AnimationController를 관리한다. BottomBarView는 네 개 탭을 callback으로 바꾸고, 중앙의 돌출 버튼은 일반 탭과 별도로 3D MapView route를 push한다. 탭 화면·애니메이션 수명·route 전환이 UI 계층에 함께 있어 화면 추가 시 controller 정리와 상태 보존을 함께 검토해야 한다.

3. 웰니스 화면 구성

My Diary와 training/account 영역은 식단 목록, 수분 파형, 운동, 신체 측정과 사용자 정보를 여러 작은 view widget으로 조합한다. 각 widget은 상위 animation controller의 interval을 받아 순차 표시된다. 화면에 표시되는 식단·측정 값은 로컬 모델과 예시 데이터 중심이며 서버 동기화 계층은 확인되지 않는다.

4. 3D 모델 실행 흐름

MapView가 flutter_3d_controller를 통해 B2·B1·1F–4F GLB, 경로 FBX와 애니메이션을 선택한다. floor UI가 asset 경로를 바꾸면 renderer가 앱 번들의 모델을 읽고 사용자는 orbit·camera·texture·animation 동작을 제어한다. 중앙 내비게이션 동작과 3D 상태는 별도 route에 격리된다.

5. 플랫폼·실패 경계

Firebase 설정은 Android, iOS와 web option 파일에 나뉘고 3D는 플랫폼 GPU·WebGL·asset loading에 의존한다. 현재 Facebook 로그인은 성공 토큰을 Firebase credential로 교환하는 코드가 주석 처리되어 있어 다른 인증 방식과 세션 계약이 동일하지 않다. 웹 option 파일이 있어도 공개 web 배포와 플랫폼별 통합 검증은 별도 확인이 필요하다.

6. 상태·자산 소유권

Firebase가 인증 세션을, main_page와 bottom navigation이 현재 탭을, Map.dart가 선택 층과 3D controller를 소유한다. GLB·FBX는 앱 번들 자산이므로 서버 갱신이나 버전 협상은 미구현이다.

7. 성능·장애 복구

모델 크기와 GPU/WebGL capability가 초기 로딩과 메모리를 결정한다. 층 단위 지연 로드, controller dispose, 저사양 대체 이미지와 asset decode 실패 상태를 검증해야 하며 현재 FPS·메모리 수치는 측정되지 않았다.

8. 보안·관측·기술 부채

인증 provider마다 실제 Firebase credential 교환이 완료되어야 동일한 보안 계약을 가진다. crash·asset latency 관측은 미구현이며 3D 화면의 플랫폼 분기와 로그인 코드를 서비스 계층으로 분리하는 작업이 남았다.

02

Architecture

Detailed boundaries across identity, Flutter navigation, animation and 3D assets

1. Bootstrap and identity boundary

main.dart initializes Firebase and opens LoginPage. Email sign-in, sign-up and password reset call Firebase Auth directly; Google exchanges provider credentials for a Firebase session. Success uses pushReplacement to enter MainPage, removing authentication from the back stack.

2. Shell and navigation boundary

MainPage owns the selected tab and transition AnimationController. BottomBarView changes four tabs through a callback, while its raised center action pushes the 3D MapView as a separate route. Adding screens requires coordinated tab state, controller disposal and route-state decisions.

3. Wellness presentation composition

My Diary and training/account compose meal, water-wave, exercise, body and identity widgets. Each receives an interval from a parent animation controller for staggered entry. Values are built around local models and sample presentation; a synchronized persistence repository is not confirmed.

4. 3D model path

MapView uses flutter_3d_controller to choose B2, B1 and 1F–4F GLB floors, route FBX files and animations. Floor controls change bundled asset paths, while the renderer exposes orbit, camera, texture and playback operations. The heavy 3D state stays outside the regular tab shell.

5. Platform and failure boundaries

Firebase configuration differs across Android, iOS and web, while 3D behavior depends on platform GPU, WebGL and asset loading. Facebook currently reports provider success without completing the commented Firebase credential exchange. A web options file exists, but public web delivery and provider compatibility still require separate validation.

6. State and asset ownership

Firebase owns the identity session, main_page and bottom navigation own the current tab, and Map.dart owns floor selection and the 3D controller. GLB and FBX files are bundled assets, so server refresh and version negotiation are missing.

7. Performance and failure recovery

Model weight and GPU/WebGL capability determine startup and memory cost. Floor-level lazy loading, controller disposal, low-end fallback imagery and asset-decode error states require validation. FPS and memory have not been measured.

8. Security, observability and debt

Every identity provider must complete the Firebase credential exchange to share one security contract. Crash and asset-latency observability are missing. Platform branches and login logic should move into dedicated service boundaries.

구조와 데이터 흐름

Structure and data flow

도식을 누르면 크게 볼 수 있습니다. 구현 여부와 참고한 코드도 표시했습니다.

Select a diagram to enlarge it. Labels show implementation status and source files.

01
시스템 컨텍스트 · 신뢰 경계System context · trust boundaries학생 앱과 Firebase, 번들 3D 자산 사이의 경계입니다.Boundaries between the student app, Firebase and bundled 3D assets.
선택하면 전체 화면에서 세부 구조와 근거 번호를 볼 수 있습니다.Select to inspect the structure and evidence references full screen.
02
런타임 · 모듈 · 상태 소유권Runtime · modules · state ownership인증 부트스트랩, 탭 셸, 애니메이션과 3D 모델 상태를 분해합니다.Decomposes auth bootstrap, tab shell, animations and 3D model state.
선택하면 전체 화면에서 세부 구조와 근거 번호를 볼 수 있습니다.Select to inspect the structure and evidence references full screen.
03
핵심 사용자 흐름 · 요청 시퀀스Core user flow · request sequence로그인 후 층과 모델을 선택해 캠퍼스 장면을 렌더하는 흐름입니다.Flow from sign-in through floor/model selection to campus rendering.
선택하면 전체 화면에서 세부 구조와 근거 번호를 볼 수 있습니다.Select to inspect the structure and evidence references full screen.
04
데이터 · 배포 · 보안 · 복구Data · delivery · security · recovery모델 자산 크기, 모바일 패키징, 인증과 복구 한계를 표시합니다.Shows model-asset weight, mobile packaging, authentication and recovery limits.
선택하면 전체 화면에서 세부 구조와 근거 번호를 볼 수 있습니다.Select to inspect the structure and evidence references full screen.
03

기술 결정

캠퍼스 3D 경험을 Flutter 앱으로 구성한 이유와 트레이드오프

Flutter로 앱과 web runner를 공유

인증, 카드형 대시보드와 3D 지도를 한 Dart 코드베이스에서 구성하기 위해 Flutter를 사용했다. UI 재사용에는 유리하지만 Firebase 소셜 로그인과 3D renderer는 플랫폼별 설정·권한·호환성을 따로 검증해야 한다.

Firebase에 계정 흐름 위임

직접 인증 서버를 만들지 않고 이메일·Google·재설정을 Firebase에 맡겼다. 개발 범위는 줄지만 configuration file과 provider console 설정이 실행 전제이며 모든 provider가 같은 Firebase session 계약을 지켜야 한다.

중앙 3D 동작을 별도 route로 분리

자주 쓰는 네 탭 사이에 3D 지도를 일반 탭으로 유지하지 않고 중앙 action에서 push한다. 무거운 renderer를 항상 유지하지 않는 장점이 있지만 지도에서 돌아올 때 선택 층·카메라 상태를 명시적으로 보존하지 않는다.

모델을 앱 자산으로 번들

층별 GLB와 경로 FBX를 로컬 asset으로 제공해 서버 없이 재현되도록 했다. 오프라인 실행에는 유리하지만 앱 크기, 최초 decode 시간, GPU 메모리와 자산 교체 배포 비용이 커진다.

순차 애니메이션 기반 대시보드

상위 controller와 interval로 카드가 순서대로 등장하도록 구성했다. 일관된 연출을 만들지만 화면마다 controller 수명과 reduced-motion 대체 동작을 개발자가 직접 책임져야 한다.

03

Decisions

Why the campus experience uses Flutter and bundled 3D assets

Share app and web runners with Flutter

Flutter keeps identity, dashboard cards and the 3D map in one Dart codebase. UI reuse is strong, while social login and 3D rendering still require platform-specific configuration and compatibility work.

Delegate identity to Firebase

Email, Google and reset flows avoid a custom identity server. Firebase configuration and provider-console setup become runtime dependencies, and each provider must complete the same Firebase session contract.

Push the center 3D action as a route

The heavy map is not retained as one of four ordinary tabs. This avoids keeping the renderer alive continuously, but selected floor and camera state need explicit preservation when users return.

Bundle model files with the app

Local GLB and FBX files make the experience reproducible without a model server. The cost is application size, first decode time, GPU memory and a full deployment whenever a model changes.

Stagger dashboard cards

Parent controllers and intervals create a coordinated presentation. Every screen must correctly own controller lifetime and provide an alternative for reduced motion.

04

검증과 한계

인증·탭·3D 모델의 검증 시나리오와 알려진 미완성 영역

인증 시나리오

  • 이메일 가입·로그인·로그아웃·비밀번호 재설정의 성공과 Firebase 오류 코드를 확인한다.
  • Google 취소·성공·credential 교환 실패 뒤 route와 loading 상태를 확인한다.
  • Facebook은 로그인 성공 표시만으로 Firebase 사용자가 생겼다고 판단하지 않고 실제 currentUser를 확인한다.
  • 인증 성공 뒤 뒤로가기가 로그인 화면을 다시 노출하지 않는지 확인한다.

화면·3D 시나리오

  • 네 탭을 빠르게 왕복해 controller 중복, disposed animation과 화면 상태 손실을 확인한다.
  • 중앙 버튼으로 3D 지도를 반복 진입·종료해 renderer와 메모리가 해제되는지 확인한다.
  • B2부터 4F까지 각 GLB와 경로 FBX가 로드되고 빈 asset·decode 실패가 사용자에게 설명되는지 확인한다.
  • 작은 화면, 가로 화면과 web runner에서 floor selector·orbit gesture 충돌을 확인한다.

자동 검증 상태

iOS Runner test 골격과 lint 설정은 있지만 Dart widget·unit·integration test suite는 확인되지 않는다. 플랫폼별 로그인 성공률, 3D 로딩 시간, 메모리 사용량과 프레임 안정성은 측정되지 않음이다.

알려진 한계

  • Facebook token의 Firebase credential 교환이 구현되지 않았다.
  • 웰니스 카드 데이터의 영속 repository가 확인되지 않는다.
  • 3D 모델이 앱 번들에 포함되어 업데이트와 용량이 함께 증가한다.
  • web runner는 존재하지만 공개 web 배포와 provider별 호환성이 증명되지 않았다.
  • 3D 길찾기는 위치 센서 기반 실시간 indoor navigation이 아니다.
04

Validation and limits

Identity, navigation and 3D scenarios plus known incomplete behavior

Identity scenarios

  • Exercise email sign-up, sign-in, sign-out and password reset success and Firebase errors.
  • Verify Google cancel, success and credential-exchange failure leave routes and loading state coherent.
  • For Facebook, inspect currentUser instead of treating the provider-success message as a Firebase session.
  • Confirm back navigation does not expose login after successful replacement.
  • Rapidly switch all four tabs and watch for duplicate or disposed controllers and lost state.
  • Repeatedly enter and leave the center map and verify renderer memory is released.
  • Load every floor GLB and route FBX and expose missing-asset or decode failures to the user.
  • Test floor controls and orbit gestures on small, landscape and web viewports.

Automated evidence

An iOS Runner test skeleton and lint configuration exist, but no confirmed Dart widget, unit or integration suite covers the app. Platform login success, model load time, memory and frame stability are not measured.

Known limits

  • Facebook does not complete Firebase credential exchange.
  • Persistent wellness repositories are not confirmed.
  • Bundled models increase both app size and update cost.
  • A web runner exists without a verified public web deployment or provider matrix.
  • The 3D guide is not sensor-based real-time indoor positioning.
05

로드맵

구현된 앱 흐름과 인증·3D·웹 지원의 우선 개선 항목

완료

  • Firebase 이메일·Google 인증과 비밀번호 재설정 UI
  • 네 탭과 중앙 3D 지도 action을 가진 앱 셸
  • 식단·물·운동·신체 측정 웰니스 카드
  • 층별 GLB, 경로 FBX와 3D camera·animation 제어
  • Android·iOS·web runner 및 플랫폼 설정 파일

우선 개선

  • Facebook Auth를 Firebase credential로 완결하거나 미지원 UI 제거
  • DefaultFirebaseOptions.currentPlatform 기반 초기화와 환경별 configuration 검증
  • 3D asset loading·decode·unsupported renderer 오류 상태 제공
  • 인증, route, floor selection과 controller lifecycle 자동 테스트
  • 예시 웰니스 데이터와 실제 사용자 데이터의 경계를 화면에 명확히 표시

이후 계획

  • 선택 층·카메라·목적지 상태 보존과 deep link
  • 모델 압축, lazy load와 기기 등급별 품질 조정
  • 접근성용 텍스트 층별 안내와 3D 없이도 가능한 길찾기
  • web 배포 전 OAuth origin, WebGL과 모바일 브라우저 검증

범위에서 제외

의료 진단, 건강 처방, 실시간 실내 위치 추적과 재난 대피 판단은 현재 앱의 범위가 아니다. 웰니스 값은 예시 인터페이스이며 전문적인 건강 판단 근거로 사용하지 않는다.

05

Roadmap

Implemented app flows and priority identity, 3D and web work

Completed

  • Firebase email and Google identity plus password-reset UI
  • Four-tab shell with a raised center 3D map action
  • Meal, water, exercise and body-measurement cards
  • Floor GLB, route FBX and camera/animation controls
  • Android, iOS and web runners with platform configuration

Priority improvements

  • Complete Facebook-to-Firebase credential exchange or remove unsupported UI
  • Initialize with DefaultFirebaseOptions.currentPlatform and validate each environment
  • Expose model loading, decode and unsupported-renderer error states
  • Add automated coverage for identity, routes, floors and controller lifecycle
  • Label sample wellness values separately from real user data

Later work

  • Preserve floor, camera and destination state with deep links
  • Compress and lazy-load models with device-tier quality controls
  • Provide accessible text directions that do not require a 3D renderer
  • Validate OAuth origins, WebGL and mobile browsers before web deployment

Out of scope

Medical diagnosis, health prescriptions, real-time indoor positioning and emergency evacuation decisions are outside this app. Wellness values are interface examples, not professional health evidence.

확대 보기Expanded view

도식을 좌우로 이동하거나 확대해 세부 흐름을 확인할 수 있습니다.

Pan or zoom the diagram to inspect the detailed flow.