JSP

카카오 결제 API를 활용한 프로젝트의 전체 흐름 정리해보기

보배 진 2025. 12. 5. 14:32

 

 

 

 

 

 

 

프로젝트 전체 

(Controller, Action, Page, Kakao 서버, 브라우저, 스마트폰 UI ...)

전부의 흐름을 한 번 정리해보도록 하겠습니다

 

 

사용자 브라우저 ➡ FrontController ➡ Action ➡ Kakao서버 ➡ redirect ➡ ApproveAction ➡ DB ➡ JSP

 

 

 

 


 

 

 

 

사용자가 상품 구매 버튼  클릭 (브라우저 ➡ 내서버)

▪ 브라우저가 내 서버(Tomcat)에 요청

▪ /KakaoPayReady.do 실행

▪ FrontController가 요청을 분석

▪ ActionFactory에서 KakaoPayReadyAction 선택

( = 카카오페이 결제 준비처리)

 

 


 

 

 

KakaoPayReadyAction 실행 (내 서버 내부 처리)

사용자가 "구매하기" 버튼을 눌렀을 때 

나의 서버(Tomcat) 내부에서 돌아가는 비즈니스 로직

 

ReadyAction에서 어떤 서버 내부 작업을 하는지

 

1) JSP에서 넘어온 pid 읽기
→ 클라이언트가 보낸 요청 파라미터 받아오기


2) ProductDAO로 DB 조회
→ 네 DB에서 상품 정보 읽기 (이건 네 서버 내부 작업)


 3) orderId 생성
→ 결제 고유 주문번호 만들어냄


 4) KakaoPayService.ready() 호출
→ 이 메서드 안에서만 카카오 서버와 통신하는 HTTP 요청을 보냄
→ 하지만 호출 자체는 여전히 네 서버에서 실행되는 코드


5) 응답에서 tid 꺼내 세션에 저장
→ tid 저장 역시 네 서버에서 수행


6) 카카오에서 응답받은 결제페이지 URL로 redirect
→ 이제서야 사용자 브라우저가 카카오 서버로 이동함

 

 

 

KakaoPayReadyAction에서 Product 정보 조회

✔ orderId 생성
✔ 카카오페이 Ready API 호출 준비

Ready API에 다음 데이터를 전달

item_name

total_amount

approval_url
cancel_url
fail_url
partner_order_id
partner_user_id

 

✔ KakaoPayService.ready() 호출

 

 

 

 

KakaoPayReadyAction → KakaoPayService(ready 호출) → 다시 KakaoPayReadyAction 으로 돌아오는 흐름

 

 

 


 

 

내 서버 ➡ 카카오 서버 (Ready API 호출)

KakaoPayService.ready() 에서

1. Kakao Ready API 주소로 POST 요청

2. 카카오 서버는 JSON 응답을 반환

 

카카오 응답

tid : 결제 고유번호 - 세션에 저장됨

next_redirect_pc_url : 결제 페이지 url

▶ 이 url을 사용자가 열면 카카오 결제창이 뜬다

 

 


 

 

 

 

내 서버는 사용자를 결제창 URL로 redirect

response.sendRedirect(next_redirect_pc_url);

 

브라우저는 카카오 서버로 이동

이제 화면은 카카오 서버에서 직접 렌더링됨

네 서버는 관여하지 않음

 

 


 

 

사용자가 카카오페이 결제 화면으로 이동 (카카오 UI)

이 화면은 PC여도 모바일처럼 보임 ➡ 카카오가 모바일 UI로 제공하기 때문

여기서 사용자는 

금액 확인, 결제 수단 선택, 결제하기 버튼 클릭

➡ 이것이 결제 승인 버튼

 

 

 

 

 


 

 

카카오 서버가 pg_token 생성 + 승인 URL로 redirect

사용자가 결제를 승인하면

 

 

카카오 서버 :

approval_url?pg_token=xxxx

로 브라우저를 보내버림

 

이 URL이 바로 /KakaoPayApproveAction.do

즉, 카카오가 네 서버를 호출하는 단계

 

 

 


 

 

KakaoPayApproveAction 실행 ( 내 서버 : 승인 처리 )

 

세션에서 tid, pid 꺼냄

request에서 pg_token 파라미터 꺼냄

이 3개가 승인을 위한 필수 요소

 

approve API 호출

tid + pg_token 사용

 

➡ 카카오 페이가 "최종 결제 승인" 해줌

(테스트 CID에서는 항상 성공)

 

 

 

 


 

 

 

승인 성공 시 ➡ DB 저장

상품 정보 불러오기

▪ ProductDTO 조회

▪ OrderDTO 생성

▪ tid, 금액, 상품명, 이미지 저장

➡ OrderDAO.insert() 실행

➡ DB 저장됨

 

 

 


 

 

성공 또는 실패 페이지로 이동

 

승인 성공 : paymentSuccess.jsp

승인 실패 : patmentFail.jsp