Deep_Dev
article thumbnail

 

๐Ÿ“š MixPanel ์‚ฌ์šฉ

https://docs.mixpanel.com/docs/what-is-mixpanel

 

What is Mixpanel? - Mixpanel Docs

 

docs.mixpanel.com

 

 

์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ๊ฐ€ ๊ฑฐ์˜ ๋งˆ๊ฐ์ด ๋˜์–ด๊ฐ€๊ณ , ๋ฐฐํฌํ•˜๊ธฐ ์ „์ธ๋ฐ 

์•ฑ ๋‚ด์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ•˜๋Š”๋™์•ˆ์˜ Events๋ฅผ ์ถ”์ ํ•ด๋ณด๋ผ๋ผ๋Š” ์กฐ์–ธ์„ ์–ป์—ˆ๊ณ , 

๊ทธ๊ฒƒ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด MixPanel ์ด๋ผ๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค.

 

( Firebase๊ฐ™์€ ๊ฒƒ๋“ค๋„ ๋˜์ง€๋งŒ, ์ธ์‚ฌ์ดํŠธ๋กœ ํ†ต๊ณ„๋ฅผ ํ™•์ธํ•˜๋Š”๋ฐ์— ์žˆ์–ด์„œ MixPanel์ด ํŽธํ•˜๋‹ค๊ณ  ํ•˜๋„ค์š” ! ) 

 

๊ทธ๋Ÿฐ๋ฐ, ์ •์ž‘ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋ฉด MixPanel์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋งŽ์ด ์•ˆ๋‚˜์™”์Šต๋‹ˆ๋‹ค ! 

๋”ฐ๋กœ ํ…Œ์ŠคํŠธ์šฉ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์‹œ๋„ํ–ˆ๊ณ , ์›ํ•˜๋Š”๋Œ€๋กœ ์„ฑ๊ณตํ•ด์„œ ๊ธฐ๋กํ•˜์—ฌ ๋‚จ๊ฒจ๋ด…๋‹ˆ๋‹ค.

 

 

 

 

 

1. ์ผ๋‹จ MixPanel ์‚ฌ์ดํŠธ์—์„œ ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ๋งŒ๋“ค๋ฉด MixPanel์„ Setttingํ•˜๋Š” ํ™”๋ฉด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. 

๋‚˜์ค‘์— ๋”ฐ๋กœ ๋“ค์–ด ๊ฐˆ ๊ฒฝ์šฐ, ์šฐ์ธก ์ƒ๋‹จ ๋ฉ”๋‰ด์—์„œ Set Up MixPanel์„ ์„ ํƒํ•˜๋ฉด ๋จ ! 

 

2. SetUp ์‹œ์ž‘ 

STEP 1์—์„œ SetUp์„ ์‹œ์ž‘ํ•˜๋Š”๋ฐ, ์ €๋Š” PersonalizeSetup์„ ์„ ํƒํ•ด์„œ ๋„˜์–ด๊ฐ€์คฌ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋‘๋ฒˆ์งธ ๋‹จ๊ณ„๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ์–ด๋–ค Events๋“ค์„ ์ถ”์ ํ• ๊ฑด์ง€ ์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

Sign Up, ContentView, Share, Purchase ๊ฐ€ ์ ํ˜€์žˆ๋Š”๊ฑด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ฑ„์›Œ์ ธ์žˆ๋Š” ๊ฒƒ๋“ค์ด๊ณ 

 

์ €๋Š” ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ 3๊ฐœ์˜ ๋ฒ„ํŠผ์ด ์–ผ๋งˆ๋‚˜ Tapped๋˜๋ƒ๋ฅผ ์ถ”์ ํ•  ๊ฒƒ์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, 3๊ฐœ์˜ ๋ฒ„ํŠผ Events๋กœ ๋ฐ”๊ฟ”์ค„๊ฒŒ์š”.

 

์ด๋ ‡๊ฒŒ ์ˆ˜์ •์„ํ•˜๊ณ , Next๋ฅผ ๋ˆ„๋ฅด๋ฉด 

 

๊ฐ ์ด๋ฒคํŠธ์— ์–ด๋– ํ•œ ํ”„๋กœํผํ‹ฐ๋ช…์„ ์—ฐ๊ฒฐํ•ด์ค„๊ฑด์ง€ ์„ค์ •ํ•˜๋Š” ํ™”๋ฉด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ํ”„๋กœํผํ‹ฐ๋Š”, ํ”„๋กœ์ ํŠธ๋‚ด์—์„œ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฅผ ํ”„๋กœํผํ‹ฐ๋กœ ๋‚˜์˜ MixPanel ํ”„๋กœํ•„์— ์ „๋‹ฌํ•ด์„œ, ์ˆ˜์น˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฆ๊ฐ€์‹œํ‚ฌ๊ฑด์ง€ ์„ค์ •ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์œผ๋กœ ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค. ( ์•„๋งˆ ? )

 

์ €๋Š” ์ด๋ ‡๊ฒŒ, Marker1์— ํ•ด๋‹นํ•˜๋Š” ํ”„๋กœํผํ‹ฐ๋ช…์„ TappedMarker1์œผ๋กœ ํ•ด์ค„๊ฒŒ์š”. 

 

๊ทธ๋ฆฌ๊ณ  ํ•œ๊ฐœ์˜ Events์— ์—ฌ๋Ÿฌ๊ฐœ์˜ Properties๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ ์ด๋ฒคํŠธ๋งˆ๋‹ค ํด๋ฆญํ•ด์„œ ๋„˜์–ด๊ฐ€๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ์š”.

 

๋ชจ๋“  ํ”„๋กœํผํ‹ฐ ๋˜ํ•œ ์„ค์ •์ด ๋๋‚ฌ๋‹ค๋ฉด, Next๋ฅผ ๋ˆŒ๋Ÿฌ ๋„˜์–ด๊ฐ‘๋‹ˆ๋‹ค.

 

์ด๋Ÿฐ ํ™”๋ฉด์ด ๋‚˜์˜ค๋ฉด์„œ, ์„ค์ •ํ–ˆ๋˜ ์ด๋ฒคํŠธ์™€ ํ”„๋กœํผํ‹ฐ๋ฅผ ํ™•์ธํ•˜๊ณ 

Connect your data๋ฅผ ํด๋ฆญํ•˜๋ฉด 

 

์ด๋ ‡๊ฒŒ MixPanel ์…‹ํŒ…์€ ๋๋‚ฌ์Šต๋‹ˆ๋‹ค. !

 

์šฐ์ธก ์ƒ๋‹จ์„ ๋ณด๋ฉด, token ์ด ๋‚˜์™€์žˆ๋Š”๋ฐ ์ด token์ด ํ”„๋กœ์ ํŠธ ํŒŒ์ผ ๋‚ด์—์„œ ๋‚˜์˜ Mixpanelํ”„๋กœ์ ํŠธ์™€ ์—ฐ๊ฒฐ์‹œํ‚ฌ ํ† ํฐ ๊ฐ’์ด ๋˜๋ฏ€๋กœ, 

๊ณต๊ฐœ๋˜์ง€ ์•Š๊ฒŒ ์ž˜ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ( ๋ฌผ๋ก  MixPanel ์‚ฌ์ดํŠธ๋‚ด์—์„œ ์ˆ˜์‹œ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ )

 

๊ทธ๋ฆฌ๊ณ  ์•„์ง ๊ฐ์ง€๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—†๊ธฐ๋•Œ๋ฌธ์—, ํ˜„์žฌ STEP 3์—์„œ ์™ผ์ชฝ ํ•˜๋‹จ์˜ Skip for Now๋กœ ์ผ๋‹จ ์„ค์ •ํ™”๋ฉด์„ ๋‚˜๊ฐ€์ค๋‹ˆ๋‹ค.

 

 

 

Xcode

์ž ์ด์ œ Xcode์— ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ด์ฃผ๊ณ , MixPanel ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€์‹œ์ผœ์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

Add Package์—์„œ https://github.com/mixpanel/mixpanel-swift ์ด ๊ฐ’์„ URL์— ๋„ฃ์–ด์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

 

( ์ถ”๊ฐ€ ํ›„, MixPanel์ด ์ œ๋Œ€๋กœ import๊ฐ€ ์•ˆ๋  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ Xcode๋ฅผ ์ข…๋ฃŒ์‹œ์ผฐ๋‹ค๊ฐ€ ๋‹ค์‹œ ์‹คํ–‰์„ ํ•ด์ค๋‹ˆ๋‹ค. )

 

Mixpanel์ด ์ž˜ ์ถ”๊ฐ€๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด

 

@main ํŒŒ์ผ์—์„œ Mixpanel์„ ์—ฐ๊ฒฐ์‹œํ‚ค๊ธฐ ์œ„ํ•ด, ํ† ํฐ๊ฐ’์„ ํ†ตํ•ด์„œ ์ดˆ๊ธฐํ™” ์‹œ์ผœ ์ค๋‹ˆ๋‹ค.

( **  trackAutomaticEvents: true ์ด ๊ฐ’์€.. ์—†์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋– ์„œ ๋„ฃ์–ด๋†จ์—ˆ๋Š”๋ฐ, ์‹ค์ œ๋กœ ์ œ๊ฐ€ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ• ๋•Œ๋Š” ์—†์–ด์•ผ ํ•˜๋”๋ผ๊ณ ์š” ? ์กฐ๊ธˆ ๋” ์ฐพ์•„๋ด์•ผ ํ•  ๊ฒƒ ๊ฐ™๊ธดํ•œ๋ฐ.. ์—†์–ด๋„ ๋˜์–ด๋ณด์ž…๋‹ˆ๋‹ค ! )

 

 

 

๊ทธ๋ฆฌ๊ณ  ๋‚ด๊ฐ€ ์ถ”์ ํ•  ์ด๋ฒคํŠธ๊ฐ€ ์žˆ๋Š” ๋ทฐ ( ํ˜„์žฌ ํฌ์ŠคํŒ…์—์„  ContentView ) ์—์„œ, ์ด๋ฒคํŠธ๋ฅผ ์ถ”์ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ ์šฉํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

import SwiftUI
import Mixpanel

struct ContentView: View {
    var body: some View {
        VStack(spacing: 30) {
            Button {
                trackButtonTapped1()
            } label: {
                Text("MixPanelTapped1")
                    .background(.blue)
                    .foregroundColor(.white)
            }

            Button {
                trackButtonTapped2()
                print("ButtonTapped")
            } label: {
                Text("MixPanelTapped2")
                    .background(.blue)
                    .foregroundColor(.white)
            }
            
            Button {
                trackButtonTapped3()
                print("ButtonTapped")
            } label: {
                Text("MixPanelTapped3")
                    .background(.blue)
                    .foregroundColor(.white)
            }
        }
        .padding()
    }
    
    func trackButtonTapped1() {
        Mixpanel.mainInstance().track(event: "Marker1")
        
        Mixpanel.mainInstance().people.increment(property: "TappedMarker1", by: 1)
    }
    
    func trackButtonTapped2() {
        Mixpanel.mainInstance().track(event: "Marker2")
        
        Mixpanel.mainInstance().people.increment(property: "TappedMarker2", by: 1)
    }
    
    func trackButtonTapped3() {
        Mixpanel.mainInstance().track(event: "Marker3")
        
        Mixpanel.mainInstance().people.increment(property: "TappedMarker3", by: 1)
    }
}

 

ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•ด์ฃผ์ž๋ฉด ..

 

โœ… Mixpanel.mainInstance().track(event: "Marker2")

    ๋‚ด๊ฐ€ Mixpanel ์‚ฌ์ดํŠธ์—์„œ ์ถ”์ ํ•  ์ด๋ฒคํŠธ๋ฅผ ์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.


โœ… Mixpanel.mainInstance().people.increment(property: "TappedMarker2", by: 1)

    ๊ทธ๋ฆฌ๊ณ  ์ถ”์ ํ•˜๋Š” ํ•ด๋‹น ์ด๋ฒคํŠธ์˜ ํ”„๋กœํผํ‹ฐ๋Š” ๋ฌด์—‡์ด์—ˆ๊ณ , ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์–ด๋–ค ์ˆ˜์น˜๋ฅผ ๋ณ€ํ™”์‹œํ‚ฌ๊ฑด์ง€ ? 

    by: 1 ์ด๋ผ ํ•จ์€ ํ•ด๋‹น ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ• ๋•Œ ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์˜ ์ˆ˜์น˜๋ฅผ 1์ฆ๊ฐ€์‹œํ‚ค๊ฒ ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

 

 

์ผ๋‹จ ๋ทฐ ์ž์ฒด๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์คฌ์—ˆ๊ณ ,,

 

์ด์ œ ์‹คํ–‰์‹œ์ผœ์„œ ๊ฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋ณด๋ฉด, ์–ด๋–ป๊ฒŒ ์ถ”์ ๋˜๊ณ  ๋ณด์—ฌ์ง€๋Š”์ง€ ํ™•์ธํ•ด๋ณผ๊นŒ์š” ? 

 

์•„ ๊ทธ์ „์— !!!

์š” ํ™”๋ฉด์ด ์•„๊นŒ Mixpanel๋งŒ ์„ธํŒ…ํ• ๋•Œ๋Š” Finish and Close๊ฐ€ ํ™œ์„ฑํ™”๊ฐ€ ์•ˆ๋ ํ…๋ฐ,

์‹ค์งˆ์ ์œผ๋กœ ์ถ”์ ํ•˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์—†๊ณ , ํ”„๋กœ์ ํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฐฉ๊ธˆ์ฒ˜๋Ÿผ ๊ฐœ๋ฐœTool์—์„œ ์—ฐ๊ฒฐ์‹œํ‚ค๊ณ , ์‹คํ–‰์‹œํ‚ค๋ฉด ๋ฐ”๋กœ Data detected๊ฐ€ ๋œจ๋ฉด์„œ ๋ฐ”๋€๋‹ˆ๋‹ค.

 

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์œผ๋‹ˆ, View Events๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํ™•์ธํ•ด๋ณผ๊นŒ์š” ?

( ํ˜น์€ ์‚ฌ์ดํŠธ ๋‚ด์— ์™ผ์ชฝ ์ƒ๋‹จ Events๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ํ™•์ธํ•  ์ˆ˜๋„ ์žˆ์Œ ) 

์ด๋ ‡๊ฒŒ ๋‚˜์˜ต๋‹ˆ๋‹ค ! 

 

์‹œ๊ฐ„, device, city ๋“ฑ๋“ฑ ..

๊ทผ๋ฐ city๋Š” ์ƒ๊ฐ๋ณด๋‹ค ์ •ํ™•ํ•˜์ง„ ์•Š๊ณ , ์‹œ๊ฐ„์ด ์ข€ ์ง€๋‚˜์•ผ ์ •ํ™•ํžˆ ์ฒ˜๋ฆฌ๋˜๊ธด ํ•œ๋‹ค๋Š”๋ฐ ์•„์ง ํ™•์ธํ•ด๋ณด์ง„ ๋ชปํ–ˆ๋„ค์š” ใ…Žใ…Ž

 

 

 

๊ทธ๋ฆฌ๊ณ  mixpanel ์ฐพ์•„๋ณผ๋•Œ ๊ด€๋ จ๋œ ๋ ˆํผ๋Ÿฐ์Šค๋“ค์„ ๊ฐ™์ด ์˜ฌ๋ ค๋‘ก๋‹ˆ๋‹ค ! 

https://mixpanel.mfitlab.com/blog/mixpanel-userflow-analysis-guide-advanced

 

[๋ฏน์ŠคํŒจ๋„ ์‚ฌ์šฉ๋ฒ•] ์‚ฌ์šฉ์ž ํ–‰๋™ ํŒจํ„ด์„ ๋ฏน์ŠคํŒจ๋„๋กœ ๋ฐœ๊ฒฌํ•˜๊ณ  ๋ถ„์„ํ•˜๊ธฐ - ํ”Œ๋กœ์šฐ ์ฐจํŠธ ํ™œ์šฉ ์‹ฌํ™” -

์ด ๊ธ€์€ ์‚ฌ์šฉ์ž ํ–‰๋™ ํŒจํ„ด ๋ถ„์„์„ ์œ„ํ•œ ๋ฏน์ŠคํŒจ๋„(Mixpanel)์˜ Flow ๋ฆฌํฌํŠธ๋ฅผ ํ™œ์šฉ๋ฒ• ์‹ฌํ™” ๋‚ด์šฉ์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

mixpanel.mfitlab.com

 

https://flowkater.tumblr.com/post/131485056320/embed

 

Tumblr

 

flowkater.tumblr.com