우리 모임의 지출 관리를 쉽고 편하게!
正산은 여행, 동호회 등 다양한 모임에서 발생하는 복잡한 정산 과정을 간편하게 해결해주는 서비스입니다. 기존의 유사 서비스들이 모임 내 지출 금액을 단순히 1/N로 나누는 기능만 제공하는 데 반해, 저희 서비스는 OCR 기술을 통해 모임에서 발생한 지출 영수증의 소비된 상품명과 수량을 자동으로 추출하여 사용자가 실제 소비한 내역을 직접 선택할 수 있는 기능을 지원합니다. 이를 통해 실제 소비 내역을 기반으로 한 세부적인 정산이 가능합니다. 正산은 모임 내 정산을 더욱 편리하고 정확하게 만들어 사용자에게 차별화된 정산 경험을 제공합니다.
Backend | http://ecs-alb-50894514.ap-northeast-2.elb.amazonaws.com/
API Specs | github page release
Android | OneStore
Android |
Android |
Android |
정수현 💻 👀 |
권성찬 💻 👀 |
주수민 💻 👀 |
Backend |
Backend |
Backend |
Backend |
장우석 💻 👀 |
김민주 💻 👀 |
박준석 💻 👀 |
안재민 💻 👀 |
- 서비스 이용에 필요한 카카오 정보를 저장하고 토큰을 발급받는 기능
- 카카오 이메일로 서비스 이용에 필요한 토큰을 발급받는 기능
- 스프링 시큐리티 필터 체인에 JWT를 접목하여 인증 & 인가 구현
- 보안으로 인해 유효 기간이 짧은 액세스 토큰을 재발급받는 기능
- 모임에 초대 받은 사용자가 초대를 수락하여 모임에 참여하는 기능
- 자신이 속해 있는 모임의 전체 또는 특정 하나를 지정해서 조회하는 기능
- 자신이 속해 있지 않은 모임에 대한 조회를 요청할 경우 예외 발생
- 모임을 생성하는 기능
- 모임 생성 요청자가 owner가 되도록 처리
- “진행중인 모임”을 “완료된 모임”으로 상태를 변경하는 기능
- 모임 초대 요청을 받은 사용자들의 초대 수락 여부를 확인하는 기능
- 특정 모임에서 멤버들의 카카오 서비스 아이디를 조회하는 기능
- 지출 내역의 상태에 따라 구분하여 조회하는 기능
- 지출 내역의 상태는 쿼리 파라미터를 이용
- 대기 상태의 지출 목록 조회의 경우, 지출에 대한 사용자의 총 소비 금액과 지출 단위 사용자 소비 금액 조회를 포함
- “정산 중(
ongoing
)” 상태의 지출 내역은 API 요청자가 확인했는지 여부를isChecked
쿼리 파라미터를 통해 구분하여 조회isChecked
의 경우 실제로 DB에 저장된 데이터가 아닌, 유저가 저장하도록 한 item 데이터의 개수와 실제 지출 내역의 항목의 개수가 동일하면 유저가 이 지출을 모두 확인했다는 의미(JPQL로 구현)
- 지출 목록 중 결제한 사람(등록한 사람)이 자신인 데이터를 조회하는 기능
- 지출에는 카테고리를 지정할 수 있음
- 그러나 아직 카테고리를 커스텀하는 기능은 없고, 존재하는 데이터 중 선택하도록 함
- DB에 저장되어있는 카테고리에 대한 정보를 조회하는 기능
- 영수증 이미지에서 지출 상세 정보를 추출하는 기능
- 이미지 데이터 추출 과정
- Naver Clova Document OCR(영수증 분석 특화 API) 사용의 경우 비용이 높은 편으로
Naver Clova General OCR(단순 이미지 텍스트 추출 API)로 이미지에서 텍스트 추출 후
미리 학습된 ChatGPT fine-tuning API를 통해 해당 텍스트를 영수증 형식으로 파싱
- 처리 소요 시간
- Naver Clova OCR: 1.5~2초
- ChatGPT fine-tuning: 2~3초
- 처리 소요 시간
- 영수증 분석 결과, 또는 수기로 작성된 지출 내역을 저장하는 기능
- 영수증 이미지 저장
- 이미지는 AWS SDK Client를 통해 AWS S3에 저장
- 데이터베이스에는 S3 Bucket 내의 상대 경로만 저장
- 이후 해당 이미지 조회 시 S3 Presigner를 통해 PersignedURL로 변환 후 클라이언트로 전달하여 보안성 유지 (S3 Bucket 명 은닉 + 이미지 접근 시간 제한)
- 모임 지출의 상세 내역을 조회하는 기능
- 모임 지출의 품목 선택 현황을 조회하는 기능
- 모임 지출 내에서 개인이 실제로 소비한 항목을 선택하여 개인 소비 내역을 저장 및 수정하는 기능
- 개인 소비 내역 저장 내역이 존재한다면 새로운 수량으로 수정
모임 지출 결제자가 송금 요청을 보낼 모임 멤버와 금액을 조회하는 기능
- 모임 지출 결제자의 카카오 페이 송금 링크를 조회하는 기능
- 링크 생성을 위해 카카오 페이 디벨로퍼 사업자 등록이 필요하므로 사용하지 않음
./src
├─main
│ ├─java
│ │ └─kappzzang
│ │ └─jeongsan
│ │ ├─controller
│ │ │ └─docs
│ │ ├─domain
│ │ ├─dto
│ │ │ ├─request
│ │ │ └─response
│ │ ├─global
│ │ │ ├─client
│ │ │ │ ├─aws
│ │ │ │ ├─clova
│ │ │ │ ├─dto
│ │ │ │ │ ├─request
│ │ │ │ │ └─response
│ │ │ │ └─openai
│ │ │ ├─common
│ │ │ │ ├─annotation
│ │ │ │ ├─dto
│ │ │ │ ├─enumeration
│ │ │ │ ├─security
│ │ │ │ ├─swagger
│ │ │ │ └─util
│ │ │ ├─config
│ │ │ ├─exception
│ │ │ └─interceptor
│ │ ├─repository
│ │ └─service
│ └─resources
│ └─prompts
└─test
├─java
│ └─kappzzang
│ └─jeongsan
│ ├─controller
│ ├─domain
│ ├─global
│ │ └─client
│ ├─repository
│ └─service
└─resources