Loading...
2024. 3. 24. 22:52

[DevOps] ์™œ Docker๋Š” ์ปจํ…Œ์ด๋„ˆ ๋นŒ๋“œ ๋„๊ตฌ ์„ ํƒ์ง€์—์„œ ์ ์  ๋ฐฐ์ œ๋ ๊นŒ?

์ตœ๊ทผ ํšŒ์‚ฌ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ ๋ฐฉ์‹์ด ๋ณ€๊ฒฝ๋˜๋ฉด์„œ ํšŒ์‚ฌ์—์„œ ๋งก๊ณ  ์žˆ๋Š” ํ”„๋กœ์ ํŠธ ๋˜ํ•œ ๋ณ„๋„์˜ ๋ฐฐํฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ํ˜•์ƒ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(Github, Gitlab)์˜ ๋ฐฐํฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ, ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” CI/CD ๋„๊ตฌ๊ฐ€ Docker executor๊ฐ€ ์•„๋‹Œ k8s executor๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ์—ฌ๊ธฐ์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ปจํ…Œ์ด๋„ˆ๋กœ ๋นŒ๋“œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ ๋˜ํ•œ Docker๊ฐ€ ์•„๋‹Œ Kaniko๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์ ์„ ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Docker์˜ ๋‹จ์  ๊ฐ€๋” Docker๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์ด๋Ÿฐ ์ƒ๊ฐ์ด ์ข…์ข… ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด, ๊ตณ์ด Docker Engine์„ ์„ค์น˜ํ•ด์•ผ ํ• ๊นŒ? Docker์—์„œ๋Š” ๋นŒ๋“œ๋งŒ์„ ์œ„ํ•œ SDK๋Š” ..

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์˜ ๊ตฌ์„ฑ ์š”์†Œ(์ด๋ฏธ์ง€, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ, ์‹คํ–‰ ์ „๋žต)๋“ค์„ ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ์—ฎ์–ด ์‹คํ–‰ํ•˜๋Š” ํ†ตํ•ฉ ์‹คํ–‰ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋„์ปค ์• ํ”Œ๋ฆฌ์ผ€์ด..