티스토리 뷰
실무에서 코드 자동화 상품 등록봇/비교봇을 수정하다가, 로직에 대해 차이를 조금 더 파보았다.
등록봇
등록봇 핵심 - 상품 정보 등록 및 업데이트
Text-based Flow Diagram
Start
│
├──> 초기화: `shopName`, `productInfo` 등 입력값 확인
│
├──> 상품 추가 (`insertQuery`)
│ └── 데이터베이스에 신규 상품 데이터 추가
│
├──> 상품 변경 (`updateQuery`)
│ ├── 기존 데이터의 `useYn` 값을 "N"으로 변경
│ └── 데이터베이스에 변경된 데이터 추가 (`insertQuery`)
│
├──> 상품 삭제
│ ├── 기존 데이터의 `useYn` 값을 "N"으로 변경
│ └── 삭제 상태의 새로운 행 추가 (`insertQuery`)
│
├──> 기존 상품 데이터 조회 (`selectQuery`)
│ └── 데이터베이스에서 현재 활성화된 상품 데이터 반환
│
├──> 전체 업데이트 (`updateProductInfo`)
│ ├── 상품 추가: `insertInfo` 처리
│ ├── 상품 변경: `updateInfo` 처리 (비활성화 + 추가)
│ └── 상품 삭제: `deleteInfo` 처리 (비활성화 + 삭제 상태 추가)
│
├──> 조건: 작업 성공 여부
│ ├── Yes: 성공 메시지 출력 및 결과 반환
│ └── No: 에러 메시지 출력
│
End
등록봇의 흐름
1. 초기화 및 입력값 확인
- 데이터베이스에 상품 정보를 추가, 변경, 삭제하기 위한 함수들(insertQuery, updateQuery, selectQuery)을 정의한다.
- shopName과 productInfo를 포함한 데이터를 확인한다.
2. 데이터베이스 작업
- 상품 추가 : 새로운 상품 데이터를 테이블에 추가.
- 상품 변경 : 기존 상품 데이터 비활성화(useYn = 'N' 후 변경된 데이터를 새 행으로 추가.
- 상품 삭제 : 기존 상품 데이터 비활성화 후, 삭제 상태를 새 행으로 추가
3. 결과 반환
- 모든 작업이 성공하면 성공 메시지와 결과 반환
- 에러 발생 시 로그 출력 및 실패 상태 반환
등록봇의 주요 기능과 사용 시점
주요 기능
- insertQuery: 상품 정보를 데이터베이스에 추가.
- updateQuery: 기존 데이터를 비활성화하거나 수정.
- selectQuery: 데이터베이스에서 현재 상품 데이터를 조회.
- updateProductInfo: 등록봇의 핵심 함수로, 추가/수정/삭제 작업을 관리.
사용 시점
- 비교봇이 분류한 결과(insertInfo, updateInfo, deleteInfo)를 받아 데이터베이스에 반영할 때.
등록봇의 사용 사례
- 데이터베이스에 상품 정보를 실제로 추가, 수정, 삭제해야 하는 작업에서 사용한다.
- 실제로 상품 데이터를 데이터베이스에 반영하는 데 사용한다는 것.
비교봇
비교봇 핵심 : 상품 상태 비교 및 분류
Text-based Flow Diagram
Start
│
├──> 초기화: `shopName`, `regInfoArr`, `curInfoObj` 입력값 확인
│ ├── 신규 상품 배열: `insertInfo`
│ ├── 수정 상품 배열(플랫폼 전달): `updateInfoForPlatForm`
│ ├── 수정 상품 배열(로깅 전용): `updateInfoForLogging`
│ └── 삭제 상품 배열: `deleteInfo`
│
├──> 기존 상품 배열 (`regInfoArr`) 순회
│ │
│ ├──> 조건: 기존 상품이 현재 상품 목록 (`curInfoObj`)에 있는가?
│ │ ├── Yes:
│ │ │ ├── 각 필드 비교 (`observingFields`)
│ │ │ ├── 변경 사항 감지
│ │ │ │ ├── 재고만 변경: `updateInfoForLogging`에 추가
│ │ │ │ └── 다른 변경: `updateInfoForPlatForm`, `updateInfoForLogging`에 추가
│ │ │ └── 비교가 끝난 상품은 `curInfoObj`에서 제거
│ │ └── No: 삭제 상품으로 처리 → `deleteInfo`에 추가
│ │
│ └──> 다음 상품으로 이동
│
├──> 현재 상품 목록 (`curInfoObj`)에 남아 있는 데이터 확인
│ └── 신규 상품으로 처리 → `insertInfo`에 추가
│
├──> 로그 출력: 신규, 수정, 삭제 결과 출력
│
├──> 조건: 에러가 발생했는가?
│ ├── Yes: 에러 로그 출력, `isSuccess: false` 반환
│ └── No: `isSuccess: true`와 결과 반환
│
비교봇의 흐름
1. 초기화 및 입력값 확인
- 기존 상품 배열(regInfoArr)과 현재 상품 객체(curInfoObj) 확인.
- 결과를 저장할 배열(insertInfo, updateInfoForPlatForm, updateInfoForLogging, deleteInfo) 초기화.
2. 상품 비교
- 기존 상품(regInfoArr)을 순회하며 현재 상품(curInfoObj)과 매칭.
[매칭된 상품]
- 지정된 필드(observingFields)를 비교하여 변경 여부 확인.
- 변경 사항이 있으면 수정 목록(updateInfoForPlatForm, updateInfoForLogging)에 추가.
[매칭되지 않은 상품]
- 삭제된 상품으로 처리하고 deleteInfo에 추가.
3. 신규 상품 확인
- curInfoObj에 남아 있는 데이터는 모두 신규 상품으로 간주.
- insertInfo에 추가.
4. 결과 반환
- 신규, 수정, 삭제된 상품 데이터를 포함한 결과 반환.
비교봇의 사용 사례
- 기존 데이터와 현재 데이터를 비교하여 변화된 정보를 분석하거나 데이터 변경 이력을 확인할 때 사용.
- 결과는 등록봇(즉, Code 1)으로 넘겨져 데이터베이스 작업에 활용된다.
비교의 주요 기능과 사용 시점
주요 기능
- 기존 상품 정보와 현재 상품 정보를 비교.
- 필드별로 변경 사항을 감지(observingFields).
- 상품을 신규, 수정, 삭제로 분류하여 결과를 반환.
사용 시점
- 새로운 상품 데이터가 입력되었을 때, 기존 데이터와 비교하여 어떤 작업이 필요한지 분석할 때.
등록봇과 비교봇의 연계 흐름
1. 비교봇
- 기존 상품 정보(regInfoArr)와 현재 상품 정보(curInfoObj)를 비교.
- insertInfo, updateInfo, deleteInfo로 분류.
- 비교 결과를 등록봇으로 전달.
2. 등록봇
- 비교봇이 제공한 결과를 받아서 데이터베이스에 반영
* insertInfo: 신규 상품 추가.
* updateInfo: 기존 상품 수정.
* deleteInfo: 상품 삭제
연동몰과 비교봇 비교
등록봇 | 비교 | |
주요 목적 | 상품 정보를 데이터베이스에 등록, 업데이트, 삭제. | 기존 데이터와 현재 데이터를 비교하여 차이를 분류. |
입력 데이터 | shopName, productInfo, useYn | shopName, regInfoArr, curInfoObj |
주요 작업 | 데이터베이스 작업(SQL 삽입, 수정, 삭제). | 기존 상품과 현재 상품의 비교 및 변경사항 감지. |
결과 처리 방식 | 직접 데이터베이스에 반영 | 비교 결과를 배열에 저장(insertInfo, deleteInfo 등). |
결과 반환 | 성공/실패 여부 반영 | 비교 결과(신규, 수정, 삭제 목록) 및 성공 여부 |
예제
-입력-
regInfoArr = [ { productNo: '001', productName: '상품A', productPrice: 1000 } ];
curInfoObj = { '001': { productNo: '001', productName: '상품A', productPrice: 1200 } };
-결과-
{
insertInfo: [],
updateInfo: [ { productNo: '001', productName: '상품A', productPrice: 1200 } ],
deleteInfo: []
}
'[기획] > 실무를 수행하며' 카테고리의 다른 글
구매대행과 위탁판매 (1) (1) | 2025.01.04 |
---|---|
쿼리 생성 시 placeholder 사용 (0) | 2024.12.31 |
템플릿화 시스템의 구조 (1) | 2024.12.30 |
일반적인 기획자 담당 역할 구분 (0) | 2024.12.30 |
프로모션 페이지 기획 유의/추천사항 (0) | 2024.12.25 |