๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

์ „์ฒด ๊ธ€396

Spring Batch (6) ExecutionContext ๐Ÿ“Ž ExecutionContext ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” Step, StepExecution์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” JobExecution ๋ฐ StepExecution ๊ฐ์ฒด์— ์กด์žฌํ•˜๋Š” ExecutionContext์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ ์ฝ”๋“œ๋Š” GitHub์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ƒ) ๐Ÿ“Œ ํ•ด๋‹น ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ Spring Batch ExecutionContext (JobExecution, StepExecution) ๐Ÿ“Œ ExecutionContext ๊ธฐ๋ณธ ๊ฐœ๋… Spring Batch ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ง€์›ํ•˜๋Š” key/value ํ˜•์‹ ๊ณต์œ  ๊ฐ์ฒด๋กœ Job์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„ ๊ณต์œ  ๋ฒ”์œ„ Job ๋ฒ”์œ„ - ๊ฐ Job์˜ JobExecution์— ์ €์žฅ๋˜๋ฉฐ ์„œ๋กœ ๋‹ค๋ฅธ Job ๊ฐ„์—๋Š” ๊ณต์œ ๊ฐ€.. 2022. 11. 5.
Spring Batch (5) Step, StepExecution ๐Ÿ“Ž Step, StepExecution ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” Job, JobInstance, JobParameter, JobExecution์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Job์„ ๊ตฌ์„ฑํ•˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„์ธ Step, StepExecution ๊ฐ์ฒด์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ ์ฝ”๋“œ๋Š” GitHub์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ƒ) ๐Ÿ“Œ ํ•ด๋‹น ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ Spring Batch Step Spring Batch StepExecution ๐Ÿ“Œ Step ๊ธฐ๋ณธ ๊ฐœ๋… Step์€ ๋…๋ฆฝ์ ์ด๊ณ  ์ˆœ์ฐจ์ ์ธ Batch Job์„ ์บก์Šํ™”ํ•˜๋Š” ๋„๋ฉ”์ธ ๊ฐ์ฒด Step์—๋Š” ์‹ค์ œ Batch ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ Step์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›ํ•˜๋Š” ๋งŒํผ ๊ฐ„๋‹จํ•˜๊ฑฐ๋‚˜ ๋ณต์žกํ•  ์ˆ˜ ์žˆ์Œ ๋ชจ๋“  Job์€ ํ•˜๋‚˜ ์ด์ƒ์˜ Step์œผ๋กœ.. 2022. 11. 3.
Spring Batch (4) Job, JobInstance, JobParameters, JobExecution ๐Ÿ“Ž Job, JobInstance, JobParameters, JobExecution ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” Spring Batch์˜ Meta Data Schema์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Job์˜ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ ๊ฐ์ฒด์ธ JobInstance, JobParameters, JobExecution ๊ฐ์ฒด์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ ์ฝ”๋“œ๋Š” GitHub์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜ƒ) ๐Ÿ“Œ ํ•ด๋‹น ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ Spring Batch Job Spring Batch JobInstance Spring Batch JobParameters Spring Batch JobExecution ๐Ÿ“Œ Job ๊ธฐ๋ณธ ๊ฐœ๋… ๋ฐฐ์น˜ ๊ณ„์ธต ๊ตฌ์กฐ์—์„œ ์ตœ์ƒ์œ„์˜ ๊ฐœ๋…์œผ๋กœ ์ „์ฒด ๋ฐฐ์น˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์บก์Šํ™”ํ•œ ์—”ํ‹ฐํ‹ฐ Job Configuration์„ ํ†ตํ•ด ์ƒ.. 2022. 11. 1.
Spring Batch (3) DB ์Šคํ‚ค๋งˆ ๐Ÿ“Œ ํ•ด๋‹น ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ Spring Batch DB ์Šคํ‚ค๋งˆ ๋ถ„์„ ๐Ÿ“Œ Spring Batch DB ์Šคํ‚ค๋งˆ ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” Spring Batch์˜ ๊ฐœ์š” ๋ฐ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ, ์„ธํŒ… ๋ฐ ๊ฐ„๋‹จํ•œ Job ์‹คํ–‰์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Spring Batch์˜ Meta Data Schema์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Meta Data Schema ์Šคํ”„๋ง ๋ฐฐ์น˜์˜ ์‹คํ–‰ ๋ฐ ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ๋“ค(Job, Step, JobParameters ๋“ฑ)์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅ, ์—…๋ฐ์ดํŠธ, ์กฐํšŒ ๋“ฑ์˜ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํ‚ค๋งˆ ์ œ๊ณต ๊ณผ๊ฑฐ ๋ฐ ํ˜„์žฌ์˜ Batch ์‹คํ–‰์— ๋Œ€ํ•œ ์ •๋ณด(์„ฑ๊ณต, ์‹คํŒจ ์—ฌ๋ถ€)๋ฅผ ๊ด€๋ฆฌํ•จ์œผ๋กœ์„œ ๋ฐฐ์น˜์šด์˜ ๋ฐ ์žฅ์• ์™€ ๊ด€๋ จ๋œ ๋Œ€์ฒ˜ ๊ฐ€๋Šฅ DB์™€ ์—ฐ๋™ํ•  ๊ฒฝ์šฐ ํ•„์ˆ˜์ ์œผ๋กœ ๋ฉ”ํƒ€ ํ…Œ์ด๋ธ”์ด ์ƒ์„ฑ๋˜์–ด์•ผ ํ•จ DB ์Šคํ‚ค.. 2022. 10. 30.
[Java DeepDive] - List (ArrayList) ๐Ÿ“Ž List (ArrayList) ์•ˆ๋…•ํ•˜์„ธ์š”, ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Java์˜ Collection Framework ์ค‘ ํ•˜๋‚˜์ธ List์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. List ์ธํ„ฐํŽ˜์ด์Šค๋Š” Collection ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Collection ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ, ์‚ญ์ œ, ์‚ฝ์ž… ๊ธฐํƒ€ ๋“ฑ๋“ฑ์˜ ๋กœ์ง์„ ๋ณด๋‹ค ํŽธํ•˜๊ฒŒ API๋กœ ์ž‘์„ฑํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋” ๋„์™€์ฃผ๋Š” ์ž๋ฐ”์˜ ์ปฌ๋ ‰์…˜ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์œ„ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด Collection์€ collection hierarchy์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ด๋ฉฐ ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ธ List, Queue, Set ๋“ฑ์ด ์ด๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๊ณ , List ์ธํ„ฐํŽ˜์ด์Šค๋Š” ArrayList, Vector, LinkedList์˜ ๊ตฌํ˜„์ฒด๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” List ์ธํ„ฐํŽ˜.. 2022. 10. 29.
Spring Batch (2) ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ๋ฐ ์˜์กด์„ฑ ์„ค์ •, Hello World ๐Ÿ“Œ ํ•ด๋‹น ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ Spring Batch ํ”„๋กœ์ ํŠธ ์„ค์ • Spring Batch ์„ค์ • ๋‚ด๋ถ€ Spring Batch Hello World ๐Ÿ“Œ Spring Batch ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์€ IntelliJ, Java 11, Gradle, MySQL(Docker), H2, Spring Boot, Batch ๋“ฑ์„ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. (ํ”„๋กœ์ ํŠธ ์„ค์ • ๊ด€๋ จ ์„ค๋ช…์€ ์—†์œผ๋‹ˆ GitHub๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.) ๐Ÿ“Œ Spring Batch ์˜์กด์„ฑ ์„ค์ • ์Šคํ”„๋ง ๋ฐฐ์น˜๋ฅผ ์ž‘๋™์‹œํ‚ค๊ธฐ ์œ„ํ•ด ๋ฉ”์ธ ํด๋ž˜์Šค์— @EnableBatchProcessing ์–ด๋…ธํ…Œ์ด์…˜์„ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;.. 2022. 10. 29.
Spring Batch (1) ๊ฐœ์š” ํšŒ์‚ฌ์—์„œ Spring Batch ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋Œ€์šฉ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๊ฐ€ ์•„๋‹Œ, ๋‹จ์ˆœ 1ํšŒ์„ฑ ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ Spring Batch ํ”„๋กœ์ ํŠธ๋กœ ์กฐ๊ธˆ์”ฉ ์ด๊ด€ํ•˜๊ณ  ์žˆ๋Š”๋ฐ์š”, ๊ธฐ์กด์— ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ํŒŒ์•…ํ•œ ํ›„ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ Spring Batch์˜ ์‚ฌ์ƒ์ด๋‚˜ ๊ฐœ๋…, ์œ ์šฉํ•œ ๊ธฐ๋Šฅ(skip, retry, chunk, listener ๋“ฑ๋“ฑ)๋“ค์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์ง€ ๋ชปํ•œ์ฑ„ ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ Spring Batch ํ”„๋กœ์ ํŠธ์˜ ๋ฐฐ๊ฒฝ๋ถ€ํ„ฐ ๊ฐœ๋…, ์šฉ์–ด, ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๋“ฑ๋“ฑ์— ๋Œ€ํ•ด ์ •๋ฆฌํ•˜์—ฌ ํ•™์Šตํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ Spring Batch ์†Œ๊ฐœ Spring Batch ๋ฐฐ๊ฒฝ Spring Batch ์•„ํ‚คํ…์ฒ˜ Spring Batch ๊ตฌ.. 2022. 10. 28.
[Java DeepDive] - String (2) ๋‚ด์žฅ ํ•จ์ˆ˜ ๐Ÿ“Ž String (2) - ๋‚ด์žฅ ํ•จ์ˆ˜ ์•ˆ๋…•ํ•˜์„ธ์š”, ์ง€๋‚œ ์‹œ๊ฐ„์—๋Š” String - ๋ฌธ์ž์—ด ์ƒ์„ฑ ๊ด€๋ จํ•ด์„œ ์‚ดํŽด๋ณด์•˜๋Š”๋ฐ์š”, ์ด๋ฒˆ์—๋Š” String ํด๋ž˜์Šค์— ์กด์žฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค ์ค‘ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•ด ๋‚ด๋ถ€ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฒ„์ „์€ Java 11์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.) String ํด๋ž˜์Šค ๋‚ด์˜ ๋ฉ”์„œ๋“œ๋“ค์€ ์œ„ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๊ต‰์žฅํžˆ ๋งŽ์ด ์กด์žฌํ•˜๋Š”๋ฐ์š”, ๊ฐœ์ธ์ ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ยท String.length() @Stable private final byte[] value; ... static final boolean COMPACT_STRINGS; static { COMPACT_STRINGS = true; } ... public int lengt.. 2022. 10. 23.
[Java DeepDive] - String (1) ๋ฌธ์ž์—ด ์ƒ์„ฑ ๐Ÿ“Ž String (1) - ๋ฌธ์ž์—ด ์ƒ์„ฑ ์ž๋ฐ”์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ํƒ€์ž… ์ค‘ ํ•˜๋‚˜์ธ ๋ฌธ์ž์—ด(String)์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. (์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฒ„์ „์€ Java 11์„ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.) String ๋ฌธ์ž์—ด ์ƒ์„ฑ - new, literal ๋ณดํ†ต ์ž๋ฐ”์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋Š” new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜์ง€๋งŒ, String์˜ ๊ฒฝ์šฐ ๋ฆฌํ„ฐ๋Ÿด(literal)์„ ํ†ตํ•ด ๊ฐ’์„ ๋ฐ”๋กœ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. public static void main(String[] args) { final String str1 = "JuHyun"; // [1] final String str2 = "JuHyun"; // [2] final String str3 = new String("JuHyun"); .. 2022. 10. 10.
Spring + MyBatis์—์„œ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์™€ ๊ฐ์ฒด๊ฐ€ ๋งคํ•‘์ด ๋˜๋Š” ๊ณผ์ • ๐Ÿงท Spring + MyBatis์—์„œ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์™€ ๊ฐ์ฒด๊ฐ€ ๋งคํ•‘์ด ๋˜๋Š” ๊ณผ์ • ์Šคํ”„๋ง์—์„œ ๋งˆ์ด๋ฐ”ํ‹ฐ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, Select ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์™€ ๊ฐ์ฒด(Dto)๊ฐ€ ์–ด๋– ํ•œ ์ž‘์—…์„ ํ†ตํ•ด ๋งคํ•‘์ด ๋˜๋Š”์ง€ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜๊ณ  ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ๋งคํ•‘ ๊ณผ์ •์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. (๋‹น์—ฐํžˆ ํ‹€๋ฆฐ ๋‚ด์šฉ์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ”ผ๋“œ๋ฐฑ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜‚) ๐ŸŒˆ ๊ฐœ์š” Spring๊ณผ MyBatis์—์„œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์™€ ๊ฐ์ฒด์˜ ๋งคํ•‘์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด ์‚ดํŽด๋ด…๋‹ˆ๋‹ค. ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์–ด๋– ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋งคํ•‘์„ ์ง„ํ–‰ํ•˜๋Š”์ง€, ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ๋“ฑ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿ”– ๊ฒฐ๋ก  ํฌ์ŠคํŒ…์ด ๊ฝค๋‚˜ ์žฅ๋ฌธ์ด๊ธฐ์—,, ๋งคํ•‘ ๊ณผ์ •์— ๋Œ€ํ•ด ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋ง์”€๋“œ๋ฆฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ์ƒ์„ฑ์ž(NoArgs)๋งŒ ์กด์žฌํ•  ๊ฒฝ์šฐ, ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์™€ ๊ฐ์ฒด์˜ ๋งคํ•‘์ด ์ •์ƒ์ ์œผ๋กœ ์ง„.. 2022. 10. 3.
๋ฐ˜์‘ํ˜•