🔌 AJAX 통신 — 완전 분석
페이지와 서버 간의 모든 데이터 통신을 분석합니다. 어떤 주소로, 어떤 데이터를 보내고, 어떤 응답을 받는지 완전 정리.
📑 목차
📡 AJAX 개요
paper_card 페이지는 총 25개 이상의 AJAX 엔드포인트와 통신합니다. jQuery의 $.ajax()를 사용하며, 모든 통신은 비동기(Async)로 이루어집니다.
🗺️ 전체 엔드포인트 맵
📇 종이명함 관련 (핵심)
| URL | Method | 보내는 데이터 | 응답 |
|---|---|---|---|
[내부API]/[명함목록] | GET | [회원ID], [페이지], [개수], [정렬] | 명함 목록 HTML |
[내부API]/[연락처처리] | POST | [액션](등록/수정/삭제), [명함정보] | {result: "success"} |
[내부API]/[콘텐츠처리] | POST | [액션], [콘텐츠ID], [화면명] | 처리 결과 |
[내부API]/[모드변경] | POST | [모드], [카드ID] | 상태 변경 결과 |
[내부API]/[즐겨찾기] | POST | [카드ID], [상태값] | 즐겨찾기 토글 |
[내부API]/[순서변경] | POST | [카드ID목록] | 순서 변경 결과 |
[내부API]/[게시글등록] | POST | [게시글정보] | 게시글 등록 결과 |
👥 연락처 & 친구
| URL | Method | 보내는 데이터 | 응답 |
|---|---|---|---|
[내부API]/[연락처조회] | GET | [소유자], [관리자], [범위], [번호개수], [페이지], [종이여부] | 연락처 목록 JSON |
[내부API]/[친구조회] | GET | [회원ID], [페이지] | 친구 목록 HTML |
[내부API]/[친구처리] | POST | [액션], [친구정보] | 친구 추가/삭제 |
[내부API]/[요청목록] | GET | [회원ID] | 요청 목록 |
[내부API]/[추천목록] | GET | [회원ID] | 추천 목록 |
🛒 IAM 몰 & 결제
| URL | Method | 보내는 데이터 | 응답 |
|---|---|---|---|
[내부API]/[상품조회] | GET | [개수], [위치], [화면명] | 상품 목록 HTML |
[내부API]/[결제내역] | GET | [유형] | 결제 내역 |
[내부API]/[포인트결제] | POST | [금액], [방식] | 포인트 결제 |
[내부API]/[링크조회] | GET | [유형] | IAM 링크 |
🤖 AI & 발송
| URL | Method | 보내는 데이터 | 응답 |
|---|---|---|---|
[내부API]/[발송처리] | POST | [정산유형], [결제수단], [금액], [메시지], [카드URL], [발송모드] | 발송 결과 |
[내부API]/[발송내역] | GET | [회원ID], [페이지] | 발송 내역 |
[내부API]/[프롬프트생성] | POST | [발신자정보] | 생성된 프롬프트 |
[내부API]/[채널설정] | POST | [채널설정값] | 채널 설정 저장 |
[내부API]/[서비스신청] | POST | [서비스정보] | 서비스 신청 |
[내부API]/[프로필확장] | POST | [프로필정보] | 프로필 확장 |
🔐 인증 & 기타
| URL | Method | 보내는 데이터 | 응답 |
|---|---|---|---|
[내부API]/[세션처리] | POST | [액션] | 세션 종료 |
[내부API]/[아이디확인] | POST | [아이디] | 중복 확인 |
[내부API]/[콘텐츠사용] | POST | [콘텐츠ID] | 콘텐츠 사용 |
[내부API]/[주소조회] | GET | 회원 주소 | |
[내부API]/[추가콘텐츠] | GET | [위치] | 추가 콘텐츠 |
[내부API]/[알림조회] | GET | 알림 메시지 |
🔍 통신 패턴 분석
패턴 1: 목록 조회 (GET)
function getIamContact(card_owner, card_master, search_range, phone_count, page, paper_yn) {
$.ajax({
url: "[내부API]/[연락처조회]", // ← 내부 API 주소
type: "GET", // ← GET 방식
data: { // ← 쿼리 파라미터
card_owner: card_owner, // '[사용자ID]'
card_master: card_master, // '[관리자ID]'
search_range: search_range, // 검색 범위 (1~4)
phone_count: phone_count, // 전화번호 개수
page: page, // 페이지 번호
paper_yn: paper_yn // 종이명함 여부 (0/1)
},
dataType: "json", // ← JSON 응답 기대
beforeSend: function() {
busy = true; // ← 중복 요청 방지
$("#ajax_loading").show(); // ← 로딩 표시
},
success: function(response) {
// 응답 HTML을 .sample_main에 추가
$(".sample_main").append(response.html);
},
complete: function() {
busy = false;
$("#ajax_loading").hide();
}
});
}
패턴 2: 데이터 변경 (POST)
// contact_submit_paper() - 종이명함 저장
function contact_submit_paper() {
$.ajax({
url: "[내부API]/[연락처처리]",
type: "POST",
data: {
action: "[액션]", // ← 액션 구분자
name: $("#paper_name").val(), // ← 폼 데이터
job: $("#paper_job").val(),
organization: $("#paper_organization").val(),
mobile: $("#paper_mobile").val(),
// ... 더 많은 필드 ...
},
success: function(res) {
if (res.result === "success") {
refresh_page(); // ← 성공 시 갱신
}
}
});
}
🌊 데이터 흐름도
┌──────────────┐
│ 사용자 │
│ (브라우저) │
└──┬───────┬──┘
│ │
클릭/입력 │ │ AJAX 응답 (JSON/HTML)
▼ ▲
┌────────────────────────┐
│ JavaScript 함수 │
│ │
│ getIamContact() │
│ getIamPaper() │
│ contact_submit() │
│ settlement() │
│ ... │
└───────────┬────────────┘
│
$.ajax() │
POST/GET ▼
┌────────────────────────┐
│ PHP 서버 │
│ │
│ [내부API]/*.php │
│ [내부API]/*.php │
│ [내부API]/[명함발송]│
└───────────┬────────────┘
│
SQL 쿼리 │
▼
┌────────────────────────┐
│ MySQL DB │
│ - paper_cards │
│ - contacts │
│ - payments │
│ - ai_prompts │
└────────────────────────┘
⚠️ 중요한 보안 포인트
- 모든 AJAX 요청은
cur_win=paper_card파라미터를 포함해서 서버가 현재 페이지를 식별하게 합니다. busy플래그로 중복 요청을 방지합니다 (true일 땐 새 요청 거부).- 로그인 상태는 PHP 세션 + AJAX 응답에서 확인합니다.
cur_win_name변수는 [보안패치] 마크가 붙어있어 XSS 방지 목적입니다.
🎓 초등학생도 따라하는 AJAX 분석
1
F12 → Network 탭
크롬에서 F12 누르고 Network 탭 클릭
크롬에서 F12 누르고 Network 탭 클릭
2
XHR 필터 적용
Network 탭 위쪽에서 "XHR" 버튼 클릭 → AJAX만 보기
Network 탭 위쪽에서 "XHR" 버튼 클릭 → AJAX만 보기
3
페이지 새로고침
F5 누르면 모든 AJAX 요청이 목록에 쭉 뜹니다!
F5 누르면 모든 AJAX 요청이 목록에 쭉 뜹니다!
4
요청 하나 클릭
오른쪽에 Headers(요청 정보), Preview(응답 미리보기), Response(원본 응답) 탭 확인
오른쪽에 Headers(요청 정보), Preview(응답 미리보기), Response(원본 응답) 탭 확인
5
Payload 확인
어떤 데이터를 서버에 보냈는지 확인 가능. 종이명함 정보가 그대로 보여요!
어떤 데이터를 서버에 보냈는지 확인 가능. 종이명함 정보가 그대로 보여요!