| 구분 | 내용 |
|---|---|
| 프로젝트명 | SideFit |
| 프로젝트 기간 | 2026.07 ~ 진행 중 |
| 프로젝트 형태 | AI 추천 기반 사이드 프로젝트 매칭 웹 서비스 |
| 주요 사용자 | 개발자, 기획자, 디자이너, 사이드 프로젝트 리더 |
| 핵심 가치 | 탐색 비용 감소, 모집 정보 구조화, 적합도 기반 연결, 추천 근거의 투명성 |
| 핵심 목표 | 프로젝트 탐색부터 지원과 팀 구성까지의 과정을 하나의 서비스에서 관리할 수 있는 환경 구축 |
개발자, 기획자와 디자이너는 새로운 기술을 실제 서비스에 적용하거나 협업 경험과 포트폴리오를 만들기 위해 사이드 프로젝트에 참여합니다.
하지만 현재 사이드 프로젝트 모집 정보는 개발 커뮤니티, 오픈 채팅방, SNS와 게시판 등에 분산되어 있으며 대부분 자유로운 형식으로 작성됩니다.
참여 희망자는 프로젝트의 주제, 기술 스택, 모집 역할, 예상 기간과 진행 방식을 확인하기 위해 여러 게시글을 반복해서 살펴봐야 합니다. 동일하거나 유사한 분야라도 서로 다른 표현을 사용하면 단순 키워드 검색에서 누락될 수 있습니다.
모집자 역시 지원자의 기술 경험, 관심 분야, 희망 역할과 참여 조건을 개별적으로 확인해야 합니다. 충분한 정보가 공유되지 않은 상태에서 팀이 구성되면 기대한 역할과 실제 업무가 다르거나 프로젝트의 목표가 맞지 않아 중도 이탈로 이어질 수 있습니다.
SideFit은 사용자 프로필과 모집 정보를 구조화하고, 조건 일치도와 설명의 의미적 유사성을 함께 분석하여 프로젝트와 참여자 사이의 탐색 및 조율 비용을 줄이고자 합니다.
사이드 프로젝트 모집 글이 여러 커뮤니티와 채널에 흩어져 있어 사용자가 자신에게 적합한 프로젝트를 발견하기 어렵습니다.
SideFit은 프로젝트 모집과 탐색, 지원 및 팀 구성 과정을 하나의 웹 서비스에서 관리할 수 있도록 구성합니다.
모집 글마다 작성 형식과 표현이 달라 프로젝트의 기술 스택, 역할, 기간과 진행 조건을 한눈에 비교하기 어렵습니다.
SideFit은 토픽, 기술 스택, 모집 역할, 역할별 인원, 진행 방식과 모집 상태를 구조화된 데이터로 관리합니다.
참여 희망자는 자신의 관심 분야와 기술 역량에 맞는 프로젝트를 찾기 위해 다수의 모집 글을 직접 확인해야 합니다.
SideFit은 사용자 프로필과 모집 글의 적합도를 계산하여 관련성이 높은 프로젝트를 우선적으로 제공합니다.
프로젝트에 참여한 뒤 희망 역할, 기술 수준이나 진행 방식이 예상과 다르다는 사실을 확인하면 팀 구성 이후 이탈이 발생할 수 있습니다.
SideFit은 지원 전에 프로젝트 조건과 사용자 정보를 명확하게 확인할 수 있도록 하여 역할과 참여 조건의 불일치를 줄입니다.
추천 점수만 제공하면 사용자는 어떤 이유로 프로젝트가 추천되었는지 판단하기 어렵습니다.
SideFit은 일치한 관심 토픽, 기술 스택, 희망 역할과 진행 조건을 추천 근거로 함께 제공합니다.
flowchart LR
User[사용자] --> Profile[프로필 등록]
Leader[프로젝트 리더] --> Project[모집 글 등록]
Profile --> Platform[SideFit 플랫폼]
Project --> Platform
Platform --> Search[검색 및 조건 필터링]
Platform --> Recommend[적합도 기반 추천]
Platform --> Application[프로젝트 지원 관리]
Search --> Detail[프로젝트 상세 확인]
Recommend --> Detail
Detail --> Apply[프로젝트 지원]
Apply --> Application
Application --> Review[지원자 검토]
Review --> Decision{승인 또는 거절}
Decision -->|승인| Team[팀원 확정]
Decision -->|거절| History[지원 결과 기록]
Team --> User
History --> User
사용자는 관심 토픽, 기술 스택과 희망 역할을 프로필에 등록하고 검색 또는 추천을 통해 프로젝트를 탐색합니다.
프로젝트 리더는 모집 조건을 구조화하여 등록하고, 프로젝트에 지원한 사용자를 확인한 뒤 승인 또는 거절할 수 있습니다.
사용자의 관심 토픽, 보유 및 학습 중인 기술 스택, 희망 역할과 선호하는 프로젝트 진행 방식을 관리합니다.
자기소개와 포트폴리오를 함께 등록하여 프로젝트 리더가 지원자의 경험과 참여 목적을 확인할 수 있도록 합니다.
프로젝트 주제와 소개뿐 아니라 토픽, 사용 기술, 모집 역할, 역할별 인원, 진행 기간, 진행 방식과 모집 마감일을 구조화하여 관리합니다.
프로젝트 상태를 모집 중, 모집 완료, 진행 중과 완료 등의 단계로 구분하여 현재 상태를 명확하게 제공합니다.
키워드뿐 아니라 토픽, 기술 스택, 역할, 진행 방식과 모집 상태를 조합하여 프로젝트를 검색할 수 있도록 합니다.
목록 조회에는 페이지네이션을 적용하고 프로젝트별 핵심 조건을 비교할 수 있도록 제공합니다.
사용자는 프로젝트에 지원하거나 지원을 취소할 수 있으며, 프로젝트 리더는 지원자를 승인하거나 거절할 수 있습니다.
중복 지원과 마감된 프로젝트에 대한 지원을 방지하고, 승인된 지원자는 프로젝트 팀원으로 관리합니다.
사용자의 관심 토픽, 기술 스택, 희망 역할과 진행 조건을 프로젝트 정보와 비교하여 적합도를 계산합니다.
구조화된 조건의 일치도와 프로젝트 설명의 의미적 유사도를 결합하고, 추천 결과와 함께 구체적인 추천 이유를 제공합니다.
SideFit은 서비스 구현과 설계 산출물의 책임을 분리하기 위해 여러 저장소로 운영됩니다.
| 저장소 | 담당 영역 | 설명 |
|---|---|---|
| sidefit12-frontend | Frontend Platform | Vue 기반 웹 화면, 사용자 상호작용, 클라이언트·서버 상태와 FastAPI 연동을 관리합니다. |
| sidefit12-backend | Backend Platform | 인증, 사용자, 프로필, 프로젝트 모집, 지원, 팀 구성과 추천 API를 관리합니다. |
| sidefit12-data-modeling | Data Modeling | 서비스의 개념·논리·물리 데이터 모델과 PostgreSQL DDL, 데이터 사전 및 검증 문서를 관리합니다. |
| .github | Organization Profile | SideFit 조직 소개와 공통 GitHub 협업 설정을 관리합니다. |
프론트엔드, 백엔드와 데이터 모델링 산출물은 저장소별로 책임을 분리하고, 기능 명세와 API 계약을 기준으로 함께 변경합니다.
각 저장소의 구체적인 구현 기능, 내부 구조와 실행 방법은 해당 저장소의 README에서 확인할 수 있습니다.
flowchart TB
Client[Vue Web Client<br/>프로젝트 탐색·지원·관리]
API[FastAPI Application<br/>REST API·인증·권한 검증]
Auth[회원·인증]
Profile[프로필·온보딩]
Project[프로젝트 모집]
Application[지원·팀 구성]
Bookmark[관심 목록]
Recommendation[추천 모듈]
Database[(PostgreSQL)]
Vector[(pgvector)]
Embedding[Gemini Embedding API]
Client -->|HTTPS REST API| API
API --> Auth
API --> Profile
API --> Project
API --> Application
API --> Bookmark
API --> Recommendation
Auth --> Database
Profile --> Database
Project --> Database
Application --> Database
Bookmark --> Database
Recommendation --> Database
Recommendation --> Vector
Recommendation --> Embedding
초기 서비스는 운영 복잡도를 줄이기 위해 하나의 FastAPI 애플리케이션과 PostgreSQL을 사용하는 모듈형 모놀리스 구조로 개발합니다.
각 도메인은 router-service-repository 계층으로 책임을 분리하고 공통 설정, 데이터베이스 세션, 인증과 예외 처리는 core 영역에서 관리합니다.
| 기능 영역 | 주요 기능 |
|---|---|
| 회원 및 인증 | 이메일 회원가입·로그인, 이메일 인증, JWT 인증, 로그아웃, 회원 탈퇴 |
| 프로필 관리 | 관심 토픽, 보유·학습 기술, 희망 역할, 자기소개, 포트폴리오와 선호 조건 등록 |
| 모집 글 관리 | 모집 글 작성·조회·수정·삭제, 역할별 모집 인원, 마감일과 프로젝트 상태 관리 |
| 검색 및 필터 | 키워드 검색, 토픽·기술·역할·진행 방식·모집 상태 조합 필터, 페이지네이션 |
| 프로젝트 지원 | 지원·취소, 모집자의 승인·거절, 중복 지원 방지와 지원 상태 관리 |
| 팀원 관리 | 승인된 지원자의 팀원 확정, 합류·탈퇴·퇴출과 관련 이력 관리 |
| AI 추천 | 사용자 맞춤 프로젝트 추천, 유사 프로젝트 추천, 추천 점수와 추천 이유 제공 |
| 관심 목록 | 관심 프로젝트 저장·해제와 저장 목록 조회 |
| 마이페이지 | 작성한 모집 글, 지원한 프로젝트, 받은 지원과 상태별 활동 이력 조회 |
| 운영 관리 | 사용자·프로젝트 신고, 신고 처리, 제재와 기준 데이터 관리 |
flowchart TD
UserProfile[사용자 프로필<br/>관심 토픽·기술 스택·희망 역할]
Projects[모집 중인 프로젝트]
UserProfile --> Candidate[추천 후보 생성]
Projects --> Candidate
Candidate --> Filter[작성·지원한 프로젝트 제외]
Filter --> Rule[구조화 조건 점수 계산]
Filter --> Semantic[Gemini 의미 유사도 계산]
Rule --> Normalize[점수 정규화]
Semantic --> Normalize
Normalize --> Hybrid[하이브리드 추천 점수]
Hybrid --> Reason[추천 이유 생성]
Reason --> Result[추천 결과 반환]
희망 역할 40%, 관심 토픽 30%, 보유 기술 30%의 가중치를 기준으로 규칙 기반 점수를 계산합니다.
계산 규칙이 명확하여 데이터가 적은 초기 서비스에서도 추천 결과를 재현할 수 있고, 일치한 항목을 추천 이유로 제공할 수 있습니다.
사용자의 관심 정보와 프로젝트 제목, 소개 및 토픽을 Gemini Embedding API를 통해 문장 임베딩으로 변환하고 코사인 유사도를 계산합니다.
사용자와 프로젝트 임베딩은 pgvector에 저장하고 콘텐츠 해시와 임베딩 버전을 기준으로 중복 생성을 방지합니다.
Gemini API 호출 실패, API 키 미설정 또는 벡터 부재 시에는 규칙 기반 결과로 안전하게 대체합니다.
구조화된 조건 점수와 의미적 유사도 점수를 정규화하여 하나의 추천 점수로 결합합니다.
추천 기능은 사용자의 참여 여부를 대신 결정하지 않고, 사용자가 먼저 확인할 프로젝트 후보를 좁혀 주는 탐색 보조 기능으로 사용합니다.
최종 점수와 함께 다음과 같은 추천 근거를 제공합니다.
- 희망 역할과 모집 역할의 일치
- 관심 토픽과 프로젝트 토픽의 일치
- 보유 또는 학습 기술과 사용 기술의 일치
- 선호하는 진행 방식과 프로젝트 진행 방식의 일치
- 사용자 관심 정보와 프로젝트 설명의 의미적 유사성
SideFit은 프로젝트 탐색부터 팀 구성과 활동 이력까지의 상태를 안정적으로 관리하기 위해 데이터 모델을 구현에 앞서 설계합니다.
| 구분 | 설계 범위 |
|---|---|
| 개념 모델 | 24개 비즈니스 엔티티 |
| 논리 모델 | 26개 엔티티와 속성, 식별자 및 관계 |
| 물리 모델 | PostgreSQL 기준 26개 테이블과 PK·UK·FK·CHECK·인덱스 |
| 외래키 관계 | 45개 |
| 관리 산출물 | ERD, PostgreSQL DDL, 데이터 사전, 변경 이력과 무결성 검증 보고서 |
- 사용자와 프로젝트의 토픽, 기술 스택과 역할은 기준 테이블 및 연결 테이블로 관리합니다.
- 동일한 사용자가 하나의 프로젝트에 중복 지원하지 못하도록 유일성 제약조건을 적용합니다.
- 지원 상태는
PENDING,ACCEPTED,REJECTED,CANCELED로 관리합니다. - 마감되거나 모집이 완료된 프로젝트에는 새로운 지원을 허용하지 않습니다.
- 프로젝트와 사용자 데이터에는 필요한 소프트 삭제 및 개인정보 익명화 정책을 적용합니다.
- 팀원 합류, 탈퇴와 퇴출처럼 이력 보존이 필요한 변경은 이벤트 이력으로 관리합니다.
| 구분 | 기술 |
|---|---|
| Frontend | Vue 3, TypeScript, Vite, Vue Router, Pinia, TanStack Vue Query, Axios, VeeValidate, Zod, Tailwind CSS |
| Backend | Python 3, FastAPI, Uvicorn, SQLAlchemy 2, Alembic, Pydantic 2, PyJWT |
| Database | PostgreSQL, pgvector |
| Authentication | JWT Access Token·Refresh Token, 비밀번호 단방향 해시 |
| Recommendation | 규칙 기반 스코어링, Gemini Embedding API, pgvector, 코사인 유사도 |
| Test & Quality | pytest, HTTPX TestClient, Ruff, API 통합 테스트, Vitest, Vue Test Utils, ESLint, eslint-plugin-vue, Prettier, Husky, lint-staged |
| Infrastructure | Docker, Docker Compose, GitHub Actions, 정적 웹 배포, 컨테이너 기반 백엔드 배포 |
| Documentation | OpenAPI/Swagger, Notion, Figma, ERD, README |
| Collaboration | GitHub Issues, GitHub Flow, Pull Request, Conventional Commits |
Pinia는 인증과 클라이언트 상태를 관리하고, TanStack Vue Query는 모집 글·지원 내역·추천 결과 등 서버 상태의 조회, 캐싱과 동기화를 담당합니다.
VeeValidate와 Zod를 사용해 입력 폼 상태와 검증 규칙을 관리하며, Axios를 통해 FastAPI REST API를 호출합니다.
프론트엔드에서는 Vitest와 Vue Test Utils로 폼 검증, 라우터 접근 제어, Pinia 상태와 주요 컴포넌트 상호작용을 검증합니다.
ESLint, eslint-plugin-vue와 Prettier로 Vue·TypeScript 코드의 정적 분석과 형식을 통일하고, Husky와 lint-staged를 통해 변경 파일 검사를 커밋 단계에서 자동화합니다.
개인 학습을 넘어 역할 분담, API 계약, 코드 리뷰와 일정 조율 등의 협업 경험을 만들고 싶은 사용자입니다.
학습한 기술을 실제 서비스에 적용하고 다른 직군과 함께 프로젝트를 완성하려는 사용자입니다.
자신의 서비스 아이디어와 디자인을 실제 웹 서비스로 구현할 개발자를 찾는 사용자입니다.
프로젝트에 필요한 역할과 기술 역량을 갖춘 지원자를 체계적으로 모집하고 관리하려는 사용자입니다.
관심 분야와 희망 역할은 명확하지만 여러 모집 채널에서 자신에게 맞는 프로젝트를 찾는 데 어려움을 겪는 사용자입니다.
자유 형식의 게시글만 제공하지 않고 토픽, 기술 스택, 역할, 모집 인원과 진행 조건을 구조화하여 프로젝트 간 비교가 가능하도록 합니다.
검색어를 직접 입력하는 방식에 더해 사용자의 관심 토픽, 기술과 희망 역할을 기준으로 개인화된 프로젝트를 제공합니다.
명시적인 조건 일치도와 Gemini 임베딩 기반 프로젝트 설명의 의미적 유사도를 함께 활용하여 단순 키워드 검색의 한계를 보완합니다.
추천 점수만 제공하지 않고 일치한 토픽, 기술 스택, 역할과 진행 조건을 구체적인 추천 이유로 제공합니다.
프로젝트 검색뿐 아니라 지원, 승인·거절, 모집 마감과 팀원 확정까지의 상태를 하나의 서비스 안에서 관리합니다.
백엔드 구현에 앞서 개념·논리·물리 데이터 모델을 설계하고 유일성 제약조건, 상태 전이와 참조 무결성을 검증합니다.
백현빈 Project Lead · Backend AI Recommendation · Infrastructure |
| 이름 | 담당 역할 |
|---|---|
| 백현빈 | 서비스 기획 및 PM, 데이터 모델링, FastAPI 백엔드 아키텍처, 인증·프로필·프로젝트·지원 도메인, 추천 시스템, 테스트 자동화와 배포 환경 구성 |
사용자 흐름과 기능 명세를 먼저 정의하고, 이를 기준으로 API와 데이터 모델을 설계합니다.
API 경로나 데이터 형식이 변경되는 경우 구현보다 명세를 먼저 수정하여 문서와 코드의 불일치를 줄입니다.
모든 작업은 GitHub Issue로 정의하고 작업 목적, 구현 범위, 완료 조건과 관련 문서를 기록합니다.
기능별 브랜치에서 작업한 뒤 Pull Request를 통해 main 브랜치에 병합합니다.
Pull Request에는 구현 내용, 테스트 결과와 API 또는 데이터베이스 변경 여부를 작성합니다.
ERD, PostgreSQL DDL, 데이터 사전과 모델 변경 이력을 동일한 저장소에서 관리합니다.
데이터 모델 변경 시 참조 무결성, 제약조건과 기존 데이터에 미치는 영향을 함께 검토합니다.
GitHub Actions에서 백엔드 Ruff 검사와 단위·통합 테스트, 프론트엔드 ESLint 검사와 Vitest 테스트, Docker 이미지 빌드 여부를 확인합니다.
프론트엔드에서는 Husky와 lint-staged를 사용하여 커밋 전에 변경된 Vue·TypeScript 파일의 ESLint 검사와 Prettier 포맷 검사를 수행합니다.
회원가입부터 프로젝트 작성, 지원, 승인과 추천 조회까지의 핵심 흐름은 백엔드 API 통합 테스트로 검증합니다.
비밀번호와 토큰 등 민감한 정보는 로그와 API 응답에 포함하지 않습니다.
프로젝트 수정·삭제, 지원자 조회와 승인·거절에는 사용자 인증뿐 아니라 객체 소유권과 역할을 함께 검증합니다.
| 단계 | 기간 | 주요 목표 |
|---|---|---|
| 기획 | 1주차 | 서비스 문제 정의, 목표 확정, 유사 서비스 조사와 MVP 범위 결정 |
| 기능·데이터 설계 | 2주차 | 기능 명세, 사용자 흐름, 상태 정의, ERD와 기준 데이터 설계 |
| 와이어프레임 | 3주차 | 정보 구조 설계, 핵심 화면 와이어프레임과 사용자 흐름 검증 |
| UI 프로토타입 | 4주차 | 디자인 시스템 정의, 주요 화면 UI와 클릭 가능한 프로토타입 완성 |
| API 설계·기반 구현 | 5주차 | API 명세, FastAPI 프로젝트 구조, 인증과 PostgreSQL·Alembic 설정 |
| 핵심 기능 구현 | 6주차 | 프로필, 모집 글, 검색, 관심 목록과 웹 화면 API 연동 |
| 지원·추천 구현 | 7주차 | 지원 상태 관리, 규칙 기반 추천, 추천 이유와 임베딩 추천 실험 |
| 통합·배포 | 8주차 | 통합 테스트, 오류 수정, CI/CD, 운영 배포와 문서 정리 |
프로젝트의 세부 구현 및 설계 내용은 각 저장소에서 확인할 수 있습니다.
- 프론트엔드 화면과 클라이언트 아키텍처: sidefit12-frontend
- 백엔드 API와 서비스 아키텍처: sidefit12-backend
- 데이터 모델과 PostgreSQL DDL: sidefit12-data-modeling
- 조직 소개 및 공통 설정: .github
