lib 디렉토리 코드 위치
Auth 디렉토리
- 위치: lib/auth/custom_auth/
- 주요 기능: 사용자 인증 관리
- 핵심 컴포넌트:
- auth_util.dart: 인증 유틸리티 함수 제공
- custom_auth_manager.dart: 인증 상태 및 토큰 관리
- custom_auth_user_provider.dart: 사용자 정보 제공자
Backend 디렉토리
- 위치: lib/backend/
- 주요 기능: API 통신 및 데이터 관리
- 핵심 컴포넌트:
- api_requests/: API 호출 관리
- schema/: 데이터 모델 정의
- firebase/: Firebase 설정 및 연동
Chat 디렉토리
- 위치: lib/chat/
- 주요 기능: AI 채팅 기능 구현
- 핵심 컴포넌트:
- ai_chat_component/: AI 채팅 UI 컴포넌트
- chat_ai_screen/: 채팅 화면 관리
- writing_indicator/: 타이핑 표시 애니메이션
Components 디렉토리
- 위치: lib/components/
- 주요 기능: 재사용 가능한 UI 컴포넌트
- 핵심 컴포넌트:
- deletesubjectwsheet_widget.dart: 과목 삭제 시트
- resume_written_widget.dart: 이력서 작성 컴포넌트
Pages 디렉토리
- 위치: lib/pages/
- 주요 기능: 앱의 주요 화면 구현
- 주요 페이지:
- 커뮤니티
- 자기소개서 작성/관리
- 졸업 요건 관리
- 학교 정보 관리
데이터 흐름
상태 관리
- FFAppState 클래스: 전역 상태 관리 담당
- SharedPreferences: 영구 데이터 저장 활용
API 통신
- RESTful API 통신 구현: 사용자 정보, 학교 정보, 자기소개서 데이터 관리
핵심 기능별 구현 상세
인증 시스템
- 토큰 기반 인증: 사용자 로그인 상태 유지
- 자동 로그인 및 세션 관리: 사용자 경험 개선
- 사용자 상태 실시간 동기화: Firebase 연동
AI 채팅 시스템
- 실시간 채팅 인터페이스: 원활한 사용자 상호작용
- 메시지 히스토리 관리: 사용자 기록 추적
- 타이핑 인디케이터 애니메이션: 사용자 친화적 경험 제공
학사 정보 관리
- 졸업 요건 추적: 필수 학점 관리
- 수강 과목 관리: 개인화된 과목 데이터
- 학점 계산기: 학업 성과 분석 지원
[그림 1] Uniment-Client의 Screens, API Communications, State Management 구조도
[그림 2] Uniment-Client의 Core Components, Data Management, Services 구조도
서버가 관리하는 정보 (구조도, 코드 위치)
- Uniment 서버는 MVC (Model-View-Controller) 아키텍처 패턴을 준수하였으며, Node.js로 구성하여 작성하였습니다.
모델 (Model)
- 데이터베이스와의 직접적인 상호작용을 담당하며, 데이터 구조 및 로직을 정의합니다.
- 주요 모델:
- User (사용자 정보 관리)
- Credit (학점 정보 관리)
- GraduationRequirement (졸업 요건 관리)
- Course (과목 정보 관리)
- Portfolio (포트폴리오 관리)
- Resume (자기소개서 관리)
- University (대학 정보 관리)
뷰 (View)
- 클라이언트 요청에 따른 JSON 데이터를 반환하며, API 레벨에서 클라이언트와의 인터페이스 역할을 합니다.
- 주요 역할:
- RESTful API를 통해 클라이언트와 데이터 교환
- 프론트엔드와 통신하여 사용자 경험 개선
컨트롤러 (Controller)
- 비즈니스 로직을 처리하며 모델과 뷰 간의 연결 역할을 합니다.
- 주요 컨트롤러:
- credits.js (학점 정보 조회 및 업데이트)
- graduation.js (졸업 요건 조회)
- courses.js (과목 등록 및 조회)
- portfolio.js (포트폴리오 관리)
- resumes.js (자기소개서 관리)
- university.js (대학 정보 조회)
구체적인 코드 위치
사용자 정보
- 모델: User
- 관련 코드:
- 사용자 생성 및 초기화: scripts/initializeDB.js
학점 정보
- 모델: Credit
- 관련 코드:
- 학점 동기화: scripts/syncCredits.js
- 학점 조회 및 업데이트: routes/credits.js
졸업 요건
- 모델: GraduationRequirement
- 관련 코드:
- 졸업 요건 조회: routes/graduation.js
- 졸업 요건 초기화: scripts/seedGraduationRequirements.js
과목 정보
- 모델: Course
- 관련 코드:
- 과목 초기화: scripts/initializeCourses.js
- 과목 조회 및 등록: routes/courses.js
포트폴리오 정보
- 모델: Portfolio
- 관련 코드:
- 포트폴리오 초기화: scripts/initializePortfolios.js
- 포트폴리오 관리: routes/portfolio.js
자기소개서 정보
- 모델: Resume
- 관련 코드:
- 자기소개서 초기화: scripts/initializeResumes.js
- 자기소개서 관리: routes/resumes.js
대학 정보
- 모델: University
- 관련 코드:
- 대학 초기화: scripts/initUniversities.js
- 대학 정보 조회: routes/university.js
[그림 3] Uniment 통합 구조도
[그림 4] Uniment-Server의 Core Services, Middleware 구조도
[그림 5] Uniment-Server의 Database Models, API Routes 구조도
클라이언트와 서버가 송수신 하는 정보 (RESTful API, JSON 정보 등)
[그림 6] Uniment 시스템 흐름도
- 기본 URL: http://uniment.site:5555/api
- 인증 방식: JWT (Authorization Bearer Token)
사용자 관리 (Users)
이메일로 사용자 조회
- URL: /users/email/:email
- Method: GET
- Success Response (200):
- {"id": "string","name": "string","email": "string","schoolInfo": "object"}
모든 사용자 조회
- URL: /users/all
- Method: GET
전체 사용자 수 조회
- URL: /users/total/count
- Method: GET
- Success Response (200):
- {"totalUsers": "number","message": "전체 사용자 수 조회 성공"}
사용자 학교 정보 조회
- URL: /users/:userId/academic-info
- Method: GET
- Success Response (200):
- {"academicInfo": { "university": "string", "major": "string", "admissionYear": "number"},"message": "학교 정보 조회 성공"}
사용자 학교 정보 업데이트
- URL: /users/:userId/academic-info
- Method: PUT
- Request Body:
- {"university": "string","major": "string","admissionYear": "number"}
회원 탈퇴
- URL: /users/:userId
- Method: DELETE
- Success Response (200):
- {"message": "회원 탈퇴가 완료되었습니다.","deletedUserId": "string"}
자기소개서 (Resumes)
자기소개서 목록 조회
- URL: /resumes/user/:userId
- Method: GET
- Response: 작성일 기준 내림차순 정렬된 자기소개서 목록
자기소개서 상세 조회
- URL: /resumes/:id
- Method: GET
자기소개서 작성
- URL: /resumes
- Method: POST
- Request Body:
- {"userId": "string","company": "string","position": "string","type": "string","applicationDate": "date","content": "string","tags": "array"}
자기소개서 수정
- URL: /resumes/:id
- Method: PUT
- Request Body:
- {"content": "string"}
자기소개서 삭제
- URL: /resumes/:id
- Method: DELETE
자기소개서 개수 조회
- URL: /resumes/count/:userId
- Method: GET
- Success Response (200):
- {"count": "number","message": "자기소개서 개수 조회 성공"}
대학 정보 (Universities)
대학교 목록 조회
- URL: /universities/names
- Method: GET
- Response: 대학교 이름 목록
특정 대학 정보 조회
- URL: /universities/:name
- Method: GET
- Success Response (200):
- {"name": "string","credits": { "total": "number", "major": "number", "general": "number"}}
특정 대학 전공 목록 조회
- URL: /universities/:name/majors
- Method: GET
- Response: 전공 목록
포트폴리오 (Portfolio)
포트폴리오 생성
- URL: /portfolio
- Method: POST
- Request Body:
- {"userId": "string","type": "string","title": "string","achievement": { "type": "점수" | "합격여부", "value": "string"},"date": "string","memo": "string","imageUrl": "string"}
이미지 포트폴리오 생성
- URL: /portfolio/with-image
- Method: POST
- Content-Type: multipart/form-data
- Request Body:
- image: 이미지 파일 (5MB 제한)
- 기타 필드는 포트폴리오 생성과 동일
포트폴리오 목록 조회
- URL: /portfolio/user/:userId
- Method: GET
포트폴리오 삭제
- URL: /portfolio/:portfolioId
- Method: DELETE
학점 관리 (Credits)
학점 정보 조회
- URL: /credits/:userId
- Method: GET
- Response: 상세 학점 정보
학점 초기화
- URL: /credits/initialize
- Method: POST
- Request Body:
- {"userId": "string","university": "string","major": "string"}
졸업 요건 (Graduation)
졸업 상태 조회
- URL: /graduation/graduation-status
- Method: GET
- Query Parameters:
- userId: 사용자 ID
- Response: 상세 졸업 요건 충족 상태
UNICHAT (lib/chat)
API 엔드포인트 구성
- URL: /v1/chat/completions
- Method: POST
{
static String getBaseUrl() => 'https://api.openai.com/v1';
}
메시지 포맷
{
"content": "메시지 내용"
}
오류 응답
모든 API는 다음과 같은 형식으로 오류를 반환합니다:
{
"message": "오류 메시지"
}
[그림 7] Uniment-Server의 MongoDB, Firebase 시스템간 통신 구조도
PlayStore 정식 등록 절차 진행 중
- Google Play Console 내 "비공개 테스트 - Alpha" 트랙을 통해 제한된 인원에게 앱 접근 가능
- Uniment의 개인정보보호 및 앱 내부 컨텐츠에 대해 플레이스토어의 접근 활성화
- 현재 V0.0.1 빌드 배포 완료 (테스트 시작일: 12월 5일 오전 8:45)
- 약 177개국, 1개 버전 코드로 운영 중이며 필요 시 실시간 업데이트를 통한 빌드 개선 가능
