Files
news-project/TECH_STACK.md
hyungi 2fb0637ad1 📚 Add comprehensive setup documentation
- TECH_STACK.md: Complete technology stack overview
- HOMEBREW_SETUP.md: macOS development environment setup guide
- SYNOLOGY_SETUP.md: General Synology NAS installation guide
- DS1525_OPTIMIZED_SETUP.md: DS1525+ 32GB RAM optimized configuration

Features:
 Multi-platform deployment options (Mac/NAS)
 Performance optimization for different hardware specs
 Docker-based containerization
 Monitoring and logging setup
 Automated backup and maintenance scripts
 SSD optimization for longevity
2025-09-14 12:23:35 +09:00

286 lines
8.2 KiB
Markdown

# 🛠️ 기술 스택 (Tech Stack)
## 📋 개요
산업 전문 정보 수집 시스템의 기술 스택을 정리한 문서입니다. 각 기술의 선택 이유와 역할을 포함하여 설명합니다.
---
## 🖥️ Backend
### 핵심 프레임워크
- **Python 3.11+**
- 선택 이유: 풍부한 NLP 라이브러리 생태계, 데이터 처리 최적화
- 역할: 메인 백엔드 언어
- **FastAPI**
- 선택 이유: 고성능 비동기 처리, 자동 API 문서 생성, 타입 힌팅 지원
- 역할: REST API 서버, 웹 애플리케이션 백엔드
### 데이터베이스 & 검색
- **PostgreSQL**
- 선택 이유: 구조화된 메타데이터 저장, ACID 트랜잭션, JSON 지원
- 역할: 메인 데이터베이스, 사용자 정보, 문서 메타데이터
- **Elasticsearch**
- 선택 이유: 전문 검색, 다차원 필터링, 실시간 검색 성능
- 역할: 문서 검색 엔진, 태그 기반 필터링, 전문 검색
- **Redis**
- 선택 이유: 고속 캐싱, 세션 관리, 실시간 데이터 처리
- 역할: 캐시 레이어, 검색 결과 캐싱, 트렌딩 데이터
### NLP & 데이터 처리
- **spaCy**
- 선택 이유: 산업용 NLP, 커스텀 모델 지원, 한국어 지원
- 역할: 개체명 인식(NER), 기술 용어 추출
- **Transformers (Hugging Face)**
- 선택 이유: 최신 언어 모델, 의미 기반 검색
- 역할: 문서 임베딩, 의미 유사도 계산
- **scikit-learn**
- 선택 이유: 머신러닝 파이프라인, 텍스트 분류
- 역할: 문서 분류, 태그 예측, 트렌드 분석
### 비동기 처리 & 스케줄링
- **Celery**
- 선택 이유: 분산 태스크 큐, 스케줄링 지원
- 역할: RSS 수집, 논문 처리, 배치 작업
- **Redis (Broker)**
- 선택 이유: Celery 메시지 브로커, 고성능
- 역할: 태스크 큐 브로커
### 문서 처리
- **PyPDF2 / pdfplumber**
- 선택 이유: PDF 텍스트 추출, 메타데이터 파싱
- 역할: 논문 PDF 처리, 기술 문서 분석
- **BeautifulSoup**
- 선택 이유: HTML 파싱, 웹 스크래핑
- 역할: RSS 피드 처리, 웹사이트 크롤링
- **Scrapy**
- 선택 이유: 대규모 웹 크롤링, 비동기 처리
- 역할: 표준 기관 웹사이트 모니터링
---
## 🎨 Frontend
### 핵심 프레임워크
- **React 18**
- 선택 이유: 컴포넌트 기반 개발, 풍부한 생태계
- 역할: 사용자 인터페이스 구축
- **Next.js 13+**
- 선택 이유: SSR/SSG 지원, 성능 최적화, 파일 기반 라우팅
- 역할: React 애플리케이션 프레임워크
### UI & 스타일링
- **Tailwind CSS**
- 선택 이유: 유틸리티 우선, 빠른 개발, 일관된 디자인
- 역할: CSS 프레임워크, 반응형 디자인
- **Material-UI (MUI)**
- 선택 이유: 전문적인 UI 컴포넌트, 접근성 지원
- 역할: 복잡한 UI 컴포넌트 (테이블, 폼 등)
### 데이터 시각화
- **D3.js**
- 선택 이유: 고도로 커스터마이징 가능한 시각화
- 역할: 기술 네트워크 그래프, 복잡한 차트
- **Chart.js**
- 선택 이유: 간단한 차트 생성, React 통합
- 역할: 트렌드 차트, 통계 그래프
### 검색 & 상호작용
- **Algolia InstantSearch**
- 선택 이유: 실시간 검색, 자동완성, 필터링
- 역할: 검색 UI 컴포넌트
---
## 🔧 전문 분야 도구
### 학술 데이터 수집
- **arXiv API**
- 선택 이유: 물리학/공학 논문 접근
- 역할: 최신 연구 논문 수집
- **PubMed API**
- 선택 이유: 의학/보건 관련 논문
- 역할: 산업안전 의학 연구 수집
- **IEEE Xplore API**
- 선택 이유: 전기/전자/컴퓨터 공학 논문
- 역할: 기술 표준 및 연구 논문 수집
### 표준 모니터링
- **ASME 웹사이트 크롤러**
- 선택 이유: 압력용기 표준 업데이트 추적
- 역할: BPVC 등 표준 변경사항 모니터링
- **KGS 웹사이트 크롤러**
- 선택 이유: 한국 가스안전 기준 추적
- 역할: 국내 압력용기 기준 업데이트
- **API 웹사이트 크롤러**
- 선택 이유: 석유/가스 산업 표준 추적
- 역할: API 표준 업데이트 모니터링
### 전문 용어 처리
- **압력용기 전문 용어 사전**
- 선택 이유: 정확한 기술 용어 인식
- 역할: NER 모델 학습 데이터
- **플랜트 장비 분류 체계**
- 선택 이유: 체계적인 장비 분류
- 역할: 태그 정규화 및 분류
- **산업안전 용어 온톨로지**
- 선택 이유: 안전 분야 전문 용어 체계화
- 역할: 안전 관련 문서 분류
---
## 🏗️ Infrastructure
### 컨테이너화
- **Docker**
- 선택 이유: 환경 일관성, 배포 간소화
- 역할: 애플리케이션 컨테이너화
- **Docker Compose**
- 선택 이유: 다중 서비스 오케스트레이션
- 역할: 로컬 개발 환경 구성
### 모니터링 & 로깅
- **Prometheus**
- 선택 이유: 시계열 메트릭 수집, 알림 시스템
- 역할: 시스템 메트릭 모니터링
- **Grafana**
- 선택 이유: 메트릭 시각화, 대시보드
- 역할: 모니터링 대시보드
- **ELK Stack (Elasticsearch, Logstash, Kibana)**
- 선택 이유: 중앙화된 로그 관리, 검색 가능한 로그
- 역할: 애플리케이션 로그 수집 및 분석
### CI/CD
- **GitHub Actions**
- 선택 이유: GitHub 통합, 무료 사용량
- 역할: 자동 빌드, 테스트, 배포
### 스토리지
- **MinIO (S3 호환)**
- 선택 이유: 오픈소스 객체 스토리지, S3 호환성
- 역할: 논문 PDF, 이미지 파일 저장
---
## 🍺 macOS 개발 환경 (Homebrew 기반)
### 패키지 매니저
- **Homebrew**
- 선택 이유: macOS 표준 패키지 매니저
- 역할: 개발 도구 설치 및 관리
### 필수 개발 도구
```bash
# 언어 런타임
brew install python@3.11 # Python 런타임
brew install node@18 # Node.js 런타임
# 데이터베이스
brew install postgresql # PostgreSQL 데이터베이스
brew install redis # Redis 캐시/브로커
# 검색 엔진
brew install elasticsearch # Elasticsearch 검색 엔진
# 개발 도구
brew install git # 버전 관리
brew install htop # 시스템 모니터링
# GUI 애플리케이션
brew install --cask docker # Docker Desktop
brew install --cask visual-studio-code # IDE
```
### 서비스 관리
```bash
# 서비스 시작
brew services start postgresql
brew services start redis
brew services start elasticsearch
# 서비스 상태 확인
brew services list
```
---
## 📊 성능 최적화 전략
### 캐싱 계층
```
L1: Redis (실시간 검색 결과, 트렌딩 태그)
L2: PostgreSQL (구조화된 메타데이터, 사용자 프로필)
L3: Elasticsearch (전문 검색, 태그 인덱스)
L4: MinIO/S3 (원본 문서, 논문 PDF)
```
### 메모리 최적화 (Mac mini 8GB 기준)
```bash
# Elasticsearch JVM 설정
export ELASTICSEARCH_JAVA_OPTS="-Xms512m -Xmx1g"
# Redis 메모리 제한
export REDIS_MAXMEMORY="256mb"
# Python 프로세스 최적화
export PYTHONOPTIMIZE=1
```
### 검색 성능 최적화
- **사전 계산**: 자주 검색되는 조합 캐싱
- **인덱스 최적화**: 전문 용어 기반 역색인
- **벡터 검색**: BERT 기반 의미 검색
- **지역별 샤딩**: 데이터 분산 저장
---
## 🔄 데이터 파이프라인
### 수집 → 처리 → 저장 → 검색
```
RSS/API 수집 → NLP 태그 추출 → PostgreSQL 저장 → Elasticsearch 인덱싱 → Redis 캐싱
```
### 실시간 처리
- **RSS 모니터링**: 5분마다 새 피드 확인
- **논문 동기화**: 일일 1회 학술 DB 스캔
- **표준 업데이트**: 주간 공식 사이트 모니터링
---
## 🚀 확장성 고려사항
### 수평 확장
- **마이크로서비스**: 기능별 서비스 분리
- **로드 밸런싱**: 검색 서비스 다중 인스턴스
- **데이터베이스 샤딩**: 지역/분야별 데이터 분산
### 성능 모니터링
- **메트릭 수집**: 응답 시간, 처리량, 에러율
- **알림 시스템**: 임계값 초과 시 자동 알림
- **용량 계획**: 데이터 증가율 기반 리소스 계획
---
이 기술 스택은 산업 전문 정보의 특성을 고려하여 선택되었으며, macOS 환경에서의 개발 편의성과 운영 안정성을 모두 고려한 구성입니다.