Apache NiFi

데이터 적재/λ³€ν™˜ μ—°μŠ΅ν•˜κΈ° 05_μ •κ·œμ‹μ„ μ‚¬μš©ν•˜μ—¬ 속성 생성 , 파일 ν•΄μ œ ν›„ μ†μ„±μœΌλ‘œ 데이터 μˆ˜μ •ν•˜κ³  DB 적재된 데이터 Delete ν›„ INSERT ν•˜μ—¬ 데이터 적재 ν›„ 파일둜 μ••μΆ•ν•˜μ—¬ SFTP μ„œλ²„μ— 적재

ramibo 2023. 2. 21. 15:39

 

 

 

 

πŸ“– 데이터 적재 / λ³€ν™˜ μ‹œλ‚˜λ¦¬μ˜€

 

 

 

1. FTP μ„œλ²„ (172.30.1.3) /nifi_data/raw_dataset/ λ””λ ‰ν† λ¦¬μ—μ„œ business_district_data.zip νŒŒμΌ μˆ˜μ§‘ (원본 μœ μ§€)

2. μ˜€λŠ˜λ‚ μ§œ(yyyymmdd) κ°’이 λ“€μ–΄κ°„ time μ΄λ¦„μ˜ μ†μ„±μ„ μƒμ„± (값을 μˆ«μžμ‚¬μš©ν•˜μ§€ μ•Šκ³  Expression Language λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμ„±)

3. μˆ˜μ§‘ν•œ zip νŒŒμΌ μ••μΆ•ν•΄μ œ

4. νŒŒμΌ λͺ…에 μ˜€λŠ˜ λ‚ μ§œκ°’이 λ“€μ–΄κ°„ νŒŒμΌλ“€λ§Œ λΆ„리

5. λ°μ΄ν„° κ±΄μˆ˜ μΈ‘μ •

6. λ°μ΄ν„° μˆ˜μ •
1) νŒŒμΌμ˜ μ»¬λŸΌλͺ…을 μ•„λž˜μ˜ κ°’μœΌλ‘œ λ³€κ²½

μƒκ°€μ—…μ†Œλ²ˆν˜Έ house_no
μƒν˜Έλͺ… cmpny_nm
지점λͺ… point_nm
μƒκΆŒμ—…μ’…λŒ€λΆ„λ₯˜μ½”λ“œ industry_lgcls_cd
μƒκΆŒμ—…μ’…λŒ€λΆ„λ₯˜λͺ… industry_lgcls_nm
μƒκΆŒμ—…μ’…μ€‘λΆ„λ₯˜μ½”λ“œ industry_mdcls_cd
μƒκΆŒμ—…μ’…μ€‘λΆ„λ₯˜λͺ… industry_mdcls_nm
μƒκΆŒμ—…μ’…μ†ŒλΆ„λ₯˜μ½”λ“œ industry_smcls_cd
μƒκΆŒμ—…μ’…μ†ŒλΆ„λ₯˜λͺ… industry_smcls_nm
ν‘œμ€€μ‚°μ—…λΆ„λ₯˜μ½”λ“œ std_cls_cd
ν‘œμ€€μ‚°μ—…λΆ„λ₯˜λͺ… std_cls_nm
μ‹œλ„μ½”λ“œ sd_cd
μ‹œλ„λͺ… sd_nm
μ‹œκ΅°κ΅¬μ½”λ“œ sgg_cd
μ‹œκ΅°κ΅¬λͺ… sgg_nm
ν–‰μ •λ™μ½”λ“œ hd_cd
행정동λͺ… hd_nm
λ²•μ •λ™μ½”λ“œ bd_cd
법정동λͺ… bd_nm
μ§€λ²ˆμ½”λ“œ addr_cd
λŒ€μ§€κ΅¬λΆ„μ½”λ“œ site_cd
λŒ€μ§€κ΅¬λΆ„λͺ… site_se_nm
μ§€λ²ˆλ³Έλ²ˆμ§€ addr_main_no
μ§€λ²ˆλΆ€λ²ˆμ§€ addr_sub_no
μ§€λ²ˆμ£Όμ†Œ addr_data
λ„λ‘œλͺ…μ½”λ“œ road_cd
λ„λ‘œλͺ… road_nm
κ±΄λ¬Όλ³Έλ²ˆμ§€ bud_main_no
κ±΄λ¬ΌλΆ€λ²ˆμ§€ bud_sub_no
κ±΄λ¬Όκ΄€λ¦¬λ²ˆν˜Έ bud_mng_no
건물λͺ… bud_nm
λ„λ‘œλͺ…μ£Όμ†Œ bud_addr
ꡬ우편번호 old_zip_cd
μ‹ μš°νŽΈλ²ˆν˜Έ new_zip_cd
동정보 dong_info
측정보 flor_info
ν˜Έμ •λ³΄ room_info
경도 logtd
μœ„λ„ lattd


2) νŒŒμΌμ˜ μ»¬λŸΌ μ€‘ κ²½λ„, μœ„λ„μ»¬λŸΌμ˜ κ°’μ—μ„œ . μ„ κ³΅λ°±μœΌλ‘œ λŒ€μ²΄
3) 5μ—μ„œ μΈ‘μ •ν•œ λ°μ΄ν„° κ±΄μˆ˜μ˜ κ°’이 λ“€μ–΄κ°€λŠ” data_co μ»¬λŸΌ μƒμ„±
4) 2μ—μ„œ μƒμ„±ν•œ time μ†μ„±μ˜ κ°’이 λ“€μ–΄κ°€λŠ” load_de μ»¬λŸΌ μƒμ„±



9. postgresql DB nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ μ΄λ‹ˆμ…œ_business_dist_data ν…Œμ΄λΈ”μ˜ λ°μ΄ν„°λ₯Ό DELETE

10. postgresql DB nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ μ΄λ‹ˆμ…œ_business_dist_data ν…Œμ΄λΈ”에 μˆ˜μ§‘ν•œ λ°μ΄ν„° INSERT

11. μ μž¬ μ™„λ£Œλœ λ°μ΄ν„°λ“€μ„ zip ν¬λ§·μœΌλ‘œ μ••μΆ•

12. μ••μΆ•λœ νŒŒμΌμ˜ νŒŒμΌλͺ…을 μ΄λ‹ˆμ…œ_μ˜€λŠ˜λ‚ μ§œ.zip λ‘œ λ³€κ²½

10. νŒŒμΌμ„ SFTPμ„œλ²„μ˜ /data01/result_data/ λ””렉토리 ν•˜μœ„에 μ΄λ‹ˆμ…œλ‘œ ν΄λ”λ₯Ό λ§Œλ“€μ–΄ μ μž¬

 

 

 

 

 

 

 

 

μ‹œλ‚˜λ¦¬μ˜€ Flow

 

 

 

 

 

 

 

 

 

 

 

GetFTP ν”„λ‘œμ„ΈμŠ€λ‘œ FTP μ„œλ²„ (172.30.1.3) /nifi_data/raw_dataset/ λ””λ ‰ν† λ¦¬μ—μ„œ business_district_data.zip 파일 μˆ˜μ§‘

(원본 μœ μ§€)

 

 

 

 

 

 

 

UpdateAttribute ν”„λ‘œμ„ΈμŠ€λ‘œ 속성 생성

μ˜€λŠ˜λ‚ μ§œ(yyyymmdd) 값이 λ“€μ–΄κ°„ time μ΄λ¦„μ˜ 속성을 생성

(값을 μˆ«μžμ‚¬μš©ν•˜μ§€ μ•Šκ³  Expression Language λ₯Ό μ‚¬μš©ν•˜μ—¬ 생성)

 

${now():format('yyyyMMdd')}

 

 

 

 

 

 

 

UnpackContent

- ν”Œλ‘œμš° λ‚΄μ—μ„œ μ••μΆ•νŒŒμΌμ„ ν•΄μ œν•  λ•Œ μ‚¬μš©ν•œλ‹€. ν”Œλ‘œμš° λ‚΄μ—μ„œλ§Œ μ••μΆ•ν•΄μ œ 된 μƒνƒœλ‘œ 남아 μžˆλ‹€.

Packaging Format : μ••μΆ•ν•  포맷 μ§€μ • ( zip , tar)

File Filter : 필터링할 파일 μ§€μ •  .* (λͺ¨λ“  파일)

 

 

 

 

 

 

 

 

 

RouteOnAttribute

- ν”Œλ‘œμš°νŒŒμΌ 뢄리 ν”„λ‘œμ„ΈμŠ€

- ν”Œλ‘œμš° 파일 λ‚΄μ˜ 데이터가 μ—¬λŸ¬κ°œμΈ 경우 ν”Œλ‘œμš°κ°€ κ°€μ§„ 속성을 κΈ°μ€€μœΌλ‘œ ν”Œλ‘œμš°νŒŒμΌμ„ 뢄리 ν•  λ•Œ μ‚¬μš©

Routing Strategy : λΆ„κΈ°ν•  κΈ°μ€€ 선택

 

filename μ΄λΌλŠ” 속성을 μƒμ„±ν•˜μ—¬, filename에 ${time} 속성(μ˜€λŠ˜λ‚ μ§œ) ν¬ν•¨ν•˜λŠ” 이름을 κ°€μ§„ νŒŒμΌλ“€λ§Œ λΆ„λ¦¬ν•˜λ„λ‘ ν•œλ‹€.

${filename:contains(${time})}

 

 

 

 

 

 

 

 

CalculateRecordStats

- cvs(μ •ν˜•λ°μ΄ν„°)λ₯Ό μˆ˜μ§‘ 및 μ μž¬ν•˜λŠ” 경우 데이터 건수λ₯Ό μΈ‘μ •ν•  수 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€

 cvs데이터가 ν˜•μ‹μ— 맞게 λ˜μ–΄μžˆλŠ”μ§€ 검증할 λ•Œλ„ μ‚¬μš©ν•  수 μžˆλ‹€.

 

 

 

 

 

 

 

QueryRecord

- ν”Œλ‘œμš°νŒŒμΌ λ‚΄μ˜ 데이터λ₯Ό 쿼리할 λ•Œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€

μ •ν˜•λ°μ΄ν„°(cvs), λ°˜μ •ν˜•λ°μ΄ν„°(json,xml)μ—μ„œλ§Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€.

- μ‚¬μš©μžμ§€μ • 속성을 λ§Œλ“€μ–΄ μ‚¬μš©ν•˜μ—¬ μ†μ„±μ˜ κ°’μœΌλ‘œ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μ‘°νšŒν•˜λŠ” 것과 λ™μΌν•˜κ²Œ SELECT문을 μž‘μ„± κ°€λŠ₯

(λŒ€μ‹ ! FROMμ ˆμ—λŠ” ν…Œμ΄λΈ”λͺ…이 μ•„λ‹Œ flowfile을 적어쀀닀. ν”Œλ‘œμš°νŒŒμΌμ—μ„œ μ‘°νšŒν•˜λŠ”κ²ƒμ΄λ―€λ‘œ..!)

 

 

select
"μƒκ°€μ—…μ†Œλ²ˆν˜Έ" AS house_no,
"μƒν˜Έλͺ…" AS cmpny_nm,
"지점λͺ…" AS point_nm,
"μƒκΆŒμ—…μ’…λŒ€λΆ„λ₯˜μ½”λ“œ" AS industry_lgcls_cd,
"μƒκΆŒμ—…μ’…λŒ€λΆ„λ₯˜λͺ…" AS industry_lgcls_nm,
"μƒκΆŒμ—…μ’…μ€‘λΆ„λ₯˜μ½”λ“œ" AS industry_mdcls_cd,
"μƒκΆŒμ—…μ’…μ€‘λΆ„λ₯˜λͺ…" AS industry_mdcls_nm,
"μƒκΆŒμ—…μ’…μ†ŒλΆ„λ₯˜μ½”λ“œ" AS industry_smcls_cd,
"μƒκΆŒμ—…μ’…μ†ŒλΆ„λ₯˜λͺ…" AS industry_smcls_nm,
"ν‘œμ€€μ‚°μ—…λΆ„λ₯˜μ½”λ“œ" AS std_cls_cd,
"ν‘œμ€€μ‚°μ—…λΆ„λ₯˜λͺ…" AS std_cls_nm,
"μ‹œλ„μ½”λ“œ" AS sd_cd,
"μ‹œλ„λͺ…" AS sd_nm,
"μ‹œκ΅°κ΅¬μ½”λ“œ" AS sgg_cd,
"μ‹œκ΅°κ΅¬λͺ…" AS sgg_nm,
"ν–‰μ •λ™μ½”λ“œ" AS hd_cd,
"행정동λͺ…" AS hd_nm,
"λ²•μ •λ™μ½”λ“œ" AS bd_cd,
"법정동λͺ…" AS bd_nm,
"μ§€λ²ˆμ½”λ“œ" AS addr_cd,
"λŒ€μ§€κ΅¬λΆ„μ½”λ“œ" AS site_cd,
"λŒ€μ§€κ΅¬λΆ„λͺ…" AS site_se_nm,
"μ§€λ²ˆλ³Έλ²ˆμ§€" AS addr_main_no,
"μ§€λ²ˆλΆ€λ²ˆμ§€" AS addr_sub_no,
"μ§€λ²ˆμ£Όμ†Œ" AS addr_data,
"λ„λ‘œλͺ…μ½”λ“œ" AS road_cd,
"λ„λ‘œλͺ…" AS road_nm,
"κ±΄λ¬Όλ³Έλ²ˆμ§€" AS bud_main_no,
"κ±΄λ¬ΌλΆ€λ²ˆμ§€" AS bud_sub_no,
"κ±΄λ¬Όκ΄€λ¦¬λ²ˆν˜Έ" AS bud_mng_no,
"건물λͺ…" AS bud_nm,
"λ„λ‘œλͺ…μ£Όμ†Œ" AS bud_addr,
"ꡬ우편번호" AS old_zip_cd,
"μ‹ μš°νŽΈλ²ˆν˜Έ" AS new_zip_cd,
"동정보" AS dong_info,
"측정보" AS flor_info,
"ν˜Έμ •λ³΄" AS room_info,
replace("경도", '.',' ') AS logtd, 
replace("μœ„λ„", '.',' ') AS lattd,
'${record.count}' AS data_co,
'${time}' AS load_de
from flowfile

파일의 컬럼λͺ…을 μœ„μ™€ 같이 λ³€κ²½ν•΄μ£Όμ—ˆλ‹€.

컬럼 쀑 경도, μœ„λ„ 컬럼의 κ°’μ—μ„œ '.' λ₯Ό ' '(곡백)으둜 λŒ€μ²΄ν•˜μ˜€λ‹€.

μΈ‘μ •ν•œ λ°μ΄ν„° κ±΄μˆ˜μ˜ κ°’이 λ“€μ–΄κ°€λŠ” data_co μ»¬λŸΌ μƒμ„±

 time μ†μ„±μ˜ κ°’이 λ“€μ–΄κ°€λŠ” load_de μ»¬λŸΌ μƒμ„±

 

 

 

 

 

 

 

 

 

 

 

 

PutSQL

- ν”Œλ‘œμš° λ‚΄μ—μ„œ λ°μ΄ν„°λ² μ΄μŠ€μ— INSERT λ˜λŠ” UPDATE λͺ…령을 μ‹€ν–‰ν•  λ•Œ μ‚¬μš©

 

- Support Fragmented Transactions : λ‹¨νŽΈν™”λœ νŠΈλžœμž­μ…˜ 지원 μ—¬λΆ€

true일 경우 ν”„λ‘œμ„Έμ„œκ°€ κ°€μž₯ λ¨Όμ € ν•΄λ‹Ή FlowFile의 fragment.identifier 및 fragment.count νŠΉμ„±μ„ ν™•μΈν•˜μ—¬

fragment.count 값이 1보닀 크면 fragment.identifierλ₯Ό κ°€μ§„ λͺ¨λ“  FlowFilesλ₯Ό 단일 νŠΈλžœμž­μ…˜μœΌλ‘œ μ²˜λ¦¬ν•˜κ³ 

false둜 μ„€μ •ν•˜λ©΄ μ—¬λŸ¬ 개의 ν”Œλ‘œμš°νŒŒμΌμ— λŒ€ν•œ μ—…λ°μ΄νŠΈ μ‹€ν–‰ μ‹œ λ…λ¦½μ μœΌλ‘œ μˆ˜ν–‰λ¨

 

SQL Stataement : μ‹€ν–‰ν•  쿼리문을 μž‘μ„±ν•œλ‹€. Delete도 μ‹€ν–‰ κ°€λŠ₯!

 

Delete from nifi.br_business_dist_data

 

postgresql DB nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ br_business_dist_data ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό DELETE 

 

 

 

 

 

 

PutDatabaseRecord

λ°μ΄ν„°λ² μ΄μŠ€μ— ν”Œλ‘œμš°νŒŒμΌμ˜ 데이터λ₯Ό μ μž¬ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€

 

postgresql DB nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ br_business_dist_data ν…Œμ΄λΈ”μ— μˆ˜μ§‘ν•œ 데이터 INSERT

 

 

 

 

 

 

 

 

 

MergeContent

-ν”Œλ‘œμš°μ— λ“€μ–΄μ˜€λŠ” λ°μ΄ν„°νŒŒμΌλ“€μ„ μ••μΆ•ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€. 파일 λ‹¨μœ„μ˜ κ²°ν•©

 

Merge Strategy : 압좕방식

Merge Format : μ••μΆ• 포맷

Attribute Strategy : 속성 μœ μ§€ 방식

Minimum Number of Entries : λ ˆμ½”λ“œ μ΅œμ†Œκ°’

Maximum Number of Entries : λ ˆμ½”λ“œ μ΅œλŒ€κ°’

Minimum Group Size : κ²°ν•© μ΅œμ†Œ μ‚¬μ΄μ¦ˆ

Max Bin Age : μ΅œλŒ€ κ²½κ³Ό μ‹œκ°„

 

nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ br_business_dist_data ν…Œμ΄λΈ”μ— μ μž¬ μ™„λ£Œλœ λ°μ΄ν„°λ“€μ„ zip ν¬λ§·μœΌλ‘œ μ••μΆ•

 

 

 

 

 

 

UpdateAttribute

- ν”Œλ‘œμš°νŒŒμΌμ΄ κ°€μ§€κ³  μžˆλŠ” μ†μ„±μ˜ 값을 λ³€κ²½ λ˜λŠ” μƒˆλ‘œμš΄ 속성을 ν”Œλ‘œμš°νŒŒμΌμ— 등둝할 수 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€

  주둜 파일λͺ…을 λ³€κ²½ν•˜κ±°λ‚˜ νŒŒμΌμ μž¬μ‹œ ν•„μš”ν•œ λ³€μˆ˜λ₯Ό 생성할 λ•Œ μ‚¬μš©ν•œλ‹€.

 

Store State : μƒνƒœλ₯Ό μ €μž₯ν•  μ§€ μ—¬λΆ€λ₯Ό 선택

Cache Value Lookup Cache Size : μΊμ‹œμ— μ €μž₯ν•  ν‘œμ€€ 쑰회 κ°’ 수λ₯Ό μ§€μ •

 

μ••μΆ•λœ 파일의 파일λͺ…을 br_μ˜€λŠ˜λ‚ μ§œ.zip 둜 λ³€κ²½

br_${time}.zip

 

 

 

 

 

 

 

 

 

 

 

PutSFTP

- μˆ˜μ§‘ν•œ λ°μ΄ν„°νŒŒμΌμ„ λ‹€λ₯Έ μ„œλ²„ λ‚΄ νŠΉμ • 디렉토리에 SFTP둜 μ ‘κ·Όν•˜μ—¬ μ μž¬ν•˜λŠ” 경우 μ‚¬μš©ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€

- ν•΄λ‹Ή ν”„λ‘œμ„ΈμŠ€λŠ” 같은 μ„œλ²„ λ‚΄μ—μ„œ μž‘μ—…ν•˜λŠ” 경우만 μš”νš¨ν•˜λ©° λ‹€λ₯Έ μ„œλ²„ λ‚΄ 디렉토리에 μ μž¬λŠ” λΆˆκ°€ν•˜λ‹€.

 

Hostname : μ„œλ²„μ˜ 호슀트λͺ…

Port : μ„œλ²„ 포트번호

Username : SFTP μ„œλ²„μ˜  계정λͺ…

Remote Path : μ„œλ²„μ˜ μ μž¬ν•  디렉토리λͺ…(경둜)

Create Directory : μ„œλ²„μ— μž‘μ„±ν•œ 디렉토리가 μ—†λŠ” 경우 생성할지 μ—¬λΆ€ true/false

Confict Resolution :  μ μž¬μ‹œ μ€‘λ³΅λœ 파일이 μžˆλŠ” 경우 μ²˜λ¦¬ν•  방법 선택

 

νŒŒμΌμ„ SFTPμ„œλ²„μ˜ /data01/result_data/ λ””렉토리 ν•˜μœ„에 μ΄λ‹ˆμ…œλ‘œ ν΄λ”λ₯Ό λ§Œλ“€μ–΄ μ μž¬

 

 

 

 

 

 

 

SFTP μ„œλ²„μ˜ μ„€μ •ν•œ 디렉토리가 μƒμ„±λ˜κ³  파일이 μ„œλ²„μ— 적재된 λͺ¨μŠ΅μ΄λ‹€.

 

 

 

 

 

 

 

 

 

ν›„κΈ°

 

Linuxλ₯Ό 처음으둜 ν™œμš©ν•˜μ—¬ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό 따라 데이터λ₯Ό 적재 ν•΄λ³΄μ•˜λ‹€.

ν”„λ‘œκ·Έλž¨μ„ μ…‹νŒ…ν•˜λŠ”λ° μ‹œκ°„μ΄ κ±Έλ Έκ³ , 아직 λ¦¬λˆ…μŠ€ ν™˜κ²½μ— μ΅μˆ™ν•΄μ§€μ§€ λͺ»ν–ˆλ‹€.

 

데이터λ₯Ό μˆ˜μ •ν•˜λŠ” λΆ€λΆ„μ—μ„œ 경도와 μœ„λ„ 컬럼의 κ°’μ—μ„œ .을 곡백으둜 λŒ€μ²΄ν•  λ•Œ

DBμ—μ„œ μ‹€ν–‰ν•΄λ³΄μ•˜μ„ λ•ŒλŠ” 되길래, κ·ΈλŒ€λ‘œ 쿼리λ₯Ό λ³΅μ‚¬ν•΄μ„œ λΆ™μ—¬λ„£κΈ°λ₯Ό ν–ˆλŠ”λ° flowfileμ—μ„œ " "λ₯Ό λΆ™μ—¬μ„œ

replace ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•΄μ•Ό ν–ˆμ—ˆλ‹€.

 

 

postgresql DB nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ br_business_dist_data ν…Œμ΄λΈ”μ˜ 데이터λ₯Ό DELETEλ₯Ό ν•΄μ€„λ•Œ, PutSQL ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν–ˆκ³ ,

postgresql DB nifi μŠ€ν‚€λ§ˆ λ‚΄μ˜ br_business_dist_data ν…Œμ΄λΈ”μ— μˆ˜μ§‘ν•œ 데이터 INSERTν•  λ•ŒλŠ” PutdatabaseRecord ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‚¬μš©ν–μ•Ό ν–ˆλ‹€.

λ‚˜λŠ” λ‘˜μ„ λ°”κΏ”μ„œ μ‚¬μš©ν–ˆλ‹€... μ΄μœ λŠ” PutdatabaseRecord ν”„λ‘œμ„ΈμŠ€μ— deleteλ₯Ό ν•  수 μžˆλ„λ‘ 선택할 수 μžˆλŠ” 속성이 μžˆμ—ˆκΈ° κΈ° λ•Œλ¬Έμ— μ‚¬μš©ν–ˆμ—ˆλ‹€. 정말 λ‹¨μˆœν•œ μ΄μœ γ…Ž.. 

 

UnpackContent, RouteOnAttribute, MergeContent, PutSFTP ν”„λ‘œμ„ΈμŠ€λ₯Ό 처음 μ‚¬μš©ν•΄ λ³΄μ•˜λŠ”λ°, μ‚¬μš©ν•˜λ©΄μ„œ μ–΄λ–€ ν”„λ‘œμ„ΈμŠ€μΈμ§€ μ•Œμ•„λ³΄λ©΄μ„œ μ μš©ν•˜λŠλΌ μ‹œκ°„μ΄ 더 였래 걸렸던거 κ°™λ‹€