앞에서 정리한 내용을 바탕으로 실제 가상계좌 결제를 코드로 만들어보자. 먼저 카드결제만 존재하던 기존의 서비스를 가상결제도 가능하게 변경해줘야겠다. 기존 결제 요청 로직 수정 결제수단 추가 @Getter @RequiredArgsConstructor public enum PayType { CARD("카드"), VIRTUAL_ACCOUNT("가상계좌"); private final String name; } 카드든 가상계좌든 프론트에서 결국 그에 맞게 requestPayment("결제수단", {"결제 파라미터"}) 를 호출해줘야 한다. 이건 일단 프론트에게 맡기도록 하고 이후 사용자가 해당 호출로 뜬 토스페이먼츠의 결제 시스템을 이용해서 카드결제를 진행하거나 또는 가상계좌번호를 발급하게 될것이다. 위 과정이 ..
추가적인 이슈로 인해 가상계좌 결제방식도 추가하게 되었다. 가상계좌 결제와 카드 결제의 대표적인 차이점은 결제완료시점에 있다. 카드결제의 경우 이용자의 결제 요청 후 과정 완료와 함께 결제도 완료가 된다. 반면 가상계좌의 경우 결제 요청 과정이 완료되어도 이용자가 입금할 때 까지 해당 결제는 완료되지 않는다는 것이다. 따라서 비동기적으로 이뤄지는 결제 절차에 대응하기 위해서 입금 또는 취소되는 결제 상태 변화가 발생 할 때 바로 알 수 있도록 토스페이먼츠에서 등록된 콜백 URL로 알림을 보내준다. 가맹점은 콜백 URL로 입금 완료 알림이 오면 최종적으로 결제 완료를 하게된다. 가상계좌 결제 흐름도 기존의 카드결제와 비교해보면 아래에 가상계좌 입금 -> 입금 완료 통보 -> 결제 결과 안내 로직이 추가된 ..
서버 트래픽 급증으로 인한 DB 커넥션 부족 이슈 OPGG 해커톤 우승 후 기사가 나간날 예상치 못한 서버 트래픽 증가로 인해 DB 커넥션이 부족해지게 되었고, 결과적으로 서버가 느려지는 이슈가 발생했다. 이에 대한 해결법으로 3가지를 적용했는데 이를 정리하고자 한다. 1. EC2, RDS 규모 확장 기존에는 매달 720시간 무료로 사용할 수 있는 t2.micro 크기의 ec2, rds를 사용하고 있었다. 하지만 각 규모마다 가질 수 있는 최대 커넥션 제한이 있었고 이를 파악하지 못해 문제가 발생했다. 따라서, 근본적으로 더 많은 커넥션을 가질 수 있도록 규모를 medium으로 늘려주었다. 2. 커넥션 수립/해제 비용 최적화 스프링부트 2.0 이후 부터는 커넥션 관리를 위해 기본적으로 HikariCP를..
구매자들말고 판매자들이 자신들의 수익금을 정산받기 위한 계좌번호를 등록해야 하는데, 이 계좌번호와 예금주가 동일한지 확인을 해줘야 한다. 실수로 계좌번호를 잘못 입력할 수도 있고, 이름을 잘못 입력할 수도 있으니 수익금이 잘못 입금되거나 거절되면 골치아파지기 때문이다. 그러면 계좌실명조회는 어떻게 할 수 있을까? 이 부분은 토스페이먼츠에서 제공하지 않는다. 금융결제원에서 통합으로 제공하는데 오픈 API를 이용해서 진행할 수 있다. https://developers.kftc.or.kr/dev/doc/open-banking 금융결제원 오픈API 개발자사이트 developers.kftc.or.kr 위 사이트를 들어가서 보면 2.4.1. 계좌실명조회 API 설 명 이용기관이 특정 계좌의 계좌번호와 예금주 실명번..
이제 카드 결제는 완료하였다. 성공한 완료된 카드 결제들에 대해 이제 카드 결제취소를 구현해보자. 결제 취소를 위해서는 결제 승인 시 토스페이먼츠에게서 발급 받은 {paymentKey}와 최소 이유인 {cancelReason}이 필요하다. 이때 paymentKey는 요청 시 pathVariable로 추가하면 되고, cancelReason은 requestParameter로 추가해주면 된다. 물론 이 요청을 보낼 때도 이전에 결제 승인 요청 때 보낸것과 마찬가지로 HTTP 헤더에 시크릿키를 이용한 Basic Authorize를 설정해서 보내야 한다. 결제 취소 구현 Payment Controller @PostMapping("/cancel") @ApiOperation(value = "결제 취소", notes ..
프론트에서 결제 요청 -> 백엔드에서 요청 검증 후 필요한 정보와 함께 반환 -> 프론트에서 토스페이먼츠 호출 -> 토스페이먼츠에서 결제 결과를 성공/실패 콜백 주소로 리다이렉트 하는 과정 중 성공까지 완료하였다. 이제 토스페이먼츠가 실패 시 콜백 주소로 리다이렉트한 요청에 대해 처리를 진행해보자. 실패 시 콜백 응답 처리 Payment Controller @GetMapping("/fail") @ApiOperation(value = "결제 실패 리다이렉트", notes = "결제 실패 시 에러코드 및 에러메시지를 반환합니다.") public SingleResult requestFail( @ApiParam(value = "에러 코드", required = true) @RequestParam(name = "..
저번 포스트를 통해 이제 요청한 값들은 이제 유효함이 검증된 것이고 토스페이먼츠에 전달할 때 필요한 값들도 넣어준 상태이다. 이제 프론트에서 해당 값들을 잘 받았다는 가정하에 이어서 진행해보자. 결제요청 응답 데이터 { "success": true, "code": 1, "message": "성공", "data": { "payType": "카드", "amount": 3000, "orderId": "0023b4e8-2b58-4248-9750-664ce4f7f1db", "orderName": --상품명-- "customerEmail": "test@test.com", "customerName": "김바보", "successUrl": "http://localhost:9090/success", "failUrl": ..
이전 포스트에서 정리했던 내용을 바탕으로 진행해보도록 한다. 필자는 백엔드 파트를 담당하므로 결제 API만 개발하면 되지만 좀더 직관적인 개발 및 테스트를 위해 간단히 화면도 같이 개발하고자 한다. 그럼 소비자들이 결제 시 가장 먼저 만나게 될 결제창을 구현해보겠다. 결제창 연동 이부분은 바로 전 포스트에서 정리한 것과 거의 동일하다. 일반 결제 스크립트 추가 토스페이먼츠에서 결제 시스템을 호출하기 위해 제공하는 라이브러리를 추가한다. // * 테스트용 클라이언트 키로 시작하세요 var clientKey = 'test_ck_클라이언트_키' var tossPayments = TossPayments(clientKey) 테스트를 위해 제공받은 {테스트_클라이언트_키}를 이용해서 TossPayments객체를 생..
결제 시스템 도입 https://onboarding.tosspayments.com/81403/integration?merchantAccountId=129226 토스페이먼츠 전자결제 onboarding.tosspayments.com 결제가 필요한 앱 서비스를 제작하게 되면서 결제 시스템을 도입해야 했다. KG이니시스, 다날 페이먼트, 토스 페이먼츠 등 다양한 결제 서비스를 제공하는 업체들이 존재한다. 수수료나 가입비들은 다 고만고만하니 더 쉽고 편하게 도입할 수 있는 업체를 고르기로 하였고 이에 토스 페이먼츠로 결정됐다. 홈페이지에 들어가서 전자결제 무료신청을 누르면 위와 같이 결제 서비스 신청하기 창이 뜬다. 그러면 사업자등록번호를 입력하라고 나오는데..! 아직 발급이 되지 않은 관계로 밑에 보이는 개발..
MSA (Microservices Architecture) MSA는 마이크로서비스 아키텍쳐로 애플리케이션을 느슨하게 결합된 서비스의 모임으로 구조화하는 서비스 지향 아키텍처(SOA) 스타일의 일종인 소프트웨어 개발 기법이다. 고가용성, 유연한 스케일링, 배포가 빠르고 쉽다는 장점이 있으며, 기능 단위로 Application을 모듈화 하는것이 큰 특징이다. MSA의 반대는 모놀리식 구조로 하나의 애플리케이션으로 모든 기능을 갖고 있는 것을 의미한다. 그림에서 보듯MSA의 각 마이크로서비스들은 자체 비지니스 계층과 데이터베이스를 가지고 있다. 이렇게 함으로서 하나의 마이크로 서비스의 변경이 다른 마이크서비스에 영향을 주지 않게 된다. 또한 마이크로서비스들은 서로간 메소드 호출이 아닌 HTTP, REST와 ..
개인 프로젝트 - 인프런을 통해 rest api 구조 학습 - jwt을 사용하여 토큰기반 로그인 구현해봄 - 카카오 로그인 구현해봄 스우미 - 생애 첫 참가한 해커톤 opgg배 서비스 해커톤 (https://www.opgg.team/4f45d6aa-baf9-456b-9363-a7f6bc7f7b21) - 배포까지 진행한 실제 웹 애플리케이션 서비스 - 3개월가량 진행 - 1등 수상함, 매우 감격, 심지어 포상도 받음 (아이패드 8세대) - 스프링 부트 + AWS EC2 + RDS 를 이용해서 진행 - 좀더 다양한 기술을 사용해보지 못한 아쉬움 - Web socket에 대해서 더 공부해볼 필요 있음 - 채팅 서비스 만드는거 좋을듯함 (rabbit mq) - 레디스 관련 알아보기 다음 프로젝트 사용해보면 좋을..
- Total
- Today
- Yesterday