📇 종이명함 등록·수정·삭제 (CRUD) 완전 분석
종이명함을 등록(Create), 수정(Update), 삭제(Delete)하는 모든 함수와 데이터 흐름을 상세히 분석합니다.
전체 CRUD 개요
| 작업 | 트리거 | 함수 | 모달 | AJAX |
|---|---|---|---|---|
| 📸 앱 카메라 등록 | + 버튼 (앱) | add_paper_card() | - | - (네이티브) |
| ✏️ 직접 입력 등록 | create_paper() 호출 | create_paper() → save_paper() | #paper_list_edit_modal | POST [내부API]/[명함관리] |
| 🔧 수정 | 리스트 항목 클릭 | (리스트 항목 data 로드) → save_paper() | #paper_list_edit_modal | POST [내부API]/[명함관리] |
| 🗑️ 개별 삭제 | 리스트 삭제 아이콘 | delete_paper(id) | - | POST [내부API]/[명함관리] |
| 🗑️ 일괄 삭제 | 체크박스 선택 + 삭제버튼 | paper_del() | - | POST [내부API]/[연락처처리] |
1. 등록 (Create)
방법 A: 앱 카메라 등록 — add_paper_card()
function add_paper_card() {
try {
callAppBridge('goCardCamera'); // Android: AppScript.goCardCamera()
} catch (e) { // iOS: webkit.messageHandlers['goCardCamera']
alert("휴대폰에서 이용해주세요.");
}
}
이 함수는 오직 앱(Android/iOS WebView)에서만 동작합니다. 데스크탑에서는 alert만 표시됩니다. 앱 내에서 실행되면 네이티브 카메라를 열어 명함을 촬영하고, 촬영된 이미지는 서버로 전송되어 OCR 처리됩니다.
#paper_plus 버튼은 기본적으로 display:none이며, 앱 환경에서만 표시됩니다.
방법 B: 직접 입력 등록 — create_paper() → save_paper()
function create_paper() {
// 1. 모든 입력 필드 초기화 (빈 값으로)
$("#paper_name").val(""); // 이름
$("#paper_job").val(""); // 직책
$("#paper_org").val(""); // 기관명
$("#paper_addr").val(""); // 주소
$("#paper_phone1").val(""); // 전화1
$("#paper_phone2").val(""); // 전화2
$("#paper_mobile").val(""); // 휴대폰
$("#paper_fax").val(""); // 팩스
$("#paper_email1").val(""); // 이메일
$("#paper_email2").val(""); // 홈페이지
$("#paper_memo").val(""); // 메모
$("#paper_contact_idx").val("");// 연락처 인덱스
$("#paper_display_top").prop("checked", false); // 내 명함등록 체크 해제
// 2. AI 알림 숨김
var n = document.getElementById('paper_ai_notice');
if (n) n.style.display = 'none';
// 3. 모달 표시
$("#paper_list_edit_modal").modal("show");
}
save_paper() — 실제 저장 함수
function save_paper() {
// 1. 중복 저장 방지 (세마포어)
if (window._saving_paper) return;
window._saving_paper = true;
// 2. 모든 입력값 수집
var data = {
seq: $("#paper_seq").val(), // 수정 시 기존 ID
name: $("#paper_name").val(),
job: $("#paper_job").val(),
org_name: $("#paper_org").val(),
address: $("#paper_addr").val(),
phone1: $("#paper_phone1").val(),
phone2: $("#paper_phone2").val(),
mobile: $("#paper_mobile").val(),
fax: $("#paper_fax").val(),
email: $("#paper_email1").val(),
website: $("#paper_email2").val(), // 홈페이지는 email2 필드 사용
memo: $("#paper_memo").val(),
display_top: $("#paper_display_top").prop("checked") ? 1 : 0,
img_url: $("#paper_img_url").val()
};
// 3. AJAX POST 전송
$.ajax({
type: "POST",
url: "[내부API]/[명함관리]",
data: data,
dataType: "json",
success: function(resp) {
alert("저장되었습니다.");
$("#paper_list_edit_modal").modal("hide");
refresh_page(); // 페이지 새로고침
}
});
}
2. 수정 (Update)
수정은 리스트의 각 항목을 클릭할 때 발생합니다. 각 리스트 항목에는 data-* 속성으로 모든 정보가 저장되어 있고, 클릭 시 이 데이터를 모달의 입력 필드에 채워 넣습니다. 이후 save_paper()가 호출되면 seq 값이 있으므로 서버에서 UPDATE 쿼리가 실행됩니다.
3. 삭제 (Delete)
개별 삭제 — delete_paper(id)
function delete_paper(id) {
if (confirm('삭제하시겠습니까?')) {
$.ajax({
type: "POST",
url: "[내부API]/[명함관리]",
dataType: "json",
data: { seq: id, del: 'Y' },
success: function(data) {
if (checkMobile()) callAppBridge('setClearCache'); // 앱 캐시 삭제
alert('삭제되었습니다.');
$("#paper_list_" + id).remove(); // DOM에서 제거
if ($(".paper_list").length == 0) {
$("#papercard_list").html("종이명함이 없습니다.
");
}
}
});
}
}
일괄 삭제 — paper_del()
function paper_del() {
var formData = new FormData();
formData.append('mode', "del");
// 체크된 모든 명함의 ID 수집
for (i = 0; i < $("input[name=paper_chk]:checked").length; i++) {
formData.append('contact_idx[]', $("input[name=paper_chk]:checked").eq(i).val());
}
$.ajax({
type: "POST",
url: "[내부API]/[연락처처리]",
data: formData,
contentType: false,
processData: false,
success: function(data) {
alert(data);
// DOM에서 삭제된 항목들 제거
var del_count = $("input[name=paper_chk]:checked").length;
for (i = 0; i < del_count; i++) {
$("input[name=paper_chk]:checked").eq(0).parents(".list-item").remove();
}
}
});
}
⚠️ 주의사항: 삭제는 되돌릴 수 없습니다! 삭제 전에 반드시
confirm() 대화상자로 사용자 확인을 받습니다. 또한 앱 환경에서는 callAppBridge('setClearCache')를 호출해 로컬 캐시도 함께 삭제합니다.초등학생을 위한 CRUD 설명
- C만들기 (Create)마치 종이에 새 명함을 쓰는 것처럼, 스마트폰으로 찍거나 직접 이름과 전화번호를 입력해서 새 명함을 만들어요. 이 정보는 인터넷 서버에 저장돼서 언제든지 다시 볼 수 있어요.
- R읽기 (Read)저장된 명함들을 리스트로 쭉 볼 수 있어요. 검색창에 이름을 입력하면 원하는 명함만 골라서 볼 수도 있고, 이름순이나 회사명순으로 정렬할 수도 있어요.
- U수정하기 (Update)명함의 내용을 바꾸고 싶을 때 사용해요. 예를 들어 친구의 전화번호가 바뀌었다면, 그 명함을 클릭해서 새 번호로 고치고 저장하면 돼요. 컴퓨터가 알아서 서버의 정보를 새 정보로 바꿔줘요.
- D삭제하기 (Delete)더 이상 필요 없는 명함을 지우는 거예요. 하나씩 지울 수도 있고, 여러 개를 선택해서 한 번에 지울 수도 있어요. 컴퓨터가 "정말 지울까요?"라고 물어보니까 실수로 지우는 일은 없어요.