- ⭐ NOTAI 를 소개합니다! ⭐
- 🎬 시연영상 🎬
- 🧑🤝🧑 팀원 🧑🤝🧑
- 🧑💻 핵심 기능 🧑💻
- 🔗 링크 모음 🔗
- 📁 파일구조 📁
- 💠 ERD 💠
- 👀 API 모아보기 👀
- 🛠️ 기술스택 🛠️
- ☁️ 추후 개발예정 기능 ☁️
NOTE + AI를 의미하는 NOTAI는 대학생을 주 타깃으로 하여
효율적이고 효과적인 강의 학습 및 시험 대비를 도와주는
안드로이드 태블릿에 최적화된 애플리케이션입니다.
- iOS용 추후 출시 예정
- 한눈에 보이는
- 강의 녹음 → PDF 파일 — 사용자 필기
🔑 흩어진 강의자료, 확인하기 불편하셨죠? 강의 흐름에 꼭 맞춰 정리되는 자료로 더 편리하게 학습하세요!
-
음성 필기
- 강의 녹음 파일을 STT (Speech to Text) 변환
-
AI 요약
- 강의 자료 3가지를 통합한 요약본 제공
-
AI 예상 시험 문제
- 강의 자료 3가지를 통합한 시험 예상 문제 생성
| 문제점 BIG 3 | ➡️ | 기대효과 |
|---|---|---|
| 1. 필기하느라 수업을 놓친 흑우가 있다?! 🐂 | ➡️ | 1. 필기는 AI에게 맡겨요! 강의 집중 UP 📈 |
| 2. 너무 긴 강의내용... 다 못 보게 되는데... 😅 | ➡️ | 2. AI 요약으로 핵심만! 학습 효율 UP 🔝 |
| 3. 이거 시험에는 어떻게 나올지 도저히 모르겠어!! 💢 | ➡️ | 3. AI가 만들어주는 문제로 더 완벽한 시험대비 💯 |
(영상업로드 예정)
hynseoj |
rladbrua0207 |
mingjuu |
Shsin9797 |
yunjunghun0116 |
|---|---|---|---|---|
| Backend | Backend | Backend | Backend | Backend |
aengzu |
Kjamm |
|---|---|
| Android | Android |
| 기능명 | 기능 설명 |
|---|---|
| 기본적인 노트 앱 기능 지원 | ![]() |
| AI를 통한 녹음 변환 기능 지원 | ![]() |
| AI를 통한 페이지 요약 기능 제공 | ![]() |
- ERD 설계서: ERD 설계서 링크
- Figma 기획 파일: Figma 기획 파일 링크
- 클린 아키텍처를 통해 비즈니스 로직, 데이터 처리, 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
- 데이터 변경과 조회 작업을 분리하여 최적화된 작업 수행 가능
- 추후 데이터 저장소를 분리하여 효율을 높일 수 있음
- 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
| 기능 | URL | Method | Status | 설명 |
|---|---|---|---|---|
| 카카오 로그인 | /api/members/oauth/login/{oauthProvider} |
POST | 완료 | |
| 토큰 리프레쉬 | /api/members/token/refresh |
POST | 완료 | |
| 본인 프로필 조회 | /api/members/me |
GET | 완료 |
| 기능 | 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 | 완료 |
| 기능 | 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 | 완료 |
| 기능 | 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 | 완료 |
| 기능 | 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입니다 |
- 커뮤니티 기능 → 내가 만든 ai 문제를 공유하고 피드백 받을수 있게 ! ~ 금액과 연결지어서 사고파는 문제은행










