feat: TK-MP-Project 핵심 설정 파일들 작성 완료
- Docker Compose 개발 환경 설정 (PostgreSQL, pgAdmin, Redis) - 데이터베이스 스키마 초기 설계 (projects, files, materials 테이블) - Python requirements.txt 작성 (FastAPI, SQLAlchemy, Pandas 등) - .gitignore 설정 완료 (Python, Docker, 개발 도구 제외 파일) - README.md 작성 (프로젝트 개요, 기술 스택, 개발 로드맵) - Phase 1 기반 시스템 구축 준비 완료
This commit is contained in:
84
.gitignore
vendored
Normal file
84
.gitignore
vendored
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
|
||||||
|
# Virtual environments
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
ENV/
|
||||||
|
.venv
|
||||||
|
|
||||||
|
# IDEs
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
|
||||||
|
# OS
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
# Logs
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
|
||||||
|
# Database
|
||||||
|
*.db
|
||||||
|
*.sqlite3
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# Node.js
|
||||||
|
node_modules/
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
# React build
|
||||||
|
frontend/build/
|
||||||
|
frontend/dist/
|
||||||
|
|
||||||
|
# Docker
|
||||||
|
.docker/
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
tmp/
|
||||||
|
temp/
|
||||||
|
*.tmp
|
||||||
|
|
||||||
|
# Backup files
|
||||||
|
*.bak
|
||||||
|
*.backup
|
||||||
|
|
||||||
|
# Config files with secrets
|
||||||
|
config/secrets.json
|
||||||
|
config/local.json
|
||||||
|
|
||||||
|
# Uploads
|
||||||
|
uploads/
|
||||||
|
media/
|
||||||
|
|
||||||
|
# TK-MP specific
|
||||||
|
database/backups/
|
||||||
|
logs/
|
||||||
123
README.md
Normal file
123
README.md
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
아! 이해했습니다! 😅
|
||||||
|
cat > README.md << 'EOF' 명령어에서 EOF까지의 모든 내용을 한 번에 입력하라는 뜻이에요.
|
||||||
|
즉, 이 전체 부분을 한 번에 복사해서 터미널에 붙여넣기하면 됩니다:
|
||||||
|
bashcat > README.md << 'EOF'
|
||||||
|
# 🚀 TK-MP-Project: BOM 시스템 개발 프로젝트
|
||||||
|
|
||||||
|
## 📋 프로젝트 개요
|
||||||
|
BOM (Bill of Materials) 시스템의 기능 이상을 해결하고, 도면 완성 후 자재 관리의 모든 프로세스를 자동화하는 종합 시스템 개발 프로젝트입니다.
|
||||||
|
|
||||||
|
## 🎯 프로젝트 목표
|
||||||
|
|
||||||
|
### 핵심 미션
|
||||||
|
**"도면 완성 후 자재 관리의 모든 번거로움을 해결"**
|
||||||
|
|
||||||
|
### 주요 해결 과제
|
||||||
|
- 📄 **파일 분석 자동화**: 엑셀/CSV 자재 목록의 자동 분류 및 정제
|
||||||
|
- 🔍 **정확한 분류 체계**: 파이프/피팅/볼트/밸브/계기류의 4단계 자동 분류
|
||||||
|
- 💾 **체계적 데이터 관리**: 프로젝트별 버전 관리 및 이력 추적
|
||||||
|
- 📊 **업무별 맞춤 출력**: 구매/생산/품질 각 팀의 필요에 맞는 자료 생성
|
||||||
|
- 🔄 **리비전 변화 추적**: 도면 변경 시 자재 변경사항 자동 비교
|
||||||
|
|
||||||
|
## 💻 기술 스택
|
||||||
|
|
||||||
|
### Backend
|
||||||
|
- **Language**: Python 3.9+
|
||||||
|
- **Framework**: FastAPI (고성능 API 서버)
|
||||||
|
- **Database**: PostgreSQL 15 (복잡한 관계형 데이터 처리)
|
||||||
|
- **ORM**: SQLAlchemy (데이터베이스 모델링)
|
||||||
|
- **Data Processing**: Pandas, openpyxl (파일 처리)
|
||||||
|
|
||||||
|
### DevOps & Tools
|
||||||
|
- **Containerization**: Docker & Docker Compose
|
||||||
|
- **Version Control**: Git (Gitea 호스팅)
|
||||||
|
- **Development**: VS Code + Python 확장
|
||||||
|
|
||||||
|
## 🌐 개발 환경 설정
|
||||||
|
|
||||||
|
### Git 저장소 접속
|
||||||
|
```bash
|
||||||
|
# VPN 연결 필요: vpn.hyungi.net:21194
|
||||||
|
git clone http://192.168.1.227:10300/hyungi/TK-MP-Project.git
|
||||||
|
cd TK-MP-Project
|
||||||
|
데이터베이스 실행
|
||||||
|
bash# PostgreSQL 및 pgAdmin 실행
|
||||||
|
docker-compose up -d postgres pgadmin redis
|
||||||
|
|
||||||
|
# 접속 확인
|
||||||
|
# pgAdmin: http://localhost:5050 (admin@tkmp.local / admin2025)
|
||||||
|
Python 개발 환경
|
||||||
|
bash# 가상환경 생성
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate # macOS/Linux
|
||||||
|
|
||||||
|
# 의존성 설치
|
||||||
|
pip install -r backend/requirements.txt
|
||||||
|
|
||||||
|
# 개발 서버 실행
|
||||||
|
cd backend
|
||||||
|
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||||||
|
📁 프로젝트 구조
|
||||||
|
TK-MP-Project/
|
||||||
|
├── README.md
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── backend/ # FastAPI 백엔드
|
||||||
|
│ ├── app/
|
||||||
|
│ │ ├── models/ # SQLAlchemy 모델
|
||||||
|
│ │ ├── schemas/ # Pydantic 스키마
|
||||||
|
│ │ ├── api/ # API 라우터
|
||||||
|
│ │ ├── core/ # 설정 및 유틸리티
|
||||||
|
│ │ ├── services/ # 비즈니스 로직
|
||||||
|
│ │ └── database/ # DB 연결 설정
|
||||||
|
│ └── requirements.txt
|
||||||
|
├── database/ # DB 스키마 및 초기 데이터
|
||||||
|
│ └── init/
|
||||||
|
│ └── 01_schema.sql
|
||||||
|
└── docs/ # 프로젝트 문서
|
||||||
|
🚀 개발 로드맵
|
||||||
|
Phase 1: 기반 시스템 구축 (진행중)
|
||||||
|
|
||||||
|
Git 환경 구축 ✅
|
||||||
|
데이터베이스 스키마 설계 ✅
|
||||||
|
Docker 개발 환경 설정 ✅
|
||||||
|
FastAPI 기본 구조 구현
|
||||||
|
파일 업로드 및 파싱 기능
|
||||||
|
|
||||||
|
Phase 2: 핵심 기능 개발
|
||||||
|
|
||||||
|
자재 분류 알고리즘 구현
|
||||||
|
웹 인터페이스 구축
|
||||||
|
구매 BOM 생성 기능
|
||||||
|
|
||||||
|
Phase 3: 고도화
|
||||||
|
|
||||||
|
리비전 비교 기능
|
||||||
|
파이프 cutting 자료 생성
|
||||||
|
사용자 테스트 및 최적화
|
||||||
|
|
||||||
|
🗄️ 데이터베이스 스키마
|
||||||
|
핵심 테이블
|
||||||
|
|
||||||
|
projects: 프로젝트 관리 (코드 매칭, 버전 관리)
|
||||||
|
files: 업로드된 자재 목록 파일들
|
||||||
|
materials: 개별 자재 상세 정보 (분류 결과 포함)
|
||||||
|
|
||||||
|
주요 기능
|
||||||
|
|
||||||
|
프로젝트별 파일 버전 관리 (Rev.0, Rev.1, Rev.2)
|
||||||
|
자재 자동 분류 시스템 (카테고리, 재질, 사이즈)
|
||||||
|
분류 신뢰도 및 사용자 검증 시스템
|
||||||
|
|
||||||
|
📞 개발팀
|
||||||
|
|
||||||
|
Lead Developer: hyungi
|
||||||
|
Gitea Repository: http://192.168.1.227:10300/hyungi/TK-MP-Project
|
||||||
|
|
||||||
|
🎯 다음 단계
|
||||||
|
|
||||||
|
데이터베이스 실행: docker-compose up -d postgres pgadmin
|
||||||
|
Python 환경 구축: 가상환경 생성 및 패키지 설치
|
||||||
|
FastAPI 구조 구현: 기본 API 서버 및 모델 생성
|
||||||
|
|
||||||
|
|
||||||
|
Last Updated: 2025.07.14
|
||||||
0
backend/app/__init__.py
Normal file
0
backend/app/__init__.py
Normal file
0
backend/app/main.py
Normal file
0
backend/app/main.py
Normal file
28
backend/requirements.txt
Normal file
28
backend/requirements.txt
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# FastAPI 웹 프레임워크
|
||||||
|
fastapi==0.104.1
|
||||||
|
uvicorn[standard]==0.24.0
|
||||||
|
|
||||||
|
# 데이터베이스
|
||||||
|
sqlalchemy==2.0.23
|
||||||
|
psycopg2-binary==2.9.9
|
||||||
|
alembic==1.13.1
|
||||||
|
|
||||||
|
# 파일 처리
|
||||||
|
pandas==2.1.4
|
||||||
|
openpyxl==3.1.2
|
||||||
|
python-multipart==0.0.6
|
||||||
|
|
||||||
|
# 데이터 검증
|
||||||
|
pydantic==2.5.2
|
||||||
|
pydantic-settings==2.1.0
|
||||||
|
|
||||||
|
# 기타 유틸리티
|
||||||
|
python-dotenv==1.0.0
|
||||||
|
httpx==0.25.2
|
||||||
|
redis==5.0.1
|
||||||
|
|
||||||
|
# 개발 도구
|
||||||
|
pytest==7.4.3
|
||||||
|
pytest-asyncio==0.21.1
|
||||||
|
black==23.11.0
|
||||||
|
flake8==6.1.0
|
||||||
130
database/init/01_schema.sql
Normal file
130
database/init/01_schema.sql
Normal file
@@ -0,0 +1,130 @@
|
|||||||
|
-- TK-MP BOM 시스템 데이터베이스 스키마
|
||||||
|
-- 생성일: 2025.07.14
|
||||||
|
|
||||||
|
-- ================================
|
||||||
|
-- 1. 프로젝트 관리
|
||||||
|
-- ================================
|
||||||
|
|
||||||
|
-- 프로젝트 기본 정보
|
||||||
|
CREATE TABLE projects (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
|
||||||
|
-- 회사 공식 정보
|
||||||
|
official_project_code VARCHAR(50) UNIQUE, -- PP5-5701-DRYING (정식 코드)
|
||||||
|
project_name VARCHAR(200) NOT NULL,
|
||||||
|
client_name VARCHAR(100),
|
||||||
|
|
||||||
|
-- 설계팀 사용 정보
|
||||||
|
design_project_code VARCHAR(50), -- 설계팀이 실제 사용한 코드
|
||||||
|
design_project_name VARCHAR(200), -- 설계팀이 사용한 프로젝트명
|
||||||
|
|
||||||
|
-- 매칭 정보
|
||||||
|
is_code_matched BOOLEAN DEFAULT false, -- 정식 코드 매칭 완료 여부
|
||||||
|
matched_by VARCHAR(100), -- 매칭 작업자
|
||||||
|
matched_at TIMESTAMP, -- 매칭 완료 시점
|
||||||
|
|
||||||
|
-- 기본 정보
|
||||||
|
status VARCHAR(20) DEFAULT 'active', -- active/completed/on_hold
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
description TEXT,
|
||||||
|
notes TEXT
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ================================
|
||||||
|
-- 2. 파일 관리
|
||||||
|
-- ================================
|
||||||
|
|
||||||
|
-- 업로드된 자재 목록 파일들
|
||||||
|
CREATE TABLE files (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
project_id INTEGER REFERENCES projects(id) ON DELETE CASCADE,
|
||||||
|
filename VARCHAR(255) NOT NULL,
|
||||||
|
original_filename VARCHAR(255) NOT NULL,
|
||||||
|
file_path VARCHAR(500) NOT NULL,
|
||||||
|
revision VARCHAR(20) DEFAULT 'Rev.0', -- Rev.0, Rev.1, Rev.2
|
||||||
|
upload_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
uploaded_by VARCHAR(100),
|
||||||
|
file_type VARCHAR(10), -- excel/csv/txt
|
||||||
|
file_size INTEGER,
|
||||||
|
is_active BOOLEAN DEFAULT true
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ================================
|
||||||
|
-- 3. 자재 정보 (핵심 테이블)
|
||||||
|
-- ================================
|
||||||
|
|
||||||
|
-- 개별 자재 상세 정보
|
||||||
|
CREATE TABLE materials (
|
||||||
|
id SERIAL PRIMARY KEY,
|
||||||
|
file_id INTEGER REFERENCES files(id) ON DELETE CASCADE,
|
||||||
|
line_number INTEGER, -- Excel 행 번호
|
||||||
|
original_description TEXT NOT NULL, -- 원본 품명
|
||||||
|
|
||||||
|
-- 분류 정보
|
||||||
|
classified_category VARCHAR(50), -- 파이프/피팅/볼트/밸브/계기
|
||||||
|
classified_subcategory VARCHAR(100), -- 엘보우/플랜지/벤드 등
|
||||||
|
|
||||||
|
-- 재질 및 스펙
|
||||||
|
material_grade VARCHAR(50), -- A333-6, A105, SS316
|
||||||
|
schedule VARCHAR(20), -- SCH40, SCH80, STD
|
||||||
|
size_spec VARCHAR(50), -- 6인치, 150A, M16
|
||||||
|
|
||||||
|
-- 수량 정보
|
||||||
|
quantity DECIMAL(10,3) NOT NULL,
|
||||||
|
unit VARCHAR(10) NOT NULL, -- EA/mm/SET/kg
|
||||||
|
|
||||||
|
-- 도면 정보
|
||||||
|
drawing_name VARCHAR(100), -- P&ID-001-TANK
|
||||||
|
area_code VARCHAR(20), -- #01, #02, #03
|
||||||
|
line_no VARCHAR(50), -- LINE-001-A
|
||||||
|
|
||||||
|
-- 분류 신뢰도 및 검증
|
||||||
|
classification_confidence DECIMAL(3,2), -- 0.00-1.00 분류 신뢰도
|
||||||
|
is_verified BOOLEAN DEFAULT false, -- 사용자 검증 여부
|
||||||
|
verified_by VARCHAR(100),
|
||||||
|
verified_at TIMESTAMP,
|
||||||
|
|
||||||
|
-- 기타
|
||||||
|
drawing_reference VARCHAR(100),
|
||||||
|
notes TEXT,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
|
||||||
|
-- ================================
|
||||||
|
-- 4. 인덱스 생성 (성능 최적화)
|
||||||
|
-- ================================
|
||||||
|
|
||||||
|
-- 프로젝트 관련 인덱스
|
||||||
|
CREATE INDEX idx_projects_official_code ON projects(official_project_code);
|
||||||
|
CREATE INDEX idx_projects_design_code ON projects(design_project_code);
|
||||||
|
|
||||||
|
-- 파일 관련 인덱스
|
||||||
|
CREATE INDEX idx_files_project ON files(project_id);
|
||||||
|
CREATE INDEX idx_files_active ON files(is_active);
|
||||||
|
|
||||||
|
-- 자재 관련 인덱스
|
||||||
|
CREATE INDEX idx_materials_file ON materials(file_id);
|
||||||
|
CREATE INDEX idx_materials_category ON materials(classified_category, classified_subcategory);
|
||||||
|
CREATE INDEX idx_materials_material_size ON materials(material_grade, size_spec);
|
||||||
|
|
||||||
|
-- ================================
|
||||||
|
-- 5. 기본 뷰 생성
|
||||||
|
-- ================================
|
||||||
|
|
||||||
|
-- 프로젝트 상태 요약 뷰
|
||||||
|
CREATE VIEW project_status_view AS
|
||||||
|
SELECT
|
||||||
|
p.id,
|
||||||
|
COALESCE(p.official_project_code, p.design_project_code) as display_code,
|
||||||
|
p.project_name,
|
||||||
|
p.status,
|
||||||
|
COUNT(f.id) as file_count,
|
||||||
|
COUNT(m.id) as material_count,
|
||||||
|
p.created_at
|
||||||
|
FROM projects p
|
||||||
|
LEFT JOIN files f ON p.id = f.project_id AND f.is_active = true
|
||||||
|
LEFT JOIN materials m ON f.id = m.file_id
|
||||||
|
GROUP BY p.id, p.official_project_code, p.design_project_code,
|
||||||
|
p.project_name, p.status, p.created_at
|
||||||
|
ORDER BY p.created_at DESC;
|
||||||
0
database/init/02_seed_data.sql
Normal file
0
database/init/02_seed_data.sql
Normal file
62
docker-compose.yml
Normal file
62
docker-compose.yml
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
# PostgreSQL 데이터베이스
|
||||||
|
postgres:
|
||||||
|
image: postgres:15-alpine
|
||||||
|
container_name: tk-mp-postgres
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: tk_mp_bom
|
||||||
|
POSTGRES_USER: tkmp_user
|
||||||
|
POSTGRES_PASSWORD: tkmp_password_2025
|
||||||
|
POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --locale=C"
|
||||||
|
ports:
|
||||||
|
- "5432:5432"
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
- ./database/init:/docker-entrypoint-initdb.d
|
||||||
|
networks:
|
||||||
|
- tk-mp-network
|
||||||
|
|
||||||
|
# pgAdmin 웹 관리도구
|
||||||
|
pgadmin:
|
||||||
|
image: dpage/pgadmin4:latest
|
||||||
|
container_name: tk-mp-pgadmin
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
PGADMIN_DEFAULT_EMAIL: admin@tkmp.local
|
||||||
|
PGADMIN_DEFAULT_PASSWORD: admin2025
|
||||||
|
PGADMIN_CONFIG_SERVER_MODE: 'False'
|
||||||
|
ports:
|
||||||
|
- "5050:80"
|
||||||
|
volumes:
|
||||||
|
- pgadmin_data:/var/lib/pgadmin
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
networks:
|
||||||
|
- tk-mp-network
|
||||||
|
|
||||||
|
# Redis (캐시 및 세션 관리용)
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: tk-mp-redis
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "6379:6379"
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data
|
||||||
|
networks:
|
||||||
|
- tk-mp-network
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres_data:
|
||||||
|
driver: local
|
||||||
|
pgadmin_data:
|
||||||
|
driver: local
|
||||||
|
redis_data:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
tk-mp-network:
|
||||||
|
driver: bridge
|
||||||
0
frontend/package.json
Normal file
0
frontend/package.json
Normal file
Reference in New Issue
Block a user