Skip to content

Note + AI를 의미하는 NOTAI는 대학생을 주 타깃으로 효율적이고 효과적인 강의 학습 및 시험 대비를 도와주는 애플리케이션입니다. (2024 KakaoTechCampus Step 3 - Android App)

Notifications You must be signed in to change notification settings

hynseoj/notai-backend

 
 

Repository files navigation

image

목차

⭐ NOTAI 를 소개합니다! ⭐

1. 타깃층 및 제작 목적

NOTE + AI를 의미하는 NOTAI대학생을 주 타깃으로 하여
효율적이고 효과적인 강의 학습시험 대비를 도와주는
안드로이드 태블릿에 최적화된 애플리케이션입니다.

  • iOS용 추후 출시 예정

2. 제공 서비스

1. 동기화된 강의 자료 3-TYPE

  • 한눈에 보이는
    • 강의 녹음 → PDF 파일 — 사용자 필기

🔑 흩어진 강의자료, 확인하기 불편하셨죠? 강의 흐름에 꼭 맞춰 정리되는 자료로 더 편리하게 학습하세요!

2. AI 학습 보조 자료 3-STEP

  • 음성 필기

    • 강의 녹음 파일을 STT (Speech to Text) 변환
  • AI 요약

    • 강의 자료 3가지를 통합한 요약본 제공
  • AI 예상 시험 문제

    • 강의 자료 3가지를 통합한 시험 예상 문제 생성

3. 해결하려는 문제점 및 기대효과

문제점 BIG 3 ➡️ 기대효과
1. 필기하느라 수업을 놓친 흑우가 있다?! 🐂 ➡️ 1. 필기는 AI에게 맡겨요!
강의 집중 UP 📈
2. 너무 긴 강의내용... 다 못 보게 되는데... 😅 ➡️ 2. AI 요약으로 핵심만!
학습 효율 UP 🔝
3. 이거 시험에는 어떻게 나올지 도저히 모르겠어!! 💢 ➡️ 3. AI가 만들어주는 문제로
더 완벽한 시험대비 💯

🎬 시연영상 🎬

(영상업로드 예정)

🧑‍🤝‍🧑 팀원 🧑‍🤝‍🧑

Backend


hynseoj

rladbrua0207

mingjuu

Shsin9797

yunjunghun0116
Backend Backend Backend Backend Backend

Frontend (Android)


aengzu

Kjamm
Android Android

🧑‍💻 핵심 기능 🧑‍💻

기능명 기능 설명
기본적인 노트 앱 기능 지원 노트 앱 기능

폴더 및 파일 업로드를 통해 원하는 자료를 마음껏 학습
AI를 통한 녹음 변환 기능 지원 녹음 변환 기능

페이지 이동 이벤트를 지원해 더욱 똑똑한 음성 변환 가능
AI를 통한 페이지 요약 기능 제공 페이지 요약 기능

단순한 요약 기능이 아닌, 해당 페이지에서 녹음된 음성을 토대로 요약 기능 제공

🔗 링크 모음

앱 다운로드

앱 다운로드 링크

소개 자료 (ppt)

소개 자료 링크

프로젝트 관련 문서

📁 파일구조 📁

Android

클린아키텍처 & MVVM & 멀티모듈

  • 클린 아키텍처를 통해 비즈니스 로직, 데이터 처리, ui 명확히 분리
  • 멀티모듈 구조를 통해 공통 기능을 별도의 모듈로 분리하여 각 부분의 독립성을 높임
  • MVVM을 통해 테스트와 유지보수가 용이해짐
  • 전체 모듈을 빌드할 필요가 없어 빌드시간을 줄이는데 용이해짐
📦 notai
├───📂app
│   └───📂src
│       └───📂main
│           ├───📂java/com/iguana/notai
│           │   └───📄NotaiApplication.kt
│           └───📂res
│               ├───📂layout
│               └───📂values
│
├───📂build-logic (여러 모듈에서 공통적으로 사용되는 빌드 설정(플러그인 적용, 의존성 관리, 컴파일 옵션 등)을 중앙에서 관리)
│
├───📂core
│   ├───📂data
│   │       ├───📂di (의존성 주입과 관련된 모듈)
│   │       ├───📂local (db 관련 모듈)
│   │       │   ├───📂dao
│   │       │   ├───📂db
│   │       │   ├───📂entity
│   │       │   └───📂files
│   │       ├───📂mapper (데이터 모델 분리 관련 모듈)
│   │       ├───📂remote
│   │       │   |───📂api (API 서비스 인터페이스 정의)
│   │       │   └───📂model (DTO 정의)
│   │       ├───📂repository (domain/repository에서 원격 API, 로컬 db에 대해 제공한 추상화 계층을 구체화) 
│   │       └───📂utils (포매팅이나 확장 함수 관련)
│   │
│   ├───📂domain
│   │       ├───📂model (비즈니스 로직에 사용되는 데이터 모델)
│   │       ├───📂repository
│   │       ├───📂usecase (도메인 로직을 처리하는 유스케이스)
│   │       └───📂utils
│   │
│   ├───📂designsystem (앱 전반의 색상, 테마, 폰트 설정)
│   │
│   └───📂ui
│       ├───📄BaseActivity.kt (사이드탭을 포함하는 공통 액티비티)
│       ├───📄SideTabLayoutFragment.kt (사이드탭은 공통적으로 사용되므로 따로 정의하여 재사용)
│       └───📄StatusBarManager.kt
│
└───📂feature (각 기능들을 모듈로 분리)
    ├───📂ai
    ├───📂community
    ├───📂dashBoard
    ├───📂documents
    ├───📂favorites
    ├───📂login
    ├───📂notetaking
    ├───📂settings
    └───📂userInfo

Backend

CQRS 패턴 & Command 패턴

  • 데이터 변경과 조회 작업을 분리하여 최적화된 작업 수행 가능
  • 추후 데이터 저장소를 분리하여 효율을 높일 수 있음
  • presentation 계층과 application 계층의 요청을 분리하여 독립성 보장
  • 비즈니스 로직의 확장 및 변경이 유연
📦notai
└── 📁src
    ├── 📁main
    │   ├── 📁java
    │   │   └── 📁notai
    │   │       ├── 📄BackendApplication.java
    │   │       ├── 📁annotation
    │   │       ├── 📁auth `사용자 로그인 관련 resolver 와 JWT 컴포넌트`
    │   │       ├── 📁client `외부로의 API 요청 처리`
    │   │       │   ├── 📄HttpInterfaceUtil.java
    │   │       │   ├── 📁ai `AI 서버 API`
    │   │       │   ├── 📁oauth `사용자 로그인 관련 OAuth API`
    │   │       │   └── 📁slack `백엔드 서버 Slak Webhook`
    │   │       ├── 📁comment
    │   │       ├── 📁common
    │   │       │   ├── 📁config `Swagger, QueryDSL 등의 애플리케이션 설정`
    │   │       │   ├── 📁converter `JSON 직렬화/역직렬화 처리`
    │   │       │   ├── 📁domain `RootEntity 등 공통 도메인 관련 폴더`
    │   │       │   ├── 📁exception `전역 예외 처리`
    │   │       │   │   ├── 📄ApplicationException.java
    │   │       │   │   ├── 📄ErrorMessages.java
    │   │       │   │   ├── 📄ExceptionControllerAdvice.java
    │   │       │   │   ├── 📄ExceptionResponse.java
    │   │       │   │   └── 📁type
    │   │       │   └── 📁utils
    │   │       ├── 📁document
    │   │       │   ├── 📁application `비즈니스 로직 계층`
    │   │       │   │   ├── 📄DocumentQueryService.java `C,U,D 전용 서비스 (CQRS 패턴)`
    │   │       │   │   ├── 📄DocumentService.java `Read 전용 서비스 (CQRS 패턴)`
    │   │       │   │   └── 📁result `application 계층의 응답 DTO`
    │   │       │   │       ├── 📄DocumentFindResult.java
    │   │       │   │       ├── 📄DocumentSaveResult.java
    │   │       │   │       └── 📄DocumentUpdateResult.java
    │   │       │   ├── 📁domain `도메인 모델 계층`
    │   │       │   │   ├── 📄Document.java
    │   │       │   │   └── 📄DocumentRepository.java `JPA 레포지토리 인터페이스`
    │   │       │   ├── 📁presentation `프레젠테이션 계층`
    │   │       │   │   ├── 📄DocumentController.java `API 엔드포인트`
    │   │       │   │   ├── 📁request `API 요청 DTO`
    │   │       │   │   │   ├── 📄DocumentSaveRequest.java
    │   │       │   │   │   └── 📄DocumentUpdateRequest.java
    │   │       │   │   └── 📁response `API 응답 DTO`
    │   │       │   │       ├── 📄DocumentFindResponse.java
    │   │       │   │       ├── 📄DocumentSaveResponse.java
    │   │       │   │       └── 📄DocumentUpdateResponse.java
    │   │       │   └── 📁query `조회 전용 쿼리 레포지토리 (CQRS 패턴)`
    │   │       │       ├── 📄DocumentQueryRepository.java
    │   │       │       └── 📄DocumentQueryRepositoryImpl.java
    │   │       ├── 📁folder
    │   │       ├── 📁llm
    │   │       ├── 📁member
    │   │       ├── 📁ocr
    │   │       ├── 📁pageRecording
    │   │       ├── 📁pdf
    │   │       ├── 📁post
    │   │       ├── 📁problem
    │   │       ├── 📁recording
    │   │       ├── 📁stt
    │   │       ├── 📁sttTask
    │   │       └── 📁summary
    │   └── 📁resources
    │       ├── 📄application-local.yml
    │       └── 📄application.yml
    └── 📁test
        └── 📁java
            └── 📁notai
                ├── 📄BackendApplicationTests.java
                ├── 📁annotation
                ├── 📁client
                ├── 📁folder
                ├── 📁llm
                ├── 📁ocr
                ├── 📁pageRecording
                ├── 📁recording
                └── 📁stt

💠 ERD 💠

image

👀 API 모아보기

회원 API

기능 URL Method Status 설명
카카오 로그인 /api/members/oauth/login/{oauthProvider} POST 완료
토큰 리프레쉬 /api/members/token/refresh POST 완료
본인 프로필 조회 /api/members/me GET 완료

Document API

기능 URL Method Status 설명
폴더에 Document 업로드 /api/folders/{folderId}/document POST 완료
폴더의 목록 조회 /api/folders/{folderId} GET 완료
여러 Document 조회 /api/folders/{folderId}/documents GET 완료
Document 상세 조회 /api/folders/{folderId}/documents/{documentId} GET 완료
Document 수정 /api/folders/{folderId}/documents/{documentId} PUT 완료
Document 삭제 /api/folders/{folderId}/documents/{documentId} DELETE 완료
폴더 생성 /api/folders POST 완료
폴더 조회 /api/folders?parentFolderId={parentFolderId} GET 완료
폴더 삭제 /api/folders/{folderId} DELETE 완료
속해있는 폴더 변경(위치변경) /api/folders/{folderId}/move POST 완료

Annotation API

기능 URL Method Status 설명
주석 추가 /api/documents/{documentId}/annotations POST 완료
주석 목록 조회 /api/documents/{documentId}/annotations GET 완료
주석 수정 /api/documents/{documentId}/annotations/{annotationId} PUT 완료
주석 삭제 /api/documents/{documentId}/annotations/{annotationId} DELETE 완료

Record API

기능 URL Method Status 설명
페이지 넘김 이벤트 /api/documents/{documentId}/recordings/page-turns POST 완료
녹음 파일 업로드 /api/documents/{documentId}/recordings POST 완료
STT 결과 업로드 X (서버에서 처리) /api/documents/{documentId}/recordings/{recordingId}/stt-results POST 완료

Summarize API

기능 URL Method Status 설명
STT결과 /api/ai/ POST 완료
요약 정리 및 문제생성 (client → server) /api/ai/llm POST 완료
OCR (server → AI server) /api/ai/ocr POST 시작 전
요약 정리 및 문제생성 결과 전달 (AI server → server) /api/ai/llm/callback POST 완료 요약정리 페이지별로 완성될 때마다 AI서버에서 웹서버로 내용을 전달하는 API
요약 정리 및 문제생성 상태 확인 (client → server) /api/ai/llm/status/{documentId} GET 완료
페이지별 요약 정리 및 문제생성 상태 확인 (client → server) /api/ai/llm/status/{documentId}/{pageNumber} GET 완료
생성된 요약 정리 결과 조회 (client → server) /api/ai/llm/results/{documentId} GET 완료
페이지별 생성된 요약 정리 및 문제 조회 (client → server) /api/ai/llm/results/{documentId}/{pageNumber} GET 완료
task 상태 확인 /api/ai/tasks/{taskId} GET 완료 우선은 존재하지 않는 task로 요청하더라도 PENDING입니다

🛠️ 기술스택 🛠️

image

☁️ 추후 개발예정 기능 ☁️

  1. 커뮤니티 기능 → 내가 만든 ai 문제를 공유하고 피드백 받을수 있게 ! ~ 금액과 연결지어서 사고파는 문제은행

About

Note + AI를 의미하는 NOTAI는 대학생을 주 타깃으로 효율적이고 효과적인 강의 학습 및 시험 대비를 도와주는 애플리케이션입니다. (2024 KakaoTechCampus Step 3 - Android App)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%