Zustand Hydration
ยท
๊ณต๋ถ€ํ•˜๊ธฐ/ETC
Zustand์˜ persist ๋ฏธ๋“ค์›จ์–ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” Hydration(ํ•˜์ด๋“œ๋ ˆ์ด์…˜)์€์‰ฝ๊ฒŒ ๋งํ•ด ์Šคํ† ๋ฆฌ์ง€(localStorage ๋“ฑ)์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ(Zustand ์Šคํ† ์–ด)๋กœ ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์™€ ํ•ฉ์น˜๋Š” ๊ณผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. `_hasHydrated`๊ฐ€ ์™œ ํ•„์š”ํ•œ๊ฐ€์š”?Zustand `persist`๋Š” ์•ฑ์ด ์‹คํ–‰๋˜์ž๋งˆ์ž ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค์ง€๋งŒ, ์ด ๊ณผ์ •์€ ์ฐฐ๋‚˜์˜ ์‹œ๊ฐ„(๋น„๋™๊ธฐ์  ํŠน์„ฑ)์ด ๊ฑธ๋ฆฐ๋‹ค.์ด ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ : ์ƒˆ๋กœ๊ณ ์นจ ์งํ›„, Zustand ์Šคํ† ์–ด๋Š” ์ž ์‹œ ๋™์•ˆ ์ดˆ๊ธฐ๊ฐ’(session: null)์„ ๊ฐ€์ง„๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ Local Storage์—๋Š” ๋กœ๊ทธ์ธ ์ •๋ณด๊ฐ€ ๋“ค์–ด์žˆ๋‹ค.๊นœ๋นก์ž„ ํ˜„์ƒ(Flicker) : ์‚ฌ์šฉ์ž ์ •๋ณด๊ฐ€ ๋ณต์›๋˜์ง€ ์•Š์•˜๋Š”๋ฐ AutoGuard๊ฐ€ ๋จผ์ € ์ž‘๋™ํ•˜..
RAG์™€ ๋ฒกํ„ฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
ยท
๊ณต๋ถ€ํ•˜๊ธฐ/ETC
RAG(Retrieval-Augmented Generation)๊ฒ€์ƒ‰(Retrieval)๊ณผ ์ƒ์„ฑ(Generation)์„ ๊ฒฐํ•ฉํ•œ AI ์•„ํ‚คํ…์ฒ˜LLM์ด ๋‹ต๋ณ€์„ ์ƒ์„ฑํ•˜๊ธฐ ์ „์— ์™ธ๋ถ€์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‚˜ ๋ฌธ์„œ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋จผ์ € ๊ฒ€์ƒ‰ํ•œ ๋’ค, ๊ทธ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฌธ์žฅ์„ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹RAG ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ ์š”์†ŒDense Retriever (์˜ˆ: DPR)์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธ์„ ํ•˜๋ฉด, ๊ด€๋ จ ์žˆ๋Š” ๋ฌธ์„œ๋‚˜ ์ •๋ณด๋ฅผ ์ฐพ์Œ๋‹จ์ˆœํžˆ ๋‹จ์–ด๊ฐ€ ๋˜‘๊ฐ™์€ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋œป์ด ๋น„์Šทํ•œ ๋ฌธ์žฅ์ด๋‚˜ ๋‚ด์šฉ์„ ํŒŒ์•…ํ•ด ๊ณจ๋ผ์˜ดDocument Store (์˜ˆ: Vector ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค)์ฐพ์„ ๋ฌธ์„œ๋“ค์ด ์ €์žฅ๋˜์–ด์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋‹ค์–‘ํ•œ ์ •๋ณด๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๊ณ , Retriever๊ฐ€ ์ ์ ˆํ•œ ๋ฌธ์„œ๋ฅผ ๋ฝ‘์•„์˜ค๋Š” ๊ตฌ์กฐํ”ํžˆ FAISS, Pinecone, Weaviate ..
@Configuration ๊ณผ @ConfigurationProperties
ยท
๊ณต๋ถ€ํ•˜๊ธฐ/Spring
@Configuration`@Bean` ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์Šคํ”„๋ง ๋นˆ์„ ์ง์ ‘ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉ๋‹ค๋ฅธ ์„ค์ •์„ ์กฐํ•ฉ/ํ™œ์„ฑํ™”(`@Import`, `@Enable`...)ํ•˜๋Š” ์šฉ๋„์—๋„ ์“ฐ์ธ๋‹ค.@ConfigurationProperties"์™ธ๋ถ€ ์„ค์ •๊ฐ’(application.yml/properties)์„ ์ด ๊ฐ์ฒด ํ•„๋“œ์— ๋ฐ”์ธ๋”ฉํ•˜๊ฒ ๋‹ค"๋Š” ๊ฒƒ์„ ์„ ์–ธํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.์„ค์ •์„ ํ•„๋“œ์— ๋งคํ•‘ํ•ด ์ฃผ์ž…๋ฐ›๋Š” ์„ค์ • ๊ฐ’ ํ™€๋”(POJO)๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.์ž๋™์œผ๋กœ ๋นˆ์œผ๋กœ ์ง€์ •๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋ฉฐ, ๋นˆ์œผ๋กœ์˜ ๋“ฑ๋ก์ด ํ•„์š”ํ•˜๋‹ค.`@EnableConfigurationProperties``@ConfigurationPropertiesScan``@Component`์ฆ‰, @Configuration๋Š” ์Šคํ”„๋ง ๋นˆ๋“ค์„ ๋งŒ๋“œ๋Š”/๋“ฑ๋กํ•˜๋Š” ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.@Configu..
[TroubleShooting] PDF ํ”„๋ฆฌ๋ทฐ์‹œ ์ž๋™ ๋‹ค์šด๋กœ๋“œ ํ˜„์ƒ ํ•ด๊ฒฐํ•˜๊ธฐ
ยท
๋งŒ๋“ค์–ด๋ณด๊ธฐ/TroubleShooting
๊ฐœ์š”ํ˜„์žฌ ์ธํ„ด ์ค‘์ธ ๊ณณ์—์„œ ๊ธฐ์กด 1์ฐจ ๊ฐœ๋ฐœ์ด ๋˜์–ด์žˆ๋˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณด์ˆ˜ํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ •์‹ ๋ฐฐํฌ๋ฅผ ์ค€๋น„ ์ค‘์— ์žˆ๋‹ค.๊ทธ ์ค‘ QA ๊ฒฐ๊ณผ๋กœ PDF ํ”„๋ฆฌ๋ทฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํŽ˜์ด์ง€์— ์ง„์ž… ์‹œ ํ•ด๋‹น PDF๊ฐ€ ์ž๋™ ๋‹ค์šด๋กœ๋“œ ๋˜๋Š” ํ˜„์ƒ์ด ๋ฐœ๊ฒฌ๋˜์–ด ํ•ด๊ฒฐ์„ ์š”์ฒญ ๋ฐ›์•˜๋‹ค.ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ๋ฌธ์ œ ์ƒํ™ฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ html `` ํƒœ๊ทธ๋กœ pdf ํ”„๋ฆฌ๋ทฐ ์ œ๊ณต ์ค‘์ผ๋ถ€ pdf๋ฅผ ๋Œ€์ƒ์œผ๋กœ ํ”„๋ฆฌ๋ทฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋ Œ๋”๋ง ๋˜์ง€ ์•Š๊ณ , ์ž๋™ ๋‹ค์šด๋กœ๋“œ ๋˜๋Š” ๋ฌธ์ œ ๋ฐœ์ƒ์›์ธ ๋ถ„์„ํ˜„์žฌ ํ”„๋ฆฌ๋ทฐ๋ฅผ ์ œ๊ณต ๋Œ€์ƒ์ธ pdf๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋น„์Šค ๋‚ด์—์„œ ์—…๋กœ๋“œํ•œ pdf๋กœ, CDN์—์„œ ์ œ๊ณตํ•˜๋Š” url์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜จ๋‹ค.ํ”„๋ฆฌ๋ทฐ์— ์„ฑ๊ณตํ•˜๋Š” pdf์™€ ์‹คํŒจํ•˜๋Š” pdf์˜ CDN url๋กœ curl ๋ช…๋ น์–ด์„ ํ†ตํ•ด ์‘๋‹ต ํ—ค๋”๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๋‹ค.curl ๋ช…๋ น์–ด๋ฅผ ..
[SpringBoot] SQS ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ๋ณ‘๋ชฉ @Async + Executor๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ
ยท
๋งŒ๋“ค์–ด๋ณด๊ธฐ/TroubleShooting
โ˜‘๏ธ ๋ฌธ์ œ ์ •์˜ : ๋น„๋™๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๋™๊ธฐ ์ฒ˜๋ฆฌํ˜„์žฌ ์šฐ๋ฆฌ ์‹œ์Šคํ…œ์˜ ์•Œ๋ฆผ ์ „์†ก์€ SQS ๊ธฐ๋ฐ˜ Outbox ํŒจํ„ด์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‹ค.์•Œ๋ฆผ์ด ํ•„์š”ํ•œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ๋ฆ„์œผ๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฒ˜๋ฆฌ๋œ๋‹ค.์•Œ๋ฆผ ์ •๋ณด๋ฅผ Notification ํ…Œ์ด๋ธ”(์‚ฌ์šฉ์ž ์กฐํšŒ์šฉ)๊ณผ Outbox ํ…Œ์ด๋ธ”(๋ฉ”์‹œ์ง€ ๋ฐœํ–‰์šฉ)์— ์ €์žฅ์ €์žฅ๋œ ๋ฉ”์‹œ์ง€๋ฅผ SQS์— ๋ฐœํ–‰SQS ์†Œ๋น„์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ ์‹ค์ œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ ์ „์†ก์•Œ๋ฆผ ์ „์†ก์€ ๊ตฌ์กฐ์ ์œผ๋กœ ๋น„๋™๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, SQS๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋Š” ๋กœ์ง๋งŒ์€ ๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.์ด๋กœ ์ธํ•ด ๋Œ€๊ทœ๋ชจ ์•Œ๋ฆผ ๋ฐœ์†ก ์‹œ ๋ณ‘๋ชฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜๋ฐ–์— ์—†๋Š” ๊ตฌ์กฐ์˜€๋‹ค.โ–ถ๏ธŽ ๋‹จ๊ณ„๋ณ„ ๋ณ‘๋ชฉ ์ง€์  ์ •๋ฆฌ๋ณ‘๋ชฉ์ด ์˜ˆ์ƒ๋˜๋Š” ์ง€์ ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.์•Œ๋ฆผ ๋ฐ์ดํ„ฐ๋ฅผ DB์— ์ €์žฅํ•  ๋•Œ๋ฉ”์‹œ์ง€๋ฅผ SQS๋กœ ๋ฐœํ–‰ํ•  ๋•Œ์•Œ๋ฆผ์„ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ „์†กํ•  ๋•Œ๋‹จ๊ณ„์ฒ˜๋ฆฌ ..
[Springboot] AWS SQS๋ฅผ ์ด์šฉํ•œ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•˜๊ธฐ - ๋ฉ”์‹œ์ง€ ๋ฐœํ–‰ ๋กœ์ง
ยท
๋งŒ๋“ค์–ด๋ณด๊ธฐ/Spring
์„œ๋ก ๊ธฐ์กด์—๋Š” Spring์˜ `ApplicationEventPublisher`์™€ Redis์˜ Pub/Sub ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•ด ์•Œ๋ฆผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.์ด ๊ตฌ์กฐ๋Š” ๋‚ด๋ถ€ ์„œ๋ฒ„๊ฐ„ ์ด๋ฒคํŠธ ์ „ํŒŒ์™€ ๋ธŒ๋ผ์šฐ์ € ํด๋ผ์ด์–ธํŠธ๋กœ์˜ SSE ์•Œ๋ฆผ ์ „์†ก์— ํšจ๊ณผ์ ์ด์—ˆ์ง€๋งŒ, ์•Œ๋ฆผ ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฒ˜๋ฆฌ์— ๋ณ‘๋ชฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ์‹คํŒจ์‹œ ์žฌ์ฒ˜๋ฆฌ๊ฐ€ ์–ด๋ ต๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค.์ด๋Ÿฌํ•œ ํ•œ๊ณ„๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž AWS SQS๋ฅผ ๋„์ž…ํ•˜์—ฌ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์„ ์žฌ๊ตฌ์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด ๊ธ€์—์„œ ๊ตฌ์กฐ ์„ค๊ณ„, ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„๋“ค๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์„ ์ค‘์‹ฌ์œผ๋กœ ์•Œ๋ฆผ ์‹œ์Šคํ…œ ์ „ํ™˜ ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๊ณ ์ž ํ•œ๋‹ค.SQS๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋œ ์ด์œ ๊ธฐ์กด์—๋Š” ์›จ์ดํŒ… ํ˜ธ์ถœ ์‹œ ํ•ด๋‹น ์›จ์ดํŒ…์˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ๋งŒ ์žˆ์—ˆ์ง€๋งŒ, ์ดํ›„ ์ฟ ํฐ ์ด๋ฒคํŠธ๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ํ•ด๋‹น ๊ฐ€๊ฒŒ๋ฅผ ์ฐœํ•œ ์‚ฌ์šฉ์ž ์ „์ฒด์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ฐœ์†กํ•ด์•ผ ํ•˜..
[AWS] AWS SQS(Simple Queue Service) ์ดํ•ดํ•˜๊ธฐ
ยท
๊ณต๋ถ€ํ•˜๊ธฐ/Cloud
AWS SQS๋ž€?Simple Queue Service๋กœ, AWS์—์„œ ์„œ๋น„์Šคํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ์ด๋‹ค.๋ฉ”์‹œ์ง€ ํ๋ฅผ ์™œ ์‚ฌ์šฉํ• ๊นŒ?ํ•˜๋‚˜์˜ API ์š”์ฒญ์— ๋™์‹œ์— ์ˆ˜ํ–‰๋˜๋Š” ํ›„์ฒ˜๋ฆฌ ์ž‘์—…๋“ค์ด ๋งŽ์€ ๊ฒฝ์šฐ ⇒ ์‘๋‹ต ์ง€์—ฐ ์ตœ์†Œํ™” ๋ฐ ์‹œ์Šคํ…œ ๊ฐ„ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ ๊ฐ€๋Šฅ๋ฌธ์ œ ์ƒํ™ฉ์‘๋‹ต ์ง€์—ฐ ๋ฌธ์ œ : API ๋‚ด๋ถ€์—์„œ ๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•จ → UX ์ €ํ•˜์žฅ์•  ์ „ํŒŒ ์œ„ํ—˜ : ์™ธ๋ถ€ API ํ˜ธ์ถœ์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ, ์„œ๋น„์Šค ํ•˜๋‚˜์— ์žฅ์• ๊ฐ€ ๋‚˜๋„ ์ „์ฒด ๊ธฐ๋Šฅ ์žฅ์• ๋กœ ์ด์–ด์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Œํ•ด๊ฒฐํ•œ API๋Š” ๊ด€๋ จ ์ž‘์—…๋งŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ๋™๋ฐ˜๋˜์–ด์•ผ ํ•˜๋Š” ๊ฐ ์ž‘์—…์„ ๋ฉ”์‹œ์ง€๋กœ ๋งŒ๋“ค์–ด ํ์— ๋„ฃ์Œ๊ฐ๊ฐ์˜ ์ž‘์—…์„ ๋‹ด๋‹นํ•˜๋Š” Consumer๊ฐ€ ํ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์†Œ๋น„ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•จํšจ๊ณผ๊ณ ๊ฐ์˜ ์‘๋‹ต ๋Œ€๊ธฐ ์‹œ๊ฐ„ ๊ฐ์†Œํ›„์ฒ˜๋ฆฌ ์‹œ์Šคํ…œ์— ์žฅ์• ๊ฐ€ ๋‚˜๋„ ๋ฉ”์ธ ์ž‘์—… ์ž์ฒด๋Š” ์ •์ƒ ..
์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก ๊ธฐ์ˆ  ์ •๋ฆฌ | Polling, Long-Polling, SSE, WebSocket
ยท
๊ณต๋ถ€ํ•˜๊ธฐ/ETC
์ตœ๊ทผ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๊ณต๋ถ€ํ–ˆ๋˜ ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ „์†ก์— ๋Œ€ํ‘œ์ ์ธ ๊ธฐ์ˆ ๋“ค์„ ์ •๋ฆฌํ•ด๋ณธ๋‹ค.1. Polling์ฃผ๊ธฐ์ ์œผ๋กœ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด ์—…๋ฐ์ดํŠธ๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹ํด๋ผ์ด์–ธํŠธ์—์„œ ์„œ๋ฒ„๋กœ ๊ณ„์†ํ•ด์„œ request๋ฅผ ์ „์†กํ•œ๋‹ค.์„œ๋ฒ„๋Š” ๋ฐ˜๋ณต๋˜๋Š” request์— ์‘๋‹ตํ•˜๋ฉด์„œ, ์ „๋‹ฌํ•  ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์ „๋‹ฌํ•œ๋‹ค.โ–ถ๏ธŽ ์žฅ์ ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋‹ค. (๊ธฐ๋ณธ HTTP๋งŒ ์ง€์›๋˜๋ฉด ๊ตฌํ˜„ ๊ฐ€๋Šฅ)โ–ถ๏ธŽ ๋‹จ์ ๋ถˆํ•„์š”ํ•œ ์š”์ฒญ์ด ๋งŽ์•„์ง€๋ฏ€๋กœ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.์ƒˆ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜์ž๋งˆ์ž ํ™•์ธํ•  ์ˆ˜๋Š” ์—†์–ด ์ง€์—ฐ(Latency)์ด ์กด์žฌํ•œ๋‹ค.๋‹ค์ˆ˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€ํ•œ๋‹ค.๋งค์šฐ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‹ค์‹œ๊ฐ„ (๋น„์Šทํ•œ) ์„œ๋น„์Šค๋ฅผ ๊ตฌํ˜„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹ 2. Long Pollingํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ์„œ๋ฒ„๋Š” ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ..