프로젝트 / Pillution
Pillution
문진으로 건강 상태와 생활 습관을 분석해 영양 성분과 제품을 추천하고, 구독 배송과 상담까지 잇는 헬스케어 서비스

- 기간
- 2025.01.17 ~ 2025.02.21
- 인원
- 5명 (기능 단위로 나눠 각자 백엔드·화면 모두 개발)
- 담당
- 문진 · 추천 알고리즘 · 실시간 상담 · 결제 · 인증 · CI/CD
- 기술
- Spring BootSpring SecurityJPAJWTOAuth2 (카카오)JUnitRedisWebSocket (STOMP)MariaDBPortOneReactRedux ToolkitMUIViteGitHub ActionsAWS EC2AWS RDSNginxSwagger
- 링크
- GitHub시연 영상
개요
사용자 맞춤 문진으로 건강 상태와 생활 습관을 분석해 필요한 영양 성분과 제품을 추천하는 헬스케어 웹 서비스입니다. 추천 제품은 구독으로 주기 배송되고, 실시간 상담과 쪽지로 꾸준히 피드백을 받을 수 있습니다.
핵심인 문진 로직과 추천 알고리즘 설계·구현을 주도했고, 실시간 상담·쪽지, 결제, 인증을 맡았습니다. Redux Toolkit 상태 관리와 React 컴포넌트를 설계해 복잡한 백엔드 로직과 화면을 이었습니다.
맡은 일
- 사용자 문진
- 맞춤 영양제 추천 알고리즘
- 실시간 채팅 상담
- 쪽지·알림
- 장바구니
- 주문·결제
- 카카오 로그인
- 배포 자동화(CI/CD)
핵심 성과
- 추천 알고리즘
- 응답을 점수화하고 정규화·가중치를 적용하는 구조
- 실시간 채팅
- WebSocket + Redis Pub/Sub 기반 상담
- 결제 처리
- 구독 상품과 일반 상품의 결제 흐름을 백엔드에서 나눔
- 상태 관리
- Redux 전역 상태로 화면 흐름 통합
- 자동 배포
- GitHub Actions 기반 CI/CD 파이프라인
문제와 해결
문제 1
상담원 두 명이 같은 채팅을 동시에 수락하던 문제
- 문제
- 상담 요청이 여러 상담원에게 동시에 가면 두 명 이상이 함께 수락하는 일이 생김
- 원인
- Redis Pub/Sub 으로 알린 뒤 수락 요청이 동시에 들어올 때 서버에 동시성 제어가 없었음
- 해결
- 트랜잭션 안에서 상태가 WAIT 일 때만 수락되게 막고, 다른 상담원 화면에는 자동 취소 알림
- 결과
- 중복 매칭이 사라지고 실시간성을 지키는 구조가 됨
문제 2
구독 여부에 따라 결제 흐름이 섞이던 문제
- 문제
- 기존 구독자가 상품을 더하면 이중 결제가 되거나, 일반 사용자가 구독 결제로 들어감
- 원인
- 구독 여부에 따른 분기를 화면에만 맡기고 백엔드에는 없었음
- 해결
- 백엔드에서 장바구니의 구독 상품과 사용자 상태를 확인해 PortOne 정기 결제·일반 결제를 나눠 부름
- 결과
- 두 결제 흐름이 분리되고 이중 결제가 사라짐
문제 3
추천 점수가 한쪽으로 치우치던 문제
- 문제
- 특정 조건 조합(예: 고연령 + 특정 증상)에서 일부 성분이 지나치게 높게 추천됨
- 원인
- 가중치가 고정돼 있었고 응답 점수 정규화가 빠져 있었음
- 해결
- 응답 점수를 0~5 로 정규화하고, 가중치를 다시 맞추고, 생활습관 보정 로직을 더함
- 결과
- 추천 결과를 설명할 수 있게 되었고, 사용자 피드백으로 고쳐 나갈 수 있는 구조가 됨
문제 4
채팅 메시지를 두 번 받던 문제
- 문제
- 같은 메시지를 두 번 받는 현상
- 원인
- WebSocket 재연결 때 클라이언트가 같은 메시지를 다시 보냈고, 서버는 구분 없이 그대로 전달
- 해결
- 서버에서 메시지마다 UUID 를 붙여 중복을 거르고, Redis 세션으로 연결 상태를 관리
- 결과
- 중복 수신이 사라지고 데이터 무결성이 좋아짐
회고 및 개선 방향
- 시스템 구조
- 추천 로직이 한 서비스 안에 몰려 재사용이 어려웠다. 추천을 별도 서비스로 나누고 API Gateway, 캐싱 전략을 생각했다
- 정적 알고리즘의 한계
- 고정 가중치는 사용자 변화에 둔하다. 복용 이력, 만족도, 재구매 데이터를 반영하는 학습 기반 추천으로 바꾸고 싶다
- 테스트 자동화
- 점수 계산, 결제, 구독 분기처럼 흐름이 복잡한데 테스트가 부족했다. 예외 시나리오 중심의 통합 테스트를 갖추려 한다
- AI 연계
- 식단, 운동, 수면까지 넓히고 대화형 문진이나 AI 상담을 붙여 보고 싶다