Spring/Spring & Spring Boot
์ฝ๋๋ฅผ ๋ณด๋ค๊ฐ Example ์ธํฐํ์ด์ค๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ๊ฐ ์์๋ค. Example๋ฅผ ์ธ์ ์ฌ์ฉํ๊ณ , ์ ์ฌ์ฉํ๋์ง ์์๋ณด์. Example ์ธํฐํ์ด์ค๋ ?Spring Data Core์์ ์ ๊ณตํ๋ ๊ฒ์ผ๋ก, QBE(Query By Example)์ ์ง์ํ๋ ๊ธฐ๋ฅ์ด๋ค. ๊ฐ์ฒด ์์ฒด๋ฅผ ์ฟผ๋ฆฌ ์กฐ๊ฑด์ผ๋ก ํ์ฉํ์ฌ ๊ฐ๋จํ ๊ฒ์์ ์ํํ ์ ์๋ค. ์ฃผ์ ๊ฐ๋
๋๋ฉ์ธ ๊ฐ์ฒด(์ํฐํฐ) ์์ฒด๋ฅผ ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ํ์ฉNull ๊ฐ์ ๋ฌด์ (ํ๋ ๊ฐ์ด ์๋ ๊ฒ๋ง ๊ฒ์ ์กฐ๊ฑด์ผ๋ก ์ฌ์ฉ)๋์ ์ฟผ๋ฆฌ ์์ฑ ๊ฐ๋ฅ๋ณ๋์ JPQL์ด๋ SQL์ ์์ฑํ ํ์ ์์๐ ๊ฐ๋จํ ๊ฒ์์์๋ ์ ์ฉํ๊ฒ ์ผ๋.. ์ค๋ฌด์์๋ ๋ณต์กํ ๊ฒ์์ด ๋ ๋ง์ด ๋๋ฌธ์ ๊ทธ๋ฅ ์ ๋ฐ ๊ธฐ๋ฅ์ด ์๊ตฌ๋ ์ ๋๋ง ์์๋ ๋ ๊ฒ ๊ฐ๋ค. ์ฌ์ฉ ์์User probe = new User();..
Spring/Spring & Spring Boot
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
Amazon EventBridge ์ค์ผ์ค๋ฌ๋ฅผ ์ด์ฉํด์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ฐ์ด์ค๋ฅผ ์คํ์์ผฐ๋ค.์ค์ผ์ค ๋ฐ์ดํฐ๊ฐ ๊ณ์ ๋์ด๋๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ update (๋๋ create)ํ์ง ํ ๋ฌ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ญ์ ๋๋ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด์ผํ๋ค. Spring Batch ์ฌ์ฉ์ ์ฒ์์ด๋ผ ์ด๋ป๊ฒ ํ ์ง ๊ตฌ๊ธ๋งํ๋ ์ค์ ๋ค์ด๋ฒ ๊ฐ๋ฐ์ ๋ถ ์ค Spring Batch๋ฅผ ๋ ์ฐ์ํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ์ํ ๊ฒ์๊ธ์ ๋ณด๊ฒ ๋์๋ค. ์ฌ์ง์ด ์ฝํ๋ฆฐ์ผ๋ก ํ์ฉํ๋ ๋ฐฉ๋ฒ๊น์ง ์์ด์ ์ฐธ๊ณ ํ๊ธฐ ์ข์ ๊ธ์ด์๋ค๋ง..๐๐ํ์ง๋ง ์ฌ์ฉํ๋ ค๊ณ ๋ฏ์ด๋ณด๋.. ๋ฌธ์ ๊ฐ ์์ด์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ํํ๋ค๐ฅฒ (๋ฐ ๊ธ ์ฐธ๊ณ ) Spring Batch๋ฅผ ํ์ฉํด ๊ฐ๋ฐํ ๊ฒ์ ๊ธฐ๋กํด๋ณด๊ฒ ๋ค(์ฐธ๊ณ ๋ก ํ๋ก์ ํธ์์ ํ์ฉํ Spring Batch๋ 4.X.X์ด๋ค.)๐ช ๋ชฉํ : up..
Spring/Spring & Spring Boot
SSE (Server-Sent Events)๋?์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ์ ์กํ๋ ๊ธฐ์ ์ด๋ค. ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ์ง์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค. ๋ํ ์ค์๊ฐ ์
๋ฐ์ดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ(์ฃผ์ ์์ธ, ์ค์๊ฐ ์ฑํ
, ์๋ฆผ ๋ฑ)์ ์ฌ์ฉ๋๋ฉฐ HTTP ๊ธฐ๋ฐ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ๊ฐ์ ๋จ๋ฐฉํฅ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํ๋ฏ๋ก ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด์ง ์๊ณ ๋ ์๋ฒ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ ์๊ณ , ํด๋ผ์ด์ธํธ๋ ์น ๋ธ๋ผ์ฐ์ ์ EventSource API๋ฅผ ์ฌ์ฉํด ์๋ฒ๋ก๋ถํฐ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ณ ์ฒ๋ฆฌํ๋ค. ํ๋ก์ ํธ์์ ์จ๋ฐAI์๊ฒ ์ง๋ฌธ์ ์์ฒญํ๋ฉด ์๋ต์ ์ค์๊ฐ์ผ๋ก ๋ฐ๊ธฐ ์ํด ์ฌ์ฉํ๊ณ ์ ํ๋ค.์ค์ ๋ก ํ๋ก์ ํธ์์ ์ด๋ป๊ฒ ๊ตฌํํ๋์ง ์์๋ณด์ ! WebClientService ์ฝ๋ ๊ตฌํ - ๋น๋๊ธฐ๋ก ..
Spring/Spring & Spring Boot
์ธ์ฆ๋ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ๋ค์ํ๋ค. Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); String currentPrincipalName = authentication.getName(); UserDetails userDetails = (UserDetails) authentication.getPrincipal(); ์์ ์๋ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์ด์ฉํด์ ์ ์ ๋ฅผ ๋ถ๋ฌ์๋ค. SecurityContext์ ์ธ์ฆ๋ Authentication ๊ฐ์ฒด๋ฅผ ๋ฃ์ด๋๊ณ ํ์ฌ ์ค๋ ๋ ๋ด์์ ๊ณต์ ๋์ด ๊ด๋ฆฌํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด getName()๋ง ๋ถ๋ฅผ ์๋ฐ์ ์๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ ์๋..
Spring/Spring & Spring Boot
Spring Security๋ฅผ ๊ตฌํํ๋ค๋ณด๋ฉด filter์ interceptor๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ํํฐ์ ์ธํฐ์
ํฐ์ ๋ํ ๊ฐ๋
์ ์ดํดํ๋ฉด Spring Security ๊ณผ์ ์ ํ์
ํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๊ธฐ์ ๊ธฐ๋กํ๋ค! โจ ์ฉ๋ - ๊ณตํต๊ด์ฌ์ฌํญ (Cross-cutting concern) ๐ ์น ์๋น์ค์์ ๋ก๊ทธ์ธ์ ํด์ผ ๋ค์ํ ๊ธฐ๋ฅ์ ์ด์ฉํ ์ ์์ผ๋ฉฐ ๋ก๊ทธ์ธ ์ฌ๋ถ์ ๋ฐ๋ผ ์ ๊ทผํ ์ ์๋ ํ์ด์ง๊ฐ ๋ค๋ฅด๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํ ๋ชจ๋ ์ปจํธ๋กค๋ฌ ๋ก์ง์ ๋ก๊ทธ์ธ๊ณผ ๊ด๋ จ๋ ์ฝ๋๋ฅผ ์์ฑํด์ผํ ํ
๋ฐ... ์ด๋ ๊ฒ ๋๋ค๋ฉด ์ฝ๋๊ฐ ์ค๋ณต๋ ๊ฒ์ด๊ณ ๋ณต์กํด์ง ๊ฒ์ด๋ค. ๋ง์ ๋ก์ง์์ ๊ณตํต์ผ๋ก ๊ด์ฌ ์๋ ๋ถ๋ถ์ ๊ณตํต ๊ด์ฌ ์ฌํญ์ด๋ผ๊ณ ํ๋ฉฐ ์ด๋ฅผ ์คํ๋ง์ AOP๋ก๋ ํด๊ฒฐํ ์ ์์ง๋ง ์น์์๋ ์๋ธ๋ฆฟ ํํฐ์ ์คํ๋ง ์ธํฐ์
ํฐ๋ก ์ฒ๋ฆฌํ ์ ์..