|
1 | | -# Muneo-Server |
2 | | -문제없는 시공을 위한 어시스턴트 : Server Repository입니다. |
| 1 | +<img width="1920" height="1080" alt="문어장표" src="https://github.com/user-attachments/assets/55fa763e-c12b-45bd-9666-37028b038b9a" /> |
| 2 | + |
| 3 | +<br> |
| 4 | + |
| 5 | +## Project Overview |
| 6 | +- 프로젝트 이름: 문어 (Muneo) |
| 7 | +- 프로젝트 설명: 인테리어 견적서를 AI가 진단해 추가금·부실시공 리스크를 사전에 확인시켜주는 RAG 기반 의사결정 지원 서비스 |
| 8 | + |
| 9 | +<br> |
| 10 | + |
| 11 | +## Key Features |
| 12 | + |
| 13 | +- **Auth** |
| 14 | + - 이메일 기반 회원가입 및 로그인 |
| 15 | + - 카카오 OAuth 소셜 로그인 및 추가정보 입력 플로우 |
| 16 | + |
| 17 | +- **가견적서 생성 (RAG 기반)** |
| 18 | + - 시공 조건(지역·공간유형·평수·공정·자재등급) 자연어 쿼리 변환 후 유사 사례 벡터 검색 |
| 19 | + - 5단계 점진적 필터 완화(Progressive Fallback)로 검색 결과 보장 |
| 20 | + - 건물연식·자재등급·철거여부·층수·거주여부 등 보정계수 적용 |
| 21 | + - IQR 기반 이상치 제거로 최소/중간/최대 견적 범위 산출 |
| 22 | + |
| 23 | +- **리스크 진단** |
| 24 | + - 업체 견적서 이미지를 Vision 모델로 OCR·파싱해 공종별 line item으로 구조화 |
| 25 | + - 누락(공종별 필수 키워드 대조) / 중복(동일 품목·금액 반복) / 불분명(모호 표현·금액 누락·맥락 기반) 3종 리스크 자동 탐지 |
| 26 | + - 진단 결과를 종합 인사이트 3문장으로 요약 |
| 27 | + |
| 28 | +- **AI 챗봇 (RAG 기반)** |
| 29 | + - 표준 계약서·하자판정기준 문서 기반 질의응답 |
| 30 | + - 질문 유형(견적/계약/하자/일반)에 따라 검색 대상을 견적 사례 DB 또는 규정 문서로 분기 |
| 31 | + - 실시간 타이핑 이펙트로 응답 렌더링 |
| 32 | + |
| 33 | +- **Admin Page** |
| 34 | + - 사용자 목록 조회·검색·필터링(권한/가입방식/탈퇴여부/이메일인증) |
| 35 | + - 사용자 정보 수정, 권한 변경(사용자↔관리자), 탈퇴 처리 및 복구 |
| 36 | + - 관리자 본인 계정 보호(자기 자신 권한변경·탈퇴 방지) |
| 37 | + |
| 38 | +<br> |
| 39 | + |
| 40 | +## Tech Stack |
| 41 | + |
| 42 | +**Frontend** |
| 43 | +<p> |
| 44 | + <img src="https://img.shields.io/badge/React-61DAFB?style=flat-square&logo=react&logoColor=black" /> |
| 45 | + <img src="https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white" /> |
| 46 | + <img src="https://img.shields.io/badge/Next.js-000000?style=flat-square&logo=nextdotjs&logoColor=white" /> |
| 47 | + <img src="https://img.shields.io/badge/Vite-646CFF?style=flat-square&logo=vite&logoColor=white" /> |
| 48 | + <img src="https://img.shields.io/badge/React%20Router-CA4245?style=flat-square&logo=reactrouter&logoColor=white" /> |
| 49 | + <img src="https://img.shields.io/badge/Vanilla%20Extract-F786AD?style=flat-square&logo=vanillaextract&logoColor=white" /> |
| 50 | + <img src="https://img.shields.io/badge/TanStack%20Query-FF4154?style=flat-square&logo=reactquery&logoColor=white" /> |
| 51 | + <img src="https://img.shields.io/badge/Zustand-433E38?style=flat-square" /> |
| 52 | + <img src="https://img.shields.io/badge/Turborepo-FF1E56?style=flat-square&logo=turborepo&logoColor=white" /> |
| 53 | + <img src="https://img.shields.io/badge/pnpm-F69220?style=flat-square&logo=pnpm&logoColor=white" /> |
| 54 | +</p> |
| 55 | + |
| 56 | +<br> |
| 57 | + |
| 58 | +**Backend** |
| 59 | +<p> |
| 60 | + <img src="https://img.shields.io/badge/Java-007396?style=flat-square&logo=openjdk&logoColor=white" /> |
| 61 | + <img src="https://img.shields.io/badge/Spring_Boot-6DB33F?style=flat-square&logo=spring-boot&logoColor=white" /> |
| 62 | + <img src="https://img.shields.io/badge/Spring_Security-6DB33F?style=flat-square&logo=spring-security&logoColor=white" /> |
| 63 | + <img src="https://img.shields.io/badge/JPA-6DB33F?style=flat-square&logo=hibernate&logoColor=white" /> |
| 64 | + <img src="https://img.shields.io/badge/OAuth2-000000?style=flat-square" /> |
| 65 | +</p> |
| 66 | + |
| 67 | +<br> |
| 68 | + |
| 69 | +**AI** |
| 70 | +<p> |
| 71 | + <img src="https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white" /> |
| 72 | + <img src="https://img.shields.io/badge/FastAPI-009688?style=flat-square&logo=fastapi&logoColor=white" /> |
| 73 | + <img src="https://img.shields.io/badge/Anthropic_Claude-D97757?style=flat-square&logoColor=white" /> |
| 74 | +</p> |
| 75 | + |
| 76 | +<br> |
| 77 | + |
| 78 | +**DB** |
| 79 | +<p> |
| 80 | + <img src="https://img.shields.io/badge/PostgreSQL-4169E1?style=flat-square&logo=postgresql&logoColor=white" /> |
| 81 | + <img src="https://img.shields.io/badge/Redis-DC382D?style=flat-square&logo=redis&logoColor=white" /> |
| 82 | + <img src="https://img.shields.io/badge/MongoDB-47A248?style=flat-square&logo=mongodb&logoColor=white" /> |
| 83 | + <img src="https://img.shields.io/badge/ChromaDB-000000?style=flat-square" /> |
| 84 | +</p> |
| 85 | + |
| 86 | +<br> |
| 87 | + |
| 88 | +**Infra** |
| 89 | +<p> |
| 90 | + <img src="https://img.shields.io/badge/AWS_EC2-FF9900?style=flat-square&logo=amazonec2&logoColor=white" /> |
| 91 | + <img src="https://img.shields.io/badge/AWS_RDS-527FFF?style=flat-square&logo=amazonrds&logoColor=white" /> |
| 92 | + <img src="https://img.shields.io/badge/AWS_S3-569A31?style=flat-square&logo=amazons3&logoColor=white" /> |
| 93 | + <img src="https://img.shields.io/badge/Nginx-009639?style=flat-square&logo=nginx&logoColor=white" /> |
| 94 | + <img src="https://img.shields.io/badge/Docker-2496ED?style=flat-square&logo=docker&logoColor=white" /> |
| 95 | + <img src="https://img.shields.io/badge/Docker_Compose-2496ED?style=flat-square&logo=docker&logoColor=white" /> |
| 96 | + <img src="https://img.shields.io/badge/Cloudflare-F38020?style=flat-square&logo=cloudflare&logoColor=white" /> |
| 97 | + <img src="https://img.shields.io/badge/GitHub_Actions-2088FF?style=flat-square&logo=githubactions&logoColor=white" /> |
| 98 | +</p> |
| 99 | + |
| 100 | +<br> |
| 101 | + |
| 102 | +## System Architecture |
| 103 | +<img width="939" height="877" alt="클라우드 아키텍처 v3 (2)" src="https://github.com/user-attachments/assets/2ddb787b-b307-4ff1-a76b-c03a2b9834ce" /> |
| 104 | + |
| 105 | +<br> |
| 106 | +<br> |
| 107 | + |
| 108 | +## DEMO |
| 109 | + |
| 110 | +|랜딩 페이지|로그인 / 회원가입| |
| 111 | +|---|---| |
| 112 | +||| |
| 113 | + |
| 114 | +|가견적서 생성|리스크 진단 결과| |
| 115 | +|---|---| |
| 116 | +||| |
| 117 | + |
| 118 | + |
| 119 | +|홈 대시보드|AI 챗봇| |
| 120 | +|---|---| |
| 121 | +||| |
| 122 | + |
| 123 | + |
| 124 | +|관리자 - 사용자 목록|관리자 - 사용자 상세| |
| 125 | +|---|---| |
| 126 | +||| |
| 127 | + |
| 128 | + |
| 129 | +<br> |
| 130 | + |
| 131 | +## Member |
| 132 | + |
| 133 | +| <img width="130px" src="https://avatars.githubusercontent.com/dyk-im" /> | <img width="130px" src="https://avatars.githubusercontent.com/seoshinehyo" /> | <img width="130px" src="https://avatars.githubusercontent.com/KyeongJooni" /> | <img width="130px" src="https://avatars.githubusercontent.com/tmdcks1103" /> | <img width="130px" src="https://avatars.githubusercontent.com/Kim-Dongdong" /> | <img width="130px" src="https://avatars.githubusercontent.com/bulee5328" /> | |
| 134 | +|:---:|:---:|:---:|:---:|:---:|:---:| |
| 135 | +| PM, BE | BE | FE | FE | AI | AI | |
| 136 | +| [김동윤](https://github.com/dyk-im) | [서상효](https://github.com/seoshinehyo) | [이경준](https://github.com/KyeongJooni) | [김승찬](https://github.com/tmdcks1103) | [김동섭](https://github.com/Kim-Dongdong) | [이병웅](https://github.com/bulee5328) | |
| 137 | + |
| 138 | +<img width="1920" height="1080" alt="문어 마무리 장표" src="https://github.com/user-attachments/assets/52f5be97-6bb9-4b32-83ed-48331b35bee4" /> |
0 commit comments