Community

๐Ÿ•Š๏ธ ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ๋ฐฑ์—”๋“œ ํ”„๋กœ์ ํŠธ ์•„์ด๋””์–ด

๋ฐฑ์—”๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ธฐ์ˆ ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ์‹œ๋‹ˆ์–ด ์ˆ˜์ค€์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ํฅ๋ฏธ๋กœ์šด ํ”„๋กœ์ ํŠธ ์•„์ด๋””์–ด๋ฅผ ์‚ดํŽด๋ด…์‹œ๋‹ค. ๐Ÿ“Œ ์ธ์ฆ&์ธ๊ฐ€๋ฅผ ํฌํ•จํ•œ RESTful API ๋ฌด๋‹จ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ , ๊ถŒํ•œ์ด ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”. ๐Ÿ“Œ Job Queue๋ฅผ ์‚ฌ์šฉํ•œ ์ž‘์—… ์Šค์ผ€์ฅด๋ง&๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—… RabbitMQ์™€ ๊ฐ™์€ Job Queue๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž‘์—… ์Šค์ผ€์ฅด๋ง ์‹œ์Šคํ…œ์„ ์ƒ์„ฑํ•˜์„ธ์š”. ๋น„๋™๊ธฐ ์ž‘์—…์„ ์‹คํ–‰ํ•˜๊ณ  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์›น ์†Œ์ผ“์„ ์‚ฌ์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ Socket.io ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ„ํŒ… ์•ฑ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ์ด์šฉํ•œ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ๋„์ปค์™€ ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ† ๋‹ˆ ์Šคํƒ€ํฌ๊ฐ€ ์งˆํˆฌํ•  ๋งŒํ•œ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๋Š” ๊ฒ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ, REST API ๋ฐ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ์ด์šฉํ•˜์—ฌ ์›ํ™œํ•œ ์˜์‚ฌ์†Œํ†ต์„ ๋ณด์žฅํ•ฉ์‹œ๋‹ค. ๐Ÿ“Œ ํ™•์žฅ์„ฑ๊ณผ ๋‚ด ๊ฒฐํ•จ ์„ฑ(Fault-Tolerant)์ด ๋›ฐ์–ด๋‚œ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์—„์ฒญ๋‚œ ์–‘์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์ง€ ์•Š๋‚˜์š”? ๋ถ„์‚ฐ ์‹œ์Šคํ…œ ์˜์—ญ์„ ์ •๋ณตํ•˜๋ฉด ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Apache Kafka, Apache Cassandra ๋˜๋Š” Redis์˜ ๊ฐ•๋ ฅํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์ˆ˜๋งŽ์€ ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ๊ฒฌ๋”œ ์ˆ˜ ์žˆ๋Š” ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค. ๐Ÿ“Œ CDN(Content Delivery Network) ํ†ตํ•ฉ Nginx ๋˜๋Š” Varnish Cache์™€ ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”Œ๋ž˜์‹œ๋ณด๋‹ค ๋” ๋นจ๋ฆฌ ํŒŒ์ผ์„ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” CDN์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ์บ์‹œ ๊ณ„์ธต ๊ตฌํ˜„ Redis ๋˜๋Š” Memcached๋Š” ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜๊ณ  ์ฆ‰๊ฐ์ ์ธ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋ฉ‹์ง„ ์‚ฌ์ด๋“œํ‚ฅ์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ“Œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ ์ƒ์„ฑ ๋ฐ ๊ฐœ์„  ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰ ๋ฐ ์ €์žฅ์— ์ตœ์ ํ™”๋œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ์›น ์Šคํฌ๋ž˜ํ•‘ ์„œ๋น„์Šค ๊ตฌํ˜„ Scrapy ๋˜๋Š” Puppeteer ๊ฐ™์€ ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ๋ผ์ธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธ์–ด๋‚ด์–ด ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์น˜ ๋ฐ”๋‹ค์— ๋ฌปํ˜€์žˆ๋Š” ๋ณด๋ฌผ์„ ์ฐพ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ์š”! ๐Ÿ“Œ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ ์ƒ์„ฑ D3.js ๋˜๋Š” Chart.js์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ์˜ ์‹œ๊ฐ์  ํ‘œํ˜„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค