5fc5a697f997b7f4d03441c2fa3bb9a25dd94832
✅ 완성된 기능: - 5개 핵심 테이블 생성 (devices, users, power_consumption, network_traffic, system_resources) - 기본 사용자 계정 생성 (admin/family) - 기본 디바이스 등록 (Mac Mini M4 Pro, DS1525+, RT6600ax) - Tapo 스마트 플러그 관리 API 완성 - Docker 환경 통합 (포트 9304-9307) 🔧 주요 변경사항: - docker-compose.mac-mini.yml 삭제 및 통합 - 포트 충돌 해결 (9305: MariaDB, 9306: API, 9304: phpMyAdmin, 9307: Redis) - 데이터베이스 스키마 완성 - API 엔드포인트 문서화 📋 현재 상태: - 백엔드 API: 100% 완성 - 데이터베이스: 100% 구성 완료 - Docker 환경: 100% 구축 완료 - 프론트엔드: 개발 대기 중
홈 관리 시스템 (Home Management API)
홈 IoT 기기 모니터링 및 관리를 위한 백엔드 API 시스템입니다.
Mac Mini M4 Pro 전용 버전 - 고성능 홈 서버 환경에 최적화
📋 현재 개발 상태 (v1.0)
✅ 백엔드 API 완성 - Tapo 스마트 플러그 관리, 디바이스 모니터링
✅ 데이터베이스 구성 완료 - 5개 테이블, 기본 데이터 설정
✅ Docker 환경 구축 - MariaDB, Redis, API 서버 통합 운영
🚧 프론트엔드 웹 대시보드 - 개발 대기 중
🎯 주요 기능
✅ 구현 완료
- Tapo 스마트 플러그 관리: 동적 기기 추가/제거/모니터링
- 전력 소비 추적: Tapo P110 플러그를 통한 실시간 전력 데이터 수집
- 확장 가능한 아키텍처: 설정 파일 기반 기기 관리
- RESTful API: Express.js 기반 완전한 백엔드 API
- 데이터베이스: MariaDB를 통한 안정적인 데이터 저장 및 테이블 구성 완료
- 캐시 시스템: Redis를 통한 고성능 데이터 처리
- 사용자 관리: 관리자/가족 계정 및 역할 기반 시스템
- 디바이스 등록: Mac Mini, NAS, 라우터 기본 디바이스 등록
🚧 개발 예정
- 웹 대시보드: 실시간 모니터링 인터페이스
- 개인 문서관리: 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. 저장소 클론
git clone https://git.hyungi.net/hyungi/myhome-server.git
cd myhome-server
2. 필요한 디렉토리 생성
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 실행
# 모든 서비스 시작
docker-compose up -d
# 로그 확인
docker-compose logs -f
# 서비스 상태 확인
docker-compose ps
4. Tapo 기기 설정
# Tapo 기기 설정 파일 편집
nano config/tapo-devices.json
# 실제 IP, 이메일, 패스워드 입력 후 저장
📊 서비스 확인
🌐 서비스 접속 정보
- API 서버: http://localhost:9306
- phpMyAdmin: http://localhost:9304
- MariaDB: localhost:9305
- Redis: localhost:9307
🏥 헬스체크
# API 서버 상태 확인
curl http://localhost:9306/health
# API 엔드포인트 목록 확인
curl http://localhost:9306/api
# Tapo 기기 목록 확인
curl http://localhost:9306/api/tapo/devices
📚 API 엔드포인트
🔌 Tapo 스마트 플러그 관리
# 기기 목록 조회
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
📊 디바이스 관리
GET /api/devices # 모든 디바이스 조회
GET /api/devices/:id # 특정 디바이스 조회
POST /api/devices # 새 디바이스 생성
PUT /api/devices/:id # 디바이스 업데이트
DELETE /api/devices/:id # 디바이스 삭제
💡 기본 사용 예제
# 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
테이블 구성
시스템에는 다음 테이블들이 구성되어 있습니다:
✅ devices # 디바이스 관리 (3개 기본 데이터)
✅ users # 사용자 관리 (2개 기본 계정)
✅ power_consumption # 전력 소비 데이터
✅ network_traffic # 네트워크 트래픽 데이터
✅ system_resources # 시스템 리소스 데이터
기본 데이터
시스템 초기화시 다음 데이터가 자동으로 생성됩니다:
기본 계정:
- 관리자 계정: admin / admin123 (admin 권한)
- 가족 계정: family / admin123 (family 권한)
기본 디바이스:
- Mac Mini M4 Pro (server, 서재)
- Synology DS1525+ (nas, 서재)
- Synology RT6600ax (router, 거실)
🔧 개발 가이드
폴더 구조
src/
├── config/ # 설정 파일
├── controllers/ # 컨트롤러
├── middleware/ # 미들웨어
├── models/ # 데이터베이스 모델
├── routes/ # 라우터
├── services/ # 비즈니스 로직
├── utils/ # 유틸리티
└── app.js # 메인 애플리케이션
스크립트
npm run dev # 개발 서버 실행
npm run test # 테스트 실행
npm run lint # 코드 검사
npm run db:migrate # 데이터베이스 마이그레이션
로그 확인
# Docker 컨테이너 로그
docker-compose logs -f api
# 로컬 로그 파일
tail -f logs/combined.log
🐳 Docker 관리
기본 명령어
# 모든 서비스 시작
docker-compose up -d
# 특정 서비스만 시작
docker-compose up -d mariadb redis
# 로그 확인
docker-compose logs -f
# 컨테이너 상태 확인
docker-compose ps
# 서비스 중지
docker-compose down
# 볼륨까지 삭제 (주의: 데이터 손실)
docker-compose down -v
개별 서비스 관리
# API 서버 재시작
docker-compose restart api
# 데이터베이스 백업
docker exec home_mariadb mysqldump -u homeuser -pmac_mini_home_password home_management > backup.sql
# 데이터베이스 복원
docker exec -i home_mariadb mariadb -u homeuser -pmac_mini_home_password home_management < backup.sql
🔍 문제 해결
데이터베이스 연결 오류
# MariaDB 컨테이너 상태 확인
docker-compose ps mariadb
# 데이터베이스 로그 확인
docker-compose logs mariadb
# 컨테이너 재시작
docker-compose restart mariadb
# 데이터베이스 연결 테스트
docker exec home_mariadb mariadb -u homeuser -pmac_mini_home_password home_management -e "SELECT 1"
포트 충돌
현재 사용 중인 포트들:
- API: 9306
- MariaDB: 9305
- phpMyAdmin: 9304
- Redis: 9307
포트가 사용 중인 경우 확인:
# 포트 사용 확인
lsof -i :9306
lsof -i :9305
# 충돌하는 Docker 컨테이너 확인
docker ps --filter "publish=9306"
API 서버 문제
# API 서버 로그 확인
docker-compose logs -f api
# API 헬스체크
curl -v http://localhost:9306/health
# Tapo 라이브러리 설치 확인
docker exec home_api npm list tp-link-tapo-connect
📈 모니터링
phpMyAdmin으로 데이터베이스 모니터링
- http://localhost:9304 접속
- Server:
mariadb - Username:
homeuser - Password:
mac_mini_home_password
API 성능 모니터링
# API 응답 시간 테스트
time curl http://localhost:9306/api/devices
# 부하 테스트 (Apache Bench)
ab -n 1000 -c 10 http://localhost:9306/api/devices
# 데이터베이스 상태 확인
curl http://localhost:9306/api/devices | jq '.count'
🔐 보안
- JWT 기반 인증 (추후 구현)
- 비밀번호 bcrypt 해싱
- API 요청 제한 (Rate Limiting)
- 입력 데이터 검증
📝 라이센스
MIT License
🤝 기여하기
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
📞 지원
문제가 있으시면 Issues에 등록해주세요.
Description
Languages
JavaScript
87.4%
Shell
11.5%
Dockerfile
1.1%