문제
결제 기능을 구현한 뒤, 생각해보니 본 프로젝트는 사용자 간 거래가 이뤄지는 서비스기 때문에 구현한 결제 기능을 어떻게 사용자 간 거래로 연결할 수 있을지 고민하게 되었습니다.
접근 방법
- 유저 A가 유저 B의 상품을 구매할 때, A가 B에게 송금합니다. 가장 간단하고 맹목적인 방법이지만 알아보니 이것을 서비스 내에서 기능화 하려면 별도의 라이센스가 필요합니다.
- 가맹점이 등록된 사용자만 물품을 판매합니다. 이것도 좋은 방법이지만, 누구나 편하게 자신의 물품을 올려 중고거래를 하듯이 플리마켓 서비스를 구성하는게 목표인 본 프로젝트 취지에 맞지 않았습니다.
- 사용자가 서비스 내에서 가맹점을 등록하고 해당 가맹점을 통해 결제를 요청합니다. 이 방법은 너무 먼 길을 돌아가는거 같아 보류하던 중 다음 아이디어를 생각해냈습니다.
- 서비스의 가맹점에 결제요청 시 본 서비스 내에서 화폐로 가치할 수 있는 point로 변환합니다. 게임을 할 때, 현금을 지불하면 게임머니로 전환해 주듯이 본 서비스에서도 서비스 내부 화폐의 역할을 할 수 있는 point를 생성하여 문제를 접근해 보았습니다.
결과
위 4번의 방법으로 문제를 해결하여, 가맹점으로 결제 요청시 결제한 금액만큼 사용자의 point를 충전해 주었습니다. 또한 충전된 포인트를 통해 물품을 거래 할 수 있게 설계하였습니다.
1. 서비스 가맹점 결제 요청
2. 결제
3. 전환된 포인트로 상품 구매
4. 상품 구매 후 포인트 차감
추가적인 문제점
사용자가 point를 통해서 상품을 거래하는 로직까지는 무사히 구현하였습니다. 거래를 통해 발생한 수익은 point를 다시 현금으로 반환해야 합니다. 여기서 앞에서 발생한 문제가 다시 꼬리를 물었습니다. 사용자에게 point를 다시 현금으로 반환하기 위해서는 결제 로직을 구현한 본 서비스의 가맹점에서 사용자에게 point 만큼 현실 화폐를 송금해 줘야 하는데, 이 또한 사업자 라이센스가 필요했습니다.
개인 프로젝트로 테스트 결제를 구현하고, 서비스 내부에서 사용자간 거래 로직까지 설계하는 경험을 해서 만족스러운 부분도 있지만 실제 수익이 발생할 수 있는 서비스로 완성하기 위해서는 더 많은 조건과 노력들이 필요하다는 사실이 개인적인 아쉬움으로 남아 있습니다.
다음에 기회가 된다면 실제 사업자 등록을 통해서 실제 수익을 발생할 수 있는 서비스를 목표로 개발을 해야 겠다는 도전심을 끝으로 개발을 마무리하였습니다.
'개발 > withfriend 🫱🏼🫲🏽🥕' 카테고리의 다른 글
[개발 이슈] 회원 탈퇴 (0) | 2023.11.01 |
---|---|
[개발 이슈] 포인트 출금 (0) | 2023.11.01 |
[프로젝트 회고] 결제 구현, portone, PG사 회고 (0) | 2023.11.01 |
[개발 이슈] 코드에서 민감한 정보는 어떻게 다루지? / application.properties .yml (0) | 2023.10.31 |
[개발 이슈] 서비스가 이벤트를 발생시키는 주체가 어떤 사용자인지 어떻게 구분하지? / access token, session, refresh token (0) | 2023.10.30 |