원거리 가족돌봄자를 위한 AI 기반 노인 응급 케어 시스템의 백엔드 서버입니다.
떨어져 사는 가족이 어르신의 상태를 실시간으로 확인하고, 응급 상황과 복약 일정을 놓치지 않도록 돕습니다.
- 기간: 2026.03 ~ 2026.06 (심화캡스톤 연계 상상기업)
- 팀 구성: 6인 (백엔드 2 · 프론트엔드 2 · AI 1 · 인프라 1)
| 구분 | 사용 기술 |
|---|---|
| Language | Java 17 |
| Framework | Spring Boot 3.3.6, Spring Data JPA |
| Auth | Spring Security, JWT (jjwt 0.11.5) |
| Realtime | WebSocket + STOMP, RabbitMQ (AMQP), Reactor Netty |
| Notification | Firebase Admin (FCM), nurigo SDK (SMS) |
| DB | MySQL |
| Docs | Springdoc OpenAPI |
| 구분 | 사용 도구 |
|---|---|
| Build | Gradle |
| Container | Docker, docker-compose |
| Orchestration | Kubernetes |
| CI/CD | GitHub Actions |
| Code Quality | Spotless (googleJavaFormat), Git pre-commit hook |
- 인증/인가 — JWT 기반 로그인 및 토큰 관리
- 웨어러블 기기 연결 관리 — 기기 연결 상태 등록·조회·갱신
- 복약 일정 관리 — 복약 일정 등록·조회·수정·삭제
- 돌봄 일정 관리 — 일정 등록 및 알림 연동
- 실시간 채팅 — WebSocket + RabbitMQ 메시지 브로커 기반, 다중 서버 환경에서의 메시지 전달 보장
- 다채널 알림 — FCM 푸시 알림 및 SMS 발송
src/main/java/com/kgu/life_watch
├── auth # 인증/인가
├── user # 사용자 관리
├── schedule # 일정·복약 관리
├── chat # 실시간 채팅 (WebSocket + RabbitMQ)
├── notification # FCM 푸시 · SMS 발송
└── global # 공통 설정, 예외 처리, 에러코드
실시간 채팅은 단일 서버 WebSocket이 아니라 RabbitMQ를 외부 메시지 브로커로 두는 구조입니다. 서버가 여러 대로 확장되어도 서로 다른 인스턴스에 연결된 사용자 간 메시지 전달이 보장됩니다.
# 의존 서비스 기동 (MySQL, RabbitMQ)
docker compose up -d
# 애플리케이션 실행
./gradlew bootRunKubernetes 배포 매니페스트는 k8s/ 디렉토리에 있습니다.
kubectl apply -f k8s/| 머릿말 | 설명 |
|---|---|
| main | 서비스 브랜치 |
| develop | 배포 전 작업 기준 |
| feat | 기능 단위 구현 |
| hotfix | 서비스 중 긴급 수정 건에 대한 처리 |
| fix | 버그 수정 및 에러 해결 작업 |
| refactor | 코드 리팩토링 (기능 변경 없이 코드 구조 개선) |
Branch Naming Convention Detail
master(main) ── develop ── feature
└── hotfix └── fix
└── refactor
- 깃 플로우를 베이스로 하여 프로젝트 사이즈에 맞게 재정의했습니다.
- 브랜치 이름은
kebab-case를 따릅니다. - 이슈 번호는 가장 마지막에 적습니다. (ex. #_)
- 실제 서비스가 이루어지는 브랜치입니다.
- 이 브랜치를 기준으로 develop 브랜치가 분기됩니다.
- 배포 중, 긴급하게 수정할 건이 생길시 hotfix 브랜치를 만들어 수정합니다.
- 개발, 테스트, 릴리즈 등 배포 전 작업의 기준이 되는 브랜치입니다.
- 해당 브랜치를 default로 설정합니다.
- 이 브랜치에서 feature 브랜치가 분기됩니다.
- 개별 개발자가 맡은 작업을 개발하는 브랜치입니다.
-
feat/(feat-name)과 같이 머릿말을 feat, 꼬릿말을 개발하는 기능으로 명명합니다. - feat-name의 경우 kebab-case를 따릅니다.
- ex) feat/social-login-#5
- 버그나 에러를 수정하는 브랜치입니다.
-
fix/(수정내용)형식으로 명명합니다. - ex)
fix/login-error-#8
- 코드 구조를 개선하거나 리팩토링하는 브랜치입니다. (기능 변화 없음)
-
refactor/(개선내용)형식으로 명명합니다. - ex)
refactor/remove-duplication-#12
- 서비스 중 긴급히 수정해야 할 사항이 발생할 때 사용합니다.
- main에서 분기됩니다.
| 머릿말 | 설명 |
|---|---|
| Feat | 새로운 기능 추가 |
| Fix | 버그 수정 |
| Refactor | 코드 리팩토링 |
| Style | 코드 formatting, 세미콜론 누락, 코드 자체의 변경이 없는 경우 |
| Comment | 필요한 주석 추가 및 변경 |
| Docs | 문서 수정 |
| Test | 테스트 코드, 리팩토링 테스트 코드 추가 |
| Chore | 패키지 매니저 수정, 그 외 기타 수정 ex) .gitignore |
| Rename | 파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우 |
| Remove | 파일을 삭제하는 작업만 수행한 경우 |
| !BREAKING CHANGE | 커다란 API 변경의 경우 |
| !HOTFIX | 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우 |
Commit Convention Detail
- 커밋 유형 이후 제목과 본문은 한글로 작성하여 내용이 잘 전달될 수 있도록 할 것
- 본문에는 변경한 내용과 이유 설명 (어떻게보다는 무엇 & 왜를 설명)
- 변경 내용 1
- 변경 내용 2
- 변경 내용 3
커밋유형: 기능 설명 (#이슈번호) ex) Feat: 로그인 기능 구현 (#5)