feat: tkuser 통합 관리 서비스 + 전체 시스템 SSO 쿠키 인증 통합

- tkuser 서비스 신규 추가 (API + Web)
  - 사용자/권한/프로젝트/부서/작업자/작업장/설비/작업/휴가 통합 관리
  - 작업장 탭: 공장→작업장 드릴다운 네비게이션 + 구역지도 클릭 연동
  - 작업 탭: 공정(work_types)→작업(tasks) 계층 관리
  - 휴가 탭: 유형 관리 + 연차 배정(근로기준법 자동계산)
- 전 시스템 SSO 쿠키 인증으로 통합 (.technicalkorea.net 공유)
- System 2: 작업 이슈 리포트 기능 강화
- System 3: tkuser API 연동, 페이지 권한 체계 적용
- docker-compose에 tkuser-api, tkuser-web 서비스 추가
- ARCHITECTURE.md, DEPLOYMENT.md 문서 작성

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Hyungi Ahn
2026-02-12 13:45:52 +09:00
parent 6495b8af32
commit 733bb0cb35
96 changed files with 9721 additions and 825 deletions

136
ARCHITECTURE.md Normal file
View File

@@ -0,0 +1,136 @@
# TK Factory Services - 데이터 아키텍처 가이드
## 서비스 구조
| 서비스 | 서브도메인 | 역할 | 포트 |
|--------|-----------|------|------|
| **tkuser** | tkuser.technicalkorea.net | 통합 관리 (기본 데이터) | API 30300, Web 30380 |
| **tkfactory** (System 1) | tkfactory.technicalkorea.net | 공장 관리 | API 30005, Web 30080 |
| **tkreport** (System 2) | tkreport.technicalkorea.net | 안전 신고 | API 30105, Web 30180 |
| **tkqc** (System 3) | tkqc.technicalkorea.net | 부적합 관리 | API 30200, Web 30280 |
| **SSO Auth** | - | 인증 (로그인/토큰) | 30050 |
| **Gateway** | technicalkorea.net | SSO 라우팅 | 30000 |
## 데이터 소유권 (Data Ownership)
### 1. 기본 데이터 → tkuser API
모든 시스템에서 공통으로 사용하는 마스터 데이터는 **tkuser**에서 관리합니다.
| 데이터 | 설명 | DB 테이블 |
|--------|------|-----------|
| **사용자** | 계정, 역할, 비밀번호 | `sso_users` |
| **페이지 권한** | 사용자별 페이지 접근 권한 | `user_page_permissions` |
| **프로젝트** | 프로젝트 목록 및 설정 | `projects` |
| **작업장** | 공장(카테고리) → 작업장 계층, 구역지도 | `workplace_categories`, `workplaces`, `workplace_map_regions` |
| **설비** | 설비 마스터, 사진, 배치도 위치 | `equipments`, `equipment_photos` |
| **부서** | 부서/조직 구조 | `departments` |
| **작업자** | 작업자 인력 관리 | `workers` |
| **작업/공정** | 공정(work_types) → 작업(tasks) 계층 | `work_types`, `tasks` |
| **휴가 유형** | 연차/반차/특별휴가 유형 정의 | `vacation_types` |
| **연차 배정** | 작업자별 연간 연차 일수 배정/사용 추적 | `vacation_balance_details` |
다른 시스템은 tkuser API를 호출하여 기본 데이터를 조회합니다.
### 2. 신고 데이터 → tkreport (System 2) API
안전 신고와 관련된 트랜잭션 데이터는 **System 2**에서 관리합니다.
| 데이터 | 설명 |
|--------|------|
| 안전 신고 | 신고 접수, 처리 현황 |
| 작업 이슈 | 작업 관련 이슈 리포트 |
| 신고 첨부파일 | 사진, 문서 등 |
### 3. 관리 현황 데이터 → 해당 시스템 API
각 시스템 고유의 운영 데이터는 해당 시스템에서 관리합니다.
**System 1 (tkfactory)**
| 데이터 | 설명 |
|--------|------|
| TBM 기록 | 일일 TBM 체크리스트 |
| 작업 보고서 | 일일/주간 작업 보고 |
| 출퇴근 기록 | 체크인/체크아웃 |
| 근태/휴가 | 휴가 신청 및 관리 |
| 순회 점검 | 일일 순회점검 결과 |
**System 3 (tkqc)**
| 데이터 | 설명 |
|--------|------|
| 부적합 이슈 | NCR 접수, 처리, 폐기 |
| 일일 공수 | 작업자별 일일 공수 입력 |
| 보고서 | 일일/주간/월간 보고서 |
## tkuser API 엔드포인트
| 경로 | 설명 |
|------|------|
| `GET/POST /api/users` | 사용자 CRUD |
| `GET/POST /api/permissions` | 페이지 권한 관리 |
| `GET/POST /api/projects` | 프로젝트 관리 |
| `GET/POST /api/workers` | 작업자 관리 |
| `GET/POST /api/departments` | 부서 관리 |
| `GET/POST /api/workplaces` | 작업장·카테고리·구역지도 관리 |
| `GET/POST /api/equipments` | 설비·사진 관리 |
| `GET/POST /api/tasks` | 공정(work_types)·작업(tasks) 관리 |
| `GET/POST /api/vacations` | 휴가 유형·연차 배정 관리 |
## 데이터 흐름
```
┌───────────────────────────────────────────────────────────┐
│ tkuser (통합 관리) │
│ 사용자 / 프로젝트 / 작업장·설비 / 부서 / 작업·공정 / 휴가 │
│ [MariaDB] │
└──────────┬──────────────┬──────────────┬──────────────────┘
│ │ │
API 조회 API 조회 API 조회
│ │ │
┌──────▼──────┐ ┌─────▼──────┐ ┌────▼───────────┐
│ tkfactory │ │ tkreport │ │ tkqc │
│ 공장 관리 │ │ 안전 신고 │ │ 부적합 관리 │
│ [MariaDB] │ │ [MariaDB] │ │ [PostgreSQL] │
└─────────────┘ └────────────┘ └────────────────┘
```
## 인증 구조
```
사용자 로그인 → SSO Auth → JWT 토큰 (sso_token 쿠키)
.technicalkorea.net 전체 공유
각 시스템에서 쿠키로 인증 확인
```
- JWT 토큰은 `.technicalkorea.net` 도메인 쿠키로 설정
- 모든 서브도메인에서 자동으로 인증 공유
- 각 시스템 API는 동일한 `SSO_JWT_SECRET`으로 토큰 검증
## 페이지 권한 체계
권한은 **tkuser**에서 중앙 관리하며, 각 시스템은 API를 호출하여 권한을 확인합니다.
| 시스템 | 권한 키 접두사 | 예시 |
|--------|---------------|------|
| System 1 | `s1.*` | `s1.work.tbm`, `s1.admin.projects` |
| System 2 | - | 전체 허용 (권한 관리 불필요) |
| System 3 | (접두사 없음) | `issues_dashboard`, `daily_work` |
권한 우선순위:
1. `user_page_permissions` 테이블에 명시적 설정이 있으면 해당 값 사용
2. 없으면 `DEFAULT_PAGES``default_access` 값 사용
## 배포
```bash
# 전체 서비스
docker compose up -d --build
# 개별 서비스
docker compose up -d --build tkuser-api tkuser-web
docker compose up -d --build system1-api system1-web
docker compose up -d --build system2-api system2-web
docker compose up -d --build system3-api system3-web
```