[기획]/실무를 수행하며

등록봇과 비교봇 로직 분석

완벽한 장면 2024. 12. 31. 13:28

실무에서 코드 자동화 상품 등록봇/비교봇을 수정하다가, 로직에 대해 차이를 조금 더 파보았다.

등록봇

등록봇 핵심 - 상품 정보 등록 및 업데이트

 

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: []
}

 

728x90
반응형