
프로젝트 전체
(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
'JSP' 카테고리의 다른 글
| 결제 API : ngrok 실행시키기 (0) | 2025.12.04 |
|---|---|
| 카카오톡 결제 API를 사용하여 작은 결제 프로젝트 만들어보기 - 2 (0) | 2025.12.03 |
| 카카오톡 결제 API를 사용하여 작은 결제 프로젝트 만들어보기 - 1 (0) | 2025.12.03 |
| a태그와 JSP 내장객체 pageContext (0) | 2025.12.02 |
| Servlet vs Action의 역할 (0) | 2025.12.02 |