[TIL] 22.12.08 - Iamport 결제, EventLoop / TaskQueue

nana·2022년 12월 8일
0

TIL

목록 보기
44/50
post-thumbnail

Iamport - 결제


1. 결제 승인 과정

PG사 (Payment Gateway) 결제 대행사 <-> 카드사

PG사마다 PDF를 만들어 가이드를 제공했으나, 이는 너무 번거로운 과정이다.

이때, 결제솔루션사가 등장하여 PG사로 부터 pdf를 받아 결제 API 코드를 만들었고, 결제 연동이 편리해졌다. 결제솔루션사에는 아임포트 / 부트페이 등이 있다.

브라우저에서 상품 결제 -> 아임포트 -> PG사 -> 카드사 이런식으로 결제 과정이 진행된다.

브라우저에서 아임포트를 통해 결제 id (아임포트 id) / 결제금액 / 결제 성공여부 등을 받아옴
-> 브라우저가 백엔드로 전달 -> DB payment테이블에 저장 (id, amount, 결제유저)

결제솔루션에서 결제과정 PPT 제공 -> PG사 -> 모든 카드사에서 결제 확인 -> 심사완료 된 카드사만 실제 결제 서비스 실행

2. 결제 승인 주의사항

경매나 도박 사이트는 보통 결제 심사에서 실패를 받는다.
또한, 결제금액을 직접 입력하는 경우는 승인되지 않는다.

3. 결제 승인 일정

결제 기능 구현 후 + 물리적으로 3주일 정도 걸린다. (PG사 1주일, 카드사 심사 최대 2주일)

이때, 개발자의 일정을 잘 고려해야 한다. (서비스 오픈과 같이 서비스 전체에 영향을 끼치므로 중요하다.)

개발자의 일정

  • 각 기능별 구현 시간 체크
  • 주기적으로 기능 구현 시간 체크 업데이트
  • 기능을 쪼개서 대화하기

    예) 게시판 만드는데 얼마나 걸려??
  • 게시판 목록
  • 게시판 등록
  • 게시판 수정
  • 게시판 삭제
  • 게시판 페이지
  • 게시판 검색 - 제목? 내용? 검색결과 어떻게??
  • 게시판 상세보기
  • 게시판 댓글?
    등등... 회의 시 상세하게 얘기하기

웹훅노티피케이션

무통장입금과 같은 경우, 브라우저에서 결제 데이터를 받지 않고 백엔드로 직접 받는다.


Iamport 사용


  • imp_uid / paid_amount
    -> 백엔드에 전달해주는 데이터

  • 모바일은 결제하기 클릭시 주소가 결제 사이트로 이동된다.
    -> rsp 코드가 작동하지 않기 때문에, 빈 화면에서 이동할 페이지를 적어주는 곳이 m_redirect_url

  • 프론트엔드에서 new Data()로 시간을 만들지 못함
    -> 백엔드에서 만든 시간 받아서 사용하기

  • 그러면 글로벌 서비스일 경우 세계 시간은 어떻게??
    -> UTC (세계표준시간) 을 사용해서 각 나라마다 UTC 시간을 바탕으로 각 나라별 시간으로 변환한다.

momentjs
날짜 관련 라이브러리


자동결제 시스템

리눅스 크론탭을 사용하여 특정 시간에 자동으로 함수가 실행되게 할 수 있다.

해당 함수 파일을 만든 후 크론탭에 등록해준다.


EventLoop / TaskQueue


EventLoop

setTimeout과 같은 함수는 callStack에 쌓이지 않고, 지정한 시간동안 기다리다가 기다림이 끝나면 TaskQueue에 들어간다.

callStack에 쌓인 함수들이 모두 실행되서 비어지면 TaskQueue에 저장되어있던 setTimeout 함수가 실행된다.

이러한 과정을 이벤트 루프라고 한다.


(Single EventLoop) Thread

스레드는 Evenetloop를 작업해준다.

자바스크립트에서는 싱글 이벤트루프 스레드라고도 한다.

API 요청과 같은 기다리는 요청이 많을 경우, 싱글 스레드를 사용하는 자바스크립트가 좋다.


📌 멀티 스레드의 경우
멀티 스레드는 스레드가 여려개이므로 동시에 처리하는 것처럼 보이게 할 수 있다.
그러나, 저장하고 불러오고 이동(문맥 전환)하는 시간이 오래 걸리기 때문에 실제 성능이 좋은것은 아니다. (실제 처리는 CPU에서 하기 때문)

📌 프로세스와 스레드

  • 프로세스 : 프로그램
  • 스레드 : 프로그램 안에서 실행되는 일꾼
profile
프론트엔드 개발자 도전기

0개의 댓글