Community

๐Ÿ“Š [๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ์šฐ๋ฒ„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š”๊ฐ€?] ๐ŸŽฌ Introduction ๋ฐ์ดํ„ฐ๋Š” ์šฐ๋ฆฌ์˜ ํ”„๋กœ๋•ํŠธ์—์„œ ์•„์ฃผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์„์€ ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งˆ์ฐฐ์ด ์ ๋„

๐Ÿ“Š [๋ฐ์ดํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ์šฐ๋ฒ„์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š”๊ฐ€?] ๐ŸŽฌ Introduction ๋ฐ์ดํ„ฐ๋Š” ์šฐ๋ฆฌ์˜ ํ”„๋กœ๋•ํŠธ์—์„œ ์•„์ฃผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์„์€ ์‚ฌ๋žŒ๋“ค์ด ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋งˆ์ฐฐ์ด ์ ๋„๋ก(frictionless), ์ฆ‰ ์„œ๋น„์Šค๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์šฐ๋ฆฌ์˜ ์—”์ง€๋‹ˆ์–ด, ํ”„๋กœ๋•ํŠธ ๋งค๋‹ˆ์ €, ๋ฐ์ดํ„ฐ ๋ถ„์„๊ฐ€, ๋ฐ์ดํ„ฐ ์‚ฌ์ด์–ธํ‹ฐ์ŠคํŠธ๋“ค์ด ์ •๋ณด ๊ธฐ๋ฐ˜์˜ ์˜์‚ฌ๊ฒฐ์ •์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ถ„์„์˜ ์˜ํ–ฅ์€ ์šฐ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ํ™”๋ฉด์—์„œ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™ˆ ํ™”๋ฉด์— ๋ฌด์—‡์„ ๋ณด์—ฌ์ค„์ง€, ์–ด๋–ค ์ƒํ’ˆ์„ ๋ณด์—ฌ์ค„์ง€, ์–ด๋–ค ๋ฉ”์„ธ์ง€๋ฅผ ์œ ์ €์—๊ฒŒ ๋…ธ์ถœํ• ์ง€, ์œ ์ €๋“ค์ด ์™œ ์ฐจ๋Ÿ‰์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ํšŒ์›๊ฐ€์ž…์„ ํ•˜๋Š” ๋“ฑ์˜ ์•ก์…˜ ์ค‘์— ์ค‘๋‹จ์„ ํ•˜๋Š”์ง€ ๋“ฑ๋“ฑโ€ฆ ์—„์ฒญ๋‚˜๊ฒŒ ๋งŽ์€ ์œ ์ €์™€ ์ˆ˜๋งŽ์€ ํ”ผ์ณ๋“ค์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ชจ๋“  ์ง€์—ญ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์€ ๋ณต์žกํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ ์šฐ๋ฆฌ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ์šด ํ”„๋กœ๋•ํŠธ๋กœ ํ™•์žฅํ•ด๋‚˜๊ฐ€๊ณ  ์žˆ๊ณ , ๊ธฐ์ €์— ์žˆ๋Š” ๊ธฐ์ˆ ๋“ค์€ ์ด๋ฅผ ๋ฐœ์ „์‹œํ‚ค๊ณ  ์ง€์›ํ•  ํ•„์š”๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ค‘์š”ํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ํŠนํžˆ Rider Data์— ์ง‘์ค‘ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ , ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๋ผ์ด๋” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์–ด๋–ค ๋ณ€ํ™”๋“ค์„ ๊ฐ€์ ธ์˜ค๋Š”์ง€๋ฅผ ์†Œ๊ฐœํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽฌ Rider Data Rider Data๋Š” Uber Rider APP๊ณผ Rider ์‚ฌ์ด์˜ ๋ชจ๋“  ์ƒํ˜ธ์ž‘์šฉ๋“ค์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋งค์ผ Uber์˜ ์˜จ๋ผ์ธ ์‹œ์Šคํ…œ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ช‡ ๋ฐฑ๋งŒ๊ฐœ์˜ ์ด๋ฒคํŠธ๋“ค์— ๋Œ€ํ•œ ๊ฒƒ์ธ๋ฐ, Rider APP์— ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡ ๋ฐฑ๊ฐœ์˜ Apache Hive ํ…Œ์ด๋ธ”๋กœ ์ €์žฅ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ฐ์ดํ„ฐ ๋ถ„์„์„ ํ†ตํ•ด ํ’€๊ณ ์ž ํ•˜๋Š” ์ฃผ์š” ๋ฌธ์ œ๋กœ๋Š”, ์œ ์ž…๋œ ์œ ์ €์˜ Action์„ ์ด๋Œ์–ด๋‚ด๊ฑฐ๋‚˜, ์œ ์ € ์œ ์ž…์„ ์ฆ๊ฐ€์‹œํ‚ค๊ฑฐ๋‚˜, ๊ฐœ์ธํ™”, ์œ ์ € ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๐ŸŽฌ Online Data Collection [1] Mobile Event Logging Rider Data๋Š” ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์†Œ์Šค๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ๋ฉ”์ธ์€ ์œ ์ €๊ฐ€ APP๊ณผ ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”๊ฐ€๋ฅผ ์บ์น˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ ์ € ์ƒํ˜ธ์ž‘์šฉ์€ ๋ชจ๋ฐ”์ผ์˜ Event Logging์— ๋”ฐ๋ผ ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค. Logging Architecture๋Š” ๋ช‡ ๊ฐ€์ง€ ์›์น™์„ ๋ฐ”ํƒ•์œผ๋กœ ์„ค๊ณ„๋ฉ๋‹ˆ๋‹ค. - Standardization of logs (๋กœ๊ทธ์˜ ํ‘œ์ค€ํ™”) - Consistency across platforms (iOS, Android, Web) (ํ”Œ๋žซํผ ๊ฐ„์˜ ์ผ๊ด€์„ฑ) - Respecting user privacy settings (๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ) - Optimizing network usage (๋„คํŠธ์›Œํฌ ์ตœ์ ํ™”) - Reliable without degrading the user experience (์œ ์ €์˜ ๊ฒฝํ—˜์„ ํ•ด์น˜์ง€ ์•Š์Œ) [2] Standardizing Logs ์ˆ˜ ๋ฐฑ๋ช…์˜ ์—”์ง€๋‹ˆ์–ด๋“ค์ด ๋กœ๊ทธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š”๋ฐ์— ๊ด€์—ฌํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ‘œ์ค€ํ™”๋œ ๋กœ๊ทธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์„ ๊ตฌ์ถ•ํ•˜๊ณ  ์ด๋ฅผ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ธฐ๋ก๋˜๋Š” ๋กœ๊ทธ๋“ค์€ ์ž๋™ํ™”(์œ ์ €๊ฐ€ UI์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ฑฐ๋‚˜, ๊ด‘๊ณ ์— ๋…ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ์˜ ์ด๋ฏธ ์ •์˜๋œ ์ด๋ฒคํŠธ๋“ค์˜ ๊ฒฝ์šฐ)๋˜๊ฑฐ๋‚˜, ๊ฐœ๋ฐœ์ž๋“ค์— ์˜ํ•ด ์ˆ˜๋™์ ์œผ๋กœ ์ถ”๊ฐ€๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ๊ธฐ๋ณธ์€ ์ผ๋ฐ˜์ ์ธ ํŽ˜์ด๋กœ๋“œ๋กœ ๊ทœ์ •๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์œ„์น˜, ์•ฑ ๋ฒ„์ „, ๊ธฐ๊ธฐ, ํ™”๋ฉด๋ช… ๋“ฑ๊ณผ ๊ฐ™์€ ๋ชจ๋“  ์ด๋ฒคํŠธ๋งˆ๋‹ค ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฑ์—”๋“œ์—์„œ ์ง€ํ‘œ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ์— ์žˆ์–ด ์•„์ฃผ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€, ํ”Œ๋žซํผ์— ์ƒ๊ด€์—†์ด ์ด๋ฒคํŠธ๋“ค์ด ์ผ๊ด€์„ฑ์„ ๊ฐ–๊ณ , ํ‘œ์ค€ํ™”๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ–๊ธฐ ์œ„ํ•ด์„œ ์šฐ๋ฆฌ๋Š” ์ด๋ฒคํŠธ ๋ชจ๋ธ๋“ค์ด ๊ฐ์ž์˜ ํŽ˜์ด๋กœ๋“œ๋ฅผ ์ •์˜ํ•˜๋„๋ก ํ•˜๋Š” ์ ˆ์•ฝ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋Š” ๊ฐ ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ Event ID๋ฅผ ๊ฐ–๋Š” ์—ด๊ฑฐ ์ž๋ฃŒํ˜•(์„œ๋กœ ์—ฐ๊ด€๋œ ์ƒ์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ)์„ ๋งŒ๋“ค๊ณ , ์ด๋ฒคํŠธ์˜ ๋ฐœ์ƒ์— ๋”ฐ๋ฅธ ๋“ฑ๋ก ์‹œ์ ์— ํ•„์š”ํ•œ ํŽ˜์ด๋กœ๋“œ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ด๋ฒคํŠธ ํƒ€์ž…์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. [3] Publishing Logs ์ด ๋กœ๊ทธ๋“ค์€ ํ†ตํ•ฉ๋œ ์ˆ˜์ง‘์ฒด๊ณ„๋กœ ์ˆ˜์ง‘๋˜๋Š”๋ฐ, ์ด๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ ๋งŒ๋“ค์–ด์ง€๋Š” ๋ชจ๋“  ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ํ†ตํ•ฉ๋œ ์ˆ˜์ง‘์ฒด๊ณ„๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ•˜๋‚˜์˜ ํ์— ์ €์žฅํ•˜๊ณ , ๋ชจ์•„์„œ, ๋ช‡ ์ดˆ์— ํ•œ๋ฒˆ์”ฉ ์ผ๊ด„์ ์ธ ์–‘์‹์— ๋”ฐ๋ผ ๋ฐฑ์—”๋“œ์˜ ์ด๋ฒคํŠธ ํ”„๋กœ์„ธ์„œ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒคํŠธ๋“ค์€ ๊ณ„์†ํ•ด์„œ ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฑฐ๋‚˜ ๋ณ€ํ™”๋ฅผ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜๋„ ์ˆ˜ ๋ฐฑ๊ฐ€์ง€ ํ˜•ํƒœ์˜ ์ด๋ฒคํŠธ๋“ค์ด ์ฒ˜๋ฆฌ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅธ ์„ฑ์žฅ์˜ ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ๋Š” ๋‹ค๋ฅธ OS ์‚ฌ์ด์—์„œ ๋กœ๊ทธ๋ฅผ ๋งž์ถฐ๋‚˜๊ฐ€๊ณ  ํ•„์š” ์ˆ˜์ค€์˜ ์‹ ํ˜ธ ์žก์Œ๋น„๋ฅผ ์œ ์ง€ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” Event Processor๋Š” ์ด๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ณ  ์ „ํŒŒ๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. Event Processor๋Š” ๋˜ ์ด๋ฒคํŠธ๋ฅผ ๊ณ„์†ํ•ด์„œ ๊ณต๊ธ‰ํ•˜๊ณ , ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ ๋งคํ•‘์ด ์‚ฌ์šฉ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋Š” ํ•œ ์ด๋ฒคํŠธ๋ฅผ ํ•˜๋ถ€๊ตฌ์กฐ๋กœ ์ „ํŒŒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์‹ ํ˜ธ ์žก์Œ๋น„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. [4] Backend Event Logging ์œ ์ € ์ƒํ˜ธ์ž‘์šฉ๊ณผ ํ•จ๊ป˜, ์œ ์ €๋“ค์—๊ฒŒ ๋ฌด์—‡์„ ๋ณด์—ฌ์ค„์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ฐฑ์—”๋“œ์˜ Service Layer๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ Loggingํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋ฐฑ์—”๋“œ์˜ Logging์€ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ๋‹ค๋ฃฐ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๋‹ค๋ฃจ๊ธฐ์—๋Š” ๋„ˆ๋ฌด ํฐ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด๋‚˜ ๋ชจ๋ฐ”์ผ ๊ธฐ๊ธฐ์—์„œ ๋ฐฑ์—”๋“œ๋กœ์˜ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ ๋งˆ๋‹ค, ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ“์ž…๋‹ˆ๋‹ค. ๋งค ๋ ˆ์ฝ”๋“œ๋“ค์€ ํ•˜๋‚˜์˜ ๋ชจ๋ฐ”์ผ ์ƒํ˜ธ์ž‘์šฉ์œผ๋กœ ๋ฌถ์ด๋Š” Key๋ฅผ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ๋ชจ๋ฐ”์ผ ๋Œ€์—ญํญ์ด ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณธ๋ฌธ์—์„œ ํ™•์ธํ•ด๋ณด์„ธ์š”!

์•Œ๋ฆผ

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