Spring/Spring & Spring Boot

Spring/Spring & Spring Boot

[Spring] Example<T> ์ธํ„ฐํŽ˜์ด์Šค

์ฝ”๋“œ๋ฅผ ๋ณด๋‹ค๊ฐ€ Example ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ™œ์šฉํ•œ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ๋‹ค. Example๋ฅผ ์–ธ์ œ ์‚ฌ์šฉํ•˜๊ณ , ์™œ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.  Example ์ธํ„ฐํŽ˜์ด์Šค๋ž€ ?Spring Data Core์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ, QBE(Query By Example)์„ ์ง€์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค. ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์ฟผ๋ฆฌ ์กฐ๊ฑด์œผ๋กœ ํ™œ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.    ์ฃผ์š” ๊ฐœ๋…๋„๋ฉ”์ธ ๊ฐ์ฒด(์—”ํ‹ฐํ‹ฐ) ์ž์ฒด๋ฅผ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์œผ๋กœ ํ™œ์šฉNull ๊ฐ’์€ ๋ฌด์‹œ (ํ•„๋“œ ๊ฐ’์ด ์žˆ๋Š” ๊ฒƒ๋งŒ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉ)๋™์  ์ฟผ๋ฆฌ ์ƒ์„ฑ ๊ฐ€๋Šฅ๋ณ„๋„์˜ JPQL์ด๋‚˜ SQL์„ ์ž‘์„ฑํ•  ํ•„์š” ์—†์Œ๐Ÿ‘‰ ๊ฐ„๋‹จํ•œ ๊ฒ€์ƒ‰์—์„œ๋Š” ์œ ์šฉํ•˜๊ฒ ์œผ๋‚˜.. ์‹ค๋ฌด์—์„œ๋Š” ๋ณต์žกํ•œ ๊ฒ€์ƒ‰์ด ๋” ๋งŽ์ด ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์ €๋Ÿฐ ๊ธฐ๋Šฅ์ด ์žˆ๊ตฌ๋‚˜ ์ •๋„๋งŒ ์•Œ์•„๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.    ์‚ฌ์šฉ ์˜ˆ์‹œUser probe = new User();..

Spring/Spring & Spring Boot

[Spring] Spring Batch 5 ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Spring Batch 5 ์ตœ์†Œ Java 17 ํ•„์š” @EnableBatchProcessing ์–ด๋…ธํ…Œ์ด์…˜ ๊ถŒ์žฅ X ๐Ÿ‘‰ ์‚ฌ์šฉํ•  ์‹œ autoConfiguration ์ผ๋ถ€ ๊ธฐ๋Šฅ ์‚ฌ์šฉ ๋ถˆ๊ฐ€   Spring Batch ์ดˆ๊ธฐ ์„ค์ •spring: profiles: active: local batch: job: names: ${job.name:NONE}---spring: config: activate: on-profile: local datasource: url: jdbc:mysql://127.0.0.1:3306/house driver-class-name: com.mysql.cj.jdbc.Driver username: root password: jpa: ..

Spring/Spring & Spring Boot

[Spring] Spring Batch๋กœ ํ•œ ๋‹ฌ ์ง€๋‚œ ๋ฐ์ดํ„ฐ ์‚ญ์ œํ•˜๊ธฐ

Amazon EventBridge ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ด์šฉํ•ด์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋””๋ฐ”์ด์Šค๋ฅผ ์‹คํ–‰์‹œ์ผฐ๋‹ค.์Šค์ผ€์ค„ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ๋Š˜์–ด๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ update (๋˜๋Š” create)ํ•œ์ง€ ํ•œ ๋‹ฌ์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ญ์ œ๋˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•ด์•ผํ–ˆ๋‹ค. Spring Batch ์‚ฌ์šฉ์€ ์ฒ˜์Œ์ด๋ผ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ๊ตฌ๊ธ€๋งํ•˜๋˜ ์ค‘์— ๋„ค์ด๋ฒ„ ๊ฐœ๋ฐœ์ž ๋ถ„ ์ค‘ Spring Batch๋ฅผ ๋” ์šฐ์•„ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ์‹œํ•œ ๊ฒŒ์‹œ๊ธ€์„ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ์‹ฌ์ง€์–ด ์ฝ”ํ‹€๋ฆฐ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์žˆ์–ด์„œ ์ฐธ๊ณ ํ•˜๊ธฐ ์ข‹์€ ๊ธ€์ด์—ˆ๋‹ค๋งŒ..๐Ÿ˜Š๐Ÿ‘‰ํ•˜์ง€๋งŒ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋œฏ์–ด๋ณด๋‹ˆ..  ๋ฌธ์ œ๊ฐ€ ์žˆ์–ด์„œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ํƒํ–ˆ๋‹ค๐Ÿฅฒ (๋ฐ‘ ๊ธ€ ์ฐธ๊ณ ) Spring Batch๋ฅผ ํ™œ์šฉํ•ด ๊ฐœ๋ฐœํ•œ ๊ฒƒ์„ ๊ธฐ๋กํ•ด๋ณด๊ฒ ๋‹ค(์ฐธ๊ณ ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ํ™œ์šฉํ•œ Spring Batch๋Š” 4.X.X์ด๋‹ค.)๐Ÿ’ช ๋ชฉํ‘œ : up..

Spring/Spring & Spring Boot

[Spring/Spring Boot] SSE (Server-Sent Events)์™€ EventSource ์ ์šฉํ•ด๋ณด๊ธฐ

SSE (Server-Sent Events)๋ž€?์„œ๋ฒ„์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „์†กํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ง€์†์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ๋˜ํ•œ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ(์ฃผ์‹ ์‹œ์„ธ, ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…, ์•Œ๋ฆผ ๋“ฑ)์— ์‚ฌ์šฉ๋˜๋ฉฐ HTTP ๊ธฐ๋ฐ˜์œผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €์™€ ์›น ์„œ๋ฒ„ ๊ฐ„์˜ ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ฏ€๋กœ ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด์ง€ ์•Š๊ณ ๋„ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ณ , ํด๋ผ์ด์–ธํŠธ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์˜ EventSource API๋ฅผ ์‚ฌ์šฉํ•ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ”„๋กœ์ ํŠธ์—์„œ ์•จ๋ŸฐAI์—๊ฒŒ ์งˆ๋ฌธ์„ ์š”์ฒญํ•˜๋ฉด ์‘๋‹ต์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ›๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ ์ž ํ–ˆ๋‹ค.์‹ค์ œ๋กœ ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ์•Œ์•„๋ณด์ž !   WebClientService ์ฝ”๋“œ ๊ตฌํ˜„ - ๋น„๋™๊ธฐ๋กœ ..

Spring/Spring & Spring Boot

[Spring] Spring Security @AuthenticationPrincipal

์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•˜๋‹ค. Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String currentPrincipalName = authentication.getName(); UserDetails userDetails = (UserDetails) authentication.getPrincipal(); ์˜ˆ์ „์—๋Š” ์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์œ ์ €๋ฅผ ๋ถˆ๋Ÿฌ์™”๋‹ค. SecurityContext์— ์ธ์ฆ๋œ Authentication ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด๋‘๊ณ  ํ˜„์žฌ ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ๊ณต์œ ๋˜์–ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋ฉด getName()๋งŒ ๋ถ€๋ฅผ ์ˆ˜๋ฐ–์— ์—†๋‹ค. ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์€ ๋˜ ์—†๋Š”..

Spring/Spring & Spring Boot

[Spring] ํ•„ํ„ฐ(Filter)์™€ ์ธํ„ฐ์…‰ํ„ฐ(Interceptor)

Spring Security๋ฅผ ๊ตฌํ˜„ํ•˜๋‹ค๋ณด๋ฉด filter์™€ interceptor๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•„ํ„ฐ์™€ ์ธํ„ฐ์…‰ํ„ฐ์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๋ฉด Spring Security ๊ณผ์ •์„ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์šธ ๊ฒƒ์ด๊ธฐ์— ๊ธฐ๋กํ•œ๋‹ค! โœจ ์šฉ๋„ - ๊ณตํ†ต๊ด€์‹ฌ์‚ฌํ•ญ (Cross-cutting concern) ๐Ÿ‘‰ ์›น ์„œ๋น„์Šค์—์„œ ๋กœ๊ทธ์ธ์„ ํ•ด์•ผ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํŽ˜์ด์ง€๊ฐ€ ๋‹ค๋ฅด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•œ ๋ชจ๋“  ์ปจํŠธ๋กค๋Ÿฌ ๋กœ์ง์— ๋กœ๊ทธ์ธ๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ• ํ…๋ฐ... ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋ฉด ์ฝ”๋“œ๊ฐ€ ์ค‘๋ณต๋  ๊ฒƒ์ด๊ณ  ๋ณต์žกํ•ด์งˆ ๊ฒƒ์ด๋‹ค. ๋งŽ์€ ๋กœ์ง์—์„œ ๊ณตํ†ต์œผ๋กœ ๊ด€์‹ฌ ์žˆ๋Š” ๋ถ€๋ถ„์„ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์ด๋ผ๊ณ  ํ•˜๋ฉฐ ์ด๋ฅผ ์Šคํ”„๋ง์˜ AOP๋กœ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์›น์—์„œ๋Š” ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ์™€ ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ..

soogoori
'Spring/Spring & Spring Boot' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก