Uniment : 200만 대학생 포트폴리오 관리 어플
Uniment : 200만 대학생 포트폴리오 관리 어플

Uniment : 200만 대학생 포트폴리오 관리 어플

notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image
notion image

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 채팅 시스템

  • 실시간 채팅 인터페이스: 원활한 사용자 상호작용
  • 메시지 히스토리 관리: 사용자 기록 추적
  • 타이핑 인디케이터 애니메이션: 사용자 친화적 경험 제공

학사 정보 관리

  • 졸업 요건 추적: 필수 학점 관리
  • 수강 과목 관리: 개인화된 과목 데이터
  • 학점 계산기: 학업 성과 분석 지원
notion image
[그림 1] Uniment-Client의 Screens, API Communications, State Management 구조도
notion image
[그림 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
    • notion image
      [그림 3] Uniment 통합 구조도
       
notion image
[그림 4] Uniment-Server의 Core Services, Middleware 구조도
notion image
[그림 5]  Uniment-Server의 Database Models, API Routes 구조도

클라이언트와 서버가 송수신 하는 정보 (RESTful API, JSON 정보 등)

notion image
[그림 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": "오류 메시지"
}
notion image
[그림 7] Uniment-Server의 MongoDB, Firebase 시스템간 통신 구조도

notion image

PlayStore 정식 등록 절차 진행 중

  • Google Play Console 내 "비공개 테스트 - Alpha" 트랙을 통해 제한된 인원에게 앱 접근 가능
  • Uniment의 개인정보보호 및 앱 내부 컨텐츠에 대해 플레이스토어의 접근 활성화
  • 현재 V0.0.1 빌드 배포 완료 (테스트 시작일: 12월 5일 오전 8:45)
  • 약 177개국, 1개 버전 코드로 운영 중이며 필요 시 실시간 업데이트를 통한 빌드 개선 가능