2024.05 ~ ํ์ฌ: ๋ฏธ๊ตญ ์ค๋ฆฌ์ฝ๋ฐธ๋ฆฌ AI ์คํํธ์ , ํ์คํ ์ํํธ์จ์ด ์์ง๋์ด
2023.08 ~ 2024.04: ๋ฏธ๊ตญ ๋น ํ ํฌ ์์ง๋์ด ํ ๋ก์ฐ์ญ ํ์คํ ์ํํธ์จ์ด ์์ง๋์ด ํ ๋ก์ฐ
~2022.10 @๊ตญ๋ด ๊ธฐ์ ์ฌ์ง(๊ฒ์ํฌํธ/ํํ ํฌ, AI)
Courses
Reviews
- High-Performance Real-time Distributed System RabbitMQ + Kafka + Redis Practical Project
armyso95062341
ยท
High-Performance Real-time Distributed System RabbitMQ + Kafka + Redis Practical ProjectHigh-Performance Real-time Distributed System RabbitMQ + Kafka + Redis Practical Project- High-Performance Real-time Distributed System RabbitMQ + Kafka + Redis Practical Project
- High-Performance Real-time Distributed System RabbitMQ + Kafka + Redis Practical Project
- Learning System Design through 29 Hands-on Practices from Silicon Valley Big Tech
Posts
Q&A
์ฟ ํฐ ๋ฌธ์
์๋ ํ์ธ์ nameunskadms ๋, ์๋ก์ด ์ฟ ํฐ์ ๋ฐ๊ธํด๋๋ ธ์ต๋๋ค. https://inf.run/1D24g๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 27
Q&A
Redis ๋๋ค ๊ฐ ์ถ๊ฐ ์ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ
์๋ ํ์ธ์ ๊ฐํ ํ ๋,์ข์ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค.Redis๋ ๋ด๋ถ์ ์ผ๋ก ๊ฐ ํค์ ๋ํ ๋ฉํ๋ฐ์ดํฐ(์: ๋ฐ์ดํฐ ํ์ , ๋ง๋ฃ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์์น ๋ฑ)๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ฉํ๋ฐ์ดํฐ๋ Redis ๋ด๋ถ์ in-memory ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ์ฅ๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก Map์ด๋ ๋์ ๋๋ฆฌ ํํ๋ก ์ธ๋ถ์์ ๊ด๋ฆฌํด์ค ํ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Redis๋ ํด์ ํ ์ด๋ธ ๊ธฐ๋ฐ์ dict ๊ตฌ์กฐ๋ฅผ ํตํด ํค-๊ฐ์ ์ ์ฅํ๊ณ ํ์ํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ด์ O(1) ์๊ฐ ๋ณต์ก๋๋ก ํค ํ์์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด dict ์์ฒด๊ฐ Redis ๋ด๋ถ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐ์ด๋ฉฐ, Redis๊ฐ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋น ๋ฅด๊ฒ ํค๋ฅผ ์ฐพ์ ์ ์๊ฒ ํด์ค๋๋ค. ์ฆ, ์ง๋ฌธํ์ โ๋ฉํ๋ฐ์ดํฐ๋ฅผ programmaticallyํ๊ฒ Map์ด๋ ๋์ ๋๋ฆฌ์ ์ ์ฅํ๋ ์๋ฏธ๋โ๋ ์ง๋ฌธ์ ์๋์ค์ ๊ฐ๊น๊ณ , Redis๊ฐ ์ด๋ฏธ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฐ ๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ๊ด๋ฆฌํ ํ์๋ ์์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค
- 0
- 1
- 30
Q&A
์๋ฃ ๋ค์ด๋ก๋ ํญ๋ชฉ์ด ๋น์ด์์ด์
์๋ ํ์ธ์ inth ๋ ๋จผ์ ์๋ฃ ๋๋ฝ์ ๋ํด ์ฃ์กํ๋ค๋ ๋ง์ ๋๋ฆฌ๋ฉฐ,๋ฏธ๊ตญ ์๋ถ ๊ธฐ์ค ์ด๋ฒ์ฃผ ๋ด๋ก ์๋ฃ ๋๋ฝ๋ ๋ถ๋ถ์ ๋ํด์ ๋ณต๊ตฌ ํ๋๋ก ํ๊ฒ ์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 36
Q&A
Blob Storage์์ ํ์ผ ์ ๋ก๋์ ๋ํ ๋์์ฑ์ ์ด๋ป๊ฒ ์ ์ดํ ์ ์์๊น์?
์๋ ํ์ธ์. ์ด์ ํ๋, ๋ต๋ณ์ด ๋ฆ์ด ์ฃ์กํฉ๋๋ค. ์ข์ ์ง๋ฌธ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.Blob Storage ๋๋ AWS S3์ฒ๋ผ ๊ฐ์ฒด ์ ์ฅ์์ ์ฉ๋์ด ํฐ ํ์ผ์ ์ ๋ก๋ํ ๋, ๋์ผํ ํ์ผ์ด ๋์์ ์ฌ๋ฌ ๋ฒ ์ ๋ก๋๋๋ ๋ฌธ์ ๋ ์ค์ ๋ก ๋ง์ด ๋ฐ์ํฉ๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๋ฐ๋ก Pre-Signed URL ๊ธฐ๋ฐ ์ ๋ก๋์ ๋๋ค.Pre-Signed URL + ์กฐ๊ฑด๋ถ ์์ฒญ ์กฐํฉ์ผ๋ก ํด๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฒ์์ ์ ๋ก๋ ์ ์ ํ์ผ์ ํด์(SHA-256 ๋ฑ)๋ฅผ ๊ณ์ฐํฉ๋๋ค.์ด ํด์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก S3 ๋๋ Blob Storage์ ์ ์ฅํ ํ์ผ์ ์ด๋ฆ(Key)์ ์ ํฉ๋๋ค.์: uploads/1a2b3c4d5e...์ด๋ฏธ ๋์ผํ ํด์์ ํ์ผ์ด ์กด์ฌํ๋์ง ํ์ธํฉ๋๋ค.์กด์ฌํ ๊ฒฝ์ฐ โ ์ ๋ก๋ ์๋ต (์ค๋ณต ๋ฐฉ์ง)์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ โ Presigned URL์ ๋ฐ๊ธํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์กํด๋ผ์ด์ธํธ๋ ํด๋น URL๋ก ์ง์ ์ ๋ก๋ํฉ๋๋ค.์ด๋ If-None-Match: ํค๋๋ฅผ ์ฌ์ฉํ๋ฉด, ๋์ผํ ํค์ ํ์ผ์ด ์ด๋ฏธ ์กด์ฌํ ๊ฒฝ์ฐ ์ ๋ก๋๊ฐ ๊ฑฐ๋ถ(HTTP 412)๋์ด ์ค๋ณต ์ ๋ก๋๊ฐ ์๋ ๋ฐฉ์ง๋ฉ๋๋ค. ๋์ฉ๋ ํ์ผ์ด๋ผ๋ฉด Multipart Upload + ๊ฐ ํํธ๋ณ Pre-signed URL ์กฐํฉ์ผ๋ก ๋ณ๋ ฌ ์ ๋ก๋๋ ๊ฐ๋ฅํฉ๋๋ค.Presigned URL์ ์งง์ ์ ํจ์๊ฐ, ์ต์ ๊ถํ ์ค์ ์ผ๋ก ๋ณด์๋ ์์ ํ๊ฒ ์ ์งํ ์ ์์ด์. ๊ฒฐ๋ก ์ ์ผ๋ก, ํด์ ๊ธฐ๋ฐ ํ์ผ๋ช ์ง์ + Pre-signed URL + ์กฐ๊ฑด๋ถ ์ ๋ก๋ ์กฐํฉ์ Blob Storage ํ๊ฒฝ์์ ๋์ ์ ๋ก๋ ์ถฉ๋ ๋ฐฉ์ง์ ์ค๋ณต ์ ๋ก๋ ์ต์ํ์ ํจ๊ณผ์ ์ธ ๋ฐฉ์์ ๋๋ค.
- 0
- 2
- 42
Q&A
๊ด๊ณํ DB์์ ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ ์ถ๊ฐ์ ๋ํ ๋์ฒ ๋ฐฉ๋ฒ
์ข์ ์ง๋ฌธ์ ๋๋ค. ๋ต๋ณ์ด ๋ฆ์ด์ก๋ค์. ์์ฆ ๋น ํ ํฌ ํ ๊ณณ๊ณผ ์ด์ง ์ธํฐ๋ทฐ๊ฐ ์๊ธฐ๋ ํ๊ณ ์ด์ฌ๋ ํ๋๋ผ ๋ฆ์ด์ง ์ ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋ง์ ๋ถ๋ค์ด ๊ด๊ณํ DB๋ ์คํค๋ง ๋ณ๊ฒฝ์ด ์ด๋ ต๋ค๊ณ ์๊ณ ๊ณ์์ง๋ง, ์ค์ ๋ก ๋ํ ์๋น์ค์์๋ ์คํค๋ง ๋ณ๊ฒฝ์ ํํ๊ณ ์์ฐ์ค๋ฌ์ด ๊ณผ์ ์ ๋๋ค. ์ค์ํ ๊ฑด ๋ฌด์์ ๋ชจ๋ ํ๋๋ฅผ ์ฒ์๋ถํฐ ๋ค ์์ธกํด์ ์ค๊ณํ๋ ค๊ณ ํ๊ธฐ๋ณด๋ค, ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ํ ์ ์๋ ๊ตฌ์กฐ์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ถ๋ ๊ฑฐ์์. ์๋น์ค๋ฅผ ์ด์ํ๋ค ๋ณด๋ฉด ๋น์ฆ๋์ค ์๊ตฌ์ฌํญ์ ๊ณ์ํด์ ๋ณํฉ๋๋ค. ์ ์ ํ ์ด๋ธ์ age๊ฐ ์๋กญ๊ฒ ํ์ํด์ก๋ค๋ฉด, ๊ทธ๋ฅ ๋ค์์ฒ๋ผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋คALTER TABLE user ADD COLUMN age INT;์์ฆ ๋๋ถ๋ถ์ RDBMS ๋ ์ด๋ฐ ๋จ์ํ ์ปฌ๋ผ ์ถ๊ฐ ์์ ์ ๋ ผ๋ธ๋กํน non-blocking ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ์ค์๊ฐ ์๋น์ค ์ด์ ์ค์๋ ๋ฌธ์ ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.๋ํ, MVP ๋จ๊ณ์์ ๋ชจ๋ ํ๋๋ฅผ ์์ธกํด ๋ฃ์ผ๋ ค๋ค ๋ณด๋ฉด, ๊ณผํ ์คํค๋ง ์ค๊ณ๋ก ์ด์ด์ง๊ณ ,์ด๋ ์คํ๋ ค ์๋น์ค ์๋์ ์ ์ง๋ณด์์ฑ์ ๋จ์ด๋จ๋ฆฝ๋๋ค.๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ค์ํ ๊ฑด ์๋ฒฝํ ์์ธก์ด ์๋๋ผ, ๋ณํ์ ๋์ ๊ฐ๋ฅํ ์ ์ฐํ ์ค๊ณ๋ฅผ ํ๋ ๊ฒ ์ ๋๋ค.์ค๋ฌด์์๋ ํต์ฌ ๋๋ฉ์ธ์ ์ง์คํด ์๊ณ ๋ช ํํ ์คํค๋ง๋ก ์ถ๋ฐํ๊ณ , ๋ณํ์ ๋ฐ๋ผ ์ ์ง์ ์ผ๋ก ํ์ฅํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๊ณ ํ ์ ์์ต๋๋ค.
- 0
- 2
- 64
Q&A
AP ์์คํ ์ด ์ ์์๊ฑฐ๋์ ์ ์ฉ๋ ์ ์๋ ์ด์
์๋ ํ์ธ์ ํ์ฌํ๋, ์๊ฐ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ, ์ข์ ํฌ์ธํธ๋ฅผ ์ง์ด์ฃผ์ จ์ต๋๋ค.์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ๋๊น ์๋ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ์ ์์๊ฑฐ๋ ์ฌ์ดํธ๋ ์ ์ธ๊ณ์ ํฉ์ด์ง ์๋ง์ ๊ณ ๊ฐ์๊ฒ ๋น ๋ฅธ ํ์ด์ง ์๋ต์ ๋ณด์ฅํด์ผ ํฉ๋๋ค. ๋คํธ์ํฌ ์ง์ฐ์ด๋ ์ผ๋ถ ์๋ฒ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ โ์ฝ๊ธฐ, ์ฐ๊ธฐ ์์ฒญ์ ๊ณ์ ๋ฐ์๋ค์ด๋โ AP ๊ณ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค, ์๋ฅผ ๋ค์ด DynamoDB ๊ฐ์ ์์คํ ์ ๊ธ๋ก๋ฒ ์ผํ๋ชฐ์ ์๊ตฌ์ฌํญ๊ณผ ์ ๋ง์ต๋๋ค. ์๋ํ๋ฉด, ์ฆ์ ์๋ฒฝํ ์ผ๊ด์ฑ์ด ์๋์ด๋ ๋๋ ์์ญ์ด ๋ง์์ ๋ฌผ๋ก ๊ฒฐ์ ๋ ์ฃผ๋ฌธ ํ์ ๊ฐ์ ๋ถ๋ถ์ ๊ฐํ ์ผ๊ด์ฑ์ด ํ์ํ์ง๋ง, ์ํ ์์ธ ์กฐํ๋ ์ฅ๋ฐ๊ตฌ๋์ฒ๋ผ โ์ฝ๊ฐ์ ์ง์ฐโ์ด ์ฌ์ฉ์์๊ฒ ํฐ ๋ถํธ์ ์ฃผ์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์์ปจ๋ ์ฌ๊ณ ์๋์ด ์ค์ ๋ณด๋ค ๋ช ์ด ๋ฆ๊ฒ ์ ๋ฐ์ดํธ๋ผ๋, ๊ณ ๊ฐ ๊ฒฝํ์๋ ํฌ๊ฒ ์ํฅ์ ์ฃผ์ง ์์ฃ . ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ์ด๋ฐ ์์ญ์ AP ๋ชจ๋ธ์ โ์ต์ข ์ผ๊ด์ฑโ์ ๋ฐ์๋ค์ด๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ง์ถฐ ๊ฐ ์ ์์ต๋๋ค.์ค์ํ ํธ๋์ญ์ ์ ๋ณด๊ฐํด์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ์ ์ DynamoDB์๋ ํธ๋์ญ์ ๊ธฐ๋ฅ์ด ์์ด์, ๊ฒฐ์ ๋ ์ฃผ๋ฌธ ํ์ ๊ณผ ๊ฐ์ด โ์ ๋ ๋์น ์ ์๋โ ์์ ์ CP์ฒ๋ผ ์ฒ๋ฆฌํ๋๋ก ์ค๊ณํ ์ ์์ต๋๋ค. ์ฆ, ์ ์ฒด ์๋น์ค๋ AP๋ก ์ด์ํ๋ฉด์๋, ๋ฏผ๊ฐํ ๋๋ฉ์ธ์์๋ ํธ๋์ญ์ ์ ๊ฑธ์ด ๊ฐํ ์ผ๊ด์ฑ์ ํ๋ณดํ๋ ํ์ด๋ธ๋ฆฌ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค.๊ฐ์ฌํฉ๋๋ค. ์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 2
- 67
Q&A
์ฑํ ์ ์์ํ DB๋ก RDB๋ฅผ ์ ํํ ์ด์ ๋ ๊ถ๊ธํฉ๋๋ค
์๋ ํ์ธ์. ๋ชฉ๋ ๊ฐ๋ฐ์๋์ข์ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค.์ฑํ ๋ฐ์ดํฐ๋ฅผ ์์ํํ๋ ๋ฐ RDB๋ฅผ ์ ํํ ์ด์ ๋, ์ฑํ ์์คํ ์์ ๋ฉ์์ง์ ์ฌ์ฉ์, ํ์์คํฌํ ๊ฐ์ ๋ฐ์ดํฐ๊ฐ ๋ช ํํ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. RDB๋ ์ด๋ฐ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ๋ก ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ณ , ๋ฉ์์ง ์ ์ก ์์๋ ์ฌ์ฉ์๊ฐ์ ๊ด๊ณ๋ฅผ ์ ํํ๊ฒ ๋ณด์ฅํ๋ ๋ฐ ์ ๋ฆฌํฉ๋๋ค. ์๋ฅผ ๋ค๋ฉด, ๋ฉ์์ง ID, ๋ฐ์ ์, ์์ ์, ์ ์ก ์๊ฐ์ ํ๋์ ๋ ์ฝ๋๋ก ์ ์ฅํ๋ฉด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ ์ ์์ต๋๋ค.๋ํ, RDB๋ ACID(์์์ฑ, ์ผ๊ด์ฑ, ๊ฒฉ๋ฆฌ์ฑ, ์ง์์ฑ) ์์ฑ์ ์ง์ํด ๋ฉ์์ง ์ ์ก ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํด๋ ๋ฐ์ดํฐ๊ฐ ์์๋์ง ์๋๋ก ๋ณด์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๋์์ ์ฝ์ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๋ ์์ ์ ํธ๋์ญ์ ์ผ๋ก ๋ฌถ์ ์ ์์ต๋๋ค.์ฟผ๋ฆฌ ํจ์จ์ฑ๋ ์ค์ํ๋ฐ, RDB๋ ์กฐ์ธ(JOIN)์ ํตํด ์ฌ์ฉ์, ์ฑํ ๋ฐฉ, ๋ฉ์์ง ๊ฐ ๊ด๊ณ๋ฅผ ํจ์จ์ ์ผ๋ก ์กฐํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ๊ทธ๋ฃน์ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ์๊ฐ์์ผ๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ํน์ ์ฌ์ฉ์๊ฐ ๋ฐ์ ๋ฉ์์ง๋ง ํํฐ๋งํ๋ ์์ ์ด ์ฉ์ดํฉ๋๋ค.์ค์ ์ฌ๋ก๋ฅผ ๋ณด๋ฉด, WhatsApp์ ์ด๊ธฐ ์ํคํ ์ฒ์์ MySQL ๊ฐ์ RDB๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, Slack๋ MySQL์ ์ฌ์ฉํด ๋ฐ์ดํฐ ์ ์ฅ์ ๊ด๋ฆฌํ์ต๋๋ค์ฐธ๊ณ ๋งํฌ: (https://slack.engineering/scaling-datastores-at-slack-with-vitess/)์ง๋ฌธ์์ ์ฑํ ์ ๊ฐ๊ฒฐํฉ ํธ๋์ญ์ ์ด ๋ถํ์ํด ๋ณด์ธ๋ค๊ณ ์ธ๊ธํด์ฃผ์ จ๋๋ฐ, ์ด๋ ๋ถ๋ถ์ ์ผ๋ก ๊ณต๊ฐํ ์ ์์ต๋๋ค. NoSQL์ ํ์ฅ์ฑ๊ณผ ์ ์ฐ์ฑ์ด ๋ฐ์ด๋ ๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ ๊ฐ์ ์ด ์์ต๋๋ค. ํ์ง๋ง ์ฑํ ์์คํ ์์๋ ๋จ์ํ ๋ฉ์์ง๋ฅผ ์ ์ฅํ๋ ๊ฒ๋ฟ ์๋๋ผ, ์ฝ์ ์ํ ์ ๋ฐ์ดํธ, ๊ทธ๋ฃน ์ฑํ ๋ฉค๋ฒ ๊ด๋ฆฌ ๋ฑ ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ์ค์ํ ์์ ์ด ์์ต๋๋ค.RDB๋ ์ด๋ฐ ๊ฒฝ์ฐ ํธ๋์ญ์ ์ ํตํด ์์ ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ง๋ง, NoSQL์ ๊ธฐ๋ณธ์ ์ผ๋ก eventual consistency(์ต์ข ์ผ๊ด์ฑ)๋ฅผ ์ ๊ณตํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ ์ค์๊ฐ์ฑ์ด ์ค์ํ ์ฑํ ์์ ์ผ์์ ์ธ ๋ฐ์ดํฐ ๋ถ์ผ์น๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์์ง๊ฐ ํ ์ฌ์ฉ์์๊ฒ๋ ํ์๋์์ง๋ง ๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ๋ ์์ง ๋ฐ์๋์ง ์์ ์ํฉ์ด ์๊ธธ ์ ์์ต๋๋ค.๋ํ, RDB๋ ๊ด๊ณํ ๋ฐ์ดํฐ ๋ชจ๋ธ์ ํตํด ๋ณต์กํ ์ฟผ๋ฆฌ์ ๋ฐ์ดํฐ ๊ด๊ณ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์์ด, ์ฑํ ์ฑ์ ์ด๊ธฐ ์ค๊ณ์ ์ ์ง๋ณด์์์ ์ ๋ฆฌํฉ๋๋ค. NoSQL์ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๋น๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ์ ๊ฐํ์ง๋ง, ์ฑํ ๋ฐ์ดํฐ์ ํน์ฑ๊ณผ ์ด๊ธฐ ์ค๊ณ์ ๋จ์ํจ์ ๊ณ ๋ คํ ๋ RDB๊ฐ ๋ ์ ํฉํ ์ ์์ต๋๋ค.์ค์ ์ฌ๋ก์์, WhatsApp์ ์ด๊ธฐ์๋ RDB๋ฅผ ์ฌ์ฉํ์ผ๋ฉฐ, ์ดํ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด์ Mnesia ๊ฐ์ ๋ถ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋์ ํ์ง๋ง, ์ด๋ RDB์ ํ๊ณ๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ๋ณด์กฐ์ ์ธ ์ ํ์ด์์ต๋๋ค์๋ ์ด๋ฏธ์ง์ ๋งํฌ๋ฅผ ํตํด ํด๋น ๋ด์ฉ์ ์ฐธ๊ณ ํ์ค ์ ์์ต๋๋ค!(์ฌ์ง)https://www.cometchat.com/blog/whatsapps-architecture-and-system-design์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 2
- 139
Q&A
URL ๋จ์ถ ์๋น์ค์์ redis counter๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค.
์๋ ํ์ธ์ ๋ฐฉ๊ตฌ์ํจํ๋ฝ๋, ๋จผ์ ์๊ฐ ํด์ฃผ์ ๊ฒ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์์ฃผ ์ข์ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค. ๋จผ์ Redis Counter๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ URL ๋จ์ถ ์๋น์ค์์ ์ฌ์ฉ๋๋ ๊ณ ์ ํ id ๋ฅผ ์์ฑํ๊ธฐ ์ํจ์ ๋๋ค. URL ๋จ์ถ ์๋น์ค์ ํต์ฌ์ ๊ธด URL ์ ์งง๊ณ ๊ณ ์ ํ Short URL ๋ก ๋ณํํ๋ ๊ฒ์ ์์ต๋๋ค. ๋ํ ์ฐ๊ธฐ(URL ์์ฑ) ์์ ์ ๋ํ ํ์ฅ์ฑ๊ณผ ๋น ๋ฅธ ํผํฌ๋จผ์ค๋ฅผ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.์ด ๊ณผ์ ์์ ์ค๋ณต๋์ง ์๋ ํค๋ฅผ ๋น ๋ฅด๊ณ ํจ์จ์ ์ผ๋ก ๋ง๋ค์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ์ ๊ณ ์ฑ๋ฅ ๋ฐ์ดํฐ ์ ์ฅ์์ธ Redis Counter๋ฅผ ๊ธฐ๋ฐ์ผ๋ก INCR ๋ช ๋ น์ด๋ฅผ ํตํด ์นด์ดํฐ๋ฅผ ์ฆ๊ฐ ์์ผ ๊ณ ์ ํ id ๊ฐ์ ์์ฑํ๊ฒ ๋ฉ๋๋ค. ๋ฐ๋ผ์ Redis Counter ๊ฐ ์ ๊ณตํ๋ ์ฆ๊ฐ๋๋ ์ซ์ (์์, 1, 2,3 ...) ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Short URL ์ ์์ฑํ๊ฒ ๋๋๋ฐ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ณด๋ฉด ์๋์ ๊ฐ์ต๋๋ค. Short URL ์์ฑRedis Counter ์ฆ๊ฐDB์ ์ ์ฅ์บ์ ์ ๋ฐ์ดํธ์ด ๊ณผ์ ์์ ์ฌ์ฉ์๊ฐ ๊ธด URL(์: https://example.com/very/long/url ์ ๋จ์ถํ๋ ค๊ณ ์์ฒญํ๋ฉด, ์์คํ ์ ๊ณ ์ ํ short URL(์: https://short.url/g8)์ ์์ฑํด์ผ ํฉ๋๋ค.Redis counter๋ ์ฌ๊ธฐ์ ๊ณ ์ ํ ์ซ์ ๊ฐ์ ์ ๊ณตํฉ๋๋ค. ์๋ฅผ ๋ค์ด, INCR counter ๋ช ๋ น์ ์คํํ๋ฉด ํ์ฌ ๊ฐ์ด 1000์์ 1001๋ก ์ฆ๊ฐํฉ๋๋ค.์ด ๊ฐ(1001)์ ๊ธฐ๋ฐ์ผ๋ก short URL์ ํค๋ฅผ ๋ง๋ญ๋๋ค. ํํ Base62 ์ธ์ฝ๋ฉ(0-9, a-z, A-Z๋ฅผ ์ฌ์ฉํ 62์ง๋ฒ)์ ์ฌ์ฉํด ์ซ์๋ฅผ ์งง์ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 1001์ g8๋ก ๋ณํ๋ ์ ์์ต๋๋ค.Counter ๊ฐ 1000 โ Base62๋ก ๋ณํ โ g8 โ https://short.url/g8Counter ๊ฐ 1001 โ Base62๋ก ๋ณํ โ g9 โ https://short.url/g9๊ฒฐ๊ณผ์ ์ผ๋ก https://short.url/g8 ๊ฐ์ short URL์ด ์์ฑ๋ฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ์ง๋ฌธ์์ "Redis counter๋ฅผ ์ฆ๊ฐ์ํค๊ณ short URL์ ์์ฑํ๋ค"๋ ์์๊ฐ ๋ฐ๋์ผ ์๋ ์๋ค๊ณ ํ์ จ๋๋ฐ, ๋ณดํต์ counter๋ฅผ ์ฆ๊ฐ์ํค๋ ๊ฒ ๋จผ์ ๊ณ ๊ทธ ๊ฐ์ ์ฌ์ฉํด short URL์ ๋ง๋ญ๋๋ค. ํ์ง๋ง ์๋๋ฆฌ์ค์ ์์๊ฐ ๋ฐ๋์ด๋ ๊ฒฐ๊ณผ๋ ๋์ผํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ํ์ ๋๋ก "100์ต ๊ฐ URL limit์ ์ฒดํฌํ๊ธฐ ์ํจ์ด ํฉ๋ฆฌ์ ์ผ ๊ฒ ๊ฐ๋ค"๊ณ ํ์ ์ถ์ธก๋ ํ๋นํฉ๋๋ค. ์๋ฅผ ๋ค์ด, counter๊ฐ 10,000,000,000(100์ต)์ ๋๋ฌํ๋ฉด ์์คํ ์ด ๋ ์ด์ ์๋ก์ด URL์ ์์ฑํ์ง ์๋๋ก ์ ํํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด๊ฑด ์ฃผ๋ก ๋ชจ๋ํฐ๋ง ๋ชฉ์ ์ ๋๋ค. ์ค์ URL ์์ฑ ๋ก์ง ์์ฒด๋ counter ๊ฐ์ด 100์ต์ ๋์ด๋ ๊ณ์ ๋์ํ ์ ์๊ณ , 100์ต ์ ํ์ ์์คํ ์ค๊ณ์ ์๋๋ ํ๊ณ์ผ ๋ฟ์ ๋๋ค. ๋ฐ๋ผ์, 100์ต URL ์ ํ: Redis counter๋ก ์์ฑ๋ URL ์๋ฅผ ๋ชจ๋ํฐ๋งํด ํ๋๋ฅผ ์ฒดํฌํ ์ ์์ง๋ง, ์์ฑ ๋ก์ง๊ณผ DB ์ ์ฅ์๋ ์ง์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ข์ ์ง๋ฌธ์ ํด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ ์ข์ ํ๋ฃจ ๋์ธ์
- 0
- 2
- 134
Q&A
Celery worker ํ๋์ ํตํ ์ฑ๋ฅ ๊ฐ์ ๋ถ๋ถ ์ง๋ฌธ
์๋ ํ์ธ์. HanKyul Kim ๋ ์๊ฐ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.์์ฃผ ์ข์ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค.ํ์ธํด๋ณด๋, worker ์๋ฅผ 10๊ฐ -> 15๊ฐ -> 9๊ฐ๋ก ์กฐ์ ํ์ ๋ 8~9์ด์์ ๊ฐ์ ์ด ๋ฏธ๋ฏธํ ์ด์ ๋ ํ์คํฌ๊ฐ ๋๋ฌด ๊ฐ๋ณ๊ณ , ํ์คํฌ ์์ฒด์ ์คํ ์๊ฐ์ด ์งง์์ worker ๊ฐ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ด์ ์ด ๋๋๋ฌ์ง์ง ์์ ์ ์์ต๋๋ค.๋ธ๋ก์ปค(RabbitMQ)๋ ๊ฒฐ๊ณผ ๋ฐฑ์๋(RPC)์ ์ค๋ฒํค๋๊ฐ ๋ ํฐ ์ํฅ์ ๋ฏธ์ณค์ ๊ฐ๋ฅ์ฑ์ด ๋์์. ์ง๊ธ ํ์คํฌ๋ ๋จ์ ๋ฌธ์์ด ๋ฐํ์ด๋ผ worker ์๋ฅผ ๋๋ ค๋ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์ด๋์ด ํฌ์ง ์๊ณ , worker_prefetch_multiplier=9๋ก ์ค์ ๋ ์ํ์์ ํ์คํฌ ์์ฝ๊ณผ ํต์ ๋น์ฉ์ด ๋ณ๋ชฉ์ผ ์ ์์ต๋๋ค.์ด ๊ฐ์ ๊ฐ worker๊ฐ ํ ๋ฒ์ ๋ฏธ๋ฆฌ ๊ฐ์ ธ์ค๋ ํ์คํฌ ์๋ฅผ ์๋ฏธํด์. worker๊ฐ 10๊ฐ๋ผ๋ฉด ์ต๋ 90๊ฐ์ ํ์คํฌ๋ฅผ ๋์์ ์์ฝํ ์ ์๊ณ , 15๊ฐ๋ผ๋ฉด 135๊ฐ๊น์ง ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ํ์คํฌ๊ฐ 10,000๊ฐ๋ก ์ถฉ๋ถํ ๋ง๋๋ผ๋, prefetch๋ก ์ธํด worker๊ฐ ํ์คํฌ๋ฅผ ๊ณผ๋ํ๊ฒ ์์ฝํ๋ฉด ๋ธ๋ก์ปค(RabbitMQ)์ worker ๊ฐ ํต์ ์ค๋ฒํค๋๊ฐ ๋์ด๋ ์ฑ๋ฅ ๊ฐ์ ์ด ์ ํ๋ ์ ์์ต๋๋ค.๋ํ, worker ์๋ฅผ 10๊ฐ -> 15๊ฐ๋ก ๋๋ ธ์ ๋, ์์คํ ์ CPU ์ฝ์ด ์๋ฅผ ์ด๊ณผํ๊ฑฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ํฌํ ์ํ์ ๊ฐ๊น์์ก๋ค๋ฉด, ์ถ๊ฐ worker๊ฐ ์คํ๋ ค ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ์ ๋๋ฆด ์ ์์ด์. ๋ฐ๋๋ก 9๊ฐ๋ก ์ค์์ ๋๋ ํ์คํฌ๊ฐ ์๋ ๊ฐ๋ณ๊ณ ๋น ๋ฅด๊ฒ ๋๋์ ๋ฆฌ์์ค ํ์ฉ๋๊ฐ ์ด๋ฏธ ์ต์ ํ๋ ์ํ์ผ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.ํ ์คํธ๋ก ํ์ค์ ์ด ๋ถํ๋ฅผ ์ผ์ผํฌ ์ ์๋time.sleep(0.02)๋ฅผ ๋ฃ๊ฑฐ๋, prefetch ๊ฐ์ 1~4๋ก ๋ฎ์ถฐ๋ณด์๊ณ , CPU ์ฝ์ด ์์ ๋ง์ถฐ worker ์๋ฅผ ์กฐ์ ํด๋ณด์ธ์. ๊ทธ๋ฆฌ๊ณ ๋์ celery -A app worker -l info ๋ก ์คํ ํ ๋ก๊ทธ๋ฅผ ํ์ธํ๋ฉด ๋ฆฌ์์ค ํ์ฉ๋๋ฅผ ํ์ ํ์ค ์ ์์ต๋๋ค. ์ถ๊ฐ ์ง๋ฌธ ์์ผ๋ฉด ์ธ์ ๋ ๋ง์ํด์ฃผ์ธ์!์๊ฐ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.ํญ์ ์ข์ ๊ฐ์๊ฐ ๋๋๋ก ํ๊ฒ ์ต๋๋ค.
- 1
- 2
- 118
Q&A
์น์ 1 Array ๊ฐ์ default value ์ง๋ฌธ
์ข์ ์ง๋ฌธ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๊ฐ ํผ๋์ ๋๋ ค ์ฃ์กํ ๋ง์๋๋ฆฝ๋๋ค.default value ๋ ๋ณ์ ์ด๊ธฐํ ๊ฐ์ ์๋ฏธํ ๊ฒ์ ๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 74