์ฑ„๋„ํ†ก ์•„์ด์ฝ˜

๋Œ€์šฉ๋ž‘ ์ฑ„ํŒ… TPS์— ๋Œ€ํ•œ stateful ์„œ๋น„์Šค ๊ตฌ์ถ•ํ•˜๊ธฐ

stateful ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ ์–ด๋–ป๊ฒŒ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ณ , ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰์ด ๋˜๋Š”์ง€ ๋ชจ๋“ ๊ฒƒ์„ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค.

(4.4) ์ˆ˜๊ฐ•ํ‰ 16๊ฐœ

์ˆ˜๊ฐ•์ƒ 431๋ช…

๋‚œ์ด๋„ ์ดˆ๊ธ‰

์ˆ˜๊ฐ•๊ธฐํ•œ ๋ฌด์ œํ•œ

์นดํ”„์นด
์นดํ”„์นด
๋Œ€์šฉ๋Ÿ‰ํŠธ๋ž˜ํ”ฝ
๋Œ€์šฉ๋Ÿ‰ํŠธ๋ž˜ํ”ฝ
tps
tps
์›น์†Œ์ผ“
์›น์†Œ์ผ“
์นดํ”„์นด
์นดํ”„์นด
๋Œ€์šฉ๋Ÿ‰ํŠธ๋ž˜ํ”ฝ
๋Œ€์šฉ๋Ÿ‰ํŠธ๋ž˜ํ”ฝ
tps
tps
์›น์†Œ์ผ“
์›น์†Œ์ผ“
๋‚ ๊ฐœ ๋‹ฌ๋ฆฐ ๋™์ „

๊ฐ•์˜ ์ถ”์ฒœํ•˜๊ณ  ์„ฑ์žฅ๊ณผ ์ˆ˜์ต์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”!

๋‚ ๊ฐœ ๋‹ฌ๋ฆฐ ๋™์ „

๋งˆ์ผ€ํŒ… ํŒŒํŠธ๋„ˆ์Šค

๊ฐ•์˜ ์ถ”์ฒœํ•˜๊ณ  ์„ฑ์žฅ๊ณผ ์ˆ˜์ต์„ ๋งŒ๋“ค์–ด ๋ณด์„ธ์š”!

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

๋จผ์ € ๊ฒฝํ—˜ํ•œ ์ˆ˜๊ฐ•์ƒ๋“ค์˜ ํ›„๊ธฐ

4.4

5.0

ssez

29% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

ORM ์‚ฌ์šฉ ์‹œ ๋‹จ์ ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•ด์ฃผ์‹ค ๋•Œ ๋œจ๋”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ ๊ทธ๋ž˜๋„ ์ตœ๊ทผ ์ฟผ๋ฆฌ ํŠœ๋‹ํ•  ๋•Œ ๋กœ๊น…ํ•ด๋ดค๋‹ค๊ฐ€ ๋œจํ—‰ํ–ˆ๋˜ ๊ฒฝํ—˜์ด.. ใ…Žใ…Ž ์ด๋ฒˆ์—๋„ ์žฌ๋ฐŒ๊ฒŒ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. go๊ฐ€ ์ต์ˆ™์น˜ ์•Š์•„์„œ 1ํƒ„์— ๋น„ํ•ด ์ง„๋„๊ฐ€ ์ข€ ๋”๋””์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ์“ฐ๋Š”๊ตฌ๋‚˜~ ํ•˜๋ฉฐ ๋˜ ๋‹ค๋ฅธ ์žฌ๋ฏธ๊ฐ€ ์žˆ๋„ค์š”! ์ €ํฌ ํšŒ์‚ฌ๋Š” ์ €๋ฅผ ํฌํ•จํ•ด 2๋ช…๋งŒ ์ผํ•˜๊ณ  ์žˆ๊ณ  (์ €๋Š” ํ’€์Šคํƒ, ํ•œ๋ถ„์€ ๋Œ€ํ‘œ๋‹˜์ด์‹ ๋ฐ, devops๊นŒ์ง€ ๋‹คํ•˜์„ธ์š”. ๐Ÿ˜…) ์•„๋ฌด๋ž˜๋„ ์ž‘์€ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋‹ค๋ณด๋‹ˆ... ์ œ ์‹ค๋ ฅ์— ๋Œ€ํ•ด ์˜์‹ฌ๋„ ๋งŽ์ด ๊ฐ€๊ณ , ์ด๋ž˜์ €๋ž˜ ์‹ฌ๋ž€ํ•ด์„œ ์ˆ˜๊ฐ•ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ๋‹ค์‹œ ์ฒ˜์Œ ๊ณต๋ถ€ํ• ๋•Œ์ฒ˜๋Ÿผ ์„ค๋ ˆ์ด๋„ค์š”. ์š”์ฆ˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•ด ๊ณ ๋ฏผ๋„ ๋งŽ์•˜๋Š”๋ฐ ์—ญ์‹œ ๊ณ ๋ฏผํ•˜๊ธฐ๋ณด๋‹จ ๋จธ๋ฆฌ๋ฅผ ๋น„์šฐ๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๊ฒŒ ์ตœ๊ณ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™„๊ฐ•ํ•˜๋ฉด ๋˜ ๋‹ค๋ฅธ ๊ฐ•์˜ ๋ณด๋Ÿฌ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค :)

5.0

DAN

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

go lang์„ ์ž‘์„ฑ๋œ ์„œ๋ฒ„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค

5.0

rnxogud123

100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

์ข‹์€ ๊ฐ•์˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜๊ฐ• ํ›„ ์ด๋Ÿฐ๊ฑธ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š”

  • Kafka๋ฅผ ํ†ตํ•œ ๋ฐœํ–‰/๊ตฌ๋… ํŒจํ„ด

  • MySQL์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

  • WSS ํ†ต์‹ ์„ ํ†ตํ•œ ๋Œ€์šฉ๋ž‘ ์ฑ„ํŒ… TPS์ฒ˜๋ฆฌ

  • ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ์„ ํ†ตํ•œ ์„œ๋ฒ„ ๊ด€๋ฆฌ

Kafka, MySQL์„ ํ™œ์šฉํ•˜์—ฌ Statefulํ•œ ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ ๐Ÿ˜˜


๋ณธ ๊ฐ•์˜์—์„œ๋Š” ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ฑ„ํŒ… TPS์— ๋Œ€ํ•ด Statefulํ•œ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ด€๋ฆฌ๊ฐ€ ๋˜๊ณ  ๊ฐœ๋ฐœ์ด ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ด ๊ฐ•์˜๋Š” ๋‘๊ฐ€์ง€ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

Golang์„ ์šฐ์„ ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋‘ ๊ตฌํ˜„์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ 

์ดํ›„ ์ˆ˜๊ฐ•ํ•˜์‹œ๋Š” ๋ถ„๋“ค์„ ์œ„ํ•ด ์กฐ๊ธˆ ๋” ์ต์ˆ™ํ•˜์‹  Node.JS์—์„œ์˜ Kafka ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋“ฑ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ํ†ตํ•ด์„œ ๊ฐ•์˜๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


์ถ”๊ฐ€๋กœ Kafka๋ฅผ ํ†ตํ•œ ๋ฐœํ–‰/๊ตฌ๋… ํŒจํ„ด, MySQL์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋“ฑ ๋‹ค์–‘ํ•˜๊ณ  ๊ธฐ์กด์— ๊ฒฝํ—˜ํ•ด๋ณด์ง€ ๋ชปํ•œ ์ฃผ์ œ๋กœ ๊ฐ•์˜๋ฅผ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.


๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๊ณ  ๋‚˜๋ฉด, ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ Kafka, MySQL์— ๋Œ€ํ•œ ๊นŠ์€ ์ดํ•ด์™€ Statefulํ•œ ์„œ๋น„์Šค์— ๋Œ€ํ•œ Zero-downtime Deployment๋ฅผ ํ•™์Šตํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Stateful vs Stateless์˜ ์ฐจ์ด๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?? ๐Ÿซฃ

์—ฌ๋Ÿฌ๋ถ„!! ํ˜น์‹œ ๋‹จ์ˆœํžˆ MVC, Service-Repository ๊ฐ™์€ ์„œ๋ฒ„์˜ ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ์„œ๋ฒ„์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•ด ๋ณด์‹ ์ ์ด ์žˆ์œผ์‹ ๊ฐ€์š”?


์‹ค๋ฌด์—์„œ๋Š” ์„œ๋ฒ„์˜ ํ˜•ํƒœ์— ๋”ฐ๋ผ์„œ Zero-downtime Deployment๋ฅผ ์ˆ˜ํ–‰ํ• ์ง€, ์•„๋‹ˆ๋ฉด ์–ด๋А์ •๋„์˜ retry๋ฅผ ํ—ˆ์šฉํ• ์ง€๊ฐ€ ์ •ํ•ด์ง‘๋‹ˆ๋‹ค.

์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ๊ฐœ๋ฐœํ•˜์‹œ๋Š” ์„œ๋ฒ„๋Š” ์ด ๋‘ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ ์šฉ์ด ๋˜๋ฉด์„œ ๊ฐœ๋ฐœ์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค..

์ผ๋ฐ˜์ ์ธ HTTP์„œ๋ฒ„๋ฅผ ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํ™•์žฅ์— ๊ต‰์žฅํžˆ ์šฉ์ดํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๊ฐœ๋ฐœํ•˜์‹ ๋‹ค๋ฉด

๊ธฐ๋ณธ์ ์œผ๋กœ Statelessํ•œ ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ์ด ๋ฉ๋‹ˆ๋‹ค.


๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์„œ๋ฒ„์˜ ํ˜•ํƒœ๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์‰ฝ๊ฒŒ ์ ‘ํ•˜์ง€ ๋ชปํ•˜๋Š” ์„œ๋ฒ„์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.


์ด๋Ÿฌํ•œ ์„œ๋ฒ„์˜ ๊ตฌ์กฐ์—์„œ๋Š” ws protocol์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ด ์ง„ํ–‰์ด ๋˜๋ฉฐ

์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ธฐ ๋–„๋ฌธ์—, ํ™•์žฅ์— ๊ต‰์žฅํžˆ ๋ถˆ๋ฆฌํ•˜์ง€๋งŒ connection์„ ์œ ์ง€ํ•˜๊ธฐ ๋–„๋ฌธ์—, ๋ฆฌ์†Œ์Šค ์ ˆ๊ฐ์— ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.


์ด ๊ฐ•์˜์—์„œ ์ฃผ๋กœ ๋‹ค๋ฃจ์–ด ๋ณผ ์„œ๋ฒ„์˜ ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜์—์„œ๋Š” Stateful๊ณผ Statelessํ•œ ๋‘ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ๋ชจ๋‘ ๋‹ค๋ฃจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ’

์ด ๊ฐ•์˜๋Š” ์‰ฝ๊ฒŒ ์ ‘ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฐ•์˜๋ผ๊ณ  ์žฅ๋‹ด ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋‘๊ฐ€์ง€ ํ˜•ํƒœ์˜ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ MySQL, Socket์„ ํ™œ์šฉํ•œ ๋Œ€์šฉ๋Ÿ‰ ์ฑ„ํŒ… TPS์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ์™€, Kafka๋ฅผ ํ™œ์šฉํ•œ Zero-downtime Deployment๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ ๋  ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•ด์„œ ํ•™์Šตํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Zero-downtime Deployment๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”??๐Ÿ™‹โ€โ™‚

์•ž์„œ ์†Œ๊ฐœ๊ธ€์—์„œ ์ €๋Š” ์ž์ฃผ ํ•ด๋‹น ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์ง์—ญ์„ ํ•˜์ž๋ฉด, ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.


์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ์—์„œ ๊ฐ‘์ž๊ธฐ ์‚ฌ์ดํŠธ๊ฐ€ ๋จนํ†ต์ด๋˜๊ฑฐ๋‚˜, ์ค‘๋‹จ์ด ๋œ ๊ฒฝ์šฐ๋ฅผ ๊ฒฝํ—˜ํ•ด ๋ณด์‹ ์ ์ด ์žˆ์œผ์‹ ๊ฐ€์š”??

์‚ฌ์šฉ์ž ์ธก๋ฉด์—์„œ๋Š” ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰์ด ๋˜๋Š”์ง€, ์•ˆ๋˜๋Š”์ง€๋„ ๋ชจ๋ฅด๊ฒŒ ์‚ฌ์ดํŠธ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ๋ฐฐํฌ๊ฐ€ ์ง„ํ–‰์ด ๋˜๋Š”๊ฒƒ์„ Zero-downtime Deployment๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฐฉ์‹์€ Statelessํ•œ ์„œ๋น„์Šค์—์„œ๋Š” ๊ต‰์žฅํžˆ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์„œ๋ฒ„์˜ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋Š” Statefulํ•œ ์„œ๋น„์Šค์—์„œ๋Š” ๋งค์šฐ ์–ด๋ ต๊ณ  ๋งŽ์€ ์ž์›์„ ์†Œ๋ชจํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.


์ด ๊ฐ•์˜์—์„œ๋Š” Statefulํ•œ ์„œ๋น„์Šค์— ๋Œ€ํ•ด์„œ Kafka๋ฅผ ํ™œ์šฉํ•˜์—ฌ, Zero-downtime Deployment๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Why Kafka ๐Ÿ˜ฏ

Kafka๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ Stream ํˆด๋กœ์จ ๋ฐœํ–‰/๊ตฌ๋… ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ์— ์žˆ์–ด์„œ ๋งค์šฐ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๋˜๋Š” ์„œ๋น„์Šค ์ž…๋‹ˆ๋‹ค.


์‹ค์ œ๋กœ LinkedIn์—์„œ ๊ฐœ๋ฐœํ•˜๊ณ , ๋„์ž…ํ•œ ์„œ๋น„์Šค์ด๋ฉฐ ๋‹ค์–‘ํ•œ ํšŒ์‚ฌ์—์„œ Kafka๋ฅผ ๋„์ž…ํ•ด ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€ ์œ ์‹ค ์—†์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ˆ˜๊ฐ•์ƒ ๋ถ„๋“ค์ด ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ๋ณด์…”์•ผ ํ•˜๋Š” ๋ถ€๋ถ„์€ ๋„ค์นด๋ผ์ฟ ๋ฐฐ, ๋‹ค์ˆ˜์˜ ๋Œ€๊ธฐ์—…์—์„œ๋Š” Kafka๋ฅผ ํ•„์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ๋งŽ์€ ๋„์›€์ด ๋˜์‹ค ๊ฒ๋‹ˆ๋‹ค.


์ด ๊ฐ•์˜์—์„œ๋Š” ์Šค์Šค๋กœ localํ™˜๊ฒฝ์— Kafka ํ™˜๊ฒฝ ์„ค์ • ๋ฐ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ , ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๊นŒ์ง€ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

  • Kafka์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์‹ค์ œ LinkedIn์˜ ๊ฐœ๋ฐœ์ž์ธ Gwen Shapira์˜ Kafka: The Definitive Guide์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ปค๋ฆฌํ˜๋Ÿผ์ด ๊ตฌ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š”. ๐Ÿค”

1โƒฃKafka๋ฅผ ํ™œ์šฉํ•œ Pub/Sub Modeling

kafka์˜ config ํ™˜๊ฒฝ ์„ค์ • ๋ฐ Broker, zookeeper์˜ ๊ตฌ๋™๊นŒ์ง€ ๋‹ค๋ฃน๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์‹ค์ œ Kafka๋ฅผ ํ™œ์šฉํ•œ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ฃผ์˜์ ์— ๋Œ€ํ•ด์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

2โƒฃMySQL Schema ์„ค๊ณ„๋ฅผ ํ†ตํ•œ ์„œ๋น„์Šค ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

socketํ†ต์‹ ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ ๋ฐ ์ฑ„ํŒ…๋ฐฉ์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋ฅผ ์„œ๋น„์Šค ๊ตฌ์ถ•์— ์šฉ์ดํ•œ MySQL์„ ํ™œ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ํ•™์Šตํ•˜์‹œ๊ฒŒ ๋˜๋ฉฐ, ORDER BY, Paging ๋“ฑ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์‹œ๋ฉฐ, ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๊ฐ€์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3โƒฃ4๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜์—ฌ ์ด๋ฃจ์–ด์ง€๋Š” ์„œ๋ฒ„๊ฐ„ ํ†ต์‹ 

๋‹จ์ˆœํžˆ ํ•œ๊ฐœ์˜ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๋‹ค์–‘ํ•œ ์„œ๋ฒ„๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ , ํ•ด๋‹น ์„œ๋ฒ„๋“ค์„ ๊ด€๋ฆฌํ•˜๋Š” Controller์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋Š” ๋“ฑ ๋งŽ์€ ์„œ๋ฒ„ ์ž‘์—…์„ ํ†ตํ•ด Load Balancer๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ๊ฒฝํ—˜ํ•˜์‹ค ์ˆ˜ ์žˆ๊ณ , Kafka์˜ Pub/Sub Modeling์„ ํ™œ์šฉํ•˜์—ฌ ์„œ๋ฒ„๊ฐ„์˜ ํ†ต์‹  ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ฒฝํ—˜ํ•ด ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ๊ฑธ ๊ตฌํ˜„ํ•ด ๋ณผ๊ฒŒ์š”. ๐Ÿค”

Localํ™˜๊ฒฝ์—์„œ์˜ Kafka ๊ตฌ๋™ ๋ฐฉ๋ฒ•

MySQL์„ ํ†ตํ•œ ์ฑ„ํŒ…๋ฐฉ ๋ฐ ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

websocketsํ†ต์‹ ์„ ํ†ตํ•œ DB ๋ฐ์ดํ„ฐ ๋‹ค๋ฃจ๊ธฐ

Node.js, Go๋ฅผ ํ™œ์šฉํ•œ Kafka ํ™œ์šฉ ๋ฐ ์„œ๋ฒ„ ๊ด€๋ฆฌ

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • ์šด์˜ ์ฒด์ œ ๋ฐ ๋ฒ„์ „(OS): Windows, macOS, Linux ๋“ฑ ๋ชจ๋“  OS๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.


  • PC ์‚ฌ์–‘: ์ธํ„ฐ๋„ท ์ ‘์†์ด ๊ฐ€๋Šฅํ•œ ๊ธฐ๋ณธ ์‚ฌ์–‘์˜ PC

๋ฐ˜๋“œ์‹œ ๋ฌด๋ฃŒ๋กœ ๊ณต๊ฐœ๋˜๋Š” ์˜์ƒ์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!! ์—ฌ๋Ÿฌ๋ถ„๋“ค์ด ์ด ๊ฐ•์˜์—์„œ ๋ฐฐ์šฐ์‹ค ์ˆ˜ ์žˆ๊ณ , ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜์‹ค ์„œ๋น„์Šค์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ถ€๋ถ„์€ ๋งค์šฐ ์ค‘์š”ํ•ด์š”! ๐Ÿ˜ฏ

์ด ๊ฐ•์˜๋Š” ์ด์ „ 1ํƒ„ ๊ฐ•์˜์— ์ด์–ด์„œ, ์ถ”๊ฐ€์ ์ธ ์„œ๋น„์Šค ๊ตฌ์ถ• ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์™€ ๋ฐฐํฌ์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ๋Š” ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‹ˆ ์ด์ „ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ•์˜๊ฐ€ ์ด์–ด์„œ ์ง„ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์ด์ „ ๊ฐ•์˜์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ ์†Œ์Šค์ฝ”๋“œ์˜ ์„ค๋ช…์ด ์ด๋ฃจ์–ด์ง€์ง€๋งŒ, ์ฒ˜์Œ ๋“ฃ๋Š”๋ถ„๋“ค์€ ๋งค์šฐ ๋‹นํ™ฉํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.


๊ทธ๋Ÿฌ๋‹ˆ ๋งŒ์•ฝ wssํ†ต์‹ ์ด๋‚˜, ์ฑ„ํŒ… ์„œ๋ฒ„์— ๋Œ€ํ•œ ์ง€์‹์ด ์—†์œผ์‹œ๋‹ค๋ฉด, ์ด ๊ฐ•์˜๋ฅผ ์„ ํ–‰ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ•์˜๋ฅผ ์ˆ˜๊ฐ•ํ•˜์‹œ๋Š”๋ฐ์— ์žˆ์–ด์„œ ๋งŽ์€ ์–ด๋ ค์›€์ด ์—†์œผ์‹ค๊บผ ๊ฐ™์•„์š”.

์ด ๊ฐ•์˜์˜ ๋ชฉํ‘œ๋Š” FE๊ฐœ๋ฐœ์ด ์•„๋‹ˆ๋ผ, ws protocol์— ๋Œ€ํ•œZero-downtime Deployment์•„ํ‚คํ…์ฒ˜ ๋ฐ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ์ค‘์ ์œผ๋กœ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


์™œ๋ƒํ•˜๋ฉด, ์ €๋Š” FE๋ฅผ ์ „๋ฌธ์ ์œผ๋กœ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹ˆ๊ณ , BE๋ฅผ ์ „๋ฌธ์ ์œผ๋กœ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ด๊ธฐ ๋–„๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ FE ๊ฐœ๋ฐœ์— ์ž˜๋ชป๋œ ์ง€์‹์ด ์ „๋‹ฌ ๋  ์šฐ๋ ค๊ฐ€ ์žˆ์–ด์„œ FE๊ฐœ๋ฐœ์€ ๋‹จ์ผ ์„œ๋ฒ„์— ๋Œ€ํ•œ API์ฒ˜๋ฆฌ๋งŒ ์ง„ํ–‰์„ ํ•˜๊ณ  ์žˆ์–ด์š”.


๊ทธ๋Ÿฌ๋‹ˆ ์ถ”๊ฐ€์ ์ธ Zero-downtime Deployment๋ฅผ ์œ„ํ•œ React State๊ด€๋ฆฌ๋Š” ๊ฐ•์˜์—์„œ ์ง„ํ–‰์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๊ฐ•์˜์—์„œ๋„ ์ง€์†์ ์œผ๋กœ ์–ธ๊ธ‰์„ ํ•˜๊ณ  ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๋ฐœํ–‰/๊ตฌ๋… ํŒจํ„ด์— ๊ด€์‹ฌ์ด ์žˆ์œผ์‹  ๋ถ„

  • ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ ๊ตฌ์ถ•์— ๊ถ๊ธˆํ•˜์‹  ๋ถ„

  • ์ฑ„ํŒ… ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์‹  ๋ถ„

  • ๋ฌด๋‚œํ•œ ๊ฐœ๋ฐœ๋ฐฉ์‹์ด ์•„๋‹Œ, ์ƒˆ๋กญ๊ณ  ์žฌ๋ฏธ์žˆ๋Š” ๊ฐœ๋ฐœ์„ ํ•ด๋ณด๊ณ  ์‹ถ์œผ์‹  ๋ถ„

  • MySQL, Kafka๋ฅผ ์‹ค๋ฌด์ž์—๊ฒŒ ๋ฐฐ์šฐ๊ณ  ์‹ถ์œผ์‹  ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Golang [ ๊ฐ•์˜์˜ ๊ธฐ๋ณธ ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ๋ชจ๋ฅด์…”๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค. ]

  • Node.Js [ ์ˆ˜๊ฐ•์ƒ๋“ค์„ ์œ„ํ•œ ์–ธ์–ด ์ž…๋‹ˆ๋‹ค. ๋ชจ๋ฅด์…”๋„ ๋ฌด๋ฐฉํ•ฉ๋‹ˆ๋‹ค.]

์•ˆ๋…•ํ•˜์„ธ์š”
July์ž…๋‹ˆ๋‹ค.

3,782

๋ช…

์ˆ˜๊ฐ•์ƒ

187

๊ฐœ

์ˆ˜๊ฐ•ํ‰

88

๊ฐœ

๋‹ต๋ณ€

4.4

์ 

๊ฐ•์˜ ํ‰์ 

15

๊ฐœ

๊ฐ•์˜

์ž๊ธฐ ์†Œ๊ฐœ

๋น„์ „๊ณต์ž ์ถœ์‹ ์œผ๋กœ ํŒ๊ต์—์„œ ํ”Œ๋žซํผ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์„ ๋‹ด๋‹นํ•˜์—ฌ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„ ์ตœ์ ํ™”์™€ ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ํŠœ๋‹์„ ์ข‹์•„ํ•˜๊ณ  ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์—ฌ๋Ÿฌ๋ถ„๋“ค์—๊ฒŒ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์•Œ๋ ค๋“œ๋ฆฌ๊ณ ์ž ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฒฝ๋ ฅ

[ๅ‰] ์ƒŒ๋“œ๋ฐ•์Šค ๋ธ”๋ก์ฒด์ธ ๊ฐœ๋ฐœ์ž

[ๅ‰] ๋„ฅ์Šจ ์žํšŒ์‚ฌ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž

[ๅ‰] ํŒ๊ต ๋Œ€๊ธฐ์—… ํ”Œ๋žซํผ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž

[็พ] ํŒ๊ต ๋ชจํšŒ์‚ฌ ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

31๊ฐœ โˆ™ (3์‹œ๊ฐ„ 46๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์ „์ฒด

16๊ฐœ

4.4

16๊ฐœ์˜ ์ˆ˜๊ฐ•ํ‰

  • rnxogud123๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
    rnxogud123

    ์ˆ˜๊ฐ•ํ‰ 11

    โˆ™

    ํ‰๊ท  ํ‰์  5.0

    5

    100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

    ์ข‹์€ ๊ฐ•์˜ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    • dksk hy๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      dksk hy

      ์ˆ˜๊ฐ•ํ‰ 3

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      77% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      1ํŽธ๊ณผ 2ํŽธ ๋ชจ๋‘ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ…์„œ๋ฒ„์— ๋Œ€ํ•œ ๊ตฌ์„ฑ์„ ์–ด๋А์ •๋„ ์ดํ•ด ํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ์ผ๋ฐ˜์ ์œผ๋กœ ์ ‘ํ•  ์ˆ˜ ์—†๋Š” ์ฃผ์ œ๋กœ ๊ตฌ์„ฑ๋œ ์ข‹์€ ๊ฐ•์˜๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

      • July
        ์ง€์‹๊ณต์œ ์ž

        ๋ชธ๋‘˜๋ฐ”๋ฅผ ๋ชจ๋ฅด๊ฒ ๋‹ค๋Š”.... ์•ž์œผ๋กœ ์ข‹์€ ๊ฐ•์˜๋กœ ๋ณด๋‹ตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

    • kas kim๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      kas kim

      ์ˆ˜๊ฐ•ํ‰ 4

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      61% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ์ด๋ฒˆ ๊ฐ•์˜๋„ 1ํƒ„์— ์ด์–ด์„œ ์œ ์ตํ•˜๊ฒŒ ์ž˜ ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

      • July
        ์ง€์‹๊ณต์œ ์ž

        2ํƒ„์€ ์ข€ ๋” ์•„ํ‚คํ…์ฒ˜์ธ ๋ถ€๋ถ„์„ ๋‹ค๋ฃจ์—ˆ๋Š”๋ฐ ์œ ์ตํ•˜์…จ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๋„ค์š”. ์ข‹์€ ํ‰ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

    • ssez๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      ssez

      ์ˆ˜๊ฐ•ํ‰ 7

      โˆ™

      ํ‰๊ท  ํ‰์  5.0

      5

      29% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      ORM ์‚ฌ์šฉ ์‹œ ๋‹จ์ ์— ๋Œ€ํ•ด ์–ธ๊ธ‰ํ•ด์ฃผ์‹ค ๋•Œ ๋œจ๋”ํ–ˆ์Šต๋‹ˆ๋‹ค. ์•ˆ ๊ทธ๋ž˜๋„ ์ตœ๊ทผ ์ฟผ๋ฆฌ ํŠœ๋‹ํ•  ๋•Œ ๋กœ๊น…ํ•ด๋ดค๋‹ค๊ฐ€ ๋œจํ—‰ํ–ˆ๋˜ ๊ฒฝํ—˜์ด.. ใ…Žใ…Ž ์ด๋ฒˆ์—๋„ ์žฌ๋ฐŒ๊ฒŒ ๋ณด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. go๊ฐ€ ์ต์ˆ™์น˜ ์•Š์•„์„œ 1ํƒ„์— ๋น„ํ•ด ์ง„๋„๊ฐ€ ์ข€ ๋”๋””์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ์“ฐ๋Š”๊ตฌ๋‚˜~ ํ•˜๋ฉฐ ๋˜ ๋‹ค๋ฅธ ์žฌ๋ฏธ๊ฐ€ ์žˆ๋„ค์š”! ์ €ํฌ ํšŒ์‚ฌ๋Š” ์ €๋ฅผ ํฌํ•จํ•ด 2๋ช…๋งŒ ์ผํ•˜๊ณ  ์žˆ๊ณ  (์ €๋Š” ํ’€์Šคํƒ, ํ•œ๋ถ„์€ ๋Œ€ํ‘œ๋‹˜์ด์‹ ๋ฐ, devops๊นŒ์ง€ ๋‹คํ•˜์„ธ์š”. ๐Ÿ˜…) ์•„๋ฌด๋ž˜๋„ ์ž‘์€ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•˜๋‹ค๋ณด๋‹ˆ... ์ œ ์‹ค๋ ฅ์— ๋Œ€ํ•ด ์˜์‹ฌ๋„ ๋งŽ์ด ๊ฐ€๊ณ , ์ด๋ž˜์ €๋ž˜ ์‹ฌ๋ž€ํ•ด์„œ ์ˆ˜๊ฐ•ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ๋Š”๋ฐ ๋‹ค์‹œ ์ฒ˜์Œ ๊ณต๋ถ€ํ• ๋•Œ์ฒ˜๋Ÿผ ์„ค๋ ˆ์ด๋„ค์š”. ์š”์ฆ˜ ๋ฏธ๋ž˜์— ๋Œ€ํ•ด ๊ณ ๋ฏผ๋„ ๋งŽ์•˜๋Š”๋ฐ ์—ญ์‹œ ๊ณ ๋ฏผํ•˜๊ธฐ๋ณด๋‹จ ๋จธ๋ฆฌ๋ฅผ ๋น„์šฐ๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๊ฒŒ ์ตœ๊ณ ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์™„๊ฐ•ํ•˜๋ฉด ๋˜ ๋‹ค๋ฅธ ๊ฐ•์˜ ๋ณด๋Ÿฌ๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค :)

      • July
        ์ง€์‹๊ณต์œ ์ž

        2์ธ ๊ฐœ๋ฐœ์ด๋ผ๋Š” ์ •๋ง ์‰ฝ์ง€์•Š์œผ์‹œ๊ฒ ์–ด์š”. ์‘์›ํ•ฉ๋‹ˆ๋‹ค!! ์•„๋ฌด๋ž˜๋„ ์‰ฝ๊ฒŒ ์ ‘ํ•˜์ง€ ๋ชปํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฐœ๋…๋“ค์„ ์ œ๊ณตํ•ด ๋“œ๋ฆฌ๋ฉด์„œ ๊ฒฌํ•ด๋ฅผ ๋„“ํ˜€๋“œ๋ฆฌ๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด๋Ÿฐ ๊ฐ•์˜๋ฅผ ๋งŽ์ด ์ค€๋น„๋ฅผ ํ•˜์˜€๋Š”๋ฐ ๋„์›€์ด ๋˜์‹ ๊ฑฐ ๊ฐ™์•„์„œ ๋งค์šฐ ๋ฟŒ๋“ฏํ•˜๋„ค์š”. ํ•ญ์ƒ ์‹ค๋ ฅ์— ๋Œ€ํ•œ ์˜์‹ฌ์ด ๊ฐ€๋Š”๊ฒƒ์€ ์ข‹์€ ๋ชจ์Šต์ธ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ž๋งŒํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๋‚ฎ์€ ์ž์„ธ๋กœ ์ž„ํ•˜๋Š”๊ฒŒ ์ €๋Š” ๋งž๋‹ค๊ณ  ์ƒ๊ฐ์„ํ•ด์š” ์ € ๋˜ํ•œ ๊ทธ๋ ‡๊ณ ์š” ใ…Žใ…Ž ๊ฐ•์˜ ๋‚ด์šฉ์™ธ์—๋„ ๊ณ ๋ฏผ์ด ์žˆ์œผ์‹  ๋ถ€๋ถ„์ด๋‚˜ ์งˆ๋ฌธ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ํŽธํ•˜๊ฒŒ ์งˆ๋ฌธ์ฃผ์„ธ์š”. ์ € ์ƒ๊ฐ๋ณด๋‹ค ๋˜๊ฒŒ ์ธ๊ฐ„์ ์ธ ์‚ฌ๋žŒ์ด๋ผ์„œ ใ…Žใ…Ž ์ด๋Ÿฐ์ €๋Ÿฐ ๋Œ€ํ™”ํ•˜๋ฉด์„œ ์„œ๋กœ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ๋„ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.!! ๊ฐ•์˜ ๋“ค์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

    • DAN๋‹˜์˜ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€
      DAN

      ์ˆ˜๊ฐ•ํ‰ 5

      โˆ™

      ํ‰๊ท  ํ‰์  4.6

      5

      100% ์ˆ˜๊ฐ• ํ›„ ์ž‘์„ฑ

      go lang์„ ์ž‘์„ฑ๋œ ์„œ๋ฒ„๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค

      July๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜

      ์ง€์‹๊ณต์œ ์ž๋‹˜์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

      ๋น„์Šทํ•œ ๊ฐ•์˜

      ๊ฐ™์€ ๋ถ„์•ผ์˜ ๋‹ค๋ฅธ ๊ฐ•์˜๋ฅผ ๋งŒ๋‚˜๋ณด์„ธ์š”!

      ์—ฐ๊ด€ ๋กœ๋“œ๋งต

      ๊ฐ•์˜๊ฐ€ ํฌํ•จ๋œ ๋กœ๋“œ๋งต์œผ๋กœ ํ•™์Šตํ•ด ๋ณด์„ธ์š”!

      โ‚ฉ47,300