๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ

๐Ÿ’Š Java & Kotlin & Spring54

AWS SQS + Spring Boot 3 + kotlin ์ธํ”„๋ผ ๊ตฌ์ถ•ํ•˜๊ธฐ ๊ด€๋ จ ๊ธ€AWS SQS + Spring Boot 3 + kotlin ์ธํ”„๋ผ ๊ตฌ์ถ•ํ•˜๊ธฐAWS SQS ๋ฅผ ์ด์šฉํ•œ DLQ ์„ค์ •message converter ๋ฅผ ์ด์šฉํ•œ sqs message serializerdlq ์—๋Ÿฌ ํ•ธ๋“ค๋ง ์ด๋ฒˆ ๊ธ€์˜ ๋ชฉํ‘œ๋Š” Spring Boot ๊ณผ kotlin ์„ ์ด์šฉํ•ด์„œ SQS ๋ฅผ ์—ฐ๋™ํ•˜๋Š” application ์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Spring Boot ๋กœ application ์„ ๋งŒ๋“ค์–ด๋ณด๋ฉฐ ๊ฐ„๋žตํ•˜๊ฒŒ SQS ์˜ ์„ค์ •์ด ์–ด๋–ค ๊ฒƒ์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. ๋ชฉ์ฐจprerequisitesIAM User ์ƒ์„ฑํ•˜๊ธฐsqs ์ƒ์„ฑํ•˜๊ธฐspring boot ์™€ ์—ฐ๋™SQS ์˜ ์—ฌ๋Ÿฌ ์„ค์ •๋“ค1. prerequisities๋‹ค์Œ ๋ฒ„์ „์œผ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.kotlin (java 21)Spring Boot 3.3.2a.. 2024. 7. 27.
Spring ์—์„œ @Async ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ThreadPoolTaskExecutor ๋ฅผ ๋“ฑ๋กํ•ด์ฃผ์ž TL;DR ์ด๋ฒˆ ๊ธ€์˜ ํ•ต์‹ฌ์„ ์š”์•ฝํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค @Async ์€? Spring ์—์„œ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ธฐ๋Šฅ ์™œ ThreadPoolTaskExecutor ๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ• ๊นŒ? Spring ์˜ ๊ธฐ๋ณธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ Executor ๋Š” ๋งค๋ฒˆ ์ƒˆ๋กœ์šด thread ๋ฅผ ์ƒ์„ฑ ThreadPool ์„ ์ด์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ์Œ ์‚ฌ์ „์ง€์‹ Executor ์™€ ThreadPoolExecutor Spring ์˜ TaskExecutor ThreadPoolExecutor ์ดํ•ดํ•˜๊ธฐ ์ •ํ™•ํžˆ๋Š” ThreadPoolExecutor ์•ˆ์—์„œ ์–ด๋–ค ๋กœ์ง์— ์˜ํ•ด ์ƒˆ๋กœ์šด thread ๋ฅผ ๋งŒ๋“œ๋Š”์ง€ ์•Œ์•„์•ผ ํ•จ ์„ค์ •์— ๋”ฐ๋ผ single thread ์ฒ˜๋Ÿผ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ ์ ์ ˆํ•œ ThreadPoolTaskExecutor ์˜ ์„ค์ • ๊ฐ’ ์ฐพ๊ธฐ.. 2024. 4. 17.
[Spring] ApplicationEventPublisher ๋ฅผ ์ด์šฉํ•ด์„œ Event ๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ ํ•ด๋‹น ๊ธ€์˜ ์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋Š” github ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. README ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š” ๋ชฉ์ฐจ ๋™๊ธฐ There is No Magic in spring ๋™๊ธฐ ์ตœ๊ทผ์— DDD ๋ฅผ ํ•™์Šตํ•˜๋ฉด์„œ ๋„๋ฉ”์ธ ์ด๋ฒคํŠธ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ Spring ์—์„œ ํ•œ VM ์•ˆ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ํ•ด๋‹น ์ด๋ฒคํŠธ๋ฅผ handling ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ ‘ํ–ˆ๊ณ , ๊ทธ์™€ ๊ด€๋ จํ•ด์„œ ์—ฌ๋Ÿฌ ์‹ค์Šต์„ ํ•ด๋ณด๋˜ ์ค‘ Spring ์—์„œ ๋ฌด์–ธ๊ฐ€ Magic ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”๊ฒƒ ๊ฐ™์€ ๋Š๋‚Œ์„ ๋ฐ›์•˜๋‹ค. ๊ธด ๋ง ํ•„์š” ์—†์ด ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž. @Entity(name = "orders") public class Order { public static Order create() { return new Order(); } @Id private Long id; .. 2022. 8. 15.
[Distributed Tracing] Messaging ํ™˜๊ฒฝ์—์„œ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šต ๋ณธ ๊ธ€์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹œ๋ฆฌ์ฆˆ๋กœ ์ด๋ก ๊ณผ ์‹ค์Šต์ด ํ•จ๊ป˜ ํฌํ•จ๋œ ์‹œ๋ฆฌ์ฆˆ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ชฉ์ฐจ์— ํ‘œ์‹œ๋œ ๊ธ€์„ ๋ชจ๋‘ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชฉ์ฐจ Distributed Tracing, ๋ถ„์‚ฐ ์ถ”์ ์ด๋ž€? Spring Cloud Sleuth ์™€ Zipkin Sleuth ๋กœ Http ํ™˜๊ฒฝ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šต Sleuth ๋กœ Messaging ํ™˜๊ฒฝ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šต ์‹ค์Šต์— ๋Œ€ํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๊ณ  ์‹ถ๋‹ค๋ฉด ์‹ค์Šต github์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Messaging ํ™˜๊ฒฝ ์—์„œ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šต ์ง€๋‚œ ์‹œ๊ฐ„ ์šฐ๋ฆฌ๋Š” HTTP ํ™˜๊ฒฝ์—์„œ์˜ ๋ถ„์‚ฐ ์ถ”์  ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐœ๋žต์ ์ธ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด์„œ ํ™•์ธํ•ด๋ณด์ž ์œ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜์ž๋ฉด 2๊ฐœ์˜ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. HTTP API Messaging ์ด๋ฒˆ์—๋Š” HTTP.. 2022. 5. 1.
[Distributed Tracing] HTTP ํ™˜๊ฒฝ์—์„œ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šตํ•˜๊ธฐ ๋ณธ ๊ธ€์€ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹œ๋ฆฌ์ฆˆ๋กœ ์ด๋ก ๊ณผ ์‹ค์Šต์ด ํ•จ๊ป˜ ํฌํ•จ๋œ ์‹œ๋ฆฌ์ฆˆ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ๋ชฉ์ฐจ์— ํ‘œ์‹œ๋œ ๊ธ€์„ ๋ชจ๋‘ ์ฐธ๊ณ ํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค. ๋ชฉ์ฐจ Distributed Tracing, ๋ถ„์‚ฐ ์ถ”์ ์ด๋ž€? Spring Cloud Sleuth ์™€ Zipkin Sleuth ๋กœ Http ํ™˜๊ฒฝ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šต Sleuth ๋กœ Messaging ํ™˜๊ฒฝ์˜ ๋ถ„์‚ฐ ์ถ”์  ์‹ค์Šต ์‹ค์Šต์— ๋Œ€ํ•œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๊ณ  ์‹ถ๋‹ค๋ฉด ์‹ค์Šต github์—์„œ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring Cloud Sleuth ๋ฅผ ์ด์šฉํ•œ HTTP ํ™˜๊ฒฝ์˜ ๋ถ„์‚ฐ ์ถ”์  ์ด๋ฒˆ์€ ์ง€๋‚œ ์‹œ๊ฐ„์— ์•Œ์•„๋ณด์•˜๋˜ ๋ถ„์‚ฐ ์ถ”์ ์— ๋Œ€ํ•œ ์‹ค์Šต์„ ์ง„ํ–‰ํ•ด๋ณด๋ ค ํ•œ๋‹ค. ์šฐ์„  ๊ฐœ๋žต์ ์ธ ์•„ํ‚คํ…์ฒ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค ์œ„ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜์ž๋ฉด 2๊ฐœ์˜ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค. HTTP API Messaging.. 2022. 5. 1.
๋‹คํ˜•์„ฑ์„ ์œ„ํ•œ instanceof ๋ฅผ Generic ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ชฉ์ฐจ ์„œ๋ก  instanceof ๋ž€? ์ฝ”๋“œ์—์„œ instanceof ๋ฅผ ๋Š๊ปด๋ณด์ž Generic ์„ ์ด์šฉํ•˜์—ฌ ์šฐ์•„ํ•˜๊ฒŒ ์ œ๊ฑฐํ•˜๊ธฐ ๊ทธ๋Ÿผ์—๋„ ์กด์žฌํ•˜๋Š” ๋ฌธ์ œ์  ํ•˜์ง€๋งŒ? ์„œ๋ก  ์ž๋ฐ”์—์„œ ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•œ ๊ฐ์ฒด์ง€ํ–ฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค๋ณด๋ฉด ์ข…์ข… ํŠน์ • ๊ฐ์ฒด๊ฐ€ ์ง€์ •๋œ ์œ ํ˜•์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ๊ทธ ๊ฒฝ์šฐ ์šฐ๋ฆฌ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„ ํƒ์ง€๊ฐ€ ์žˆ์ง€๋งŒ, ์˜ค๋Š˜์€ instanceof ์— ๋Œ€ํ•ด ์ง‘์ค‘ํ•˜๊ณ  ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค ํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์„ ์ด์šฉํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋‹ค ๋ณด๋ฉด ํŠน์ • ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡๊ฐ€์ง€ ์ž‘์—…์„ ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด ๋ฐ”๋กœ instanceof ์—ฐ์‚ฐ์ž์ด๋‹ค. instanceof ๋ž€? ์•ž์„œ ๋งํ–ˆ๋“ฏ Java ์—์„œ๋Š” ์–ด๋–ค ๊ฐ์ฒด์˜ ํŠน์ • type ์— ๋Œ€ํ•ด์„œ ๋™์ผํ•œ type ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ์„ instanceof ์—ฐ์‚ฐ์ž.. 2022. 4. 3.