americasnail
@americasnail
Students
616
Reviews
25
Course Rating
4.5
Posts
Q&A
simcached๋ฅผ ๊ฒ์์ ํ์๋ ํด๋น ์๋ฃ๊ฐ ๋์ค์ง ์๋๋ฐ ํน์ MemcachedGPU ๋ผ๊ณ ๋ถ๋ฆฌ๋ ๊ธฐ์ ์ ๋ง์ํ์๋๊ฑด๊ฐ์?
์๋ ํ์ธ์. BBB AAA ๋,๊ฐ์ฌํฉ๋๋ค. ์ข์ ์ง๋ฌธ ํด์ฃผ์ จ์ต๋๋ค. โSim cachedโ๋ผ๋ ํํ์ ์ฃผ๋ก ์์คํ ๋์์ธ ์ธํฐ๋ทฐ๋ ์ํคํ ์ฒ ํ ๋ก ์์ ๋์ค๋ ์ฌ๋ญ/์ฝ์ด ์ ๋๋ค.์ ๊ฐ ์ธ๋๊ณ, ๋ฏธ๊ตญ ๋น ํ ํฌ ๊ตฌ๊ธ, ๋ฉํ, OpenAI, ์ด๋๋น ๋ฑ์ ์์ง๋์ด ๋ถ๋ค๊ณผ ์ง์ ํ ๋ก ํ๋ฉฐ, ๋ฐฐ์ ์๋๋ฐ ๊ทธ๋ฌ๋ค๋ณด๋, ์ ๋ ๋ชจ๋ฅด๊ฒ ์ฌ๋ญ/์ฝ์ด๋ฅผ ์ฌ์ฉํ๊ฒ ๋์์ต๋๋ค.์ค์ Memcached, Redis, ElastiCache ๊ฐ์ ๋ถ์ฐ ์บ์(distributed cache)๋ฅผ ์ฐ์ง ์๊ณ โ ๊ทธ๋ฅ ํ ์๋ฒ(ํ ํ๋ก์ธ์ค) ์์์ HashMap, dict, LRU Cache ๋ฑ์ผ๋ก ํ๋ด ๋ด์ ๊ตฌํํ ์บ์๋ฅผ ์๋ฏธํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 1
- 32
Q&A
์ ํ๋ธ ์์ ์์ ํ๋ฆ ๊ด๋ จ ์ง๋ฌธ์์ต๋๋ค
์๋ ํ์ธ์. ๊ณ ๋ณ์ฐฌ๋. ์ง๋ฌธ์ ๋ฆ๊ฒ ํด๊ฒฐํ๊ฒ ๋์ด ๋งค์ฐ ์ฃ์กํ ๋ง์ ๋๋ฆฌ๋ฉฐ, ๋ค์ ๋ถํฐ๋ ๋ฆ๋ ์ผ์ด ์๋๋ก ํ๊ฒ ์ต๋๋ค. ์ํด๋ฅผ ๊ตฌํ๋ฉฐ ๋ต์ ์์ฑํฉ๋๋ค. ์ข์ ์ง๋ฌธ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์์ ์คํธ๋ฆฌ๋ฐ ์์ฒญ์ ์ผ๋ฐ์ ์ผ๋ก API Gateway๋ฅผ ๊ฑฐ์น์ง ์๊ณ , CNAME์ผ๋ก ๋งคํ๋ CDN Edge๋ก ๋ฐ๋ก ์ ๋ฌ๋ฉ๋๋ค. API Gateway๋ ๋ฉํ๋ฐ์ดํฐ ์กฐํ, ๊ถํ ๊ฒ์ฆ, ์ถ์ฒ API์ ๊ฐ์ ์ ์ด ์์ฒญ๋ง ์ฒ๋ฆฌํ๊ณ , ์ค์ ๋์ฉ๋ ๋น๋์ค ๋ฐ์ดํฐ๋ ์ฑ๋ฅ๊ณผ ํ์ฅ์ฑ์ ์ํด CDN์ด ์ง์ ์๋นํฉ๋๋ค.๋ฐ๋ผ์,์คํธ๋ฆฌ๋ฐ ์๋น์ค์์๋ ๋ฉํ๋ฐ์ดํฐ ์์ฒญ๊ณผ ์ค์ ๋น๋์ค ๋ฐ์ดํฐ ์์ฒญ์ด ๋ถ๋ฆฌ๋์ด ์ฒ๋ฆฌ๋ฉ๋๋ค.๋ฉํ๋ฐ์ดํฐ๋ ๊ถํ ํ์ธ ๊ฐ์ ์ ์ด ์์ฒญ์ API Gateway๋ฅผ ํตํด ์ฒ๋ฆฌ๋๊ณ ,์ค์ ๋์ฉ๋ ๋น๋์ค ์คํธ๋ฆผ(์ ์ํ ์คํธ๋ฆฌ๋ฐ ๋งค๋ํ์คํธ ๋ฐ ์กฐ๊ฐ)์ CDN์ผ๋ก ์ง์ ์๋น๋ฉ๋๋ค.CDN ๋๋ฉ์ธ์ CNAME์ผ๋ก ๋งคํ๋์ด ์์ด ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์์ฒญํ๋ฉฐ,cache hit ์ edge์์ ๋ฐ๋ก ์๋ต๋๊ณ miss ์์๋ origin blob storage์์ ์ฝ์ด์ต๋๋ค.๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ถํ ์ฒดํฌ๋ signed URL ๋ฐ๊ธ์ด ํ์ํ๋ฉด API Gateway๋ฅผ ํตํด ํ ํฐ/URL์ ๋ฐ์ ๋ค,ํด๋ผ์ด์ธํธ๊ฐ ํด๋น URL๋ก CDN์ ์ง์ ์คํธ๋ฆฌ๋ฐ ์์ฒญ์ ๋ณด๋ด๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ๋ค์ ํ ๋ฒ ๋ฆ์ด์ ์ฃ์กํ๋ค๋ ๋ง์ ๋๋ฆฝ๋๋ค.์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 2
- 32
Q&A
Spotify ์๋น์ค ์ค๊ณ์์ transcoder service์ ๋ํด ๋ฌธ์ ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์. ๋ฐ์ ์ผ ๋๋ฌธ์ ๋ฆ์ด์ง ์ง๋ฌธ์ด ์๋์ง ํ์ ํ์ง ๋ชปํ์ต๋๋ค. ์ฃ์กํ ๋ง์ ๋๋ฆฝ๋๋ค. ๋ค ์ดํดํ์ ๊ฒ ๋ง์ต๋๋ค. Transcoder๋ ์ ๋ก๋๋ ์๋ณธ ์์ ํ์ผ์ ์ฌ๋ฌ ๋นํธ๋ ์ดํธ ๋ฐ ์คํธ๋ฆฌ๋ฐ ํฌ๋งท์ผ๋ก ๋ณํํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ ํ์ผ์ object storage์ ์ ์ฅํ๋ ์ญํ ์ ๋๋ค. ํน๋ณํ ๋ค๋ฅธ ์๋ฏธ๋ผ๊ธฐ๋ณด๋ค๋, ์คํธ๋ฆฌ๋ฐ ์ต์ ํ๋ฅผ ์ํ ์ธ์ฝ๋ฉ/๋ณํ ์๋น์ค๋ก ๋ณด์๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ถ๋ถ์ ๊ตฌ๋๋ก ์ค๋ช ํ๊ฑฐ๋ ์๋ต์ ํด๋ ๋ฌด๋ฐฉํ๋ค๊ณ ๊ณ ๋ ค๋์์ผ๋, ์ถํ์ ๋ค์ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๋ถ๋ถ์ธ ๊ฒ ๊ฐ์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 52
Q&A
[์์น ์ด๋ฆ ๊ธฐ๋ฐ์ผ๋ก ํธํ ์ ์กฐํํ๋ ๋ฉ์๋] ์ฝ๋ ์ง๋ฌธ ๋๋ฆฝ๋๋ค.
์๋ ํ์ธ์ :) ์ง๋ฌธ ์ ๋ง ์ข์ต๋๋ค.1) Hotel โ Location ์๋ก ์ฐธ์กฐ ๊ด๊ณ์ ๋ํด๊ฒฐ๋ก ๋ถํฐ ๋ง์๋๋ฆฌ๋ฉด ๋ ๋ค ๊ฐ๋ฅํ์ง๋ง, ์ค๋ฌด์์๋ ๋ณดํต โ๋จ๋ฐฉํฅโ์ ๋ ๋ง์ด ์ ํํฉ๋๋ค.Location์ด โํธํ ์ ์ํด ๋ง๋ค์ด์ง ์ข ์ ๋ชจ๋ธโ์ด๋ผ๋ฉด๋ง์ํ์ ๊ฒ์ฒ๋ผ Location โ Hotel ๋จ๋ฐฉํฅ๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง์ด ๋ฉ๋๋ค.๋ค๋ง Booking ๊ฐ์ ๋๋ฉ์ธ์์๋ Location์ด ํน์ Hotel๋ง์ ์ํด ์กด์ฌํ๋ค๊ธฐ๋ณด๋ค๋โ์ฃผ์/๋์/์ง์ญโ ๊ฐ์ ๊ณตํต ๊ฐ๋ (๊ฐ ๊ฐ์ฒด/๋ณ๋ ์ํฐํฐ) ๋ก ๋ณด๋ ๊ฒฝ์ฐ๊ฐ ๋ง์์,๋ณดํต์ Hotel์ด locationId(๋๋ Location)๋ฅผ ์ฐธ์กฐํ๋ ๋จ๋ฐฉํฅ์ด ๋ ํํฉ๋๋ค.๊ฐ์์์ ์์ชฝ ์ฐธ์กฐ์ฒ๋ผ ๋ณด์ด๊ฒ ๋ ๊ฑด, ๊ด๊ณ๋ฅผ ์ง๊ด์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๊ต์ก์ฉ ํํ์ด์๊ณ ,์ค๋ฌด์์๋ ํ์ชฝ๋ง ์ฐธ์กฐ + ์กฐํ๋ ๋ณ๋ ๊ณ์ธต์์ ์ฒ๋ฆฌํ๋ ์ชฝ์ด ์ ์ง๋ณด์์ฑ์ด ์ข์ต๋๋ค.2) ์์น ๊ธฐ๋ฐ ํธํ ์กฐํ ๋ฉ์๋๋ ์ด๋์ ์์ด์ผ ํ๋?์ด ๋ถ๋ถ๋ ์์ฃผ ์ข์ ์ง๋ฌธ์ด์์.findHotelsByLocationName() ๊ฐ์ ๊ธฐ๋ฅ์Location โ์๊ธฐ ์์ โ์ ํ์๋ผ๊ธฐ๋ณด๋ค๋ ๋ฐ์ดํฐ ์กฐํ(Query) ์ฑ๊ฒฉ์ด ๊ฐํฉ๋๋ค.๊ทธ๋์ OOD ๊ด์ ์์๋ ๋ณดํตLocation ์ํฐํฐ ์์ ๋ฃ๊ธฐ๋ณด๋ค๋HotelRepository / SearchService / AvailabilityService ๊ฐ์ ์กฐํ ์ ์ฉ ๊ณ์ธต์ ๋๋ ๊ฒ ๋ ์์ฐ์ค๋ฝ์ต๋๋ค.์ด์ ๋ ๊ฐ๋จํฉ๋๋ค.์กฐํ ๋ก์ง์๋ ๋ณดํต ์ธ๋ฑ์ค/DB ์กฐ์ธ/์บ์/๊ฒ์์์ง ๊ฐ์ ์ธํ๋ผ ์ต์ ํ๊ฐ ๋ถ๊ณ ,๊ทธ๊ฑธ Location ์ํฐํฐ์ ๋ฃ์ผ๋ฉด ์คํ๋ ค ์ํฐํฐ๊ฐ โ๋๋ฉ์ธ ๋ชจ๋ธโ์ด ์๋๋ผ โDB ์ ๊ทผ ๊ฐ์ฒดโ์ฒ๋ผ ๋ณํด๋ฒ๋ฆฌ๋ ๋ฌธ์ ๊ฐ ์๊น๋๋ค.์ฆ,Location: ๊ฐ/์ ๋ณด ๋ชจ๋ธ๋ก ๋จ์ํ๊ฒ ์ ์ง์กฐํ: Service/Repository์์ ์ฒ๋ฆฌ์ด ๊ตฌ์กฐ๊ฐ ๊ฐ์ฅ ๊น๋ํ๋ค๊ณ ํ ์ ์์ต๋๋ค.3) bruteforce ํ์์ ์๋๋ baseline ์์์ ๋๋ค๋ค, ์ง๋ฌธํ์ ๊ฒ์ฒ๋ผ ๊ฐ์์ ์ ์ฒด ํ์ ๋ก์ง์ ์ผ๋จ ๋์ํ๋ baseline(๊ฐ๋ ๊ฒ์ฆ์ฉ) ์ ๋๋ค.์ข์ ํผ๋๋ฐฑ์ด์์. Object Oriented Design ์ค๊ณ ๊ฐ์ ์ด๊ธฐ ๋๋ฌธ์ ์ด ๊ฐ์ ๋จ๊ณ์์๋์ฝ์ด ๋ก์ง์ ๋ํ ์ต์ ํ๋ ํฌํจ๋์ง ์์์ต๋๋ค. ํ์ฌ ์คํ์์ค ๊ฐ์ ๊ฐ์ ์์ ์ค์ด๊ธฐ ๋๋ฌธ์์ด ์์ ์ด ์๋ฃ๋๋ฉด OOD ๊ฐ์ ๋ํ ์ฃผ์ ํผ๋๋ฐฑ์ ๋ฐ์ํด์ ์ ๋ฐ์ดํธ ๋ ์์ ์ ๋๋ค.ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค.4) ์ต์ ํ ๋ฐฉํฅ์ต์ ํ ๋ฐฉ๋ฒ๋ค์ ๋ค์ ์์คํ ๋์์ธ ๊ฐ์ ์น์ ์์ ๋ฐฐ์ฐ์ค ์ ์์ต๋๋ค.์ง๋ฌธ ์ฃผ์ โ์กฐ์ธ/์ธ๋ฑ์ฑ/2-step ์กฐํโ๊ฐ ์ค๋ฌด์์ ๊ฐ์ฅ ํํ ๋ฐฉ์์ ๋๋ค.๋ํ์ ์ธ ์ต์ ํ๋ ์๋์ฒ๋ผ ๋จ๊ณ์ ์ผ๋ก ๊ฐ๋๋ค.๊ฐ์ฅ ์ ์: DB ์ธ๋ฑ์ค + ์กฐ์ธLocation(name) ์ธ๋ฑ์คHotel(location_id) ์ธ๋ฑ์คWHERE location.name = ? ๋ก ์กฐ์ธํด์ ๋ฐ๋ก ์กฐํ2-step ์กฐํlocationName -> locationIdlocationId -> hotels ์กฐํHigh Availability - ์บ์/์ญ์ธ๋ฑ์คRedis์ locationName -> hotelIds ์ ์ฅ์์ธ๋ hotelId๋ก ์กฐํ๊ฒ์ ์๊ตฌ๊ฐ ์ปค์ง๋ฉด Search ๋ถ๋ฆฌ์๋์์ฑ/์คํ/๋์์ด/ํํฐ๊น์ง ๋ถ์ผ๋ฉดOpenSearch/Elasticsearch๋ก ๋ถ๋ฆฌํ๋ ๊ฒ ์ผ๋ฐ์ ์ ๋๋ค.์ง๋ฌธ ๊ฐ์ฌํฉ๋๋ค. ๋ค๋ฅธ ์ง๋ฌธ ์์ผ์๋ฉด ์ธ์ ๋ ์ง ๋จ๊ฒจ์ฃผ์ธ์!์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 2
- 34
Q&A
ํน๋ณ ํ์ต ์๋ฃ ํ๋ก๋ชจ์ 1๋ ๋ฉค๋ฒ์ญ ๋ฌด๋ฃ ์ ๊ณต ์ง์ ํ์ธ ๋ฐฉ๋ฒ
https://forms.gle/diKHUhvUe61JwzXF7์ด ๊ตฌ๊ธ ํผ์ ํตํด ์๊ฐ ๋๋ค์๊ณผ substack ๊ณ์ ์ด๋ฆ ๋๋ ์ด๋ฉ์ผ์ ์ ๋ ฅํด์ฃผ์๋ฉด ๊ตฌ๋งค์ ๊ฒํ ํ์ ๋ฃ ๋ฉค๋ฒ์ญ์ 1๋ ๊ฐ ๋ฌด๋ฃ๋ก ์ ๊ณตํด๋๋ฆฝ๋๋ค ๊ฐ์ฌํฉ๋๋ค
- 0
- 2
- 49
Q&A
14๊ฐ. ์ํ DVD ๋์ฌ ์์คํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ์ค๊ณ์์ Inventory ํ ์ด๋ธ ์ง๋ฌธ์์ต๋๋ค.
์๋ ํ์ธ์. 3831568๋,์ฝ์ง ์์ ์๊ฐ๊ณผ ์ฌ๊ณ ๋ก ์ง๋ฌธํด์ฃผ์ ๋ถ๋ถ ๋๋จํ์ ๊ฒ ๊ฐ์ต๋๋ค.๋๋ฌด ์ข์ ์ง๋ฌธ ํด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.์ ๊ฐ ๋ฐฉ๊ธ ์บ๋๋ค ๋ฒค์ฟ ๋ฒ์์ ์ค๋ ๋ฐ๋์ ๋ฆ๊ฒ ๋ต์ ํ๊ฒ ๋์์ต๋๋ค.๋จผ์ ๋ถ๋ฆฌํ๋ ๊ฒ ์ข๋ค๊ณ ๋ง ๋ง์๋๋ฆฐ ๋ถ๋ถ ์ค๋ช ๋ถ์กฑ์ ๋ํด ๋์ํ๋ฉด์ ๊ฐ์ ํ ๋ถ๋ถ์ผ๋ก๋ฉ๋ชจ๋ฅผ ํด๋๊ฒ ์ต๋๋ค. ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค.์ง๋ฌธํด์ฃผ์ ๋ถ๋ถ์ ๋ํด ์๊ฒฌ์ ๋๋ ค๋ณด์๋ฉด, Inventory ํ ์ด๋ธ๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. DVD ๊ฐ ํ ํ์ดํ์ ์ฌ๊ณ ๊ฐ 10๋ง๊ฑด์ด๋ , 10๊ฑด์ด๋ , Items ํ ์ด๋ธ์ ๊ทธ ํ์ดํ ํ๋๋น ๋ฑ ํ ํ์ ๋๋ค.์ฌ๊ณ ๊ฐ ์ด๋น ์๋ฐฑ๋ฒ ์ฐจ๊ฐ๋๊ฑฐ๋ ๋ณต๊ตฌ๋๋ค๋ฉด ๊ทธ ํ ํ์ WRITE lock ์ด ๊ณ์ ๊ฑธ๋ฆฌ๊ณ ๋์์ ๊ด๋ฆฌ์๊ฐ์ด ์ํ ์ค๋ช ์ข ์์ ํ๊ธฐ๋ฅผ ์ํ๋ค๋ฉด, ๊ทธ ํ์ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ๊ทธ๋์ ์ ์ ๋ฉํ๋ฐ์ดํฐ ํ ์ด๋ธ Movies, Books, Games ๋ฑ๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋๊ณ Inventory ํ ์ด๋ธ์ movie_id (FK)store_id / location_id (์ต์ )status (โavailableโ, โrentedโ, โlostโ ๋ฑ)available_copies (๋๋ ๊ฐ๋ณ copy๋ฅผ ํ ํ์ฉ ๊ด๋ฆฌ)์ด๋ ๊ฒ ํ๋ฉด์ฌ๊ณ ์ฐจ๊ฐ โ Inventory ํ๋ง UPDATE (ํซ์คํ์ ์ฌ์ ํ ์์ง๋ง ๋ฉํ๋ฐ์ดํฐ ํ์ ์ ๊ฑด๋๋ฆผ)๊ด๋ฆฌ์๊ฐ ์ํ ์ค๋ช ์์ โ Movies ํ๋ง UPDATE (์ฌ๊ณ ํธ๋ํฝ๊ณผ ์์ ๋ถ๋ฆฌ)๋ฐ๋ผ์, ๋ถ๋ฆฌํ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆฝ๋๋ค.๋๋ฒ์งธ๋์ ํ๋ณ ์ฌ๊ณ ๊ด๋ฆฌ ์ ์ฑ ์ธ๋ฐ ์ด๊ธฐ์๋ ๋ชจ๋ ์์ดํ ์ด ๊ทธ๋ฅ ์๋๋ง ์๋ค๋ฉด OK ๋ ์ ์์ต๋๋ค.์๋ฅผ ๋ค์ด, Inventory { item_id, available_count } ์ด๋ ๊ฒ ๊ตฌ์ฑ๋๋ ๊ฒ์ ๋๋ค.ํ์ง๋ง ๋์ค์ ์๊ตฌ์ฌํญ์ด ์๊ธฐ๊ฒ ๋๋ฉด ํ์ฅ์ด ํ์ํฉ๋๋ค.์ ํ๋ณ๋ก ์๊ตฌ์ฌํญ์ ์๋์ ๊ฐ์ ๊ฒ ์ ๋๋ค.DVD/๋ธ๋ฃจ๋ ์ด โ ๋ง๋ฃ์ผ ์์์ํ โ ์ ํต๊ธฐํ ํ์์ฝ์ํธ ํฐ์ผ โ ์ข์ ๋ฒํธ, ๊ตฌ์ญ ํ์์ ์์ฑ โ ๋ง๋ฃ์ผ + ๋์ ๋์ฌ ์ ์ ํ ํ์NFT ๋ ํ โ ์์ ๊ถ ์ด์ ๋ก์ง ํ์๋ค์ํ ์ ํ๊ณผ ํ์ฅ์ด ํ์ํ ๊ฒ์ ๋๋ค.๊ทธ๋์ ์๋์ ๊ฐ์ด 1๋ฒ ์ด๊ธฐ๋ถํฐ 3๋ฒ์ผ๋ก ์ ์ ์ ๊ทธ๋ ์ด๋ ํ๋ ๊ฒ์ ๊ถ์ฅ๋๋ฆด ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค.JSONB / JSON ์ปฌ๋ผ์ผ๋ก ์ ์ฐ ์์ฑ ๋ณด๊ด (PostgreSQL, DynamoDB ๋ฑ) โ ์ด์ค๋ฐ์ ์ ์ผ ๋ง์ด ์์์ง ๋ถํ (Vertical Partitioning)๊ณตํต: InventoryCommonDVD์ฉ: InventoryDVD (expires_at ๋ฑ)Food์ฉ: InventoryFood (expiry_date, batch_no) โ JOIN์ ๊ท์ฐฎ์ง๋ง ํ์ ์์ ์ฑ ์ต๊ณ ์ํ ๋ถํ + Polymorphic Association (์ ๊ฐ ์ ์ผ ์ถ์ฒํ๋ ์ต์ข ์งํํ) Inventory { id, item_id, item_type, available_count, reserved_count, โฆ }๋ณ๋ ํ์ฅ ํ ์ด๋ธ๋ค โ item_type์ด โdvdโ๋ฉด InventoryDVD ํ ์ด๋ธ ์กฐ์ธ โ item_type์ด โticketโ๋ฉด InventoryTicket ํ ์ด๋ธ ์กฐ์ธ (Uber๋ ๊ฒฐ์ ์๋จ, Netflix๋ ์ฝํ ์ธ ๋ณ ๊ถํ ์ด๋ ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.)์ด๊ธฐ์ JSONB๋ก ํ ๋ค์, ํน์ ์์ดํ ์ ํ์ด ๋๋ฌด ๋ณต์กํด์ง๋ฉด ๊ทธ๋ 3๋ฒ์ผ๋ก ๋ถ๋ฆฌํฉ๋๋ค.๊ทธ๋ฆฌ๊ณ ๋ง์ํ์ ํธ๋ํฝ์ด ์ ๋ง ๋ง์์ง๋ฉด available_count ์ฐจ๊ฐ์ ๊ฒฐ๊ตญ Redis / DynamoDB ๊ฐ์ ๋ถ์ฐ ์นด์ดํฐ๋ก ์ฎ๊ธฐ๊ณ , DB๋ ์ด๋ฒคํธ ์์ฑ์ด๋ ์ฌ๊ฐ ํจํด์ผ๋ก ์ต์ข ์ผ๊ด์ฑ๋ง ๋ง์ถฅ๋๋ค. (๋ทํ๋ฆญ์ค DVD ์ฌ๊ณ , ์๋ง์กด ์ฌ๊ณ ๋ชจ๋ ์ด๋ ๊ฒ ๊ตฌ์ฑ๋ ์ ์์ต๋๋ค.)๊ฐ์ฌํฉ๋๋ค.์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 2
- 74
Q&A
Matching Service์ MQ ํ์์ฑ, Cassandra์ ํ์์ฑ, Cassandara - RDB ๋๊ธฐํ
์๋ ํ์ธ์. ํ์ฌํ๋,๋จผ์ ์๊ฐํด์ฃผ์ ์ ๊ฐ์ฌ๋๋ฆฌ๋ฉฐ ์ข์ ์ง๋ฌธ์ ํด์ฃผ์ ์ ๊ธฐ์๋ค์ Matching Service์ MQ์ /swipe์ matching ์๋ต๊ฐ ๊ฐ์์์๋ REST API๋ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก MQ๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๋ง์ํ์ จ์ต๋๋ค. ์ด๋ API ๋ช ์ธ์ ์๋ matching ๊ฐ์ ํด์์ด ํท๊ฐ๋ฆฝ๋๋ค. matching์ swipe ์์ ์์ ์์ ์ด ์๋์ ๋งค์นญ๋์๋์ง ์ ์ ์๋ ๊ฐ์ด๋ผ๊ณ ์๊ฐ๋๋๋ฐ, ๊ทธ๋ฌ๋ฉด ๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๊ฒ ์๋๊ฐ ์๊ฐ์ด ๋ญ๋๋ค. ์ฆ Cassandra์์ inverse swipe์ด ์กด์ฌํ๋์ง๋ฅผ ํ์ธํ ๋ค์์ผ API ์๋ต์ ๋ณด๋ผ ์ ์๋ ๊ฒ ์๋๊ฐ์? ๊ฐ์์์๋ /swipe๋ ๋น ๋ฅด๊ฒ โ์ ์โ๋ง ์๋ตํ๊ณ , ๋งค์นญ ํ์ ์ MQ ๊ธฐ๋ฐ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ์์ต๋๋ค. ์ข ๋ ์ธ๋ถ์ ์ผ๋ก ๋ง์ ๋๋ฆฌ๋ฉด, /swipe๋ 20โ40ms ๋ด์ โ์์ฒญ์ ์ ์ํ๋ค(accepted)โ๊ณ ๋ง ๋๋ ค์ฃผ๊ณ , ์ค์ ๋งค์นญ ํ์ ์ MQ(Kafka/SQS)๋ก ํ๋ ค Matching Service๊ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌํฉ๋๋ค. ํ์ง๋ง ์ ๊ตณ์ด ๋น๋๊ธฐ๋ฅผ ํ์๋๋์ธ๋ฐ, inverse swipe ๋ฅผ ๋๊ธฐ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด Region ๊ฐ์ ์ง์ฐ ๋๋ hot partition ์ด ์ธ๊ธฐ์๋ ์ฌ์ฉ์์๊ฒ ๋ฐ์ํ ์ ์๋ ๋ถ๋ถ ๊ทธ๋ฆฌ๊ณ ์ค์์ดํ๋ ์ด๋น ์์ญ๋ง๊ฑด์ ๋ฐ์ดํฐ ์ฐ๊ธฐ๊ฐ ๋ฐ์ํ๋ ์ ์ ๊ณ ๋ คํด์ ๋ณ๋ชฉ, ์ฆ ์์ญ๋ง ๊ฑด์ ์ฐ๊ธฐ์ ๋ถํ์ ์ทจ์ฝํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ด์์ ์์ ๋ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ์์ต๋๋ค. ๋ฐ๋ผ์, /swipe ์๋ต์ 20โ40ms ๋ด์ accepted๋ง ๋ณด์ฅํ๊ณ , ์ค์ ๋งค์นญ ์ฌ๋ถ๋ Kafka/SQS๋ก ์ ๋ฌ๋ ์ด๋ฒคํธ๋ฅผ Matching Service๊ฐ ์ฒ๋ฆฌํด WebSocket/ํธ์๋ก ์ต์ข ํต์งํฉ๋๋ค.Cassandra์ ํ์์ฑRDB ์กฐํ๋ง์ผ๋ก inverse swipe ์ฌ๋ถ๋ฅผ ํ์ ํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด Cassandra๋ ์บ์ฑ ์ฉ๋๋ก ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ๋ณด์์ผ ํ๋์? ์๋ ์ค๊ณ์์ Cassandra๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๋์ ๋ ์ด์ ๊ฐ ๊ถ๊ธํฉ๋๋ค.Cassandra ์ ๊ฒฝ์ฐ๋ inverse swipe ์ฌ๋ถ๋ฅผ ์ฌ์ค์ ๋์๊ฒ ์จ ์ข์์ ๋ฆฌ์คํธ ์ฆ, ์ธ์ ๋ฆฌ์คํธ์ ๊ตฌ๊ฐ์ ๋งค์ฃผ ์์ฃผ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Cassandra ๋ ๋ถํ๊ฐ ์ผ์ด๋๋ swipe ๋ฅผ ์ธ๊ฒ ๋ฐ์์ ํํฐ์ ํค = ์ฌ์ฉ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ต๊ทผ ๋ฒ์์ ๋ฐ์ดํฐ ์ฝ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ๊ณตํฉ๋๋ค. ๋ฌผ๋ก RDB ๋ก๋ ๋ถ๊ฐ๋ฅํ์ง ์์ง๋ง, ๋๊ท๋ชจ์์ ์ค๋ฉ๊ณผ ์ธ๋ฑ์ค ๋๋ Race condition ๊ณผ ๊ฐ์ ๋น์ฉ์ด ์ปค์ ธ ์ด ๋น์ฉ๊ณผ ์ง์ฐ์ด ๊ธ์ฆํ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ ๋ฐ์ดํฐ ์ ๊ทผ์ ๋จ์ผ ํํฐ์ ์ ์ต๊ทผ ๋ฒ์๊ฐ ๋๊ธฐ ๋๋ฌธ์ Cassandra ์ ์ข ๋ ์ ํฉํ๋ค๊ณ ํ ์ ์์ต๋๋ค. ์ข์ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค. Cassandra - RDB ๋๊ธฐํ ์ฌ๋ถswipe ๊ธฐ๋ก์ RDB์ Cassandra์๋ ๋ชจ๋ ์ ์ฅํ ๋, ์ผ์์ ์ค๋ฅ ๋ฑ์ผ๋ก ํ์ชฝ์๋ง ์ ์ฅ๋ ์๋ ์์ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ฐ ์ํฉ์ ๋๋นํด RDB์ Cassandra ๊ฐ ๋๊ธฐํ๊ฐ ํ์ํ์ง ๊ถ๊ธํฉ๋๋ค.ํ์ชฝ๋ง ์ ์ฅ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ์ํฉ์ ๋๋ถ๋ถ Consumer ์ ์ง์ฐ ๋๋ ์ผ์์ ์ธ ์คํจ์ด๊ธฐ ๋๋ฌธ์ ์ฌ์๋๋ก ๋ณต๊ตฌ ๋ ์ ์์ต๋๋ค. ๋ณ๋์ ์๋ฐฉํฅ ๋๊ธฐํ ํธ๋์ญ์ ์ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ์คํ๋ ค ์ฅ์ ๊ฐ ์ผ์ด๋๋ ๋ฒ์๊ฐ ๋์ด๋๋ ๊ฒ์ด๋ผ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ํ๋ฅญํ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ข์ ํ๋ฃจ๋์ธ์!
- 0
- 2
- 75
Q&A
Imgur ์ด๋ฏธ์ง ํธ์คํ ์๋น์ค ์ง๋ฌธ
์๋ ํ์ธ์. ์ฅ์คํ๋,๋จผ์ ์๊ฐํด์ฃผ์ ์ ๊ฐ์ฌ์ ๋ง์ ๋๋ฆฝ๋๋ค.์์ฃผ ์ข์ ์ง๋ฌธ์ ํด์ฃผ์ ์ ๊ธฐ๋ถ์ด ์ข์์ง๋ ํ๋ฃจ์ ๋๋ค. PreSigned URL ์ ๋ฐ๊ธ ํ ํ ํด๋ผ์ด์ธํธ์์ ์ง์ direct ๋ก blob storage ์ฆ, AWS S3 ๋ฅผ ์์๋ก ๋ค์ด ํด๋น blob storage ๋ก ์ ๋ก๋ ๋ฉ๋๋ค. ๊ทธ ๊ณผ์ ์์ ์ฒญํฌ์ ์งํ์ํฉ์ ํ์งํ๊ณ ์ด ์งํ์ํฉ์ key-value storage ์ฆ nosql ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ฐ์ดํธ ํ๋ ์์คํ ๊ตฌ์กฐ๊ฐ ๊ถ๊ธํ์ ๊ฒ์ผ๋ก ์ดํดํ์์ต๋๋ค. ์ฌ๊ธฐ์ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ direct ๋ก AWS S3 ์ pre-signed url ๋ก ์ ๋ก๋๋ฅผ ํ๊ฒ ๋๋๋ฐ ์ด ๊ณผ์ ์์ Multipart upload api ๋ฅผ ์ฌ์ฉํ์ฌ์ผ ์ฒญํฌ๊ฐ ๋ถํ ๋์ด s3 ์ ์ ๋ก๋ ๋๊ฒ ๋ฉ๋๋ค. ๊ทธ ํ์ Key-value storage ์๋ ์๋์ ๊ฐ์ด ์ ์ฅ์ ํฉ๋๋ค. { "id": "ul_xxx", "userId": "u1", "key": "uploads/2025/10/img.png", "uploadId": "XYZ", "partSize": 8388608, "status": "INITIATED", "totalBytes": 123456789, // ์๋ฉด ์ ์ฅ "bytesUploaded": 0, "partsDone": [], // [{partNumber, etag, size}] "expiresAt": "...", "lastHeartbeatAt": "..." }๊ทธ๋ฆฌ๊ณ ๋์ ํด๋ผ์ด์ธํธ๋ ํ์ผ์ ์ฒญํฌ๋ก ๋ถํ ํด์ s3 ์ ์ง์ ์ ๋ก๋๋ฅผ ํ๊ฒ ๋๊ณ ์ ์ก๋ ๋ฐ์ดํธ๋ฅผ ์์คํ ์ ๋ชฉ์ ์ ๋ฐ๋ผ WS(์น์์ผ)/SSE/HTTP ๋ก ์ฃผ๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธ๋ฅผ ํฉ๋๋ค. ๊ฐ ํํธ๊ฐ ์ ๋ก๋ ๋๋ฉด ์๋ตํค๋์ ETag ๋ฅผ ์ฝ์ด์ "partsDone": [], // [{partNumber, etag, size}] ์ ์ ๋ฐ์ดํธํด์ bytesUploaded๋ฅผ ๊ฐฑ์ ํ์ฌ ๊ทผ์ฌ % ๊ณ์ฐ ํ๋ ๋ฐฉ์์ผ๋ก ์์คํ ์ ์ค๊ณํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ s3 ๋ฒํท์ Event Notification (SQS, SNS, Lambda) ์ ์์ ํด์ status ๋ฅผ ์๋ฃ ์ฒ๋ฆฌํ๊ณ ํ์์์ ์ ํ ์ ์์ต๋๋ค. ํ์์์ ์ ์์๋ก ์ธ๋ค์ผ, ๋ฆฌ์ฌ์ด์ฆ ๋ฑ์ด ์์ต๋๋ค. ํ์ง๋ง, ํด๋ง polling ๋ฐฉ์์ ํด๋ง์ ๋น์ฉ,์ง์ฐ๋ง ๋๋ฆฌ๊ณ ์ ํ๋๋ ๋ฎ์์ ๊ถ์ฅ๋์ง ์์ต๋๋ค. ์ถ๊ฐ์ ์ผ๋ก ๋คํธ์ํฌ ๋๊น ์ uploadId๋ก ListParts ์กฐํํด์ ๋ฏธ์๋ฃ ์ฒญํฌ ๋ถํฐ ์ฌ์๋ ํ ์ ์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค. ์ข์ ํ๋ฃจ ๋์ธ์!
- 0
- 2
- 69
Q&A
์ฟ ํฐ ๋ฌธ์
์๋ ํ์ธ์ nameunskadms ๋, ์๋ก์ด ์ฟ ํฐ์ ๋ฐ๊ธํด๋๋ ธ์ต๋๋ค. https://inf.run/1D24g๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 75
Q&A
Redis ๋๋ค ๊ฐ ์ถ๊ฐ ์ ๋ฉํ๋ฐ์ดํฐ ์ ์ฅ
์๋ ํ์ธ์ ๊ฐํ ํ ๋,์ข์ ์ง๋ฌธ์ ํด์ฃผ์ จ์ต๋๋ค.Redis๋ ๋ด๋ถ์ ์ผ๋ก ๊ฐ ํค์ ๋ํ ๋ฉํ๋ฐ์ดํฐ(์: ๋ฐ์ดํฐ ํ์ , ๋ง๋ฃ ์๊ฐ, ๋ฉ๋ชจ๋ฆฌ ์์น ๋ฑ)๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํฉ๋๋ค. ์ด ๋ฉํ๋ฐ์ดํฐ๋ Redis ๋ด๋ถ์ in-memory ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ์ฅ๋๋ฉฐ, ์ฌ์ฉ์๊ฐ ๋ณ๋๋ก Map์ด๋ ๋์ ๋๋ฆฌ ํํ๋ก ์ธ๋ถ์์ ๊ด๋ฆฌํด์ค ํ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, Redis๋ ํด์ ํ ์ด๋ธ ๊ธฐ๋ฐ์ dict ๊ตฌ์กฐ๋ฅผ ํตํด ํค-๊ฐ์ ์ ์ฅํ๊ณ ํ์ํ ์ ์๋๋ก ์ค๊ณ๋์ด ์์ด์ O(1) ์๊ฐ ๋ณต์ก๋๋ก ํค ํ์์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด dict ์์ฒด๊ฐ Redis ๋ด๋ถ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ํฌํจํ๋ ๊ตฌ์กฐ์ด๋ฉฐ, Redis๊ฐ ์ด๋ฅผ ๋ฐํ์ผ๋ก ๋น ๋ฅด๊ฒ ํค๋ฅผ ์ฐพ์ ์ ์๊ฒ ํด์ค๋๋ค. ์ฆ, ์ง๋ฌธํ์ โ๋ฉํ๋ฐ์ดํฐ๋ฅผ programmaticallyํ๊ฒ Map์ด๋ ๋์ ๋๋ฆฌ์ ์ ์ฅํ๋ ์๋ฏธ๋โ๋ ์ง๋ฌธ์ ์๋์ค์ ๊ฐ๊น๊ณ , Redis๊ฐ ์ด๋ฏธ ๋ด๋ถ์ ์ผ๋ก ์ด๋ฐ ๋ฉํ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์, ์ฌ์ฉ์๊ฐ ๋ฐ๋ก ๊ด๋ฆฌํ ํ์๋ ์์ต๋๋ค.๊ฐ์ฌํฉ๋๋ค
- 0
- 1
- 74




