Skip to content

About

Backend Repository for Hrr

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Hrr(흐르르) — Backend

함께 챌린지에 참여하고 실천을 기록하는 습관 형성 서비스의 Spring Boot 백엔드 서버

Java 17 Spring Boot 3.5.6 MySQL Redis FastAPI Docker Compose

흐르르 따라 흐르는 나의 성장

App Store 정식 출시 Google Play 정식 출시

App Store와 Google Play에 출시해 운영했습니다.

2026년 10월 1일 서비스 종료 · 아래는 운영 당시의 기능과 서버 구성입니다.


📌 프로젝트 소개

Hrr-표지

Hrr(흐르르) 는 같은 목표를 가진 사람들이 함께하는 챌린지 서비스입니다. 참여자는 정해진 요일과 시간에 글/사진으로 실천을 인증합니다. 사용자가 직접 챌린지를 만들거나 추천받은 챌린지에 참여하고 댓글로 피드백을 나누며 활동에 따라 포인트를 쌓습니다.

본 레포지토리는 회원 인증 · 챌린지/라운드 · 인증 기록 · 추천 연동 · 알림을 담당하는 백엔드(Spring Boot) 서버입니다. 모바일 앱(React Native)과 추천 모델(FastAPI)은 별도 레포지토리로 관리합니다.

핵심 사용자 흐름

소셜 로그인 → 챌린지 추천·탐색 → 참여 → 글·사진 인증 → 다음 라운드 참여

✨ 주요 기능

기능 설명
회원 관리 Kakao·Naver·Apple 소셜 로그인, JWT 발급·재발급, 프로필 관리, 로그아웃·탈퇴
챌린지·라운드 챌린지 개설·수정·참여, 인증 요일·시간 설정, 3주 단위 라운드와 연장, 빈자리 알림
글·사진 인증 인증 작성·수정·삭제, 라운드별 기록·통계, 댓글·대댓글·채택, 좋아요·스크랩
추천·탐색 사용자 선호에 따른 챌린지 추천, 검색·필터, 인기 챌린지·검색어
소셜 팔로우·요청 승인·차단, 신고, WebSocket/STOMP 기반 DM·읽음 처리
포인트·랭킹 랜덤미션, 첫 인증·무결석 완주 등 활동별 포인트, 랭킹·주간 순위 변화
알림 인증 마감·라운드·팔로우 알림, FCM 푸시, 수신 설정·읽음 처리

백엔드는 챌린지 참여 조건과 인증 가능 시간을 검증하고 라운드별 기록을 관리합니다. 추천 연산은 별도 모델 서버가 담당합니다.


🛠 기술 스택

구분 기술
언어 Java 17
프레임워크 Spring Boot 3.5.6, Spring Data JPA, Spring Security
인증 JWT, Kakao·Naver·Apple 로그인
DB MySQL (AWS RDS) · H2 (테스트), QueryDSL, Flyway
Redis Refresh Token·토큰 블랙리스트, 인기 검색어·챌린지 클릭 집계
추천 모델 Python FastAPI (AWS Lambda)
스토리지 / 알림 AWS S3 (Presigned URL), Firebase Cloud Messaging
실시간 통신 WebSocket, STOMP, SockJS
API 문서 / 테스트 springdoc-openapi · Swagger UI, JUnit 5, Mockito, AssertJ
빌드 / 배포 Gradle, Docker / Docker Compose, GitHub Actions, Docker Hub, AWS EC2 · RDS

🏗 시스템 아키텍처

서버 아키텍처 추천 모델 아키텍처
Hrr 서버 아키텍처 Hrr 추천 모델 아키텍처

운영 당시 EC2에서 Docker Compose로 Nginx · Spring Boot · Redis를 실행했습니다. 서비스 데이터와 챌린지 임베딩은 Amazon RDS(MySQL) 에 저장했고 추천 모델은 AWS Lambda에 분리했습니다.

Nginx가 HTTPS 요청을 받아 Spring Boot로 전달하는 구조였습니다. 백엔드는 FastAPI 모델 서버를 HTTP로 호출하고 앱은 Presigned URL로 S3에 이미지를 직접 업로드했습니다. 푸시 알림은 Firebase Cloud Messaging으로 발송했습니다.

Blue/Green 무중단 배포를 적용했습니다. GitHub Actions가 릴리즈 발행 시 Docker 이미지를 빌드해 배포하고 새 컨테이너가 헬스 체크를 통과하면 Nginx 트래픽을 전환한 뒤 이전 컨테이너를 종료했습니다.


⚙️ 핵심 동작

추천 — 사전 계산한 임베딩 활용

  1. 임베딩 저장: 챌린지 텍스트를 FastAPI 모델 서버에 보내 768차원 벡터로 변환하고 MySQL에 저장합니다.
  2. 후보 선별·모델 호출: 종료된 챌린지와 차단한 사용자가 방장인 챌린지는 제외합니다. 사용자의 목표·관심 카테고리로 쿼리를 만듭니다. 쿼리와 후보 챌린지의 임베딩을 모델 서버에 전달해 상위 5개를 요청합니다.
  3. 결과 반환: 추천 결과를 저장한 뒤 챌린지 정보와 좋아요 여부를 함께 반환합니다. 추천 요청마다 챌린지 임베딩을 다시 계산하지 않고 저장된 벡터를 사용합니다.

챌린지 — 라운드와 인증

챌린지는 3주 단위 라운드로 진행합니다. 참여자의 인증 기록과 연장 의사를 라운드별로 관리하고 종료 시 다음 라운드 참여 여부를 반영합니다.

챌린지 참여 → 지정 요일·시간에 인증 → 연장 여부 선택 → 다음 라운드 참여 또는 종료

동시 참가 요청에는 비관적 락을 적용해 정원 확인과 참가 처리를 순서대로 수행합니다. 인증 마감 알림은 DB를 5분마다 조회해 발송 대상을 판단합니다. 서버 재시작 후에도 발송 구간에 있는 알림을 처리합니다.


👥 팀

Team Hrr — Backend

GitHub 역할
yc3697 Backend (Spring Boot)
yangjiae12 Backend (Spring Boot)
Hminkyung Backend (Spring Boot)
alynn520 Backend (Spring Boot) · AI
yerinchun Backend (Spring Boot)

🔗 프로젝트 레포지토리

백엔드·모바일 앱·추천 모델 레포지토리는 아래 조직에서 관리합니다.

Hrr-HabbitRoutineResult GitHub Organization

모바일 앱 · 추천 모델

About

Backend Repository for Hrr

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages