Skip to content

Dandy-Tomato/tomato

Repository files navigation

🍅 Tomato : AI 기반 프로젝트 주제 추천 서비스

삼성 청년 SW·AI 아카데미 14기

특화 프로젝트 서울 5반 A508


랜딩 페이지

💡 프로젝트 소개

프로젝트를 진행할 때 팀의 기술 스택뿐만 아니라 관심 분야와 실제 행동 기반 선호도가 결과의 완성도를 좌우합니다.
Tomato는 단순한 기술 스택 매칭을 넘어, 팀원들의 행동 로그와 메타 정보를 함께 반영하여 팀에 적합한 프로젝트 주제를 추천합니다.

팀원들의 기술 스택, 관심 분야, 활동 데이터를 기반으로 팀 단위 프로필을 구성하고 이를 벡터화하여
가장 적합한 프로젝트 주제를 도출합니다.

또한, 사용자의 조회·클릭·관심 표현 등의 행동 로그를 실시간으로 반영하여
서비스를 사용할수록 더욱 정교해지는 맞춤형 프로젝트 추천 경험을 제공합니다.

🎬 소개 영상 (Google Drive 바로가기)

Watch the video


📑 목차

  1. 💡 프로젝트 소개
  2. 💡 주요 기능 및 플랫폼
  3. 🗓️ 개발 일정
  4. 📝 산출물
  5. 👨‍👩‍👧‍👦 개발 팀 소개
  6. 🛠️ 기술 스택
  7. 🖥️ 서비스 화면
  8. 📂 아키텍처 구조
  9. 🏗️ 프로젝트 구조

💡 주요 기능 및 플랫폼

Tomato사용자 행동 로그 기반 추천 엔진을 활용한 프로젝트 주제 추천 서비스입니다.
이미 구성된 팀의 기술 스택, 관심 분야, 행동 데이터를 기반으로 팀에 가장 적합한 프로젝트 주제를 추천합니다.


🤖 AI 기반 추천 엔진

주요 역할

팀원들의 프로필 정보 + 실제 행동 로그를 기반으로,
팀 단위 선호 정보를 반영한 프로젝트 주제 추천을 제공합니다.

핵심 기능

  • 🧠 팀 프로필 · 주제 임베딩

    • 팀원들의 기술 스택, 직무, 관심 분야를 반영해 팀 프로필 구성
    • 프로젝트 주제를 기술 스택 및 메타 정보 기반으로 벡터화
    • Word2Vec 기반 임베딩 모델 활용
  • 📊 행동 로그 기반 선호도 학습

    • 조회, 클릭, 좋아요 등의 행동 로그 수집
    • 행동 로그를 기반으로 선호 정보 반영
    • 팀 단위 추천 결과에 지속적으로 반영
  • 🔢 벡터 유사도 기반 주제 추천

    • 팀 프로필 및 선호 정보와 프로젝트 주제 벡터를 비교
    • 후보군 필터링 후 Top-K 프로젝트 주제 추천
  • 📈 추천 성능 최적화

    • pgvector 기반 유사도 연산 처리
    • DB 레벨에서 Top-K 조회로 불필요한 연산 최소화
    • 추천 응답 성능 개선

📱 웹 서비스 (React, Vite)

주요 역할

팀이 적합한 프로젝트 주제를 탐색하고 선택할 수 있는 사용자 인터페이스 제공

핵심 기능

  • 🎯 팀 기반 프로젝트 주제 추천

    • 팀 구성 정보를 기반으로 맞춤형 프로젝트 주제 제공
    • 기술 스택 및 관심 정보 반영
  • 📊 주제 상세 정보 제공

    • 프로젝트 설명, 요구 기술 스택, 난이도, 예상 기간 제공
    • 주제 선택에 필요한 정보 지원
  • 📝 팀 정보 관리

    • 팀원 기술 스택, 관심 분야 등 프로필 정보 수정
    • 변경된 정보가 추천 결과에 반영

🗓️ 개발 일정

개발 기간 : 2026.02.19 ~ 2026.03.30 (5주)

  • 1주차 (2/23 ~ 3/1): 프로젝트 기획 및 기술 스택 선정
  • 2주차 (3/2 ~ 3/8): 데이터 수집, 시스템 설계 및 와이어프레임 완성
  • 3주차 (3/9 ~ 3/15): 기본 기능 구현 및 AI 모델 연동, 인프라 구축
  • 4주차 (3/16 ~ 3/22): 세부 기능 구현 및 데이터 정제
  • 5주차 (3/23 ~ 3/29): 테스트 및 배포
  • 3/30: 최종 프로젝트 발표

📝 산출물

1. 🔗 기획서

3. 🔗 ERD

4. 🔗 API 문서


👨‍👩‍👧‍👦 개발 팀 소개

😎 멋쟁이

AI 기반 프로젝트 주제 추천 서비스 Tomato를 개발한 팀입니다.


이승훈

이승훈 (Team Leader)

@LSH0707

  • [FE] React 기반 반응형 UI/UX 및 디자인 시스템 설계 및 구현
  • [FE] OAuth2 인증 연동 및 사용자 상태 기반 로그인/세션 흐름 구현
  • [FE] 추천 데이터 및 사용자 정보 API 연동 기반 화면 구성 및 기능 구현
  • [FE] 컴포넌트 구조 설계 및 상태 관리 로직 개선을 통한 UI 안정성 확보
문하윤

문하윤

@moonhayun116

  • [DE] 채용 데이터 수집 파이프라인 설계 및 크롤링 환경 안정화
  • [DE] 페이지네이션 및 상세 페이지 파싱 기반 데이터 수집 자동화 구현
  • [DE] 증분 수집·전처리·배치 처리 로직 구현 및 전체 성능 최적화
  • [DE] 산업(대분류/중분류) 필터링 및 데이터 정제 로직 설계 및 적용
서나라

서나라

@nnnnnara

  • [Infra] GitLab·Jenkins·Docker Hub·EC2 기반 CI/CD 파이프라인 구축 및 배포 자동화
  • [Infra] Docker 기반 Jenkins 환경 구성 및 빌드·실행·Credential 체계 안정화
  • [Infra] GitLab Webhook–Jenkins Pipeline 연동으로 자동 빌드 및 브랜치 전략 정립
  • [Infra] Docker 이미지 배포 및 EC2 서버 재기동 기반 운영 배포 프로세스 구축
  • [Infra] Nginx 리버스 프록시 및 SSL 인증서 적용을 통한 HTTPS 환경 구성 및 검증
윤현조

윤현조

@hyunjo01

  • [DB] 서비스 전반 ERD 설계 및 도메인 간 관계 모델링 수행
  • [BE] Spring Batch 기반 Company/Skill 데이터 적재 파이프라인 구축
  • [BE] 기업명 검색 및 자동완성 API 설계 및 기능 구현
  • [BE] reaction·북마크 토글 기능 구현 및 동시성 제어 처리
  • [BE] 주제 구체화 관련 API 설계 및 백엔드 기능 구현
  • [AI] OpenAI 기반 팀 맞춤형 기획 생성 로직 설계 및 프롬프트 엔지니어링
이서현

이서현

@seoliee

  • [PM] 발표 진행 및 발표 자료 기획·제작 수행
  • [DE] GitHub 레포지토리 수집 및 README 전처리 파이프라인 설계 및 구축
  • [DE] OpenAI Embedding 생성 및 pgvector 저장 파이프라인 설계 및 구현
  • [AI] GPT 기반 레포지토리 도메인 분류 및 주제 생성 파이프라인 구축
  • [AI] FastAPI 기반 추천 API 설계 및 기능 구현
  • [AI] pgvector 유사도 기반 추천 및 cold/warm start 분기 처리 구현
  • [BE] Spring Boot–FastAPI 추천 결과 연동 API 설계 및 구현
황승준

황승준

@SngJuni

  • [PM] 서비스 아키텍처 설계 및 개발 일정 관리·협업 프로세스 운영
  • [AI] 행동 로그 가중합 기반 사용자 선호 임베딩 생성 로직 설계 및 구현
  • [AI] Kafka 이벤트 처리 기반 추천 데이터 실시간 갱신 구조 설계 및 구축
  • [BE] Spring Boot–FastAPI 분리 아키텍처 설계 및 추천 시스템 연동 구현
  • [Infra] Docker Compose 기반 서비스 실행 구조 설계 및 개발·배포 환경 구성

🛠️ 기술 스택

🎨 Frontend

Vite React JavaScript
React Router React Markdown ESLint

🧩 Backend

Java Spring Boot Spring Data JPA Spring Batch
Spring Security OAuth2 Client JWT Apache Kafka

📦 Data Collection

GitHub API BeautifulSoup lxml Selenium
undetected--chromedriver pandas tqdm

🤖 AI & Recommendation Engine

Python FastAPI SQLAlchemy
NumPy pgvector OpenAI

☁️ Infra & DevOps

Docker Docker Compose Jenkins
AWS EC2 Nginx Certbot

🗄️ Database

PostgreSQL Redis

🛠️ Tools

Git GitLab Jira
Notion MatterMost


🖥️ 서비스 화면

🍅 Tomato 핵심 기능

🙋 회원가입 🔐 로그인
🚀 프로젝트 생성 ⭐ 북마크
❤️ 관심 표현 🔁 주제 재추천
🧠 주제 구체화

📂 아키텍처 구조

🏗️ System Architecture Flow

System Architecture

  • Traffic Routing:
    User → Nginx (Reverse Proxy) → Frontend (Vite + React) / Backend (Spring Boot)

  • Topic Data Pipeline (GitHub 기반):
    GitHub API → 주제 데이터 수집 → LLM(OpenAI) 기반 구조화 →
    OpenAI Embedding 생성 → PostgreSQL(pgvector) 저장

  • Company Data Pipeline (크롤링 기반):
    Web Crawling → Spring Batch → 기업 데이터 정제 및 적재 → PostgreSQL 저장

  • Recommendation Engine (AI):
    주제 임베딩은 수집 시 최초 1회 생성하며,
    사용자 행동 로그 기반 가중치(w)를 반영해 프로젝트 선호 임베딩을 가중합 방식으로 갱신합니다.

  • Similarity Search:
    프로젝트 선호 임베딩과 주제 임베딩 간 유사도를 계산하여 Top-K 추천 결과를 생성합니다.

  • Event Streaming:
    Backend → Kafka → 사용자 행동 로그 비동기 처리 및 선호 임베딩 갱신

  • Data Management:
    Backend ↔ PostgreSQL (RDB + pgvector), Redis (Cache)

  • DevOps:
    GitLab → Jenkins (CI/CD) → Docker / Docker Compose → AWS EC2 배포
    Nginx + Certbot 기반 HTTPS 운영 환경 구성


🏗️ 프로젝트 구조

🌐 frontend - React 웹

frontend/
frontend/
├── src/
│   ├── assets/                     # 이미지 및 정적 리소스
│   ├── components/
│   │   └── common/                 # 공통 UI 컴포넌트 (Navbar, Modal, Route 등)
│   ├── constants/                  # 전역 상수 정의
│   ├── pages/                      # 페이지 단위 폴더 구조
│   │   ├── Login/                  # 로그인 페이지
│   │   ├── Signup/                 # 회원가입 페이지
│   │   ├── Main/                   # 메인 추천 피드 페이지
│   │   ├── Profile/                # 사용자 프로필 관리
│   │   ├── ProjectCreate/          # 프로젝트 생성
│   │   ├── ProjectDetail/          # 프로젝트 상세 조회
│   │   └── Callback/               # OAuth 로그인 콜백 처리
│   ├── styles/                     # 전역 스타일
│   ├── utils/
│   │   └── fetchInterceptor.js     # API 요청 인터셉터 (토큰 처리, 공통 에러 처리)
│   ├── App.jsx                     # 라우팅 구성 (React Router)
│   └── main.jsx                    # Vite 엔트리 포인트
│
├── dist/                           # 빌드 결과물
├── Dockerfile                      # 프론트엔드 컨테이너 이미지 정의
├── nginx.conf                      # 정적 파일 서빙 및 라우팅 설정
├── Jenkinsfile                     # CI/CD 파이프라인 (빌드 및 배포 자동화)
├── package.json                    # 의존성 및 스크립트 관리
├── vite.config.js                  # Vite 번들링 설정
└── index.html                      # 앱 진입 HTML

🚀 backend - Spring Boot 백엔드

backend/
backend/
├── .gradle/                    # Gradle 캐시
├── .idea/                      # IntelliJ 설정 파일
├── build/                      # 빌드 결과물
├── gradle/                     # Gradle Wrapper
│
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── site/
│   │   │       └── to_mato/
│   │   │           ├── auth/           # 인증 및 소셜 로그인 (JWT, OAuth2)
│   │   │           ├── batch/          # 배치 자동화 파이프라인 (기업 데이터 적재)
│   │   │           ├── catalog/        # 직무/기술 스택 메타 정보 관리
│   │   │           ├── common/         # 공통 응답, 예외 처리, 보안 설정
│   │   │           ├── company/        # 기업 데이터 (크롤링 기반 데이터 관리)
│   │   │           ├── llm/            # OpenAI API 연동 및 프롬프트 처리
│   │   │           ├── project/        # 프로젝트 생성, 팀 빌딩, 상태 관리
│   │   │           ├── recommendation/ # Kafka 기반 이벤트 처리 및 추천 시스템 연동
│   │   │           ├── topic/          # 주제 데이터 관리 (임베딩 대상)
│   │   │           ├── user/           # 사용자 정보 및 선호 데이터 관리
│   │   │           └── ToMatoApplication.java
│   │   │
│   │   └── resources/
│   │       └── application.yml         # 환경 설정 (DB, Redis, Kafka 등)
│   │
│   └── test/
│       └── java/
│           └── site/
│               └── to_mato/
│                   └── ToMatoApplicationTests.java
│
├── build.gradle                # 의존성 및 빌드 설정 (JPA, Kafka, Redis 등)
├── settings.gradle             # 프로젝트 설정
├── gradlew                     # Gradle Wrapper (Unix)
├── gradlew.bat                 # Gradle Wrapper (Windows)
├── Dockerfile                  # 백엔드 컨테이너 이미지 정의
├── Jenkinsfile                 # CI/CD 파이프라인 (빌드 및 배포 자동화)
└── README.md

🔍 ai - 사용자 행동 로그 기반 벡터 추천 엔진

ai/
ai/
├── app/
│   ├── common/                 # 공통 설정 및 예외 처리, 로깅
│   ├── consumer/               # Kafka 컨슈머 (행동 로그 기반 선호 임베딩 갱신)
│   ├── repositories/           # DB 접근 계층 (PostgreSQL, Redis)
│   ├── routers/                # FastAPI API 엔드포인트 (추천, 내부 처리)
│   ├── schemas/                # 요청/응답 데이터 모델 (Pydantic)
│   ├── services/               # 추천 로직 및 벡터 연산 (가중합 기반 선호 임베딩)
│   ├── utils/                  # 공용 유틸 (벡터 연산, 거리 계산 등)
│   ├── db.py                   # DB 및 Redis 세션 관리
│   ├── main.py                 # FastAPI 애플리케이션 진입점
│   └── settings.py             # 환경 변수 및 설정 관리
│
├── data/                       # 데이터 수집 및 전처리/임베딩 파이프라인
│   ├── collect_repos.py        # GitHub API 기반 주제 데이터 수집
│   ├── preprocess_readme.py    # README 전처리 및 토큰 최적화
│   ├── llm_pipeline.py         # OpenAI 기반 데이터 구조화
│   ├── embed_pipeline.py       # OpenAI Embedding 생성 및 저장
│   ├── enrich_repos.py         # 메타데이터 보강
│   └── collect_nostar_repos.py # 추가 데이터 수집 (조건 기반)
│
├── Dockerfile                  # AI 서버 컨테이너 이미지 정의
├── Jenkinsfile                 # CI/CD 파이프라인 (빌드 및 배포)
├── requirements.txt            # Python 의존성 관리
└── README.md

📊 crawler - 기업 데이터 수집 및 정제 파이프라인

crawler/
crawler/
├── config/                     # 크롤링 설정 (산업군, 검색 조건 등)
│
├── crawler/                    # 크롤링 및 데이터 처리 로직
│   ├── discover_new_jobs.py    # 신규 데이터 탐색
│   ├── collect_new_job_details.py # 상세 정보 수집
│   ├── preprocess_new_jobs.py  # 신규 데이터 정제
│   ├── preprocess_incremental_jobs.py # 증분 데이터 정제
│   └── common.py               # 공통 유틸 및 HTTP 처리
│
├── data/                       # 크롤링 상태 및 중간 데이터 저장
│
├── db_ready/                   # DB 적재를 위한 최종 가공 데이터 (CSV)
│   ├── companies.csv           # 기업 정보
│   ├── skills.csv              # 기술 스택
│   ├── company_skills.csv      # 기업-기술 매핑
│   ├── company_skill_pairs.csv # 상세 매핑 정보
│   └── domains.csv             # 직무/도메인 정보
│
├── run_all.py                  # 수집 → 정제 → 적재 준비 전체 파이프라인 실행
├── init_preprocess_all.py      # 초기 데이터 일괄 정제
├── rerun_preprocess_yesterday.py # 증분 데이터 재처리
│
├── Dockerfile                  # 크롤러 실행 환경 정의
├── requirements.txt            # Python 의존성
└── README.md

🍅 Tomato - AI 기반 프로젝트 주제 추천 서비스

About

SSAFY 14기 특화 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors