Files
myhome-server/README.md
Hyungi Ahn 1a01809a6e feat: 완전한 Tapo 스마트 플러그 백엔드 시스템 구현
 새로운 기능:
- Tapo P110/P100 스마트 플러그 완전 연동
- 동적 기기 관리 (추가/제거/수정)
- 실시간 전력 데이터 수집 API
- 설정 파일 기반 확장 가능한 아키텍처

🔧 기술 개선:
- Docker Compose 파일 통합 (mac-mini 전용 제거)
- MariaDB 설정 최적화 (호환성 문제 해결)
- 포트 구조 개선 (9304-9307 대역 사용)
- Express.js 기반 RESTful API 완성

📚 문서화:
- README 전면 업데이트 (구현된 API 반영)
- Tapo API 엔드포인트 상세 문서화
- 실제 사용 가능한 curl 예제 추가

🗄️ 데이터베이스:
- MariaDB 11 안정화
- Redis 캐시 시스템 구축
- 사용자 권한 모델 준비

🚀 Docker 환경:
- 단일 docker-compose.yml로 통합
- 포트 충돌 해결
- 헬스체크 및 자동 재시작 설정
2025-08-12 10:55:12 +09:00

323 lines
7.4 KiB
Markdown

# 홈 관리 시스템 (Home Management API)
홈 IoT 기기 모니터링 및 관리를 위한 백엔드 API 시스템입니다.
> **Mac Mini M4 Pro 전용 버전** - 고성능 홈 서버 환경에 최적화
## 🎯 주요 기능
### ✅ **구현 완료**
- **Tapo 스마트 플러그 관리**: 동적 기기 추가/제거/모니터링
- **전력 소비 추적**: Tapo P110 플러그를 통한 실시간 전력 데이터 수집
- **확장 가능한 아키텍처**: 설정 파일 기반 기기 관리
- **RESTful API**: Express.js 기반 완전한 백엔드 API
- **데이터베이스**: MariaDB를 통한 안정적인 데이터 저장
- **캐시 시스템**: Redis를 통한 고성능 데이터 처리
### 🚧 **개발 예정**
- **웹 대시보드**: 실시간 모니터링 인터페이스
- **개인 문서관리**: Paperless 연동 문서 시스템
- **시스템 리소스 모니터링**: CPU, 메모리, 디스크 사용량 추적
- **네트워크 트래픽 모니터링**: 디바이스별 네트워크 사용량 추적
- **알림 시스템**: 임계값 기반 실시간 알림
- **사용자 관리**: 역할 기반 접근 제어
## 🛠 기술 스택
- **Backend**: Node.js, Express.js
- **Database**: MariaDB 11.x
- **ORM**: Sequelize
- **Cache**: Redis
- **Logging**: Winston
- **Container**: Docker & Docker Compose
## 📋 요구사항
- Node.js 18+
- Docker & Docker Compose
- Git
## 🚀 빠른 시작
### 1. 저장소 클론
```bash
git clone https://git.hyungi.net/hyungi/myhome-server.git
cd myhome-server
```
### 2. 필요한 디렉토리 생성
```bash
mkdir -p /Users/$(whoami)/home-management-db
mkdir -p /Users/$(whoami)/home-management-redis
mkdir -p /Users/$(whoami)/home-management-data
mkdir -p /Users/$(whoami)/home-management-logs
```
### 3. Docker Compose 실행
```bash
# 모든 서비스 시작
docker-compose up -d
# 로그 확인
docker-compose logs -f
# 서비스 상태 확인
docker-compose ps
```
### 4. Tapo 기기 설정
```bash
# Tapo 기기 설정 파일 편집
nano config/tapo-devices.json
# 실제 IP, 이메일, 패스워드 입력 후 저장
```
## 📊 서비스 확인
### 🌐 **서비스 접속 정보**
- **API 서버**: http://localhost:9306
- **phpMyAdmin**: http://localhost:9304
- **MariaDB**: localhost:9305
- **Redis**: localhost:9307
### 🏥 **헬스체크**
```bash
# API 서버 상태 확인
curl http://localhost:9306/health
# API 엔드포인트 목록 확인
curl http://localhost:9306/api
# Tapo 기기 목록 확인
curl http://localhost:9306/api/tapo/devices
```
## 📚 API 엔드포인트
### 🔌 Tapo 스마트 플러그 관리
```bash
# 기기 목록 조회
GET /api/tapo/devices
# 새 기기 추가
POST /api/tapo/devices
# 기기 설정 업데이트
PUT /api/tapo/devices/:deviceId
# 기기 제거
DELETE /api/tapo/devices/:deviceId
# 실시간 전력 데이터 조회
GET /api/tapo/devices/:deviceId/power
# 모든 기기 전력 데이터 조회
GET /api/tapo/power
# 연결 테스트
POST /api/tapo/test-connection
# 기기 설정 템플릿
GET /api/tapo/template
```
### 📊 디바이스 관리
```bash
GET /api/devices # 모든 디바이스 조회
GET /api/devices/:id # 특정 디바이스 조회
POST /api/devices # 새 디바이스 생성
PUT /api/devices/:id # 디바이스 업데이트
DELETE /api/devices/:id # 디바이스 삭제
```
### 💡 기본 사용 예제
```bash
# Tapo 기기 목록 조회
curl http://localhost:9306/api/tapo/devices
# Tapo 기기 설정 템플릿 확인
curl http://localhost:9306/api/tapo/template
# 새 Tapo 기기 추가
curl -X POST http://localhost:9306/api/tapo/devices \
-H "Content-Type: application/json" \
-d '{
"id": "living_room_plug",
"name": "거실 스마트 플러그",
"ip": "192.168.1.100",
"email": "your-tapo-email@gmail.com",
"password": "your-tapo-password",
"location": "거실",
"device_type": "smart_plug",
"enabled": true
}'
# 전력 소비 데이터 조회
curl http://localhost:9306/api/tapo/power
```
## 🗄️ 데이터베이스
### 접속 정보
- **Host**: localhost
- **Port**: 9305
- **Database**: home_management
- **Username**: homeuser
- **Password**: mac_mini_home_password
### 기본 데이터
시스템 초기화시 다음 데이터가 자동으로 생성됩니다:
- **관리자 계정**: admin / admin123
- **가족 계정**: family / admin123
- **기본 디바이스**: Mac Mini M4 Pro, Synology DS1525+, RT6600ax
## 🔧 개발 가이드
### 폴더 구조
```
src/
├── config/ # 설정 파일
├── controllers/ # 컨트롤러
├── middleware/ # 미들웨어
├── models/ # 데이터베이스 모델
├── routes/ # 라우터
├── services/ # 비즈니스 로직
├── utils/ # 유틸리티
└── app.js # 메인 애플리케이션
```
### 스크립트
```bash
npm run dev # 개발 서버 실행
npm run test # 테스트 실행
npm run lint # 코드 검사
npm run db:migrate # 데이터베이스 마이그레이션
```
### 로그 확인
```bash
# Docker 컨테이너 로그
docker-compose logs -f api
# 로컬 로그 파일
tail -f logs/combined.log
```
## 🐳 Docker 명령어 (Mac Mini)
```bash
# 모든 서비스 시작 (Mac Mini 전용)
docker-compose -f docker-compose.mac-mini.yml up -d
# 특정 서비스만 시작
docker-compose -f docker-compose.mac-mini.yml up -d mariadb redis
# 로그 확인
docker-compose -f docker-compose.mac-mini.yml logs -f
# 컨테이너 상태 확인
docker-compose -f docker-compose.mac-mini.yml ps
# 서비스 중지
docker-compose -f docker-compose.mac-mini.yml down
# 볼륨까지 삭제 (주의: 데이터 손실)
docker-compose -f docker-compose.mac-mini.yml down -v
```
## 🔍 문제 해결
### 데이터베이스 연결 오류
```bash
# MariaDB 컨테이너 상태 확인
docker-compose -f docker-compose.mac-mini.yml ps mariadb
# 데이터베이스 로그 확인
docker-compose -f docker-compose.mac-mini.yml logs mariadb
# 컨테이너 재시작
docker-compose -f docker-compose.mac-mini.yml restart mariadb
# Mac Mini 재배포
./scripts/deploy-mac-mini.sh
```
### 포트 충돌
기본 포트가 사용 중인 경우 `docker-compose.mac-mini.yml`에서 포트를 변경하세요:
```yaml
ports:
- "3001:3000" # 3001로 변경
```
### Mac Mini 네트워크 접근 문제
```bash
# 방화벽 확인
sudo pfctl -s all
# 포트 사용 확인
lsof -i :3000
# 네트워크 인터페이스 확인
ifconfig
```
## 📈 모니터링
### phpMyAdmin으로 데이터베이스 모니터링
1. http://localhost:8080 접속 (Mac Mini에서)
2. Server: `mariadb`
3. Username: `homeuser`
4. Password: `mac_mini_home_password`
### API 성능 모니터링
```bash
# API 응답 시간 테스트
time curl http://localhost:3000/api/devices
# 부하 테스트 (Apache Bench)
ab -n 1000 -c 10 http://localhost:3000/api/devices
```
## 🔐 보안
- JWT 기반 인증 (추후 구현)
- 비밀번호 bcrypt 해싱
- API 요청 제한 (Rate Limiting)
- 입력 데이터 검증
## 📝 라이센스
MIT License
## 🤝 기여하기
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request
## 📞 지원
문제가 있으시면 [Issues](https://git.hyungi.net/hyungi/myhome-server/issues)에 등록해주세요.