@Embeddable ์‚ฌ์šฉ ์‹œ NullPointerException์— ๋Œ€๋น„ํ•˜๊ธฐ

@Embeddable ์‚ฌ์šฉ ์‹œ NullPointerException์— ๋Œ€๋น„ํ•˜๊ธฐ

1. ๊ฐœ์š”๋ฌธ๋“ DB์˜ Member ํ…Œ์ด๋ธ”์„ ๋ณด๋˜ ์ค‘ ๋„ˆ๋ฌด ๋งŽ์€ Null ๊ฐ’์ด ์กด์žฌํ•˜๋Š” ๊ฒŒ ์‹ ๊ฒฝ ์“ฐ์˜€๋‹ค. ํšŒ์›์˜ Role์€ ๊ธฐ์—…, ๋…ธ๋™์ž๋กœ ๋‚˜๋ˆ ์ ธ์žˆ๊ณ  ๊ฐ Role๋งˆ๋‹ค ๊ฐ–๋Š” ํ•„๋“œ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— @Embeddable๋กœ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค ๋ณด๋‹ˆ ๊ธฐ์—…์€ ๋…ธ๋™์ž๊ฐ€ ๊ฐ–๋Š” ์ปฌ๋Ÿผ์€ ์ „๋ถ€ null์ด๊ณ , ๋…ธ๋™์ž๋Š” ๊ธฐ์—…์ด ๊ฐ–๋Š” ์ปฌ๋Ÿผ์€ ์ „๋ถ€ null์ด์—ˆ๋‹ค.  ํ”„๋กœ์ ํŠธ์—์„  Spring Data JPA์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด์ธ Hibernate๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, Hibernate ๊ตฌํ˜„์ฒด์—์„  @Embedded ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ•„๋“œ์˜ ๊ฐ’์ด null์ด๋ฉด ํ•ด๋‹น ๊ฐ์ฒด ์ž์ฒด๋ฅผ null๋กœ ์„ค์ •ํ•˜๊ฒŒ ๋œ๋‹ค.๋”ฐ๋ผ์„œ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ• ๋•Œ NullPointerException์ด ๋ฐœ์ƒํ•ด๋ฒ„๋ฆฐ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค...

  • textsms
ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋‚˜๊ฐ€๋Š” ์ฟผ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์„ธ์–ด๋ณด์ž (Hibernate StatementInspector, Spring AOP)

ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋‚˜๊ฐ€๋Š” ์ฟผ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์„ธ์–ด๋ณด์ž (Hibernate StatementInspector, Spring AOP)

1. ๊ฐœ์š”JPA๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ง€์—ฐ ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋ฌด๋ถ„๋ณ„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์˜๋„ ํ•˜์ง€ ์•Š์€ ์ˆ˜๋งŽ์€ ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ํ”ํžˆ ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ N+1 ๋ฌธ์ œ๋ผ๊ณ  ํ•œ๋‹ค.  ์ด๋ ‡๋“ฏ ORM์„ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฐœ์ˆ˜์˜ ์ฟผ๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•˜๊ธฐ๋Š” ์‰ฝ์ง€ ์•Š๋‹ค. ๋กœ๊ทธ์— ์ฟผ๋ฆฌ๊ฐ€ ์ถœ๋ ฅ๋˜๊ธด ํ•˜์ง€๋งŒ ํ•˜๋‚˜ํ•˜๋‚˜ ์„ธ๊ณ  ์žˆ์ž๋‹ˆ ์ƒ์‚ฐ์„ฑ์ด ๋„ˆ๋ฌด ๋–จ์–ด์ง„๋‹ค.  ๋ฐฉ๋ฒ•์ด ์—†์„๊นŒ ์ฐพ์•„๋ณด๋‹ค ์ฟผ๋ฆฌ ์นด์šดํ„ฐ์— ๋Œ€ํ•ด ์•Œ๊ฒŒ๋๋‹ค.  ๋Œ€ํ‘œ์ ์ธ, ๋˜ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ Hibernate์—์„œ ์ฟผ๋ฆฌ๋ฌธ์„ ๊ฐ€๋กœ์ฑŒ ์ˆ˜ ์žˆ๋Š” StatementInspector๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋ก  Spring AOP๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.  ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์•Œ์•„๋ณด๋ ค ํ•œ๋‹ค. ๊ฒฐ๋ก ๋ถ€ํ„ฐ ์–˜๊ธฐํ•˜์ž๋ฉด ๋‚˜๋Š” Spring AOP๋ฅผ ํ™œ์šฉํ•œ ..

  • textsms
AWS Lambda๋ฅผ ์ด์šฉํ•œ Image Resize ๋„์ž… (์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ์„ฑ๋Šฅ ๊ฐœ์„ )

AWS Lambda๋ฅผ ์ด์šฉํ•œ Image Resize ๋„์ž… (์ธ๋„ค์ผ ์ด๋ฏธ์ง€ ์„ฑ๋Šฅ ๊ฐœ์„ )

1. Lambda ๋„์ž… ์ด์œ ๋งŒ์•ฝ 50X50 ์‚ฌ์ด์ฆˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ๋กœ๋”ฉํ•˜๋Š”๋ฐ 10MB ์งœ๋ฆฌ 400X400 ์‚ฌ์ด์ฆˆ์˜ ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•œ๋‹ค๋ฉด ๋ฆฌ์†Œ์Šค ๋‚ญ๋น„๊ฐ€ ์‹ฌํ•˜๋‹ค. ์œ„์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ํ•œ ๊ฐœ๊ฐ€ ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉ์ž๊ฐ€ ์ฒด๊ฐํ•˜๋Š” ์‘๋‹ต ์‹œ๊ฐ„์€ ๊ฝค ํด ๊ฒƒ์ด๋‹ค.  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์‚ฌ์ด์ง•(RTesizing)๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ์šฉ๋Ÿ‰์„ ์ค„์ž„์œผ๋กœ์จ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์€ ์ด๋ฏธ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ ์žˆ๋‹ค.  ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ž‘์—… ๊ฐ™์€ ๊ฒฝ์šฐ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ ์ž‘์—…์„ ๋Œ๋ ค๋ฒ„๋ฆฌ๋ฉด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๋ชป๋ฐ›๋Š” ํ˜„์ƒ์ด ์ƒ๊ธธ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๊ณ  ๋”ฐ๋กœ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ „์šฉ ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค์–ด ์˜ฌ๋ฆฐ๋‹ค ํ•ด๋„, ๋ชจ๋“  ์‚ฌ์šฉ์ž๊ฐ€ ํ•ญ์ƒ ์ด๋ฏธ์ง€ ๋ฆฌ์‚ฌ์ด์ง• ์ž‘์—… ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋„ ์•„๋‹ˆ๊ธฐ์— ์„œ๋ฒ„๋ฅผ ๊ณ„..

  • textsms
์ง€๋„์˜ ๊ฒฝ๊ณ„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ๊ทผ์ฒ˜ ์ผ์ž๋ฆฌ ๊ณต๊ณ  ์กฐํšŒ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

์ง€๋„์˜ ๊ฒฝ๊ณ„ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ๊ทผ์ฒ˜ ์ผ์ž๋ฆฌ ๊ณต๊ณ  ์กฐํšŒ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ

1. ๊ฐœ์š”์ง„ํ–‰์ค‘์ธ ํ”„๋กœ์ ํŠธ์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ์ž๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ์ง€๋„ ํ™”๋ฉด์— ์ผ์ž๋ฆฌ๋ฅผ ๋„์›Œ์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ฒŒ๋๋‹ค.  ์—์–ด๋น„์—”๋น„ ๊ฐ™์€ ์ˆ™๋ฐ• ์—…์†Œ, ๋„ค์ด๋ฒ„ ๋ถ€๋™์‚ฐ๊ฐ™์€ ๋ถ€๋™์‚ฐ ํ”Œ๋žซํผ์—์„œ๋„ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.  ์šฐ๋ฆฌ ์„œ๋น„์Šค์—๋„ ์ด์™€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๊ณ , ์•„๋ž˜๋Š” ๊ฐœ๋ฐœ ์ค‘์ธ ์„œ๋น„์Šค์˜ ์ดˆ์•ˆ ๋””์ž์ธ์ด๋‹ค.  ๊ฐ ์ผ์ž๋ฆฌ ๋ชจ์ง‘ ๊ณต๊ณ ์—๋Š” ์ด๋ฏธ ์œ„๋„, ๊ฒฝ๋„ ๋ฐ์ดํ„ฐ๋ฅผ ํ•จ๊ป˜ ๊ฐ–๊ณ  ์žˆ๋‹ค.๋”ฐ๋ผ์„œ ํ˜„์žฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณด๊ณ  ์žˆ๋Š” ์ง€๋„์˜ ๋ถ๋™์ชฝ, ๋‚จ์„œ์ชฝ ์œ„๋„, ๊ฒฝ๋„๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ํ›„ ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ ค ์กฐํšŒํ•ด ์˜ฌ ์ƒ๊ฐ์ด๋‹ค.   ์‚ฌ์‹ค ํ•™์Šต์ด ๊ฝค๋‚˜ ํ•„์š”ํ•˜๊ฑฐ๋‚˜, ์ •๋ฆฌํ•  ๊ฒŒ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ํฌ์Šคํ„ฐ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ํŽธ์ธ๋ฐ ์ด๋ฒˆ์—” ๊ตฌ๊ธ€๋ง ํ–ˆ์„ ๋•Œ ์ž๋ฃŒ๊ฐ€ ๋„ˆ๋ฌด ์—†์–ด์„œ ์ฒ˜์Œ ํ•˜์‹œ๋Š” ๋ถ„๋“ค์ด๊ฒŒ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๋„์›€์ด ๋˜๊ณ ์ž ์“ฐ๊ณ ์žˆ๋‹ค.      2. ์นด์นด์˜ค Map Key ๋ฐœ..

  • textsms
[Spring Batch] ์Šคํ”„๋ง ๋ฐฐ์น˜ ์ž‘์—… ์‹คํŒจ์— ๋Œ€์ฒ˜ํ•˜๊ธฐ : Skip, Retry

[Spring Batch] ์Šคํ”„๋ง ๋ฐฐ์น˜ ์ž‘์—… ์‹คํŒจ์— ๋Œ€์ฒ˜ํ•˜๊ธฐ : Skip, Retry

Repeat์Šคํ”„๋ง ๋ฐฐ์น˜๋Š” ํŠน์ • ์กฐ๊ฑด์ด ์ถฉ์กฑ๋  ๋•Œ๊นŒ์ง€ Job ๋˜๋Š” Step์„ ๋ฐ˜๋ณตํ•˜๋„๋ก ๋ฐฐ์น˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ๋ฐฐ์น˜์—์„  Step๊ณผ Chunk์˜ ๋ฐ˜๋ณต์„ RepeateOperation์„ ์‚ฌ์šฉํ•ด ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค.๊ธฐ๋ณธ ๊ตฌํ˜„์ฒด๋ก  RepeatTemplate์„ ์ œ๊ณตํ•œ๋‹ค.   Step์€ RepeatTemplate์„ ์‚ฌ์šฉํ•ด Tasklet์„ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹คํ–‰ํ•œ๋‹ค. ChunkOrientedTasklet์€ ๋‚ด๋ถ€์ ์œผ๋กœ ChunkProvider๋ฅผ ํ†ตํ•ด ItemReader๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ฌ ๊ฒƒ์„ ์ง€์‹œํ•œ๋‹ค. ChunkProvider๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ RepeatTemplate์„ ๊ฐ–๊ณ  ์žˆ๊ณ  ์ด๋ฅผ ์ด์šฉํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ItemReader์—๊ฒŒ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋„๋ก ์ฒ˜๋ฆฌํ•œ๋‹ค.    FaultTolerant์Šคํ”„๋ง ๋ฐฐ์น˜๋Š” Jo..

  • textsms
๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๊ณผ ํ•ด๊ฒฐ ๊ณผ์ •

๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ๊ณผ ํ•ด๊ฒฐ ๊ณผ์ •

1. ๊ฐœ์š”ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ์ฐฝ์—… ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์ด ๋Œ€๋ถ€๋ถ„ ๋๋‚˜๊ณ , ์‚ฌ์—…์ž๊ฐ€ ๋‚˜์™€์•ผ ํ•  ์ˆ˜ ์žˆ๋Š” SMS, ์•Œ๋ฆผํ†ก ๋ถ€๋ถ„๊ณผ ๋ฑ…ํ‚น ๊ธฐ๋Šฅ๋งŒ์ด ๋‚จ์•˜๋‹ค.  ์ง€๋‚œ 5๊ฐœ์›”๊ฐ„ ์ •์‹ ์—†์ด ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฏธํกํ•œ ๋ถ€๋ถ„์ด ๊ฝค๋‚˜ ๋ณด์˜€๊ณ  ์ตœ๊ทผ์—” ํ•˜๋‚˜ํ•˜๋‚˜ ๋ฆฌํŽ™ํ„ฐ๋ง ๊ณผ์ •์„ ๋ฐŸ๊ณ ์žˆ๋‹ค.  ๊ผผ๊ผผํžˆ ์ง€๋‚œ ์ฝ”๋“œ๋ฅผ ์‚ดํ”ผ๋˜ ์ค‘ ๋™์‹œ์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๋งŒํ•œ ๋กœ์ง์ด ๋ฐœ๊ฒฌ๋๊ณ  ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž Thread-Safe, ๋™์‹œ์„ฑ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๊ฒŒ ๋๋‹ค. ์•„๋ž˜ ๊ฒŒ์‹œ๊ธ€์—์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ๋‚ด์šฉ๋“ค์„ ์ •๋ฆฌํ•ด๋’€๋‹ค.  https://dgjinsu.tistory.com/53 ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ ์‹œ ๊ผญ ์•Œ์•„์•ผ ํ•  ๋‚ด์šฉ - Thread-Safe๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ํ™•์‹คํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ž์›์„ ๊ณต์œ ํ•œ๋‹ค๋ฉด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๋ฌธ์ œ๋ฅผ ๋ฐœ์ƒ์‹œ..

  • textsms