# DB_SCHEMA 작성일: 2026-07-24 03:20:19 ## 1. DB 기본 정보 - DB 파일: `/opt/kvcs/data/ai_cs.db` - DB 크기: `62.43 MB` - DB 수정일: `2026-07-24 03:00:49` - 테이블 수: `11` - 총 row 수: `75823` ## 2. DB 사용 원칙 - 이 문서는 AICS SQLite DB 구조를 새 대화방, Claude, Codex, 근무자에게 설명하기 위한 기준 문서다. - 현재 AICS DB는 `/opt/kvcs/data/ai_cs.db` 파일을 사용한다. - 1단계 DB 관리는 조회 전용이다. - 원본 데이터 테이블은 직접 수정하지 않는다. - 처리 상태, 메모, AI 정리본 등은 별도 테이블로 분리해서 확장한다. - 본서버 데이터를 바꾸는 쓰기 API와 AICS DB 원본 수정은 별도 승인/백업/로그 정책이 필요하다. ## 3. 테이블 요약 | 테이블 | 설명 | rows | 사용 화면 | 정책 | |---|---:|---:|---|---| | `ai_board_analysis` | 게시판 분석 결과 | 24247 | 게시판 업무, 업무 카테고리 | 분석 결과는 수정 가능 후보지만, 원문은 수정하지 않습니다. | | `ai_board_items` | 게시판 원본 데이터 | 51456 | 향후 /aics/board, 업무 카테고리, 게시판 정리 데이터 | 원본성 데이터라 직접 수정 금지. 필요한 경우 별도 처리상태 테이블을 연결합니다. | | `ai_cs_items` | 소매 CS 분석 이력 | 28 | 향후 소매점360, 카톡 정리 데이터 | 기존 데이터 보존. 새 AICS에서는 별도 구조로 재설계 예정입니다. | | `ai_wh_kakao_tasks` | 중도매 CS톡 업무카드 | 71 | 향후 중도매360, 카톡 정리 데이터 | 기존 /cs 화면과 새 /aics 화면을 섞지 않고 참고용으로 봅니다. | | `import_products` | import_products | 1 | | | | `import_suppliers` | import_suppliers | 2 | | | | `kakao_attachments` | kakao_attachments | 4 | | | | `kakao_photo_item_links` | kakao_photo_item_links | 2 | | | | `kakao_photo_matches` | kakao_photo_matches | 2 | | | | `kakao_raw_sessions` | kakao_raw_sessions | 1 | | | | `sqlite_sequence` | SQLite 자동증가 관리 테이블 | 9 | 관리 참고용 | 직접 수정 금지. | ## 4. 테이블 상세 ### 4.1. `ai_board_analysis` - 한글명: 게시판 분석 결과 - 용도: 게시판 글에 대한 AI 분석/요약/분류 결과를 저장하는 테이블입니다. - 출처: AICS 수동 분석 또는 기존 분석 기능 - 사용 화면: 게시판 업무, 업무 카테고리 - 정책: 분석 결과는 수정 가능 후보지만, 원문은 수정하지 않습니다. - rows: `24247` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `board_item_id` | `INTEGER` | 0 | 1 | `None` | | `priority` | `TEXT` | 0 | 1 | `'normal'` | | `category` | `TEXT` | 0 | 1 | `'etc'` | | `summary` | `TEXT` | 0 | 1 | `''` | | `customer_intent` | `TEXT` | 0 | 1 | `''` | | `check_items` | `TEXT` | 0 | 1 | `''` | | `suggested_reply` | `TEXT` | 0 | 1 | `''` | | `status` | `TEXT` | 0 | 1 | `'new'` | | `memo` | `TEXT` | 0 | 1 | `''` | | `analyzed_at` | `TEXT` | 0 | 1 | `''` | | `created_at` | `TEXT` | 0 | 1 | `''` | | `updated_at` | `TEXT` | 0 | 1 | `''` | #### 샘플 데이터 ```json [ { "id": "48297", "board_item_id": "97033", "priority": "normal", "category": "etc", "summary": "", "customer_intent": "", "check_items": "", "suggested_reply": "", "status": "new", "memo": "", "analyzed_at": "", "created_at": "2026-06-09 15:40:45", "updated_at": "2026-06-09 15:40:45" }, { "id": "48296", "board_item_id": "96855", "priority": "high", "category": "address_change", "summary": "문의합니다.\n안녕하세요,\n주문번호 2026052816330042 건 주소 변경 부탁드립니다!\n\n김근선\n01071061593\n서울시 광진구 광나루로56길 34, 구의현대2단지 204", "customer_intent": "배송 전 주소 변경 가능 여부 확인이 필요한 문의입니다.", "check_items": "[\"Check order number\", \"Check shop/customer name\", \"Check product name, color, size\", \"Check current order status\", \"Check stock/delivery status\", \"Check whether shipping request is already processed\"]", "suggested_reply": "고객님, 주소변경 요청 확인했습니다. 현재 배송요청 처리 여부를 확인한 뒤 변경 가능 여부를 안내드리겠습니다.", "status": "new", "memo": "", "analyzed_at": "2026-06-08 15:50:11", "created_at": "2026-06-08 15:45:11", "updated_at": "2026-06-08 15:50:11" }, { "id": "48295", "board_item_id": "96854", "priority": "urgent", "category": "refund_cancel", "summary": "문의합니다.\n해당 보스톤이어매쉬캡 배송취소 요청드립니다.", "customer_intent": "환불 또는 취소 가능 여부 확인이 필요한 문의입니다.", "check_items": "[\"Check order number\", \"Check shop/customer name\", \"Check product name, color, size\", \"Check current order status\", \"Check stock/delivery status\"]", "suggested_reply": "고객님, 환불/취소 요청 확인했습니다. 주문상태와 처리 가능 여부를 확인한 뒤 안내드리겠습니다.", "status": "new", "memo": "", "analyzed_at": "2026-06-08 15:50:11", "created_at": "2026-06-08 15:45:11", "updated_at": "2026-06-08 15:50:11" } ] ``` ### 4.2. `ai_board_items` - 한글명: 게시판 원본 데이터 - 용도: 키빌 본서버 QA 게시판 글/댓글/연결 주문 후보를 AICS에 저장한 테이블입니다. - 출처: 키빌 본서버 qa_board_export_v2.php - 사용 화면: 향후 /aics/board, 업무 카테고리, 게시판 정리 데이터 - 정책: 원본성 데이터라 직접 수정 금지. 필요한 경우 별도 처리상태 테이블을 연결합니다. - rows: `51456` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `source` | `TEXT` | 0 | 1 | `'kidsvillage'` | | `board` | `TEXT` | 0 | 1 | `'qa'` | | `source_table` | `TEXT` | 0 | 1 | `''` | | `post_id` | `INTEGER` | 0 | 1 | `None` | | `parent_id` | `INTEGER` | 0 | 1 | `0` | | `item_type` | `TEXT` | 0 | 1 | `'question'` | | `kv_category` | `TEXT` | 0 | 1 | `''` | | `subject` | `TEXT` | 0 | 1 | `''` | | `content_html` | `TEXT` | 0 | 1 | `''` | | `content_text` | `TEXT` | 0 | 1 | `''` | | `writer_id` | `TEXT` | 0 | 1 | `''` | | `writer_name` | `TEXT` | 0 | 1 | `''` | | `writer_name_masked` | `TEXT` | 0 | 1 | `''` | | `is_secret` | `INTEGER` | 0 | 1 | `0` | | `source_created_at` | `TEXT` | 0 | 1 | `''` | | `source_updated_at` | `TEXT` | 0 | 1 | `''` | | `source_url` | `TEXT` | 0 | 1 | `''` | | `content_hash` | `TEXT` | 0 | 1 | `''` | | `created_at` | `TEXT` | 0 | 1 | `''` | | `updated_at` | `TEXT` | 0 | 1 | `''` | | `display_no` | `INTEGER` | 0 | 1 | `0` | | `display_no_category` | `INTEGER` | 0 | 1 | `0` | | `source_deleted` | `INTEGER` | 0 | 0 | `0` | | `source_deleted_at` | `TEXT` | 0 | 0 | `None` | | `source_status` | `TEXT` | 0 | 0 | `'active'` | | `linked_orders_json` | `TEXT` | 0 | 1 | `''` | | `linked_order_numbers` | `TEXT` | 0 | 1 | `''` | | `attachment_urls` | `TEXT` | 0 | 1 | `''` | | `attachment_source_post_id` | `TEXT` | 0 | 1 | `''` | | `attachment_source_reason` | `TEXT` | 0 | 1 | `''` | | `related_attachment_urls` | `TEXT` | 0 | 1 | `''` | | `related_attachment_source_post_id` | `TEXT` | 0 | 1 | `''` | | `related_attachment_source_reason` | `TEXT` | 0 | 1 | `''` | | `related_attachment_source_display_no` | `TEXT` | 0 | 1 | `''` | | `related_attachment_source_item_id` | `TEXT` | 0 | 1 | `''` | | `related_attachment_source_preview` | `TEXT` | 0 | 1 | `''` | | `ai_status` | `TEXT` | 0 | 1 | `'new'` | | `priority` | `TEXT` | 0 | 1 | `'normal'` | | `data_rule_json` | `TEXT` | 0 | 1 | `''` | | `data_rule_analyzed_at` | `TEXT` | 0 | 1 | `''` | | `data_rule_hash` | `TEXT` | 0 | 1 | `''` | | `data_rule_status` | `TEXT` | 0 | 1 | `''` | | `data_rule_error` | `TEXT` | 0 | 1 | `''` | #### 샘플 데이터 ```json [ { "id": "99697", "source": "kidsvillage", "board": "qa", "source_table": "g5_write_qa", "post_id": "53009", "parent_id": "53009", "item_type": "question", "kv_category": "불량&오배송", "subject": "문의합니다.", "content_html": "출고요청같이했는데 라라나시 누락되서안왓어요 ! 재발송 빠르게부탁드릴게요 ㅠㅠ주문건출고해야해서요", "content_text": "출고요청같이했는데 라라나시 누락되서안왓어요 ! 재발송 빠르게부탁드릴게요 ㅠㅠ주문건출고해야해서요", "writer_id": "jdh21b23", "writer_name": "든베베", "writer_name_masked": "든베베", "is_secret": "1", "source_created_at": "2026-07-24 01:36:20", "source_updated_at": "2026-07-24 01:36:20", "source_url": "https://kidsvillage.co.kr/bbs/board.php?bo_table=qa&wr_id=53009", "content_hash": "85ad676ac7f4d6b8858e2c494b53c1762ff13e3e3bf072a77e4961dc177a4fd2", "created_at": "2026-07-24 02:00:10", "updated_at": "2026-07-24 03:00:09", "display_no": "25611", "display_no_category": "1337", "source_deleted": "0", "source_deleted_at": "", "source_status": "active", "linked_orders_json": "[{\"order_no\": \"2026072008254524\", \"items\": [{\"ct_id\": 756346, \"it_id\": \"2C1781285760\", \"brand\": \"벨로\", \"product_name\": \"라라나시\", \"option\": \"카키\\u001eS\", \"color\": \"카키\", \"size\": \"S\", \"qty\": 1, \"ct_status\": \"배송\", \"u_wh_step\": \"5\", \"request_size\": \"\", \"request_count\": \"\"}], \"item_count\": 1}]", "linked_order_numbers": "2026072008254524", "attachment_urls": "[]", "attachment_source_post_id": "", "attachment_source_reason": "", "related_attachment_urls": "", "related_attachment_source_post_id": "", "related_attachment_source_reason": "", "related_attachment_source_display_no": "", "related_attachment_source_item_id": "", "related_attachment_source_preview": "", "ai_status": "new", "priority": "normal", "data_rule_json": "{\"success\": true, \"gpt_used\": false, \"engine\": \"rule_based_v0.1\", \"input\": {\"writer_name\": \"든베베\", \"category\": \"불량&오배송\", \"subject\": \"문의합니다.\", \"text\": \"출고요청같이했는데 라라나시 누락되서안왓어요 ! 재발송 빠르게부탁드릴게요 ㅠㅠ주문건출고해야해서요\"}, \"detected\": {\"intent\": \"일반문의\", \"product_request\": {\"brand\": \"\", \"product_name\": \"\", \"color\": \"\", \"size\": \"\", \"raw\": \"\"}}, \"kv_lookup_used\": false, \"kv_lookup_limit\": 80, \"member\": {\"mb_id\": \"jdh21b23\", \"mb_name_masked\": \"정*현\", \"mb_nick\": \"든베베\", \"mb_company\": \"든베베\", \"mb_hp_masked\": \"010-****-76...", "data_rule_analyzed_at": "2026-07-24 02:00:10", "data_rule_hash": "85ad676ac7f4d6b8858e2c494b53c1762ff13e3e3bf072a77e4961dc177a4fd2", "data_rule_status": "done", "data_rule_error": "" }, { "id": "99696", "source": "kidsvillage", "board": "qa", "source_table": "g5_write_qa", "post_id": "53008", "parent_id": "53008", "item_type": "question", "kv_category": "일반문의", "subject": "문의합니다.", "content_html": "가을시즌 진행하려 다운받으려하니 다운로드한도 초과가 또 뜨네요..\r\n처리가 얼마나걸릴까요", "content_text": "가을시즌 진행하려 다운받으려하니 다운로드한도 초과가 또 뜨네요..\n처리가 얼마나걸릴까요", "writer_id": "wjdgml93", "writer_name": "클래식", "writer_name_masked": "클래식", "is_secret": "1", "source_created_at": "2026-07-24 00:22:16", "source_updated_at": "2026-07-24 00:22:16", "source_url": "https://kidsvillage.co.kr/bbs/board.php?bo_table=qa&wr_id=53008", "content_hash": "528a1b1873277d567daab2920272fc51fcb507c88b6341995041dc7fbe52656e", "created_at": "2026-07-24 00:30:09", "updated_at": "2026-07-24 03:00:09", "display_no": "25610", "display_no_category": "2161", "source_deleted": "0", "source_deleted_at": "", "source_status": "active", "linked_orders_json": "[]", "linked_order_numbers": "", "attachment_urls": "[]", "attachment_source_post_id": "", "attachment_source_reason": "", "related_attachment_urls": "", "related_attachment_source_post_id": "", "related_attachment_source_reason": "", "related_attachment_source_display_no": "", "related_attachment_source_item_id": "", "related_attachment_source_preview": "", "ai_status": "new", "priority": "normal", "data_rule_json": "{\"success\": true, \"gpt_used\": false, \"engine\": \"rule_based_v0.1\", \"input\": {\"writer_name\": \"클래식\", \"category\": \"일반문의\", \"subject\": \"문의합니다.\", \"text\": \"가을시즌 진행하려 다운받으려하니 다운로드한도 초과가 또 뜨네요..\\n처리가 얼마나걸릴까요\"}, \"detected\": {\"intent\": \"일반문의\", \"product_request\": {\"brand\": \"\", \"product_name\": \"\", \"color\": \"\", \"size\": \"\", \"raw\": \"\"}}, \"kv_lookup_used\": false, \"kv_lookup_limit\": 80, \"member\": {\"mb_id\": \"wjdgml93\", \"mb_name_masked\": \"장*희\", \"mb_nick\": \"클래식\", \"mb_company\": \"클래식\", \"mb_hp_masked\": \"010-****-9384\", ...", "data_rule_analyzed_at": "2026-07-24 00:30:11", "data_rule_hash": "528a1b1873277d567daab2920272fc51fcb507c88b6341995041dc7fbe52656e", "data_rule_status": "done", "data_rule_error": "" }, { "id": "99695", "source": "kidsvillage", "board": "qa", "source_table": "g5_write_qa", "post_id": "53007", "parent_id": "53007", "item_type": "question", "kv_category": "일반문의", "subject": "문의합니다.", "content_html": "올올라라, 아이아이 사이즈표 및 모델스펙 알 수 있을까요?", "content_text": "올올라라, 아이아이 사이즈표 및 모델스펙 알 수 있을까요?", "writer_id": "kkom", "writer_name": "꼼짝마켓", "writer_name_masked": "꼼짝마켓", "is_secret": "1", "source_created_at": "2026-07-23 23:54:10", "source_updated_at": "2026-07-23 23:54:10", "source_url": "https://kidsvillage.co.kr/bbs/board.php?bo_table=qa&wr_id=53007", "content_hash": "c641733fc9a0bebd30ed1dedb45643e330cb32deeba5dd6a475a0f23c5fb908a", "created_at": "2026-07-24 00:00:10", "updated_at": "2026-07-24 03:00:09", "display_no": "25609", "display_no_category": "2160", "source_deleted": "0", "source_deleted_at": "", "source_status": "active", "linked_orders_json": "[]", "linked_order_numbers": "", "attachment_urls": "[]", "attachment_source_post_id": "", "attachment_source_reason": "", "related_attachment_urls": "", "related_attachment_source_post_id": "", "related_attachment_source_reason": "", "related_attachment_source_display_no": "", "related_attachment_source_item_id": "", "related_attachment_source_preview": "", "ai_status": "new", "priority": "normal", "data_rule_json": "{\"success\": true, \"gpt_used\": false, \"engine\": \"rule_based_v0.1\", \"input\": {\"writer_name\": \"꼼짝마켓\", \"category\": \"일반문의\", \"subject\": \"문의합니다.\", \"text\": \"올올라라, 아이아이 사이즈표 및 모델스펙 알 수 있을까요?\"}, \"detected\": {\"intent\": \"일반문의\", \"product_request\": {\"brand\": \"\", \"product_name\": \"\", \"color\": \"\", \"size\": \"\", \"raw\": \"\"}}, \"kv_lookup_used\": false, \"kv_lookup_limit\": 80, \"member\": {\"mb_id\": \"kkom\", \"mb_name_masked\": \"이*진\", \"mb_nick\": \"꼼짝마켓\", \"mb_company\": \"꼼짝마켓\", \"mb_hp_masked\": \"010-****-2593\", \"mb_tel_masked\": \"...", "data_rule_analyzed_at": "2026-07-24 00:00:11", "data_rule_hash": "c641733fc9a0bebd30ed1dedb45643e330cb32deeba5dd6a475a0f23c5fb908a", "data_rule_status": "done", "data_rule_error": "" } ] ``` ### 4.3. `ai_cs_items` - 한글명: 소매 CS 분석 이력 - 용도: 소매점 카톡/CS 분석 결과를 저장하는 테이블입니다. - 출처: 소매 CS톡 분석 화면 - 사용 화면: 향후 소매점360, 카톡 정리 데이터 - 정책: 기존 데이터 보존. 새 AICS에서는 별도 구조로 재설계 예정입니다. - rows: `28` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `source_type` | `TEXT` | 0 | 1 | `'kakao'` | | `raw_text` | `TEXT` | 0 | 1 | `''` | | `priority` | `TEXT` | 0 | 1 | `''` | | `category` | `TEXT` | 0 | 1 | `''` | | `summary` | `TEXT` | 0 | 1 | `''` | | `customer_intent` | `TEXT` | 0 | 1 | `''` | | `check_items` | `TEXT` | 0 | 1 | `''` | | `suggested_reply` | `TEXT` | 0 | 1 | `''` | | `need_human_confirm` | `INTEGER` | 0 | 1 | `1` | | `status` | `TEXT` | 0 | 1 | `'new'` | | `created_at` | `TEXT` | 0 | 1 | `''` | | `updated_at` | `TEXT` | 0 | 1 | `''` | | `memo` | `TEXT` | 0 | 1 | `''` | | `order_no` | `TEXT` | 0 | 1 | `''` | #### 샘플 데이터 ```json [ { "id": "28", "source_type": "kakao", "raw_text": "주문번호 : 2026060211365778 (기본주소지)\n주문번호 : 2026060111335651 (위탁주소지)\n\n기본주소지와 위탁주소지에 들어온 상품들을 합배로 받고싶은데 합배가 안되서요\n기본주소지 전체 상품 + 현재 위탁주소지 들어온 상품들 합배 요청부탁드립니다.", "priority": "normal", "category": "etc", "summary": "주문번호 : 2026060211365778 (기본주소지)\n주문번호 : 2026060111335651 (위탁주소지)\n\n기본주소지와 위탁주소지에 들어온 상품들을 합배로 받고싶은데 합배", "customer_intent": "관리자 확인이 필요한 일반 문의입니다.", "check_items": "[\"Check order number\", \"Check shop/customer name\", \"Check product name, color, size\", \"Check current order status\", \"Check stock/delivery status\"]", "suggested_reply": "고객님, 문의주신 내용 확인했습니다. 관련 주문정보와 처리상태를 확인한 뒤 안내드리겠습니다.", "need_human_confirm": "1", "status": "new", "created_at": "2026-06-09 10:38:22", "updated_at": "2026-06-09 10:38:22", "memo": "", "order_no": "2026060211365778" }, { "id": "27", "source_type": "kakao", "raw_text": "2026050809423129\n저번주에 언제쯤 입고 되는지 문의 드렸고\n업체측 답 오면 댓글 주신다거 하셨는데 아직 답 오지 않은걸까요?", "priority": "high", "category": "stock_inquiry", "summary": "2026050809423129\n저번주에 언제쯤 입고 되는지 문의 드렸고\n업체측 답 오면 댓글 주신다거 하셨는데 아직 답 오지 않은걸까요?", "customer_intent": "입고 상태 또는 입고예정일 확인이 필요한 문의입니다.", "check_items": "[\"Check order number\", \"Check shop/customer name\", \"Check product name, color, size\", \"Check current order status\", \"Check stock/delivery status\"]", "suggested_reply": "고객님, 입고문의 확인했습니다. 현재 입고상태와 예정일 확인 후 안내드리겠습니다.", "need_human_confirm": "1", "status": "new", "created_at": "2026-06-09 09:35:33", "updated_at": "2026-06-09 09:35:33", "memo": "", "order_no": "2026050809423129" }, { "id": "26", "source_type": "kakao", "raw_text": "저번주에 언제쯤 입고 되는지 문의 드렸고\n업체측 답 오면 댓글 주신다거 하셨는데 아직 답 오지 않은걸까요?", "priority": "high", "category": "stock_inquiry", "summary": "저번주에 언제쯤 입고 되는지 문의 드렸고\n업체측 답 오면 댓글 주신다거 하셨는데 아직 답 오지 않은걸까요?", "customer_intent": "입고 상태 또는 입고예정일 확인이 필요한 문의입니다.", "check_items": "[\"Check order number\", \"Check shop/customer name\", \"Check product name, color, size\", \"Check current order status\", \"Check stock/delivery status\"]", "suggested_reply": "고객님, 입고문의 확인했습니다. 현재 입고상태와 예정일 확인 후 안내드리겠습니다.", "need_human_confirm": "1", "status": "new", "created_at": "2026-06-09 09:35:17", "updated_at": "2026-06-09 09:35:17", "memo": "", "order_no": "" } ] ``` ### 4.4. `ai_wh_kakao_tasks` - 한글명: 중도매 CS톡 업무카드 - 용도: 중도매 카톡에서 추출된 업무카드와 처리 상태를 저장하는 테이블입니다. - 출처: 중도매 CS톡 / 중도매 CS톡2 - 사용 화면: 향후 중도매360, 카톡 정리 데이터 - 정책: 기존 /cs 화면과 새 /aics 화면을 섞지 않고 참고용으로 봅니다. - rows: `71` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `source_type` | `TEXT` | 0 | 1 | `'kakao_wholesale'` | | `wholesaler_name` | `TEXT` | 0 | 1 | `''` | | `raw_text` | `TEXT` | 0 | 1 | `''` | | `order_no` | `TEXT` | 0 | 1 | `''` | | `task_type` | `TEXT` | 0 | 1 | `'etc'` | | `priority` | `TEXT` | 0 | 1 | `'normal'` | | `task_status` | `TEXT` | 0 | 1 | `'new'` | | `title` | `TEXT` | 0 | 1 | `''` | | `request_summary` | `TEXT` | 0 | 1 | `''` | | `latest_reply` | `TEXT` | 0 | 1 | `''` | | `product_text` | `TEXT` | 0 | 1 | `''` | | `next_check_text` | `TEXT` | 0 | 1 | `''` | | `source_date` | `TEXT` | 0 | 1 | `''` | | `source_time` | `TEXT` | 0 | 1 | `''` | | `assignee` | `TEXT` | 0 | 1 | `''` | | `memo` | `TEXT` | 0 | 1 | `''` | | `created_at` | `TEXT` | 0 | 1 | `''` | | `updated_at` | `TEXT` | 0 | 1 | `''` | #### 샘플 데이터 ```json [ { "id": "100", "source_type": "kakao_wholesale", "wholesaler_name": "꿈의나라", "raw_text": "요거 나갔는데 언제 나갔는지 찾아보구 톡 드릴게용", "order_no": "", "task_type": "stock_schedule", "priority": "normal", "task_status": "confirm_needed", "title": "[입고시기] 주문번호 미확인", "request_summary": "요거 나갔는데 언제 나갔는지 찾아보구 톡 드릴게용", "latest_reply": "", "product_text": "", "next_check_text": "오늘 확인", "source_date": "", "source_time": "01:05", "assignee": "", "memo": "", "created_at": "2026-06-18 11:43:32", "updated_at": "2026-06-18 11:43:32" }, { "id": "99", "source_type": "kakao_wholesale", "wholesaler_name": "꿈의나라", "raw_text": "요거 품절이라서 차감으로 했는데", "order_no": "", "task_type": "soldout_adjust", "priority": "urgent", "task_status": "confirm_needed", "title": "[품절/차감] 주문번호 미확인", "request_summary": "요거 품절이라서 차감으로 했는데", "latest_reply": "", "product_text": "", "next_check_text": "오늘 확인", "source_date": "", "source_time": "01:04", "assignee": "", "memo": "", "created_at": "2026-06-18 11:43:32", "updated_at": "2026-06-18 11:43:32" }, { "id": "98", "source_type": "kakao_wholesale", "wholesaler_name": "꿈의나라", "raw_text": "2026050601453432\n바이미미 러너캡 블루 free\n미입고건인데 아직도 입고가 안되고 있어 확인 부탁드립니다.\n2026년 6월 18일 목요일", "order_no": "2026050601453432", "task_type": "update_error", "priority": "urgent", "task_status": "confirm_needed", "title": "[업데이트오류/누락] 2026050601453432", "request_summary": "2026050601453432\n바이미미 러너캡 블루 free\n미입고건인데 아직도 입고가 안되고 있어 확인 부탁드립니다.\n2026년 6월 18일 목요일", "latest_reply": "", "product_text": "바이미미 러너캡 블루 free", "next_check_text": "오늘 확인", "source_date": "", "source_time": "15:39", "assignee": "", "memo": "", "created_at": "2026-06-18 11:43:32", "updated_at": "2026-06-18 11:43:32" } ] ``` ### 4.5. `import_products` - 한글명: import_products - 용도: - 출처: - 사용 화면: - 정책: - rows: `1` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `name` | `TEXT` | 0 | 1 | `''` | | `category` | `TEXT` | 0 | 1 | `''` | | `price` | `TEXT` | 0 | 1 | `''` | | `cost` | `TEXT` | 0 | 1 | `''` | | `source_url` | `TEXT` | 0 | 1 | `''` | | `image_url` | `TEXT` | 0 | 1 | `''` | | `colors` | `TEXT` | 0 | 1 | `''` | | `sizes` | `TEXT` | 0 | 1 | `''` | | `season` | `TEXT` | 0 | 1 | `''` | | `status` | `TEXT` | 0 | 1 | `'크롤링됨'` | | `memo` | `TEXT` | 0 | 1 | `''` | | `created_at` | `TEXT` | 0 | 1 | `''` | | `updated_at` | `TEXT` | 0 | 1 | `''` | | `images` | `TEXT` | 0 | 1 | `''` | | `name_original` | `TEXT` | 0 | 1 | `''` | | `supplier` | `TEXT` | 0 | 1 | `''` | | `colors_original` | `TEXT` | 0 | 1 | `''` | | `offer_id` | `TEXT` | 0 | 1 | `''` | | `margin` | `TEXT` | 0 | 1 | `''` | | `supplier_name_cn` | `TEXT` | 0 | 1 | `''` | | `supplier_url` | `TEXT` | 0 | 1 | `''` | | `supplier_id` | `TEXT` | 0 | 1 | `''` | | `supplier_logo` | `TEXT` | 0 | 1 | `''` | #### 샘플 데이터 ```json [ { "id": "20", "name": "목 폴라티", "category": "상의", "price": "8,100", "cost": "15", "source_url": "https://detail.1688.com/offer/964516560898.html", "image_url": "https://cbu01.alicdn.com/img/ibank/O1CN01xKojIP1h7qjoek5mx_!!1911304231-0-cib.jpg", "colors": "블랙, 베이지,그레이,레드", "sizes": "100, 110, 120, 130", "season": "", "status": "크롤링됨", "memo": "15일배송", "created_at": "2026-07-22 15:57:54", "updated_at": "2026-07-22 16:01:24", "images": "https://cbu01.alicdn.com/img/ibank/O1CN013yy7wJ1h7qjrenstR_!!1911304231-0-cib.jpg\nhttps://cbu01.alicdn.com/img/ibank/O1CN01AeSosg1h7qjrKDvS2_!!1911304231-0-cib.jpg\nhttps://cbu01.alicdn.com/img/ibank/O1CN01JgCI0F1h7qjoek9wW_!!1911304231-0-cib.jpg\nhttps://cbu01.alicdn.com/img/ibank/O1CN01xKojIP1h7qjoek5mx_!!1911304231-0-cib.jpg\nhttps://cbu01.alicdn.com/img/ibank/O1CN012kjqK71h7qjqbmKCh_!!1911304231-0-cib.jpg\nhttps://cbu01.alicdn.com/img/ibank/O1CN01HFVFiG1h7qjrnmQsW_!!1911304231-0-cib.jpg\nhttps://...", "name_original": "ImoBabay 2026春季儿童多用途罗纹棉质长袖T恤男童女童舒适弹​​力打底T恤时尚", "supplier": "호주 메이관 공급망 관리 유한회사", "colors_original": "黑色, 米色, 蓝色, 花灰色, 白灰色, 咖绿色", "offer_id": "964516560898", "margin": "3,038원", "supplier_name_cn": "澳大利亚美冠供应链管理有限公司", "supplier_url": "https://shop1386175978295.1688.com", "supplier_id": "1386175978295", "supplier_logo": "" } ] ``` ### 4.6. `import_suppliers` - 한글명: import_suppliers - 용도: - 출처: - 사용 화면: - 정책: - rows: `2` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `supplier_id` | `TEXT` | 1 | 0 | `None` | | `alias` | `TEXT` | 0 | 1 | `''` | | `memo` | `TEXT` | 0 | 1 | `''` | | `name` | `TEXT` | 0 | 1 | `''` | | `name_cn` | `TEXT` | 0 | 1 | `''` | | `url` | `TEXT` | 0 | 1 | `''` | | `logo` | `TEXT` | 0 | 1 | `''` | | `updated_at` | `TEXT` | 0 | 1 | `''` | #### 샘플 데이터 ```json [ { "supplier_id": "1386175978295", "alias": "", "memo": "", "name": "호주 메이관 공급망 관리 유한회사", "name_cn": "澳大利亚美冠供应链管理有限公司", "url": "https://shop1386175978295.1688.com", "logo": "", "updated_at": "2026-07-22 15:57:54" }, { "supplier_id": "1718s554j9y17", "alias": "", "memo": "", "name": "호주 창궈 의류 유한회사팔로우고객 서비스상품", "name_cn": "test", "url": "https://shop1718s554j9y17.1688.com", "logo": "https://img.alicdn.com/imgextra/i4/O1CN01DqZtmR1MFXa1N8MmN_!!6000000001405-55-tps-15-14.svg", "updated_at": "2026-07-22 15:22:24" } ] ``` ### 4.7. `kakao_attachments` - 한글명: kakao_attachments - 용도: - 출처: - 사용 화면: - 정책: - rows: `4` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `partner_name` | `TEXT` | 0 | 0 | `None` | | `session_id` | `INTEGER` | 0 | 0 | `None` | | `original_name` | `TEXT` | 0 | 0 | `None` | | `stored_name` | `TEXT` | 0 | 1 | `None` | | `file_path` | `TEXT` | 0 | 1 | `None` | | `file_url` | `TEXT` | 0 | 1 | `None` | | `mime_type` | `TEXT` | 0 | 0 | `None` | | `file_size` | `INTEGER` | 0 | 1 | `0` | | `file_hash` | `TEXT` | 0 | 0 | `None` | | `source_type` | `TEXT` | 0 | 1 | `'upload'` | | `status` | `TEXT` | 0 | 1 | `'active'` | | `created_by` | `TEXT` | 0 | 0 | `None` | | `created_at` | `TEXT` | 0 | 1 | `datetime('now','localtime')` | | `deleted_at` | `TEXT` | 0 | 0 | `None` | | `deleted_by` | `TEXT` | 0 | 0 | `None` | #### 샘플 데이터 ```json [ { "id": "30", "partner_name": "도로시", "session_id": "13", "original_name": "image.png", "stored_name": "kakao_20260623_040122_811383.png", "file_path": "uploads/kakao/20260623/kakao_20260623_040122_811383.png", "file_url": "/uploads/kakao/20260623/kakao_20260623_040122_811383.png", "mime_type": "image/png", "file_size": "14828", "file_hash": "82dffb547f404794775ee8f385092aa7ec046c6ec9e6dedc7095126fb586413e", "source_type": "upload", "status": "active", "created_by": "dev", "created_at": "2026-06-23 04:01:22", "deleted_at": null, "deleted_by": null }, { "id": "29", "partner_name": "도로시", "session_id": "13", "original_name": "image.png", "stored_name": "kakao_20260623_040119_715372.png", "file_path": "uploads/kakao/20260623/kakao_20260623_040119_715372.png", "file_url": "/uploads/kakao/20260623/kakao_20260623_040119_715372.png", "mime_type": "image/png", "file_size": "14197", "file_hash": "b56a74693500a8dd86b4d5ad702e411338f25411c965a2016c4e7609be602b64", "source_type": "upload", "status": "active", "created_by": "dev", "created_at": "2026-06-23 04:01:19", "deleted_at": null, "deleted_by": null }, { "id": "26", "partner_name": "도로시", "session_id": null, "original_name": "image.png", "stored_name": "kakao_20260623_034623_717415.png", "file_path": "uploads/kakao/20260623/kakao_20260623_034623_717415.png", "file_url": "/uploads/kakao/20260623/kakao_20260623_034623_717415.png", "mime_type": "image/png", "file_size": "111358", "file_hash": "87d8b863cdb87c2a57a67e9c8b98832bdaf6f09a4106a69c32082fd545e3ee5b", "source_type": "upload", "status": "active", "created_by": "dev", "created_at": "2026-06-23 03:46:23", "deleted_at": null, "deleted_by": null } ] ``` ### 4.8. `kakao_photo_item_links` - 한글명: kakao_photo_item_links - 용도: - 출처: - 사용 화면: - 정책: - rows: `2` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `session_id` | `INTEGER` | 0 | 1 | `None` | | `match_id` | `INTEGER` | 0 | 0 | `None` | | `photo_id` | `INTEGER` | 0 | 0 | `None` | | `message_index` | `INTEGER` | 0 | 0 | `None` | | `source_text` | `TEXT` | 0 | 0 | `None` | | `product_name` | `TEXT` | 0 | 0 | `None` | | `color` | `TEXT` | 0 | 0 | `None` | | `size` | `TEXT` | 0 | 0 | `None` | | `qty` | `INTEGER` | 0 | 0 | `None` | | `order_no` | `TEXT` | 0 | 0 | `None` | | `confidence` | `REAL` | 0 | 0 | `0` | | `link_status` | `TEXT` | 0 | 0 | `'candidate'` | | `created_by` | `TEXT` | 0 | 0 | `''` | | `created_at` | `TEXT` | 0 | 1 | `None` | | `updated_at` | `TEXT` | 0 | 1 | `None` | | `brand` | `TEXT` | 0 | 0 | `None` | | `inquiry_text` | `TEXT` | 0 | 0 | `None` | #### 샘플 데이터 ```json [ { "id": "2", "session_id": "13", "match_id": "7", "photo_id": "30", "message_index": "9", "source_text": "2026052222320303\n데일리베베/코지단가라티/소라/S/1\n교환 상품 전달 드렸었는데, 저희한테 입고 된 상품이 없습니다. 확인 부탁드립니다.\n사장님 요거 6월17일날\n없어용 카톡내용두 없구용", "product_name": "코지단가라티", "color": "소라", "size": "S", "qty": "1", "order_no": "2026052222320303", "confidence": "0.98", "link_status": "candidate", "created_by": "system", "created_at": "2026-06-23 04:13:53", "updated_at": "2026-06-23 04:13:53", "brand": "데일리베베", "inquiry_text": "교환 상품 전달 드렸었는데, 저희한테 입고 된 상품이 없습니다. 확인 부탁드립니다.\n사장님 요거 6월17일날\n없어용 카톡내용두 없구용" }, { "id": "1", "session_id": "13", "match_id": "6", "photo_id": "29", "message_index": "1", "source_text": "2026050418155028\n보니토/카프리7부팬츠/검정/L/1\n박음질 불량 교환 요청\n입고일 : 6/15\n6/17 전달로 확인됩니다.", "product_name": "카프리7부팬츠", "color": "검정", "size": "L", "qty": "1", "order_no": "2026050418155028", "confidence": "0.98", "link_status": "candidate", "created_by": "system", "created_at": "2026-06-23 04:13:53", "updated_at": "2026-06-23 04:13:53", "brand": "보니토", "inquiry_text": "박음질 불량 교환 요청" } ] ``` ### 4.9. `kakao_photo_matches` - 한글명: kakao_photo_matches - 용도: - 출처: - 사용 화면: - 정책: - rows: `2` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `session_id` | `INTEGER` | 0 | 1 | `None` | | `photo_id` | `INTEGER` | 0 | 0 | `None` | | `message_index` | `INTEGER` | 0 | 0 | `None` | | `message_line` | `TEXT` | 0 | 0 | `None` | | `sender` | `TEXT` | 0 | 0 | `None` | | `message_time` | `TEXT` | 0 | 0 | `None` | | `message_text` | `TEXT` | 0 | 0 | `None` | | `sort_order` | `INTEGER` | 0 | 0 | `0` | | `match_status` | `TEXT` | 0 | 0 | `'confirmed'` | | `created_by` | `TEXT` | 0 | 0 | `''` | | `created_at` | `TEXT` | 0 | 1 | `None` | | `updated_at` | `TEXT` | 0 | 1 | `None` | #### 샘플 데이터 ```json [ { "id": "7", "session_id": "13", "photo_id": "30", "message_index": "9", "message_line": "사진", "sender": "도로시사장님", "message_time": "오후 6:10", "message_text": "사진", "sort_order": "2", "match_status": "confirmed", "created_by": "system", "created_at": "2026-06-23 04:01:53", "updated_at": "2026-06-23 04:01:53" }, { "id": "6", "session_id": "13", "photo_id": "29", "message_index": "1", "message_line": "사진", "sender": "도로시사장님", "message_time": "오전 12:45", "message_text": "사진", "sort_order": "1", "match_status": "confirmed", "created_by": "system", "created_at": "2026-06-23 04:01:53", "updated_at": "2026-06-23 04:01:53" } ] ``` ### 4.10. `kakao_raw_sessions` - 한글명: kakao_raw_sessions - 용도: - 출처: - 사용 화면: - 정책: - rows: `1` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `id` | `INTEGER` | 1 | 0 | `None` | | `source_type` | `TEXT` | 0 | 1 | `'kakao_wholesale'` | | `partner_name` | `TEXT` | 0 | 0 | `None` | | `raw_text` | `TEXT` | 0 | 1 | `None` | | `raw_length` | `INTEGER` | 0 | 1 | `0` | | `message_count` | `INTEGER` | 0 | 1 | `0` | | `memo` | `TEXT` | 0 | 0 | `None` | | `status` | `TEXT` | 0 | 1 | `'raw_saved'` | | `created_by` | `TEXT` | 0 | 0 | `None` | | `created_at` | `TEXT` | 0 | 1 | `datetime('now','localtime')` | | `updated_at` | `TEXT` | 0 | 0 | `None` | | `raw_hash` | `TEXT` | 0 | 0 | `None` | | `deleted_at` | `TEXT` | 0 | 0 | `None` | | `deleted_by` | `TEXT` | 0 | 0 | `None` | | `delete_reason` | `TEXT` | 0 | 0 | `None` | #### 샘플 데이터 ```json [ { "id": "13", "source_type": "kakao_wholesale", "partner_name": "도로시", "raw_text": "[도로시사장님] [오전 12:45] 사진\n[키즈빌리지] [오후 4:01] 2026050418155028\n보니토/카프리7부팬츠/검정/L/1\n박음질 불량 교환 요청\n\n입고일 : 6/15 \n[키즈빌리지] [오후 4:03] 6/17 전달로 확인됩니다.\n[키즈빌리지] [오후 4:05] 2026052712001788\n하이커/카프리스트라이프반바지/오렌지/S/1\n\n불량 교환건 품절로 안내해주셔\n정산금 차감 후 입금드리겠습니다.\n[키즈빌리지] [오후 4:24] 2026061318281251\n데일리베베/기획)냉감인견세트/강아지들/XS/1\n오염/박음질 불량 교환 요청\n\n입고일 : 6/15\n[키즈빌리지] [오후 4:30] 2026061016060762\n린도/별사탕티/노랑/S/1\n단추 떨어짐 불량 교환 요청\n\n입고일 : 6/11\n[도로시사장님] [오후 6:09] 2026052712001788\n하이커/카프리스트라이프반바지/오렌지/S/1\n\n불량 교환건 품절로 안내해주셔\n정산금 차감 후 입금드리겠습니다.\n\n매일...", "raw_length": "753", "message_count": "12", "memo": "", "status": "deleted", "created_by": "dev", "created_at": "2026-06-23 04:01:35", "updated_at": null, "raw_hash": "c53e61c5502aa3f781a1401f3c4c54cce90a029651697cfb793b3892d80fd45c", "deleted_at": "2026-06-23 17:14:53", "deleted_by": "dev", "delete_reason": "manual_date" } ] ``` ### 4.11. `sqlite_sequence` - 한글명: SQLite 자동증가 관리 테이블 - 용도: SQLite가 AUTOINCREMENT 값을 관리하는 내부 테이블입니다. - 출처: SQLite 내부 - 사용 화면: 관리 참고용 - 정책: 직접 수정 금지. - rows: `9` #### 컬럼 | 컬럼 | 타입 | PK | NOT NULL | 기본값 | |---|---|---:|---:|---| | `name` | `` | 0 | 0 | `None` | | `seq` | `` | 0 | 0 | `None` | #### 샘플 데이터 ```json [ { "name": "import_products", "seq": "20" }, { "name": "kakao_photo_item_links", "seq": "2" }, { "name": "kakao_photo_matches", "seq": "7" } ] ``` ## 5. 다음 설계 방향 1. API 카탈로그(`/aics/apis`)의 API 항목과 DB 테이블을 연결한다. 2. 원본 데이터 테이블과 업무 처리 상태 테이블을 분리한다. 3. 게시판/카톡/주문/소매점/중도매/물류 데이터를 각각 미러링 테이블로 확장한다. 4. 소매점360, 중도매360, 업무 카테고리 화면에서 이 DB 구조를 기준으로 데이터를 조회한다. 5. DB 구조 변경 시 이 문서를 다시 자동 생성한다.