전체 프로젝트
Hackathon Project

마디 (Madi)

시술을 케어카드로 등록하면 D-day 기준 오늘의 케어를 안내하고, 회복 기록에 AI 피드백과 날씨·일정 기반 카카오톡 브리핑을 더한 회복 관리 서비스입니다.

기간
2026.08.04 – 08.21 (약 3주 해커톤)
팀 구성
6명 (BE 3 · FE 3)
역할
팀장 · 백엔드 개발
완성 여부
완성 ✓
Java 21Spring Boot 4.1.0MySQL 8.0 JPA/HibernateSpring SecurityOAuth2 (카카오·구글) JWTOpenAI APIOpenWeatherMap API Google Calendar API카카오톡 메시지 APIAWS S3 DockerGitHub Actions
01

기획 의도

미용 시술 후에는 붓기·통증 관리, 소독, 자극 회피 등 시기별로 지켜야 할 관리 수칙이 다르지만, 대부분 시술 직후 안내받은 종이 한 장이나 기억에만 의존하다 보니 회복 관리를 놓치기 쉽다는 점에서 출발했습니다.

시술을 케어카드로 등록하면 D-day 기준으로 오늘 해야 할 케어를 자동 안내하고, 회복 기록을 남기면 AI가 피드백을 주며, 날씨와 일정을 반영한 오늘의 브리핑을 매일 카카오톡으로 발송하는 회복 관리 서비스를 개발했습니다.

핵심 가치 — D-day 기반 자동 케어 가이드 · AI 피드백 · 날씨/일정 연동 카카오 알림
02

시연 영상

03

시스템 구조

DomainUser, SocialAccount, CareCard, CareCardTreatment, CareRecord, CareRecordPhoto, CareRecordTag, AiFeedback, CareChecklist, CareJudgement, BriefingCache, ChecklistGenerationContext, TodayCareMessage, Schedule, GoogleCalendarConnection, KakaoNotification, Treatment, Weather 등
ControllerAuth, CareCard, CareCardDetail, CareRecord, AiFeedback, Today, Briefing, Schedule, GoogleCalendar(Event/Status/Disconnect), Notification, Mypage, Treatment, Environment
Service도메인별 서비스 + KakaoMessageScheduler(정기 알림 발송), TreatmentSeedLoader(CSV 시드 데이터 적재)
Security카카오·구글 OAuth2, JWT (SecurityConfig, CustomOAuth2UserService)
배포Docker + Docker Compose, GitHub Actions → EC2 SSH 배포, Caddy 리버스 프록시
04

담당 역할 · 주요 구현

1

배포 파이프라인 구축

Docker와 Docker Compose로 컨테이너화하고, GitHub Actions(deploy.yml)로 main 브랜치에 push되면 EC2에 SSH로 접속해 자동 재배포되는 CI/CD 파이프라인을 구성했습니다. application.yaml 없이도 환경변수만으로 컨테이너가 구동되도록 Spring의 relaxed binding을 활용해 설계했습니다.

2

오늘의 체크리스트 (AI)

TodayChecklistService는 OpenAI 기반으로 오늘의 체크리스트를 생성하도록 설계했고, 프롬프트를 구체화하거나 refresh 파라미터를 추가하고 노출 개수를 3개로 제한하는 등 여러 차례 반복 개선했습니다.

3

케어카드 · 회복 기록

CareCardService와 CareRecordService로 케어카드 생성·상세 조회, 회복 기록 작성(사진 첨부, 멀티 이미지), 카드별 시술 이력 조회 API를 구현했습니다.

4

시술 카탈로그 · 시드 데이터

Treatment, TreatmentSeedLoader로 매장 위치·회복 기간·오늘의 케어 문구가 담긴 CSV 기반 시술 카탈로그 초기 데이터를 적재하고, 시술명 필터 검색을 추가했습니다.

5

인증 · 보안

SecurityConfig 기반으로 카카오·구글 소셜 로그인을 구성하고, 배포 도메인의 CORS 허용 목록을 관리했습니다.

6

마이페이지 · 회원탈퇴

프로필·위치 정보 수정 API와, 회원탈퇴 시 브리핑 캐시·체크리스트 컨텍스트 등 연관 데이터를 정리하는 로직을 구현했습니다.

05

트러블슈팅

OAuth2 로그인 후 redirect 경로 유실

문제

카카오·구글 로그인 완료 후 프론트엔드로 돌아오는 과정에서 원래 요청했던 경로가 사라졌습니다.

원인

기본 AuthorizationRequestRepository가 세션 기반이라, 인증 흐름 중 세션이 유지되지 않으면 저장해둔 요청 정보가 유실됐습니다.

해결

CookieOAuth2AuthorizationRequestRepository를 직접 구현해 인증 요청을 쿠키에 저장하도록 전환하고, OAuth2AuthenticationFailureHandler와 연동했습니다.

배포 도메인 CORS 에러

문제

로컬에서는 정상 동작하던 카카오·구글 로그인이 배포 후 CORS 에러로 실패했습니다.

원인

SecurityConfig의 Origin 허용 목록에 localhost:3000만 등록되어 있고, 배포 서버 주소와 OAuth2 콜백 경로가 누락되어 있었습니다.

해결

배포 서버 도메인과 카카오·구글 콜백 URL을 Origin 허용 목록에 추가했습니다.

06

성과

164 / 237
백엔드 커밋 (약 69%)
CI/CD
Docker + GitHub Actions 기반 자동 배포 파이프라인 구축·운영
배포 완료
madi.hufsglobalikelion.co.kr에 배포해 카카오 알림톡 발송까지 정상 동작을 확인했습니다
← 이전 프로젝트마니또띠