Repository navigation
[Docs] README 작성 #144
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Docs] README 작성 #144
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
| @@ -0,0 +1,305 @@ | ||||
| <div align="center"> | ||||
|
|
||||
| # 🧑🏫 TeachING | ||||
|
|
||||
| <img src="images/teaching-overview.png" width="800" alt="TeachING overview" /> | ||||
|
|
||||
| ### 흩어진 정보를 연결해 나만의 지식으로 만드는 AI 학습 서비스 | ||||
|
|
||||
| **URL로 저장한 학습 자료(블로그, 유튜브 등)를 AI가 자동 분석·요약하고,<br/> | ||||
| RAG 기반 챗봇과 개인 맞춤형 학습 경로 '티칭맵'을 통해<br/> | ||||
| 단계별로 학습을 이끌어주는 AI 학습 관리 서비스입니다.** | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| <a href="https://www.teachingg.site"> | ||||
| <img src="https://img.shields.io/badge/🌐_서비스_바로가기-teachingg.site-FFB74D?style=for-the-badge&logoColor=white&labelColor=2b2b2b" alt="서비스 바로가기" width="300" /> | ||||
| </a> | ||||
|
|
||||
| <br/><br/> | ||||
|
|
||||
| <img src="https://img.shields.io/github/stars/TeachING-Dev/Backend?style=for-the-badge&logo=github&color=FFB74D&labelColor=2b2b2b" alt="Stars" width="108" /> | ||||
| <img src="https://img.shields.io/github/issues-pr-closed/TeachING-Dev/Backend?style=for-the-badge&logo=github&color=8E7CC3&labelColor=2b2b2b" alt="Closed PRs" width="230" /> | ||||
| <img src="https://img.shields.io/github/commit-activity/t/TeachING-Dev/Backend?style=for-the-badge&logo=github&color=4FC3F7&labelColor=2b2b2b" alt="Commits" width="145" /> | ||||
|
|
||||
| </div> | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## 📖 서비스 소개 | ||||
|
|
||||
| TeachING은 흩어진 온라인 학습 자료를 한곳에 모으고, AI가 튜터처럼 함께 학습을 이끌어주는 개인 학습 관리 서비스입니다. | ||||
|
|
||||
| 블로그, 유튜브 등에서 발견한 자료의 URL을 저장하면 AI가 자동으로 본문(또는 영상 스크립트)을 분석해 요약과 상세 해설을 생성하고, 벡터 검색(RAG) 기반으로 색인합니다. 사용자는 저장된 자료들을 폴더와 태그로 자유롭게 정리할 수 있고, 궁금한 점은 채팅으로 질문하면 AI가 내가 저장한 자료를 근거로 답변하며 — 관련 자료가 없을 때는 일반 지식으로 보완해 답합니다. | ||||
|
|
||||
| 가장 큰 특징은 **티칭맵**입니다. 폴더 안의 자료들을 순서가 있는 학습 단계로 재구성해, 마치 커리큘럼처럼 하나씩 따라가며 학습할 수 있습니다. 각 단계에서 중요한 부분을 하이라이트하면 사용자가 설정한 성향(다정한/엄격한/응원하는)의 'AI 선생님'이 그 부분을 짚어 설명해주고, 학습 진행률도 함께 추적됩니다. | ||||
|
|
||||
| 카카오·구글 소셜 로그인으로 간편하게 시작할 수 있으며, 무료/프리미엄 멤버십을 통해 더 많은 자료 저장과 폴더 생성이 가능합니다. | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## ✨ 주요 기능 | ||||
|
|
||||
| <div align="center"> | ||||
| <table> | ||||
| <tr> | ||||
| <td width="430" valign="top"> | ||||
|
|
||||
| ### 📄 자료 관리 | ||||
|
|
||||
| - 블로그, 유튜브 등 **온라인 자료의 URL을 저장**하면 AI가 본문/스크립트를 추출해 **요약·상세 분석** 생성 | ||||
| - 분석 결과는 chunk로 나눠 **Qdrant에 벡터 색인** | ||||
| - AI 요약/상세 분석은 **직접 수정** 가능 | ||||
| - 폴더 생성·자료 이동·태그·휴지통으로 자료 정리 | ||||
|
|
||||
| </td> | ||||
| <td width="430" valign="top"> | ||||
|
|
||||
| ### 💬 챗봇 (RAG) | ||||
|
|
||||
| - 채팅방을 만들고 내가 저장한 자료에 대해 **자유롭게 질문** | ||||
| - 질문을 **벡터 검색**으로 관련 자료를 찾아 근거로 답변 생성 | ||||
| - 관련 자료가 없으면 **일반 지식 기반 fallback** 응답 | ||||
| - 답변에 인용된 **출처 자료** 함께 표시 | ||||
|
|
||||
| </td> | ||||
| </tr> | ||||
| </table> | ||||
| </div> | ||||
|
|
||||
| <div align="center"> | ||||
| <table> | ||||
| <tr> | ||||
| <td width="430" valign="top"> | ||||
|
|
||||
| ### 🗺️ 티칭맵 | ||||
|
|
||||
| - 폴더 속 자료들을 순서가 있는 **학습 스텝**으로 재구성 | ||||
| - 하이라이트한 부분에 **AI 선생님 해설** 제공 | ||||
| - 말투는 **다정한 / 엄격한 / 응원하는** 페르소나 중 선택 | ||||
| - 스텝 완료 토글로 **진행률** 자동 갱신, 임시저장 지원 | ||||
|
|
||||
| </td> | ||||
| <td width="430" valign="top"> | ||||
|
|
||||
| ### 🔐 인증 & 멤버십 | ||||
|
|
||||
| - **카카오 · 구글** OAuth2 소셜 로그인, JWT 기반 인증 | ||||
| - **카카오페이** 연동 TeachING Plus 구독 결제 | ||||
| - **FREE / PREMIUM** 멤버십 등급 구분 | ||||
| - 마이페이지에서 프로필 · 알림 · AI 선생님 설정 관리 | ||||
|
|
||||
| </td> | ||||
| </tr> | ||||
| </table> | ||||
| </div> | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## 🛠 기술 스택 | ||||
|
|
||||
| <div align="center"> | ||||
|
|
||||
| **Backend** | ||||
|
|
||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|
|
||||
| **Database** | ||||
|
|
||||
|  | ||||
|  | ||||
|
|
||||
| **AI · 자료 수집** | ||||
|
|
||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|
|
||||
| **결제 · Infra · CI/CD** | ||||
|
|
||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|
|
||||
| **Docs** | ||||
|
|
||||
|  | ||||
|
|
||||
| </div> | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## 🏗 아키텍처 | ||||
|
|
||||
| <div align="center"> | ||||
|
|
||||
| <img src="images/architecture.png" width="800" alt="TeachING 아키텍처" /> | ||||
|
|
||||
| </div> | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## 🌿 협업 규칙 | ||||
|
|
||||
| | 구분 | 내용 | | ||||
| | --- | --- | | ||||
| | 🌿 **브랜치** | `type/#이슈번호/설명` (예: `feat/#69/material-url`) → `main` 으로 PR | | ||||
| | 📝 **커밋** | `Type: 설명` (`Feat` `Fix` `Docs` `Test` `Refactor` `Chore` 등) | | ||||
| | 🔍 **PR** | GitHub Actions **CI(Gradle 빌드) 통과** 후 머지 | | ||||
| | 🚀 **배포** | `main` push 시 ECR 이미지 빌드 → EC2 Docker Compose 자동 배포 | | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## 👥 팀원 | ||||
|
|
||||
| <div align="center"> | ||||
| <table> | ||||
| <tr> | ||||
| <td align="center" width="172"> | ||||
| <a href="https://github.com/hwiyoon20010309"> | ||||
| <img src="https://github.com/hwiyoon20010309.png" width="90" /><br/> | ||||
| <b>@hwiyoon20010309</b> | ||||
| </a><br/> | ||||
| 백엔드<br/> | ||||
| 📄 자료 · URL 분석<br/> | ||||
| 💬 챗봇(RAG) | ||||
| </td> | ||||
| <td align="center" width="172"> | ||||
| <a href="https://github.com/Mymyseoyoung"> | ||||
| <img src="https://github.com/Mymyseoyoung.png" width="90" /><br/> | ||||
| <b>@Mymyseoyoung</b> | ||||
| </a><br/> | ||||
| 백엔드<br/> | ||||
| 🗺️ 티칭맵<br/> | ||||
| 🔐 인증 · 약관 | ||||
| </td> | ||||
| <td align="center" width="172"> | ||||
| <a href="https://github.com/m00nsh"> | ||||
| <img src="https://github.com/m00nsh.png" width="90" /><br/> | ||||
| <b>@m00nsh</b> | ||||
| </a><br/> | ||||
| 백엔드<br/> | ||||
| 📄 자료 · 폴더<br/> | ||||
| 🔔 알림 · 홈 | ||||
| </td> | ||||
| <td align="center" width="172"> | ||||
| <a href="https://github.com/EH-OI"> | ||||
| <img src="https://github.com/EH-OI.png" width="90" /><br/> | ||||
| <b>@EH-OI</b> | ||||
| </a><br/> | ||||
| 백엔드<br/> | ||||
| 🗑️ 휴지통<br/> | ||||
| 💳 결제 | ||||
| </td> | ||||
| </tr> | ||||
| </table> | ||||
| </div> | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| ## 📁 저장소 구조 | ||||
|
|
||||
| ``` | ||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 저장소 구조 코드 블록에 언어 식별자를 지정하세요.
수정 예시-```
+```text📝 Committable suggestion
Suggested change
🧰 Tools🪛 markdownlint-cli2 (0.23.2)[warning] 203-203: Fenced code blocks should have a language specified (MD040, fenced-code-language) 🤖 Prompt for AI AgentsSource: Linters/SAST tools |
||||
| backend/ | ||||
| ├── src/main/java/com/teaching/backend/ | ||||
| │ ├── domain/ 도메인별 패키지 (controller · service · entity · repository · dto) | ||||
| │ │ ├── auth · user · material · folder · chat | ||||
| │ │ ├── teachingmap · trash · tag · notification | ||||
| │ │ └── payment · term · home · support | ||||
| │ └── global/ 공통 설정 (security · config · ai · storage · exception · response) | ||||
| ├── docker-compose.yml app(Spring Boot) + qdrant 컨테이너 구성 | ||||
| └── .github/workflows/ CI(빌드 검증) · CD(ECR/EC2 배포) 워크플로 | ||||
| ``` | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| <details> | ||||
| <summary><h2>📖 도메인별 상세 API 명세 (펼쳐보기)</h2></summary> | ||||
|
|
||||
| ### Auth (`/api/v1/auth`) | ||||
| - `POST /reissue` — AccessToken 재발급 | ||||
| - `POST /signup` — 회원가입(닉네임 확정 · 약관 동의 등록) | ||||
| - `POST /logout` — 로그아웃 | ||||
| - `GET /check-nickname` — 닉네임 중복 확인 | ||||
| - `GET /oauth2/authorization/{kakao|google}` — 소셜 로그인 진입점 | ||||
|
|
||||
| ### User (`/users`) | ||||
| - `GET /me` — 내 정보 조회 | ||||
| - `PATCH /me` — 프로필 수정 (multipart) | ||||
| - `PATCH /me/notifications` — 알림 설정 변경 | ||||
| - `DELETE /me` — 회원 탈퇴 | ||||
| - `PATCH /me/teacher-persona` — AI 선생님 페르소나 변경 | ||||
|
|
||||
| ### Material (`/materials`, `/api/v1/materials`) | ||||
| - `GET /materials` — 자료 목록 조회 | ||||
| - `POST /materials/{materialId}/index` — 자료 색인(Qdrant) | ||||
| - `POST /api/v1/materials/analyze` — URL 기반 AI 분석 요청 | ||||
| - `PATCH /api/v1/materials/{materialId}/finalize` — 분석 결과 저장 확정 | ||||
|
|
||||
| ### Folder (`/api/folders`) | ||||
| - `GET /` · `POST /` — 폴더 목록 조회 · 생성 | ||||
| - `GET /{folderId}` · `PATCH /{folderId}` — 폴더 상세 조회 · 이름 수정 | ||||
| - `GET /{folderId}/materials` — 폴더 내 자료 목록 | ||||
| - `PATCH /{folderId}/trash` · `PATCH /{folderId}/restore` — 폴더 휴지통 이동 · 복구 | ||||
| - `GET/PATCH /{folderId}/materials/{materialId}/analysis(/summary|/detail)` — AI 분석 조회 · 수정 | ||||
| - `GET /{folderId}/materials/{materialId}/tags` — 태그 조회 | ||||
| - `GET /{folderId}/materials/{materialId}/origin-url` — 원본 URL 조회 | ||||
| - `PATCH /{folderId}/materials/move|trash|restore` — 자료 이동 · 휴지통 이동 · 복구 | ||||
|
|
||||
| ### ChatRoom / ChatMessage (`/chatrooms`) | ||||
| - `GET /` · `POST /` — 채팅방 목록 조회(커서 페이지네이션) · 생성 | ||||
| - `GET /{chatRoomId}/messages` — 메시지 히스토리 조회(출처 포함) | ||||
| - `POST /{chatRoomId}/messages` — 질문하기(RAG 기반 답변 생성) | ||||
|
|
||||
| ### TeachingMap (`/api/v1/teaching-maps`) | ||||
| - `GET /` · `POST /` — 티칭맵 목록 조회 · 생성(폴더 기반) | ||||
| - `GET /{teachingMapId}` · `PATCH /{teachingMapId}` — 단건 조회 · 제목/설명 수정 | ||||
| - `GET /{teachingMapId}/steps/{stepId}` — 스텝 상세 조회 | ||||
| - `PATCH /{teachingMapId}/steps/{stepId}/toggle` — 스텝 완료 토글 | ||||
| - `GET /materials/{materialId}/highlights/{highlightId}/analysis` — 하이라이트 AI 선생님 해설 조회/생성 | ||||
| - `PATCH /trash` — 티칭맵 다중 휴지통 이동 | ||||
| - `POST /temp` — 임시저장 | ||||
|
|
||||
| ### Trash (`/api/v1/trash`) | ||||
| - `GET /folders|materials|teaching-maps` — 휴지통 목록 조회 | ||||
| - `GET /folders/{folderId}/materials` — 휴지통 폴더 상세(내부 자료) 조회 | ||||
| - `PATCH /folders|materials|teaching-maps/restore` — 다중 복구 | ||||
|
|
||||
| ### Notification (`/api/v1/notifications`) | ||||
| - `GET /` · `GET /summary` — 알림 목록 · 요약 조회 | ||||
| - `PATCH /{notificationId}/read` — 읽음 처리 | ||||
|
|
||||
| ### Payment (`/api/v1/payments`) | ||||
| - `POST /ready` — 구독 결제 준비(카카오페이) | ||||
| - `GET /success|cancel|fail` — 결제 결과 콜백 | ||||
|
|
||||
| ### Term (`/api/v1/terms`) | ||||
| - `GET /` — 약관 목록 조회 | ||||
|
|
||||
| ### Home (`/api/v1/home`) | ||||
| - `GET /` — 홈 대시보드 조회 | ||||
|
|
||||
| </details> | ||||
|
|
||||
| <br/> | ||||
|
|
||||
| <div align="center"> | ||||
|
|
||||
| **🧑🏫 TeachING** · Made with care by the TeachING-Dev team | ||||
|
|
||||
| <sub>2026. 08. 13. ver.</sub> | ||||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win 문서 버전 날짜를 실제 기준일로 수정하세요. 작성일 또는 릴리스일을 의미한다면 🤖 Prompt for AI Agents |
||||
|
|
||||
| </div> | ||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win
팀원 프로필 이미지에
alt를 추가하세요.현재 네 개의 이미지에 대체 텍스트가 없습니다. 각 이미지에 GitHub 사용자명을
alt로 추가하세요.수정 예시
Also applies to: 170-170, 179-179, 188-188
🧰 Tools
🪛 markdownlint-cli2 (0.23.2)
[warning] 161-161: Images should have alternate text (alt text)
(MD045, no-alt-text)
🤖 Prompt for AI Agents
Source: Linters/SAST tools