๐Ÿ”„ ๋ฆฌํŒฉํ† ๋ง

๐Ÿ’ป ์ฃผ์š” ๊ฐœ์„  ์‹œ๋„

โœ… Spring Batch

ํ˜„์žฌ ์ฒ˜๋ฆฌ ๋ฐ์ดํ„ฐ๋Š” 500๊ฑด ๋ฏธ๋งŒ์˜ ์†Œ๊ทœ๋ชจ์ง€๋งŒ, ํ–ฅํ›„ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์˜ ๋„์ž…์ด๋‚˜ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ Reader/Processor/Writer ์—ญํ•  ๋ช…ํ™•ํ™” ๋ฐ ์ตœ์ ํ™” ๋“ฑ ํ™•์žฅ์„ฑ ์ค‘์‹ฌ์˜ ๊ฐœ์„ ์„ ์ˆ˜ํ–‰ํ•˜๊ณ ์ž ํ•˜์˜€๋‹ค.

ํ˜„์žฌ Writer ๊ฐ์ฒด์—์„œ๋Š” Reader ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ ธ์˜จ API ๋ฐ์ดํ„ฐ์™€ DB ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•˜์—ฌ ์‹ค์ œ๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ Row๋งŒ ์„ ๋ณ„ํ•˜์ง€๋งŒ, ์—ฌ๊ธฐ์„œ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฐ€์ •ํ•˜๊ณ  ์ง„ํ–‰ํ•œ๋‹ค.

(1). ์ ์ ˆํ•œ PageSize ์„ ํƒ

StrString xmlResponse = webClient
				.get()
				.uri(uriBuilder -> uriBuilder.scheme("https")
						// ํ˜ธ์ŠคํŠธ ๊ฒฝ๋กœ
						.host(typeSafeProperties.getApiHost())
						// ์—”๋“œํฌ์ธํŠธ ๊ฒฝ๋กœ
						.path(typeSafeProperties.getApiRltmPath()) 
						// API ์„œ๋น„์Šคํ‚ค ์ „๋‹ฌ
						.queryParam("serviceKey", typeSafeProperties.getApiNormalEncoding())
						.queryParam("pageNo", currPage)
						// 100 -> 500
						.queryParam("numOfRows", 500)
						.build()
						)
				// API๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด
				.retrieve() 
				// API๋กœ๋ถ€ํ„ฐ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„๋•Œ ์˜ค๋ฅ˜ ๋ฐ˜ํ™˜
				.onStatus(status -> status.isError(), clientResponse -> Mono.error(new Exception()))
				// XML ์‘๋‹ต์„ String์œผ๋กœ ๋ฐ›์Œ
				.bodyToMono(String.class) 
				.retryWhen(Retry.fixedDelay(3, Duration.ofSeconds(2)))
				// ๋น„๋™๊ธฐ ์š”์ฒญ์„ ๋™๊ธฐ์ ์œผ๋กœ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ (Mono์˜ ๋‹จ์ผ ๊ฐ’ ์ฒ˜๋ฆฌ)
				.block(); 

๋ฌธ์ œ ์ธ์‹ :

Reader ๊ฐ์ฒด์—์„œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ PageSize๊ฐ€ ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด HTTP ์š”์ฒญ ํšŸ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜์—ฌ ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์ง€๊ณ , ์ „์ฒด ๋ฐฐ์น˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€๊ฒฝ์  :

ํ•ด๋‹น API๋Š” ์ด 413๊ฑด ๊ฐ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ธฐ์กด PageSize 100์€ ๋ฐฐ์น˜ ์‚ฌ์ดํด ๋‹น ์ฒ˜๋ฆฌ ๊ฑด์ˆ˜๊ฐ€ ์ ์ง€๋งŒ HTTP ์š”์ฒญ์ด 5ํšŒ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋ฉฐ ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ฆ๊ฐ€์‹œ์ผฐ๋‹ค.

๋”ฐ๋ผ์„œ PageSize๋ฅผ 500์œผ๋กœ ๋Š˜๋ ค ํ•œ ๋ฒˆ์— ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ์ˆ˜์ •ํ•˜์˜€๋‹ค.