하나은행의 생활금융, “금쪽같은 내 새끼”로 더 넓혀드리겠습니다
시니어(백엔드·파이널) 프로젝트 1팀
| Profile | Name | Roles | Contributions |
|---|---|---|---|
![]() |
전유진 @Yujin0827 |
Project Manager · Full Stack Developer · Data Analysis |
<프로젝트 총괄 및 협업 전략 구축> - 팀장으로서 전체 일정 관리 및 역할 분배 수행 - 초기 TBD 기반 개발 → Git Flow 전환 협업 구조 구축 <서비스 방향 재정립 및 데이터 기반 금융 구조 설계> - 기존 기능 나열형 서비스에서 보이스 기반 데이터 수집 → 재정 분석 → 금융상품 연계 구조로 서비스 방향 전환 - 데이터 기반 재정관리 서비스 구조 설계 <프론트엔드 개발 환경 구축> - Next.js 기반 프론트엔드 개발 환경 구성 - 프로젝트 구조 설계 및 초기 개발 표준 수립 <서비스 아키텍처 설계 및 개발 표준 수립> -프론트/백엔드 전반 구조 설계 및 공통 컴포넌트 구축 - 데이터 흐름 기반 구조 설계를 통한 확장성 및 유지보수성 확보 <마이데이터 기반 재정 분석 시스템 구현> - 사용자 맞춤형 재정 분석 로직 설계 및 구현 - 반려동물 생애주기 및 연령별 의료비를 반영한 비용 예측 모델 구현 <금융상품 연계 및 분석 기능 구현> - 절감 가능 비용을 분석하는 데이터 기반 금융 상품 추천 및 리포트 로직 구현 - 실질적인 금융 활용 구조 구현 <Full Stack 개발 수행> - 공통 컴포넌트 설계 및 개발 - 자산 분석 리포트 화면 및 API 구현 - 마이데이터 연동 API 및 데이터 처리 로직 구현 |
![]() |
정그린 @Green-JEONG |
Sub Project Manager · Full Stack Developer · UX Architect |
<GitHub 레포지토리 구축 및 협업 환경 초기 세팅> - 프로젝트 GitHub 레포지토리 생성 및 초기 구조 설정 - 협업을 위한 코드 관리 기반 환경 구축 <AI 기반 데이터 디지털화 및 자동 수집 구조 구현> - Google Vision OCR 기반 진료 내역 데이터 추출 및 구조화 기능 개발 - 사용자 입력 없이 데이터를 축적할 수 있는 자동 데이터 수집 구조 구축 <사용자 행동 기반 데이터 수집 기능 구현> - Xcode와 카파시터 활용 iOS HealthKit 데이터를 연동한 만보기 기능 개발 - 알림-응답 기반 UX 설계를 통해 사용자 입력 최소화 <UX Design> - 시니어 친화적 에러 처리 UX 설계 및 상황 기반 인터페이스 구현 <인프라 및 인증 환경 구축> - DNS(SPF, DKIM, DMARC) 기반 메일 인증 환경 구축 - 매직 링크 기반 인증 시스템 구현 <Full Stack 개발> - 온보딩 기능 개발 - 건강관리 : 산책 기능 전반 개발 |
![]() |
김선우 @Seon-U |
Security Specialist · Full Stack Developer · Data Modeler |
<서비스 아이디어 제안 및 기획 기여> - 프로젝트 초기 단계에서 서비스 아이디어 제안 - 반려동물 관리와 재정관리 결합 방향 설정에 기여 <인증 및 보안 시스템 설계 및 구현> - Spring Security + NextAuth 기반 인증/인가 시스템 구축 - JWT 및 Refresh Token 기반 인증 흐름 구현으로 보안성과 안정성 확보 <데이터 모델링 및 구조 설계> - ERD 설계 및 PK-FK 기반 관계형 데이터 모델 구축 - 서비스 확장을 고려한 데이터 구조 설계 <핵심 도메인 로직 구현> - 접종 일정 관리 및 인증 기능 구현 - 보이스 응답 기반 일정 등록 기능 개발 <배포 이슈 해결 및 로그 기반 트러블슈팅> - 배포 과정에서 발생한 오류를 로그 기반으로 분석 - 실제 서비스 운영 환경에서의 문제 해결 경험 확보 <Full Stack 개발> - 회원가입 플로우 화면 구현 및 설정 기능 연결 - Resend 기반 비밀번호 재설정 매직 링크 기능 구현 - 백신 접종 기능 개발(백신 관련 정보 정규화, 요약 대시보드) |
![]() |
박성원 @Solid9966 |
DevOps Engineer · Full Stack Developer · Backend Architect |
<백엔드 개발 환경 구축> - Spring Boot 기반 백엔드 개발 환경 구성 - 서버 구조 및 API 개발 기반 환경 설정 <클라우드 기반 서비스 인프라 구축 및 운영> - AWS EC2, S3, RDS 기반 서비스 배포 환경 구축 - 실제 서비스 운영 가능한 수준의 인프라 설계 및 적용 <CI/CD 자동화 환경 구축> - GitHub Actions 기반 자동 배포 파이프라인 구축 - 개발-배포 프로세스 자동화로 협업 효율성 향상 <데이터베이스 설계 및 전반 관리> - 서비스 전반의 데이터 구조 설계 및 DB 아키텍처 구축 - ERD 기반 테이블 설계 및 관계 구조 정의 - 데이터 저장·조회·처리 흐름을 고려한 DB 구조 개선 및 최적화 - 개발 전반에서 발생하는 DB 이슈 대응 및 관리 총괄 <AI 기반 대화 시스템 핵심 구현> - Spring AI 및 Gemini 기반 STS 시스템 설계 및 구현 - 음성/텍스트 입력을 데이터로 전환하는 핵심 인터페이스 구축 <데이터 처리 및 시스템 안정성 개선> - OCR 파이프라인 개선 및 이미지 처리 안정화 - 환경변수 및 배포 이슈 반복 개선을 통한 운영 안정성 확보 <Full Stack 개발 수행> - 대시보드 및 재정관리 핵심 기능 개발 |
![]() |
허혁 @hyeok1028 |
Data Interface Specialist · Full Stack Developer |
<프론트엔드 구조 설계 및 공통 컴포넌트 구축> - Atomic Design 기반 UI 구조 설계 - 재사용 가능한 컴포넌트 설계를 통해 개발 효율성 향상 <핵심 사용자 인터페이스 개발> - 메인 홈 및 설정 화면 구현 - 사용자 흐름 중심 UI 설계 및 구현 <데이터 기반 UI 개선> - 반려동물 및 재정 데이터를 반영한 UI 구성 - 사용자 인터랙션 최적화 및 접근성 개선 <최종 발표 및 서비스 전달> - 프로젝트 결과 발표 담당 - 서비스 구조, 핵심 기능 및 데이터 기반 금융 연결 흐름 전달 <Full Stack 개발 수행> - 재정·건강 데이터를 연결한 추천 로직 및 화면 반영 구조 설계 |
- 회원가입, 로그인, OTP/매직링크 검증, 비밀번호 재설정 지원
- 반려동물 이름/사진 기반 온보딩 제공
- 사용자별 반려동물 다중 관리 지원
- 선택한 반려동물 프로필 중심 홈 화면 제공
- 소비 요약 정보 표시
- 오늘 일정, 급여, 산책 시간 기반 알림 버블 제공
- 음성 인식 기반 질의응답 지원
- “산책”, “접종”, “병원기록”, “재정”, “상품” 등 주요 화면 이동 지원
- Gemini 기반 응답 생성
- 반려동물의 최근 산책, 병원기록, 예방접종 이력 조회 지원
- 산책 시작/일시정지/종료 및 기록 저장
- 예방접종/검진 일정 등록 및 달력 조회
- 병원기록 조회 및 유형별 필터링
- 병원 영수증 OCR 업로드 후 날짜, 병원명, 금액, 진료유형 자동 추출
- 반려동물 관련 소비 내역 조회
- 월간/일간 지출 요약 및 카테고리 분석
- 월별 소비 리포트 제공
- 미래 반려 비용 및 자산 대비 부담 분석
- 반려동물 상태와 소비 패턴 기반 맞춤형 금융/제휴 상품 추천
- 보험, 카드, 적금, 구독형 서비스, 장례 서비스 등 상품 유형별 리포트 제공
- 반려동물 등록/수정/삭제
- 알람 On/Off
- 비밀번호 변경, 로그아웃, 회원탈퇴
테이블 상세 설명
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 사용자 고유 식별자(PK) |
| name | varchar(100) | 사용자 이름 |
| varchar(255) | 로그인 및 인증에 사용하는 이메일, 유니크 | |
| password | varchar(255) | 저장된 비밀번호 문자열 |
| email_verified_at | datetime(6) | 이메일 인증 완료 시각 |
| deleted_at | datetime(6) | 탈퇴 처리 시각 |
| created_at | datetime(6) | 회원 생성 시각 |
| updated_at | datetime(6) | 회원 정보 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 계좌 고유 식별자(PK) |
| user_id | bigint | 사용자 FK -> users.id |
| account_number | varchar(50) | 계좌번호, 유니크 |
| bank_name | varchar(100) | 은행명 |
| money_amount | decimal(19,2) | 예치 금액 |
| reward_amount | decimal(19,2) | 적립 금액 |
| total_amount | decimal(19,2) | 총 금액 |
| created_at | datetime(6) | 계좌 생성 시각 |
| updated_at | datetime(6) | 계좌 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 가계부 고유 식별자(PK) |
| user_id | bigint | 사용자 FK -> users.id |
| pet_id | bigint | 반려동물 FK -> pets.id |
| account_id | bigint | 계좌 FK -> accounts.id |
| title | varchar(200) | 지출/수입 제목 |
| amount | decimal(19,2) | 금액 |
| category | 가계부 카테고리 enum('Etc', 'Food', 'Hospital' | |
| memo | varchar(1000) | 메모 |
| spend_date | datetime(6) | 사용/지출 시각 |
| created_at | datetime(6) | 생성 시각 |
| updated_at | datetime(6) | 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 캘린더 이벤트 고유 식별자(PK) |
| pet_id | bigint | 반려동물 FK -> pets.id |
| name | varchar(200) | 일정명 |
| date | date | 일정 날짜 |
| memo | varchar(1000) | 일정 메모 |
| event_type | varchar(100) | 이벤트 유형 |
| created_at | datetime(6) | 생성 시각 |
| updated_at | datetime(6) | 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 위치 고유 식별자(PK) |
| name | varchar(200) | 장소명 |
| latitude | decimal(10,7) | 위도 |
| longitude | decimal(10,7) | 경도 |
| category | varchar(100) | 장소 카테고리 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 진료 문서 고유 식별자(PK) |
| pet_id | bigint | 반려동물 FK -> pets.id |
| pet_name | varchar(100) | 반려동물 이름 |
| date | date | 진료/접종 날짜 |
| type | 문서 유형 enum (VACCINATION, CHECKUP, ETC) |
|
| hospital_name | varchar(255) | 병원명 |
| details | varchar(2000), nullable | 진료 상세 내용 |
| total_amount | int | 총 금액 |
| image_url | varchar(255), nullable 추정 | 증빙 이미지 경로 |
| created_at | datetime(6) | 문서 등록 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 반려동물 고유 식별자(PK) |
| user_id | bigint | 사용자 FK -> users.id |
| name | varchar(100) | 반려동물 이름 |
| species | varchar(100) | 종/품종 |
| image | varchar(2048) | 프로필 이미지 경로 |
| age | double | 나이 |
| size | 크기 enum (소형, 중형, 대형) |
|
| walk_count | int | 누적 산책 수치 |
| walk_time | int | 누적 산책 시간 |
| last_walk_at | datetime(6) | 마지막 산책 시각 |
| eat_meal | 식사 여부 enum (YES, NO) |
|
| created_at | datetime(6) | 생성 시각 |
| updated_at | datetime(6) | 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 산책 기록 고유 식별자(PK) |
| pet_id | bigint | 반려동물 FK -> pets.id |
| source | varchar(50) | 산책 데이터 출처 |
| walked_at | datetime(6) | 산책 기준 시각 |
| step_count | int | 걸음 수 |
| walk_time_seconds | int | 산책 시간(초) |
| distance_km | double | 이동 거리(km) |
| reward_amount | int | 적립 보상 수치 |
| completed | bit(1) | 산책 완료 여부 |
| status | varchar(20) | 산책 상태 |
| started_at | datetime(6) | 산책 시작 시각 |
| ended_at | datetime(6) | 산책 종료 시각 |
| created_at | datetime(6) | 생성 시각 |
| updated_at | datetime(6) | 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 상품 고유 식별자(PK) |
| name | varchar(200) | 상품명 |
| product_type | 상품 유형 enum (INSURANCE, PET_FOREST, SAVINGS, CARD, SUBSCRIPTION) |
|
| description | varchar(1000) | 상품 설명 |
| url | varchar(255) | 상품 링크 |
| benefit_rate | decimal(10,2) | 혜택 비율 |
| benefit_amount | decimal(19,2) | 혜택 금액 |
| benefit_limit_amount | decimal(19,2) | 혜택 한도 금액 |
| benefit_limit_count | int | 혜택 한도 횟수 |
| benefit_period | 한도 기간 enum (MONTH, YEAR) |
|
| target_category | varchar(255) | 타겟 카테고리 |
| source_type | 참조 데이터 소스 enum (ACCOUNT_BOOK, ACCOUNT) |
|
| is_active | bit(1) | 활성 여부 |
| created_at | datetime(6) | 생성 시각 |
| updated_at | datetime(6) | 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 거래 고유 식별자(PK) |
| send_user_id | bigint | 송신 사용자 FK -> users.id |
| receive_user_id | bigint | 수신 사용자 FK -> users.id |
| account_id | bigint | 계좌 FK -> accounts.id |
| amount | decimal(19,2) | 거래 금액 |
| type | 거래 유형 enum (IN, OUT) |
|
| category | varchar(100) | 거래 카테고리 |
| created_at | datetime(6) | 거래 생성 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 인증 레코드 고유 식별자(PK) |
| user_id | bigint | 사용자 FK -> users.id |
| identifier | varchar(255) | 인증 식별자 |
| token | varchar(255) | 인증 토큰 |
| expires_at | datetime(6) | 만료 시각 |
| created_at | datetime(6) | 생성 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 평균 진료비 레코드 고유 식별자(PK) |
| category | varchar(255) | 비용 분류. 예: 진찰, 입원, 백신접종 |
| item | varchar(255) | 세부 항목명. 예: 초진 진찰료, 입원비 |
| species | varchar(255) | 반려동물 종 기준값. DOG, CAT, ALL |
| size | varchar(255) | 반려동물 크기 기준값. SMALL, MEDIUM, LARGE, ALL |
| avg_cost | integer | 해당 조건의 평균 비용 금액 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 급여 스케줄 고유 식별자(PK) |
| pet_id | bigint | 반려동물 FK -> pets.id |
| first_feed_time | time | 첫 급여 시작 시각 |
| meals_per_day | integer | 하루 급여 횟수 |
| custom_amount_g | integer | 사용자가 직접 입력한 1일 총 급여량(g), null이면 종/나이 기준으로 계산 |
| created_at | datetime(6) | 생성 시각 |
| updated_at | datetime(6) | 수정 시각 |
| 속성명 | 타입 | 설명 |
|---|---|---|
| id | bigint | 리프레시 토큰 레코드 고유 식별자(PK) |
| user_id | bigint | 사용자 FK -> users.id |
| token | varchar(512) | JWT 리프레시 토큰 문자열 |
| expires_at | datetime(6) | 토큰 만료 시각 |
| created_at | datetime(6) | 토큰 생성 시각 |
[Frontend]
사용자 입력 흐름, 화면 전환, 클라이언트 상태 관리 담당
- SPRING_API_URL, NEXT_PUBLIC_SPRING_API_URL: Next.js App Router 기반 UI 구현
- AUTH_SECRET, AUTH_URL: NextAuth 기반 인증 세션 처리
- RESEND_API_KEY, RESEND_FROM: 메일 전송
- GEMINI_API_KEY, GEMINI_TTS_VOICE_NAME: 음성 인식 및 TTS 인터페이스 제공
- CAPACITOR_SERVER_URL: Capacitor iOS 연동을 통한 건강 데이터 활용
[Backend]
Spring Boot 기반 REST API 제공, 비즈니스 로직 수행
- DB 접속 정보: MySQL 기반 반려동물/소비/건강 데이터 관리
- JWT 시크릿: JWT 인증/인가 처리
- Google Vision 인증키 경로: Google Vision OCR 연동
- AWS S3 endpoint/bucket 설정: S3 업로드 URL 발급 및 파일 처리
- Gemini/Google AI 관련 설정: Spring AI + Gemini 기반 대화 응답 처리, 재정 리포트 및 추천 로직 수행
[외부 연동 서비스]
- MySQL
- Google Vision OCR
- Gemini
- AWS S3
- Resend
- Capacitor iOS Health 연동
- Auth : 로그인, 회원가입, OTP, 토큰 갱신, 비밀번호 재설정
- Pets : 반려동물 등록/조회/수정/삭제, 산책 기록
- Medical : OCR, 병원기록 등록/조회
- Vaccination : 접종/검진 일정 등록 및 조회
- Finance : 가계부, 대시보드, 월간 요약
- Report : 재정 리포트, 월별 지출 차트
- Products : 상품 목록, 상세, 맞춤 추천
- Alarm : 오늘 일정/급여/산책 알림
- Talk : 음성 질의응답
Clone 후, FE/BE 폴더별 패키지 설치 및 설정 각각 필요
> cd FE
> pnpm install
> pnpm dev- docker port: 3330
- gradle 사용
cd BE
docker compose up -d
./gradlew bootRun- 배포용 브랜치는 dev로, pr 후 Actions 탭에서 정상 작동되는지 꼭! 확인!하세요.
이번 최종 발표 질의응답을 통해 우리 서비스의 강점과 보완해야 할 비즈니스적 한계를 명확히 파악할 수 있었습니다. 실제 서비스 운영과 수익 창출을 위한 현실적인 고민에 대한 인사이트를 얻었습니다.
- 서비스 정체성과 유저 시나리오의 구체화
- 피드백: "가족 금융 서비스의 정의가 모호하다. 현재 구조는 개인 통장인데 가족 금융으로 어떻게 확장되는가?"
- 인사이트: '가족 금융'이라는 방향성에 대해 단순한 '확장성'을 언급하는 것만으로는 설득력이 다소 부족했습니다. 추후에는 "부부 공동 펫 케어 통장"이나 "가족 구성원 간 반려동물 지출/산책 기록 공유 기능" 등 개인 통장에서 가족 단위 서비스로 넘어가는 구체적인 전환 플로우와 UI/UX 시나리오가 뒷받침되어야 함을 깨달았습니다.
- 킬러 기능 및 비즈니스 모델 다각화
- 피드백: "보험 청구 서비스는 왜 없는가? 단순 상품 연계 수수료 외에 수익 모델은 무엇인가?"
- 인사이트: 사용자를 락인시키기 위해서는 단순한 상품 추천과 함께, 사용자가 실질적인 편리함을 느끼는 '간편 보험 청구' 같은 핵심 기능이 필요하다는 지적을 받았습니다. 또한, 금융 상품 가입 유도 수수료 외에 데이터 기반의 프리미엄 리포트 제공, 제휴처(동물병원, 용품점) 타겟 광고 등 수익 모델(BM)을 더욱 다각화해야 한다는 숙제를 얻었습니다.
- 기술 도입의 비용 문제와 데이터 가치 증명
- 피드백: "LLM 토큰 비용은 감당 가능한가?"
- 인사이트: 생성형 Gemini 등 AI 도입 시 필연적으로 발생하는 운영 비용에 대한 날카로운 질문이었습니다. 이에 대해 '프롬프트 최적화를 통한 비용 절감 노력'을 어필한 것은 좋은 방어였습니다. 더 나아가, 사용자가 업로드하는 영수증 OCR 데이터와 대화 기록이 향후 하나은행 자체 LLM 모델 고도화를 위한 귀중한 반려동물 특화 데이터셋으로 활용될 수 있다는 점을 연계한 것은 우리 서비스의 데이터 자산 가치를 성공적으로 증명한 순간이었습니다.
- 타겟 마케팅 및 외부 서비스 연계 전략
- 피드백: "어떻게 마케팅하여 사용자를 끌어모을 것인가?"
- 인사이트 (팀 대응): 선우 님이 답변하신 "반려동물 접종 기록을 활용한 하나은행 트래블로그(여행) 및 펫 프렌들리 카페 연계 마케팅"은 기획의 가치를 크게 높인 훌륭한 전략이었습니다. 다만, 이렇게 매력적이고 설득력 있는 마케팅 포인트가 발표 PPT 자료에 명시적으로 담기지 않아 심사위원들을 선제적으로 설득하지 못한 점은 아쉬움으로 남습니다. 좋은 기획은 코드뿐만 아니라 발표 스토리텔링에도 적극적으로 녹여내야 한다는 것을 배웠습니다.














