-
✅ 사용자 및 펫 관리
회원 가입/로그인, Google/Naver 소셜 로그인
JWT 기반 인증/인가, 이메일 인증
펫 등록, 정보 수정, 이미지 관리, 가족 권한 관리 -
✅ 활동 및 건강 데이터 관리
활동 기록, 심박수, 몸무게 기록 저장 및 조회
반려동물 누적 데이터를 기반으로 건강 상태 분석
건강 리포트 생성 및 조회 -
✅ 산책 경로 및 위치 관리
GPS 기반 위치 좌표 저장 및 산책 경로 관리
안전 구역(Geo-fencing) 설정 및 이탈 감지 구조
WebSocket 기반 실시간 위치 추적 기능 확장 가능 -
✅ AI 건강 분석
반려동물 기본 정보, 활동 기록, 심박수, 몸무게 데이터를 조합
OpenAI API 기반 건강 분석 리포트 생성
보호자가 이해하기 쉬운 건강 관리 가이드 제공 -
✅ 커뮤니티
게시글 작성/조회/수정/삭제
댓글, 반응, 신고 기능
관리자 기능을 통한 커뮤니티 운영 관리 -
✅ 알림 및 푸시
Firebase Cloud Messaging(FCM) 기반 푸시 알림
울타리 이탈, 댓글/반응 등 주요 이벤트 알림 구조
사용자별 FCM 토큰 관리 -
✅ 파일 및 이미지 관리
Cloudinary 기반 이미지 업로드
반려동물 이미지 및 커뮤니티 이미지 저장
Apache Tika 기반 파일 타입 검증 구조 -
✅ 배포 자동화
GitHub Actions 기반 CD Workflow
Self-hosted Runner를 활용한 Ubuntu 서버 자동 배포
develop 브랜치 push 시 빌드 및 애플리케이션 재시작
백엔드 서버를 중심으로 사용자, 반려동물, 활동 기록, 위치, 건강 분석, 커뮤니티 데이터가 처리되는 구조입니다.
처리 흐름
flowchart TD
Client[앱/웹 클라이언트] -->|사용자 요청| Backend[Spring Boot Backend]
Backend --> Security[Spring Security + JWT]
Security --> Domain[도메인 로직 처리]
Domain --> Database[(MySQL)]
Domain --> JPA[Spring Data JPA]
Domain --> MyBatis[MyBatis]
Domain --> Redis[(Redis)]
Domain --> Cloudinary[Cloudinary<br/>이미지 저장]
Domain --> OpenAI[OpenAI API<br/>건강 분석 리포트 생성]
Domain --> WebSocket[WebSocket<br/>실시간 위치 처리]
Domain --> FCM[FCM<br/>푸시 알림 전송]
WebSocket --> Client
FCM --> Client
Backend -->|API 응답| Client
도메인 패키지 구성
📦 src/main/java/com/dodo/backend
┣ 📂 activityhistory # 반려동물 활동 기록 관리
┣ 📂 admin # 관리자 기능
┣ 📂 auth # 로그인, 소셜 로그인, JWT 인증
┣ 📂 board # 커뮤니티 게시글
┣ 📂 comment # 댓글
┣ 📂 common # 공통 응답, 예외, 설정, 핸들러
┣ 📂 fence # 안전 구역 및 울타리 관리
┣ 📂 fcm-tokens # FCM 토큰 관리
┣ 📂 healthanalysis # AI 기반 건강 분석
┣ 📂 heartrate # 심박수 데이터 관리
┣ 📂 imagefile # 이미지 파일 관리
┣ 📂 mail # 이메일 발송
┣ 📂 notification # 알림 관리
┣ 📂 pet # 반려동물 정보 관리
┣ 📂 petspecialnote # 반려동물 특이사항 관리
┣ 📂 petweight # 반려동물 몸무게 기록
┣ 📂 reaction # 게시글 반응
┣ 📂 report # 신고 및 리포트
┣ 📂 routepoint # 위치 좌표 및 산책 경로 포인트
┣ 📂 user # 사용자 정보 관리
┗ 📂 userpet # 사용자-반려동물 관계 관리
DoDo 백엔드는 JWT 기반 인증 구조를 사용합니다.
1. 사용자가 일반 로그인 또는 소셜 로그인을 요청합니다.
2. 서버는 사용자 정보를 검증합니다.
3. 인증에 성공하면 Access Token과 Refresh Token을 발급합니다.
4. 클라이언트는 보호된 API 요청 시 Authorization Header에 Access Token을 포함합니다.
5. 서버는 JWT를 검증한 뒤 사용자 권한에 따라 요청을 처리합니다.
| 구분 | 기술 | 역할 |
|---|---|---|
| Main Database | MySQL | 사용자, 반려동물, 활동 기록, 커뮤니티 데이터 저장 |
| ORM | Spring Data JPA | 도메인 엔티티 중심의 기본 CRD 처리 |
| SQL Mapper | MyBatis | 복잡한 조회, 통계성 데이터 조회 및 직접 SQL 기반 Update 처리 |
| Cache | Redis | 빠른 조회 및 인증/세션성 데이터 처리 |
| File Storage | Cloudinary | 반려동물 이미지 및 커뮤니티 이미지 저장 |
DoDo는 반려동물의 누적 데이터를 기반으로 AI 건강 분석 기능을 제공합니다.
flowchart TD
PetInfo[반려동물 기본 정보]
Activity[활동 기록]
HeartRate[심박수 데이터]
Weight[몸무게 기록]
Note[특이사항]
Question[보호자 질문]
PetInfo --> Prompt[건강 분석 프롬프트 구성]
Activity --> Prompt
HeartRate --> Prompt
Weight --> Prompt
Note --> Prompt
Question --> Prompt
Prompt --> OpenAI[OpenAI API 요청]
OpenAI --> Result[AI 분석 결과 수신]
Result --> Report[건강 분석 리포트 생성]
Report --> Storage[(MySQL 저장)]
Report --> Client[사용자에게 분석 결과 제공]
DoDo 백엔드는 GitHub Actions와 Self-hosted Runner를 활용하여 배포를 자동화합니다.
flowchart TD
Push[develop 브랜치 push] --> Actions[GitHub Actions CD Workflow 실행]
Actions --> Runner[Self-hosted Runner 실행]
Runner --> Checkout[코드 체크아웃]
Checkout --> JDK[JDK 17 설정]
JDK --> Config[GitHub Secrets 기반 application.yml 생성]
Config --> Build[Gradle bootJar 빌드]
Build --> Restart[Ubuntu 서버 systemd 서비스 재시작]
Restart --> App[Spring Boot 애플리케이션 반영 완료]
우리 프로젝트는 원활한 협업을 위해 아래와 같은 규칙을 따릅니다.
👉🏻 Spring Boot 공식 문서
👉🏻 Spring Security 공식 문서
👉🏻 Firebase Cloud Messaging 공식 문서
👉🏻 OpenAI API 공식 문서
👉🏻 Cloudinary 공식 문서
![]() 백현빈 |
![]() 임현빈 |

