2. 기술 스택 및 시스템 아키텍처 - JobTube-Career-coaching/JobTube GitHub Wiki
🛠️ 기술 스택 및 시스템 아키텍처
🔧 전체 시스템 구조
[사용자]
│
▼
[React 프론트엔드] ──▶ [FastAPI 백엔드] ──▶ [MongoDB / Redis / 외부 API (YouTube, 공공데이터)]
+-------------+ +-----------------+ +----------------+
| 👤 사용자 | ────▶ | 🌐 React(front) | ────▶ |🚀FastAPI(back)|
+-------------+ +-----------------+ +----------------+
│
┌──────────────────────────────────────┼───────────────────────────────────────┐
▼ ▼ ▼
📦 MongoDB (데이터 저장) 🧠 외부 API(Youtube, 공공데이터) ⚡ Redis (요약 캐싱)
💡 사용 기술 목록
영역 | 기술명 |
---|---|
Frontend | React, Tailwind CSS, Axios |
Backend | FastAPI, Pydantic, Uvicorn |
Database | MongoDB (콘텐츠 저장), Redis (요약 캐싱) |
Infrastructure | Docker, Docker Compose, NGINX, Oracle Cloud |
외부 연동 | YouTube Data API, 공공채용정보 오픈API |
AI/모델 | Transformers (KoBART, KoGPT 등), HuggingFace |
🔁 데이터 흐름 요약
- 사용자 입력 (키워드 입력)
- 백엔드에서 관련 YouTube 영상 / 채용공고 데이터 수집
- YouTube: 검색 키워드 기반 영상 검색
- 채용공고: 공공API 또는 크롤링을 통한 데이터 수집
- 텍스트 요약 모델을 이용해 콘텐츠 요약
- 결과를 MongoDB에 저장
- 프론트엔드로 요약 결과 응답
📈 기술 선택 이유 및 고려 사항
- React + FastAPI 조합: 빠른 개발 속도와 명확한 구조 제공
- MongoDB: 비정형 텍스트 기반 데이터(요약문) 저장에 적합
- Redis: 반복 요청에 대한 빠른 응답을 위한 캐싱 처리
- Docker / Oracle Cloud: 가상환경을 통한 안정적인 배포와 유지보수
- HuggingFace 모델들: 사전 학습된 KoBART, KoGPT 등 고성능 한국어 요약 모델 활용 가능
🧩 시스템 구성 예시 (디렉토리 기반)
📦 project-root/
├── 📁 Back-end-main/ # ⚙️ FastAPI 백엔드
│ ├── 📁 __pycache__/ # 파이썬 캐시
│ ├── 📁 static/ # 정적 파일 저장
│ ├── 🧩 d_job_service.py # 장애인 채용 공고 크롤러
│ ├── 🧩 d_sup.py # 교육 훈련 정보 크롤러
│ ├── 🧩 job_service.py # 일반 채용 공고 크롤러
│ ├── 🧩 main.py # FastAPI 엔트리포인트
│ ├── 🧩 o_job_service.py # 노년층 채용 공고 크롤러(1)
│ ├── 🧩 o_sup.py # 노년층 채용 공고 크롤러(2)
│ ├── 🧩 PDFProcessing/ # PDF 요약 관련 처리
│ ├── 📘 README.md # 백엔드 설명서
│ ├── 🧠 summary_service.py # 요약 모델 처리 서비스
│ ├── 🎥 youtube_service.py # 유튜브 API 연동
│ └── 🧾 YouTubeTranscriber.py # 유튜브 자막 추출
├── 📁 Front-end-main/ # 🎨 프론트엔드 (React)
│ ├── 📁 node_modules/ # 의존 패키지
│ ├── 📁 public/ # 정적 리소스
│ │ ├── 🌐 favicon.ico
│ │ ├── 🏠 index.html
│ │ ├── 🖼️ logo192.png
│ │ ├── 🖼️ logo512.png
│ │ ├── 🧾 manifest.json
│ │ └── 🤖 robots.txt
│ └── 📁 src/ # 소스 코드
│ ├── 📁 components/ # 🧩 페이지별 컴포넌트
│ │ ├── 🧾 .env # DB 접속 링크
│ │ ├── 📜 bookmark.js # 북마크
│ │ ├── 📜 Career.js # 직업 공고
│ │ ├── 📜 DataSummary.js # 데이터 요약
│ │ ├── 📜 dbserver.js # DB서버
│ │ ├── 📜 DisabledPage.js # 크롤링 페이지 출력
│ │ ├── 📜 JobSlider.js # 직업공고 페이지네이션
│ │ ├── 📜 mypage.js # 마이페이지
│ │ ├── 📜 PdfSummary.js # PDF 요약
│ │ ├── 📜 ResultsPage.js # 최종출력 페이지
│ │ ├── 📜 SearchResultPage.js # 결과 페이지 검색
│ │ ├── 📜 SeniorPage.js # 시니어 페이지
│ │ ├── 📜 SeniorResultsPage.js # 시니어 결과 페이지
│ │ └── 📜 YouTubeSearch.js # 유튜브 검색
│ ├── 📁 styles/ # 🎨 스타일시트 모음
│ │ ├── 🎨 bookmark.css
│ │ ├── 🎨 Career.css
│ │ ├── 🎨 _d_serch.css
│ │ ├── 🎨 DataSummary.css
│ │ ├── 🎨 JobSlider.css
│ │ ├── 🎨 mypage.css
│ │ ├── 🎨 PdfSummary.css
│ │ ├── 🎨 senior.css
│ │ ├── 🎨 SeniorResultsPage.css
│ │ ├── 🖼️ worknet.png
│ │ └── 🎨 YouTubeSearch.css
│ ├── 🧾 App.css
│ ├── 🧾 App.js
│ └── 🧪 App.test.js
└── ...
🧭 Use Case Diagram
JobTube 플랫폼의 주요 사용자 유형과 기능 간 상호작용을 시각적으로 나타낸 다이어그램입니다. 각 사용자 역할에 따라 접근 가능한 기능이 구분되어 있으며, 시스템이 제공하는 핵심 서비스 흐름을 한눈에 파악할 수 있습니다.
사용자 유형 | 주요 기능 |
---|---|
구직자 (Job Seeker) | 유튜브 영상 검색, 영상 요약, 채용 정보 검색, 카테고리 필터, 채용 공고 저장, 시각화 열람 |
시니어 / 장애인 모드 | 추천 공고 확인, 보호모드 기반 맞춤 채용 검색, 공고 지원 등 |
관리자 (Administrator) | 사용자 및 권한 관리, 데이터 및 영상 정보 관리, 고용 통계 보고서 생성 등 |
실선은 직접적인 기능 호출, 점선은 간접적 혹은 자동화된 기능 흐름을 의미합니다.
🧱 ERD (Entity Relationship Diagram)
전체 데이터베이스 구조를 시각적으로 표현한 ERD는 다음과 같습니다. 주요 테이블(또는 컬렉션) 간의 관계를 명확히 하여, 데이터 흐름과 저장 방식을 한눈에 파악할 수 있습니다.
엔티티 | 설명 |
---|---|
User | 사용자 정보 (이름, 이메일, 타입 등)를 저장 |
Mode | 일반모드 / 보호모드 선택 |
JobPosting | 채용공고 정보 (회사명, 직무, 조건 등) |
VisualizationData | 채용공고 정보 시각화 |
YouTubeVideo | 유튜브 영상 소개 |
VideoCategory | 유튜브 영상 '장단점', '준비방법', '후기' 카테고리 분류 |
JobAnnouncement | 유튜브 영상 관련 채용공고 내용 |
JobAnalysisResult | 유튜브 영상 관련 종합분석 보고서 |
관계형 구조를 통해 사용자 → 영상 요약 및 채용공고 안내 등 다양한 데이터 흐름이 가능하도록 설계되었습니다.
🚀 배포 아키텍처
[로컬 개발] → Docker로 컨테이너화 → Oracle Cloud로 배포
│
[Nginx Reverse Proxy]
│
[FastAPI 서버] ←→ [MongoDB / Redis]
모든 요소는 Docker Compose를 통해 통합 실행되며, 포트 및 경로 설정은 .env 및 nginx.conf에서 관리됩니다.