Loading...
2023. 12. 25. 12:19

[Java] ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ (Virtual Thread) ํ›‘์–ด๋ณด๊ธฐ

Java์˜ Thread๋ฅผ ๋ณด๋ฉด ๋Š˜์ƒ ๊ณ ๋ฏผ์ด์—ˆ๋˜ ๋ถ€๋ถ„์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. Java์˜ Thread API๋Š” ์šด์˜์ฒด์ œ์˜ ์Šค๋ ˆ๋“œ์™€ 1:1๋กœ ๋งคํ•‘๋˜์–ด ์žˆ์–ด ์“ธ ๋•Œ๋งˆ๋‹ค ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์œผ๋กœ ์ธํ•œ ๋น„์šฉ ๋ฌธ์ œ๊ฐ€ ๊ฑธ๋ฆผ๋Œ์ด๊ณ , ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์ž…์žฅ์—์„œ ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์˜ ๋ฐœ์ƒ์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์Šค์ผ€์ผ ์•„์›ƒ์„ ํ•ด์•ผํ• ์ง€ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Reactive Programming)์„ ํ•ด์•ผํ• ์ง€ ์„ ํƒ์˜ ๊ณ ๋ฏผ์— ํœฉ์‹ธ์ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ๊ฐ€์žฅ ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์Šค์ผ€์ผ ์•„์›ƒ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์š”์ƒˆ๋Š” ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค(k8s)์™€ ๊ฐ™์€ ์ปจํ…Œ์ด๋„ˆ ์˜ค์ผ€์ŠคํŠธ๋ ˆ์ด์…˜ ์‹œ์Šคํ…œ ๋‚ด์ง€ ํด๋ผ์šฐ๋“œ์—์„œ ์˜คํ†  ์Šค์ผ€์ผ๋ง ๊ธฐ๋Šฅ์„ ์ž˜ ์ง€์›ํ•˜๊ณ  ์žˆ์–ด ํŠธ๋ž˜ํ”ฝ์ด ๋Œ€๋Ÿ‰์œผ๋กœ ๋ฐœ์ƒํ•ด๋„ ์ž๋™์œผ๋กœ ์Šค์ผ€์ผ ์•„์›ƒํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ๋ฐœ์ƒ์„ ์กฐ์ ˆํ•ด์ฃผ๋‹ˆ ๊ฐ€์žฅ ํŽธํ•œ ๋ฐฉ๋ฒ•์ด์ง€์š”. ํ•˜์ง€๋งŒ ์ด๋Š” ์—ฌ์ „ํžˆ ๋‚ด๊ฐ€ ์šด์˜ํ•˜๋Š” ์„œ..

2023. 12. 4. 15:46

[Spring boot] HTMX + Thymeleaf ์กฐํ•ฉ์œผ๋กœ ์›น ํŽ˜์ด์ง€ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ

[Web] HTML ๋ง๊ณ  HTMX(HyperText Markup eXtension) ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ HTML(HyperText Markup Language)์ž…๋‹ˆ๋‹ค. HTML์€ ํฐ ํ™”๋ฉด์— ํ…์ŠคํŠธ(๊ธ€์ž)๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ๋งˆํฌ์—… ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ๊ณผ๊ฑฐ HTTP ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ํฐ ํ… blog.neonkid.xyz ์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” HTMX๋ผ๋Š” HTML ํ™•์žฅ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Spring๊ณผ Spring์—์„œ ์ง€์›ํ•˜๋Š” ํ…œํ”Œ๋ฆฟ ์—”์ง„์ธ ํƒ€์ž„๋ฆฌํ”„(Thymeleaf) ์กฐํ•ฉ์œผ๋กœ ๊ฐ„๋‹จํ•œ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ดˆ๊ธฐ ๊ตฌ์„ฑ Spring Initializer๋ฅผ ์ด์šฉํ•˜์—ฌ ๋จผ์ € ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ์„ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€๋Š” ์•„๋ž˜..

2023. 12. 3. 17:26

[Web] HTML ๋ง๊ณ  HTMX(HyperText Markup eXtension)

์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“œ๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ”๋กœ HTML(HyperText Markup Language)์ž…๋‹ˆ๋‹ค. HTML์€ ํฐ ํ™”๋ฉด์— ํ…์ŠคํŠธ(๊ธ€์ž)๋ฅผ ํ‘œ๊ธฐํ•˜๋Š” ๋งˆํฌ์—… ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ๊ณผ๊ฑฐ HTTP ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ํฐ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ์‚ฌ์šฉ๋˜์—ˆ๋˜ ํ‘œ์ค€ ์–ธ์–ด์˜€์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„๋Œ€์—๋Š” ํ…์ŠคํŠธ๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ธฐ๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผํ…Œ๋ฉด ํ…์ŠคํŠธ ๋ณด๋‹ค๋Š” ์ด๋ฏธ์ง€, ๋น„๋””์˜ค, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ ๋™์ ์ธ ์ปจํ…์ธ ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ๋ฅผ ์›ํ•˜์—ฌ ์ดํ›„ HTML 5 ๋ฒ„์ „์—์„œ๋Š” ์ด๋ฏธ์ง€, ๋น„๋””์˜ค ์ „์†ก์„ ์œ„ํ•œ ํ‘œ์ค€ ํƒœ๊ทธ๊ฐ€ ์ •์˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ํŽ˜์ด์ง€์— ๋” ๋งŽ์€ ํšจ๊ณผ๋ฅผ ์ฃผ๊ธฐ ์œ„ํ•ด Javascript, jQuery ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ–ˆ์ฃ . ํ•˜์ง€๋งŒ ์ด๋“ค์€ ๋„ˆ๋ฌด ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ต๊ณ  ๋ฌด๊ฑฐ์›Œ์„œ ์ „๋ฌธ์ ์œผ๋กœ ๋ฐฐ์šฐ์ง€ ์•Š์œผ๋ฉด ..

2023. 10. 22. 15:10

[DevOps] M1 Macbook์—์„œ Oracle Database ์ปจํ…Œ์ด๋„ˆ ๋„์šฐ๊ธฐ 1

ํšŒ์‚ฌ์—์„œ Oracle์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋กœ์ปฌ์—์„œ Docker, Podman ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋„์šฐ๊ณ , ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ PC๊ฐ€ Macbook M1 Pro Max๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์„ ๊ฒช๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋„์šธ ๋ฏธ๋“ค์›จ์–ด์˜ ์•„ํ‚คํ…์ฒ˜์ธ๋ฐ, ๋งฅ๋ถ์ด Intel์˜ x86 ์•„ํ‚คํ…์ฒ˜์—์„œ Apple Silicon์˜ ARM ์•„ํ‚คํ…์ฒ˜๋กœ ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ์ด์ œ๊นŒ์ง€ ๊ตฌ์ถ•ํ–ˆ๋˜ x86 ๊ณ„์—ด์˜ ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋“ค์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ ์ง„์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋“ค์ด ํ•ด๊ฒฐ๋˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์œ ๋… Oracle ๊ณ„์—ด์˜ ์ด๋ฏธ์ง€๋Š” ์ž˜ ํ•ด๊ฒฐ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Colima ์ด์— ๋Œ€ํ•ด ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด M1 ๋งฅ๋ถ์—์„œ QEMU์™€ ๊ฐ™์€ ๊ฐ€์ƒ ๋จธ์‹ ์„ ์‚ฌ์šฉํ•˜์—ฌ Oracle ์ปจํ…Œ์ด๋„ˆ ์ด..

2023. 10. 9. 20:52

[Spring boot] Node Gradle์„ ์ด์šฉํ•˜์—ฌ Spring ํ”„๋กœ์ ํŠธ์™€ Node ํ”„๋กœ์ ํŠธ ๋ถ™์ด๊ธฐ

Spring boot๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น ํŽ˜์ด์ง€๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ๋Š” REST API ์„œ๋ฒ„๋กœ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ , ํŽ˜์ด์ง€๋Š” ์„œ๋ฒ„ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(SSR)์„ ์ด์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ์€ ์•„๋ž˜์˜ 2๊ฐ€์ง€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. JSP (Java Server Page) Thymeleaf JSP์™€ Thymeleaf๋Š” Spring์„ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ทฐ ํ…œํ”Œ๋ฆฟ ์—”์ง„์œผ๋กœ ๊ณผ๊ฑฐ์—๋Š” JSP๋ฅผ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ ์ตœ๊ทผ์—๋Š” Thymeleaf๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ HTML ์ฝ”๋“œ๋ฅผ ์ง์ ‘ ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋‹ค๋ค„ Controller์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•ด ๋™์ ์œผ๋กœ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์„ ์„œ๋ฒ„ ์‚ฌ์ด๋“ค ๋ Œ๋”๋ง์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ตœ๊ทผ์—๋Š” ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ ๋ Œ๋”๋ง(CSR) ๊ธฐ๋ฒ•์„ ์ด์šฉํ•œ React.js, Vue.js๋ฅผ ์ด..

2023. 8. 27. 22:11

[LLM] Langchain์œผ๋กœ AI E2E ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ

ChatGPT๊ฐ€ ํ™”๋‘๊ฐ€ ๋œ์ง€ ์–ด๋Š๋ง 3๊ฐœ์›”์ด ์ง€๋‚˜๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. GPT ๋ชจ๋ธ์ด 3 ๋ฒ„์ „ ์ดํ›„๋กœ ๊ต‰์žฅํžˆ ๋งŽ์€ ๋ณ€ํ™”๋ฅผ ๋ณด์ด๋ฉด์„œ ChatGPT์˜ ๋“ฑ์žฅ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•„์ฃผ ์ธ๊ธฐ๋ฅผ ์–ป๊ฒŒ ๋˜๋ฉด์„œ ํ•„์ž์ธ ์ €๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋จธ์‹  ๋Ÿฌ๋‹์— ๊ด€์‹ฌ์„ ๋ณด์ด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ ๋…ผ๋ฌธ, ๊ธ€์„ ์ฝ์–ด๋ณด๊ณ  ๊ณต๋ถ€๋งŒ ํ•ด์„œ๋Š” ์ž˜ ์ •๋ฆฌ๊ฐ€ ๋˜์ง€ ์•Š๋Š” ๋“ฏํ•˜์—ฌ ์ตœ๊ทผ์— ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋‹ค๋ณด๋‹ˆ Langchain์— ๋Œ€ํ•ด ๋ธ”๋กœ๊ทธ์— ์ •๋ฆฌํ•ด๋ณด๋ฉด ๋จธ์‹  ๋Ÿฌ๋‹์„ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋„ ์‰ฝ๊ฒŒ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค๋ฉด ํฅ๋ฏธ๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ๊ธ€์„ ์“ฐ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Langchain์ด ๋ฌด์—‡์ธ๊ฐ€์š”? Langchain์€ LLM์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์–˜๊ธฐํ•˜์ž๋ฉด ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ..

2023. 7. 17. 21:58

[Network] Rate Limit๊ณผ Throttling ์ดํ•ด

์•ˆ๋…•ํ•˜์„ธ์š”. ์˜ค๋Š˜ ํฌ์ŠคํŒ…ํ•  ๊ธ€์€ ์˜ค๋žœ๋งŒ์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์•„๋‹Œ ๋„คํŠธ์›Œํฌ ์ด๋ก ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ ์—”์ง€๋‹ˆ์–ด๋ฅผ ํ•˜๊ณ  ๊ณ„์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์„œ๋ฒ„ ๊ฐœ๋ฐœ ๋ฟ ์•„๋‹ˆ๋ผ ๋ฏธ๋“ค์›จ์–ด์™€ ํ†ต์‹ ์„ ์œ„ํ•ด ๋„คํŠธ์›Œํฌ ์ง€์‹์„ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ์š”. ์ž์‹ ์ด ๊ฐœ๋ฐœํ•˜๋Š” API ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ํ˜น์€ ์†Œํ”„ํŠธ์›จ์–ด๋“ค์ด ์˜์กดํ•œ๋‹ค๋ฉด ๊ฐ€์žฅ ๋จผ์ € ๊ณ ๋ฏผํ•ด์•ผ ํ•  ๊ฒƒ์ด ๋ฐ”๋กœ ํŠธ๋ž˜ํ”ฝ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋Œ€์ฒ˜ํ•ด์•ผ ํ• ๊นŒ์š”? ๋ฌผ๋ก  ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์Šค์ผ€์ผ ์—…(Scale up)์ด๋‚˜ ์Šค์ผ€์ผ ์•„์›ƒ(Scale out) ๊ฐ™์ด ๋ฆฌ์†Œ์Šค๋ฅผ ๋Š˜๋ฆฌ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœํ•˜๋Š” ์„œ๋ฒ„๊ฐ€ ์™ธ๋ถ€ API์˜ ์‘๋‹ต ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ๋‹ค ์ค€๋‹ค๊ฑฐ๋‚˜, ๋น„์šฉ์ ์ธ ๋ฌธ์ œ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋งค์šฐ ๋‚œ๊ฐํ•  ๊ฒƒ์ž…..

2023. 1. 15. 16:27

[Netty] Netty๋กœ ๋ฐฐ์›Œ๋ณด๋Š” Non-blocking I/O ๊ธฐ์ดˆ

์˜ค๋Š˜์€ Java ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฝƒ์ธ Netty์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. What is Netty ? Netty๋ฅผ ๋“ค์–ด๋ณด์‹  ๋ถ„๋“ค์ด๋ผ๋ฉด ์•„๋งˆ ํ•œ ๋ฒˆ ์ฏค c10k ๋ฌธ์ œ๋ผ๋Š” ๊ฒƒ์„ ๊ฒฝํ—˜ํ•ด๋ณด์…จ๊ฑฐ๋‚˜ ๊ด€์‹ฌ์„ ๊ฐ€์กŒ์„๋งŒํ•œ ๋ถ„์ด์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. Netty๋Š” JVM์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” Java NIO ๊ธฐ๋ฐ˜์˜ Non-blocking ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์–ด๋Š ํŠน์ • ํ”„๋กœํ† ์ฝœ(HTTP ๋“ฑ)์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ TCP, UDP์˜ ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ Non-blocking I/O๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. Non-blocking์ด ๋ฌด์—‡์ธ๊ฐ€์š”? ๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด, ์–ด๋– ํ•œ ์ž‘์—…์„ ๋ง‰ํž˜์—†์ด ์ด์–ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด์ž๋ฉด ์šฐ๋ฆฌ๊ฐ€ ๋ง›์žˆ๋Š” ๋ง›์ง‘์—๊ฐ€์„œ ์Œ์‹์„ ๋จน์œผ๋Ÿฌ ๊ฐ”์Šต๋‹ˆ๋‹ค. ..

2022. 11. 12. 15:27

[Kafka] docker-compose๋ฅผ ํ™œ์šฉํ•œ ๋” ์‰ฌ์šด Kafka ์„œ๋ฒ„ ์„ค์น˜

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ Docker๋ฅผ ์ด์šฉํ•ด Kafka์™€ Zookeeper๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ Zookeeper์™€ Kafka ์ด๋ฏธ์ง€๋ฅผ pullํ•˜๊ณ  runํ•˜๊ณ , ๋„คํŠธ์›Œํฌ๋ฅผ ๋งŒ๋“œ๋Š” ์ž‘์—…์„ ์ผ์ผ์ด ๋ช…๋ น์–ด๋กœ ์น˜๊ธฐ์—๋Š” ๋„ˆ๋ฌด ๋ถˆํŽธํ•˜๊ณ  ๋ฒˆ๊ฑฐ๋กœ์šด ์ž‘์—…๋“ค์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋ฒˆ์—” docker-compose๋ฅผ ์ด์šฉํ•ด์„œ ๋ช…๋ น์–ด ํ•˜๋‚˜๋งŒ ๊ฐ€์ง€๊ณ  ์‰ฝ๊ฒŒ ๋กœ์ปฌ์—์„œ Kafka ๋ธŒ๋กœ์ปค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. docker-compose ๋จผ์ € ์งง๊ฒŒ docker-compose์— ๋Œ€ํ•ด์„œ ์„ค๋ช…์„ ๋“œ๋ฆฌ์ž๋ฉด docker-compose๋Š” Docker์˜ ๊ตฌ์„ฑ ์š”์†Œ(์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ์‹คํ–‰ ์ „๋žต)๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์—ฎ์–ด ์‹คํ–‰ํ•˜๋Š” ํ†ตํ•ฉ ์‹คํ–‰ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋„์ปค ์• ํ”Œ๋ฆฌ์ผ€์ด..

2022. 11. 6. 21:49

[Spring] ๋น„๋™๊ธฐ ์ž‘์—…๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•œ TaskExecutor, TaskScheduler ๊ธฐ๋ณธ

Spring Framework๋Š” TaskExecutor ์ธํ„ฐํŽ˜์ด์Šค์™€ TaskScheduler ์ธํ„ฐํŽ˜์ด์Šค๋กœ Task(์ž‘์—…)์˜ ๋น„๋™๊ธฐ ์‹คํ–‰๊ณผ ์Šค์ผ€์ค„๋ง์— ๋Œ€ํ•œ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒƒ์ด ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๊ธฐ๋ณธ์ ์œผ๋กœ Spring์€ Multi-Thread ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉฐ Singleton Pattern์„ ์ด์šฉํ•ด ๋ชจ๋“  Bean๋“ค์„ ๊ณต์œ ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ API๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ณผ์ •์„ Blockingํ•˜์ง€ ์•Š๊ณ  ๋‹ค์ค‘ ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๊ฐ€ API ํ˜ธ์ถœ ์ดํ›„ Bean ๋‚ด ์–ด๋–ค ํŠน์ • ์ž‘์—…์— ๋Œ€ํ•œ ๋น„๋™๊ธฐ ์‹คํ–‰์€ ๋ณด์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. TaskExecutor TaskExecutor๋Š” Spring 2.0์—์„œ ๋“ฑ์žฅํ•œ ๋น„๋™๊ธฐ ์‹คํ–‰ ์ถ”์ƒํ™” ์ธํ„ฐํŽ˜์ด์Šค๋กœ..

2022. 10. 30. 16:57

[Rust] ๊ฐœ๋…๋ถ€ํ„ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ•๊นŒ์ง€ ์ฐจ๊ทผ์ฐจ๊ทผ ์‹œ์ž‘ํ•ด๋ณด๊ธฐ

์š”์ฆ˜ ๋ชจ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๋งŽ์ด ๋‚˜์˜ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€์˜ Golang, ๋ชจ์งˆ๋ผ์˜ Rust ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ Clojure, Rescript ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๊ฐ€ ๋งŽ์ด ๋‚˜์˜ค๊ณ  ์žˆ๋Š”๋ฐ์š”. ํŠนํžˆ ์ตœ๊ทผ์—๋Š” ๊ตฌ๊ธ€์—์„œ C++ ๋Œ€ํ•ญ ์–ธ์–ด๋กœ Carbon์ด๋ผ๋Š” ์–ธ์–ด๊นŒ์ง€๋„ ๋‚˜์™”์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ๋‹ค๋ฃฐ ์ฃผ์ œ๋Š” ๋ฐ”๋กœ ๋ชจ์งˆ๋ผ์˜ Rust์ธ๋ฐ์š”. ์ตœ๊ทผ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๊ฐœ๋ฐœ์—๋„ Rust ์–ธ์–ด๊ฐ€ ๊ณต์‹ ์ฑ„ํƒ๋˜์–ด ํ™”๋‘๊ฐ€ ๋˜๊ณ  ์žˆ๋Š” Rust์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. What is Rust? ์ œ๊ฐ€ ์ฒ˜์Œ Rust ์–ธ์–ด๋ฅผ ๋“ค์—ˆ์„ ๋•Œ๋Š” 3๋…„ ์ „, YouTube์˜ ์ผ€๋นˆ๋‹˜ ๋ฐฉ์†ก์—์„œ์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ๋•Œ๋ถ€ํ„ฐ ์ญˆ์šฑ ์•„๋ฌด๊ฒƒ๋„ ํ•ด์˜ค์ง€ ์•Š์•˜์—ˆ์Šต๋‹ˆ๋‹ค๋งŒ Golang๊ณผ Rust ๋‘˜ ์ค‘ ์—„์ฒญ ์ €์šธ์งˆ์„ ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ์ฃ . ํ•˜์ง€๋งŒ ์ด์ œ๋Š” ์ž์‹ ์žˆ๊ฒŒ Rust ์–ธ..

2022. 10. 29. 22:07

[Spring] Spring Advisor์™€ Pointcut - ์‹ค์ „ํŽธ

์ด์ „ ๊ธ€์—์„œ DefaultPointcutAdvisor์™€ ๋‹ค์–‘ํ•œ Pointcut๋“ค์— ๋Œ€ํ•œ ๊ฐœ๋…์„ ๋‹ค๋ค„๋ดค์Šต๋‹ˆ๋‹ค. 2022.10.10 - [Programming/Spring] - [Spring] Spring Advisor์™€ Pointcut - ๊ฐœ๋…ํŽธ [Spring] Spring Advisor์™€ Pointcut - ๊ฐœ๋…ํŽธ Spring AOP ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด Advice๋ฅผ ๋งŒ๋“ค์–ด ๋ฉ”์„œ๋“œ์˜ ์ „ํ›„์ฒ˜๋ฆฌ๋ฅผ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. 2022.05.16 - [Programming/Spring] - [Spring] Spring Advice๋กœ ์ปค์Šคํ…€ ์–ด๋“œ๋ฐ”์ด์Šค ๋งŒ๋“ค๊ธฐ [Spring] Spr.. blog.neonkid.xyz Pointcut์€ ์ธํ„ฐํŽ˜์ด์Šค ํ˜•ํƒœ๋กœ ๋˜์–ด ์žˆ์ง€๋งŒ Spring AOP์—์„œ ์ด๋ฏธ ๋งŽ์€ ๊ตฌํ˜„์ฒด๋“ค์ด..

2022. 10. 10. 19:11

[Spring] Spring Advisor์™€ Pointcut - ๊ฐœ๋…ํŽธ

Spring AOP ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•ด Advice๋ฅผ ๋งŒ๋“ค์–ด ๋ฉ”์„œ๋“œ์˜ ์ „ํ›„์ฒ˜๋ฆฌ๋ฅผ ํ”„๋ก์‹œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด๋ดค์Šต๋‹ˆ๋‹ค. 2022.05.16 - [Programming/Spring] - [Spring] Spring Advice๋กœ ์ปค์Šคํ…€ ์–ด๋“œ๋ฐ”์ด์Šค ๋งŒ๋“ค๊ธฐ [Spring] Spring Advice๋กœ ์ปค์Šคํ…€ ์–ด๋“œ๋ฐ”์ด์Šค ๋งŒ๋“ค๊ธฐ ์ด๋ฒˆ ํฌ์ŠคํŠธ๋ถ€ํ„ฐ๋Š” Spring AOP ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹ค์ œ Advice๋ฅผ ๋งŒ๋“ค์–ด๋ณด๊ณ , ์œ„๋น™ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Advice Interface Advice์— ๋Œ€ํ•ด ๋‹ค์‹œ ๋ณต์Šตํ•ด๋ณด์ž๋ฉด Advice๋Š” ํŠน์ • ์กฐ์ธํฌ์ธํŠธ ์ฆ‰, ๋ฉ”์„œ๋“œ๊ฐ€ blog.neonkid.xyz Spring AOP์˜ ProxyFactory ํด๋ž˜์Šค๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ๋ฉ”์„œ๋“œ์—์„œ AOP ํ”„๋ก์‹œ ์ธ์Šคํ„ด์Šค๋ฅผ ์–ป๊ณ  ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ..

2022. 10. 9. 20:44

[Kafka] ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ Kafka ์„ค์น˜

์ง€๋‚œ ํฌ์ŠคํŠธ์—์„œ ์šฐ๋ฆฌ๋Š” Kafka๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€๋ฅผ ์•Œ์•„๋ดค์Šต๋‹ˆ๋‹ค. 2022.07.31 - [Middleware/Kafka] - [Kafka] ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ Zookeeper [Kafka] ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ Zookeeper ์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ์— ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์„œ ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ฃผํ‚คํผ(Zookeeper)์ธ๋ฐ์š”. ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ํ์™€ ๋‹ค๋ฅด๊ฒŒ ์นดํ”„์นด๋Š” ์™œ ์ฃผํ‚คํผ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์ฝ”๋””๋„ค blog.neonkid.xyz ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ์— ์ง์ ‘ ์„ค์น˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ด์šฉํ•œ ์„ค์น˜ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ์— ์ง์ ‘ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์€ ํ™˜๊ฒฝ ๋ถ„๋ฆฌ ์—†์ด Homebrew, PPA๋ฅผ ์ด์šฉํ•ด์„œ ์ž์‹ ์˜ ์„œ๋ฒ„ ํ™˜๊ฒฝ์— ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋…๋ฆฝ๋œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€..

2022. 7. 31. 23:09

[Kafka] ์นดํ”„์นด์˜ ์ฝ”๋””๋„ค์ดํ„ฐ Zookeeper

์šฐ๋ฆฌ๊ฐ€ ์ปดํ“จํ„ฐ์— ์นดํ”„์นด๋ฅผ ์„ค์น˜ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ๋”ฐ๋ผ์„œ ์„ค์น˜ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์ฃผํ‚คํผ(Zookeeper)์ธ๋ฐ์š”. ๋‹ค๋ฅธ ๋ฉ”์‹œ์ง€ ํ์™€ ๋‹ค๋ฅด๊ฒŒ ์นดํ”„์นด๋Š” ์™œ ์ฃผํ‚คํผ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ์š”? ์ฝ”๋””๋„ค์ด์…˜ ์„œ๋น„์Šค ์‹œ์Šคํ…œ (Coordination System) ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃจ๋‹ค๋ณด๋ฉด ๊ฐ€์žฅ ํฐ ๋‚œ์ œ๊ฐ€ ๋ฐ”๋กœ ๋ถ„์‚ฐ๋œ ์‹œ์Šคํ…œ๋ผ๋ฆฌ ์–ด๋–ป๊ฒŒ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ๊ฒƒ์ธ๊ฐ€? ์ž…๋‹ˆ๋‹ค. ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค, ์นดํ”„์นด ๋“ฑ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์ž์ฒด๋Š” ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์ด ์ง‘๊ฒฐ ๋˜์–ด ์žˆ๋Š” ํ˜•ํƒœ๊ฐ€ ๋ณดํ†ต์ธ๋ฐ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํ•˜์œ„ ๋…ธ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์•ผํ•  ์ผ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ฐ ํ•˜์œ„ ๋…ธ๋“œ๋“ค์˜ Healthcheck Lock Processing ๋ถ„์‚ฐ๋œ ์„œ๋ฒ„๋“ค๋ผ๋ฆฌ ํ†ต์‹ ํ•  ๋•Œ ์„œ๋กœ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๋ ค๋‹ค ๋ณด๋ฉด ์ž์› ์ ์œ  ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ..

2022. 7. 30. 14:48

[Kafka] Apache Kafka๋Š” ๋ฌด์—‡์ด๊ณ  ์™œ ์„ฑ๋Šฅ์ด ๋น ๋ฅผ๊นŒ?

์นดํ”„์นด๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์นดํ”„์นด๋ž€ ๋ง์„ ๋“ค์–ด๋ณธ ์ ์€ ์žˆ์ง€๋งŒ ์•„์ง ์‚ฌ์šฉํ•ด๋ณธ ์ ์ด ์—†๋‹ค๋ฉด ์ด ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋˜๊ฒŒ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์นดํ”„์นด๋Š” Linkedin์—์„œ ์ฒ˜์Œ ๊ฐœ๋ฐœํ•˜์—ฌ ์•„ํŒŒ์น˜ ์˜คํ”ˆ ์†Œ์Šค๊นŒ์ง€ ์˜ค๊ฒŒ ๋œ ๋Œ€์šฉ๋Ÿ‰ ๋ฉ”์‹œ์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ํ”Œ๋žซํผ ์—ฌ๊ธฐ์„œ ์ด์•ผ๊ธฐํ•˜๋Š” ๋ฉ”์‹œ์ง€๋ž€, ์šฐ๋ฆฌ๊ฐ€ ๊ฐœ๋ฐœํ•œ ์ผ๋ จ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋ น ์šฐ๋ฆฌ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ ์„œ๋กœ ๊ธฐ๋Šฅ์„ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํ•จ์ˆ˜๋ผ๋ฆฌ ํ†ต์‹ ์„ ์œ„ํ•ด์„œ ๋ณด๋‚ด๊ณ  ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ๋“ค์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์šฐ๋ฆฌ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค๋Š” ์–ด๋–จ๊นŒ์š”? ์„œ๋กœ ํ”„๋กœ์„ธ์Šค๋„ ๋‹ค๋ฅด๊ณ  ์ธ์Šคํ„ด์Šค๋„ ๋‹ค๋ฅธ ์ƒํ™ฉ์—์„œ ๊ฐ ์„œ๋น„์Šค๋ผ๋ฆฌ ํ†ต์‹ ํ•˜๋ ค๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ๋ฉ”์‹œ์ง€ ํ๋ฅผ ..

2022. 7. 24. 17:33

[PowerShell] Windows Terminal๊ณผ oh my posh๋กœ Powershell์„ ๋” ์ด์˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ

๊ฐœ์ธ์ ์œผ๋กœ Windows๋ฅผ ์“ธ ์ผ์ด๋ผ๊ณค ๋งŽ์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์€ ๋Œ€๋ถ€๋ถ„ Linux ํ˜น์€ OS X์—์„œ ์ง„ํ–‰ํ•˜๊ณ , Windows๋Š” ๊ฒŒ์ž„ ๋จธ์‹ ์ด๋‚˜ Windows binary ๊ฐœ๋ฐœ ์™ธ์—๋Š” ๊ฑฐ์˜ ์“ธ ์ผ์ด ์—†์—ˆ์œผ๋‹ˆ๊น์š”. ๊ทธ๋Ÿฐ๋ฐ, ์ตœ๊ทผ Windows Terminal์„ ๋ณด๊ณ  ์ด์ œ Powershell๋„ ๊พธ๋ฏธ๋Š” ์‹œ๋Œ€๊ฐ€ ์™”๋‹ค๋Š” ๊ฒƒ์„ ๋Š๋ผ๋ฉฐ ์‚ฌ์šฉ๊ธฐ์™€ ํ•จ๊ป˜ ์ด๋ป์ง„ Windows Terminal์„ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋”ฑ๋”ฑํ•˜๋‹ค ๋ชปํ•ด ์นœ์ˆ™ํ•˜์ง€ ์•Š์€ Powershell๊ณผ CMD Windows ๋ช…๋ น ํ”„๋กฌํฌํŠธ๋Š” ๊ทธ์•ผ๋ง๋กœ ๋ ˆ๊ฑฐ์‹œ๋ฅผ ์ƒ์ง•ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด Windows Server 2008๊ณผ Windows Vista์—์„œ๋ถ€ํ„ฐ Powershell์„ ๋„์ž…ํ–ˆ์ง€๋งŒ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ’๋ถ€ํ•˜๊ฒŒ ์ง€์›ํ•˜๋”๋ผ๋„ ์นœ์ˆ™ํ•˜์ง€ ์•Š์€ UI ๋“ฑ์€ ์ €์—๊ฒŒ ..

2022. 7. 2. 15:21

[OpenCV] ์›ํ•˜๋Š” ์ด๋ฏธ์ง€ ์˜์—ญ(๊ด€์‹ฌ์˜์—ญ, ROI) ์ž๋ฅด๊ธฐ(Crop)

๋ธ”๋กœ๊ทธ ๊ธ€์„ ์“ฐ๋‹ค๋ณด๋ฉด ํŠน์ • ์˜์—ญ๋งŒ์„ ์ž˜๋ผ์„œ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œˆ๋„๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋ฉด ์œˆ๋„์—์„œ ์ œ๊ณตํ•˜๋Š” Windows ์‚ฌ์ง„ ๋ทฐ์–ด ๋“ฑ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•ด ์›ํ•˜๋Š” ์ด๋ฏธ์ง€์˜ ์˜์—ญ์„ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š”๋ฐ, Mac OS X๋‚˜ Ubuntu์— ์žˆ๋‹ค๋ณด๋ฉด ๊ธฐ๋ณธ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋‹ค๋ณด๋‹ˆ ์“ธ ํ”„๋กœ๊ทธ๋žจ์„ ์ฐพ๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žฆ์•˜๋Š”๋ฐ์š”. ์ด๋ ‡๊ฒŒ ์›ํ•˜๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์™€์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์›ํ•˜๋Š” ์˜์—ญ์„ ์ž๋ฅผ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ํ•œ ๋ฒˆ ๋งŒ๋“ค์–ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. MouseEvent OpenCV์—์„œ MouseEvent๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์— ๋Œ€ํ•ด ์ž˜ ๋ชจ๋ฅด์‹œ๊ฒ ๋‹ค๋ฉด ์•„๋ž˜์˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ณด์„ธ์š”. 2016.12.18 - [Programming/OpenCV] - OpenCV์—์„œ Mouse Even..