4. Inkstore - NeoSmartpen/neolab-data-platform GitHub Wiki

κ°œμš”

μž‰ν¬μŠ€ν† μ–΄(Inkstore)λŠ” 데이터 μ €μž₯μ†Œ μ„œλΉ„μŠ€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μƒμ„±ν•œ μ‚¬μš©μž 데이터(User-Data)λ₯Ό 동기화 ν•  수 있게 ν•˜λŠ” μ„œλΉ„μŠ€μž…λ‹ˆλ‹€. μž‰ν¬μŠ€ν† μ–΄μ˜ APIλ₯Ό 톡해 각 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μž 데이터λ₯Ό μ—…λ‘œλ“œν•˜κ³  λ‹€μš΄λ‘œλ“œν•˜μ—¬ 데이터λ₯Ό 동기화할 수 μžˆμŠ΅λ‹ˆλ‹€.

λΉ„μ •ν˜•μ˜ 데이터λ₯Ό μ €μž₯ν•  수 μžˆμœΌλ―€λ‘œ 데이터 양식에 μ œμ•½μ€ μ—†μ§€λ§Œ, μ΅œμ ν™”λœ μ‚¬μš©μž λ°μ΄ν„°λŠ” μ‚¬μš©μž(νšŒμ›)의 μž‰ν¬ λ°μ΄ν„°μž…λ‹ˆλ‹€. μž‰ν¬ λ°μ΄ν„°λŠ” μ‚¬μš©μžκ°€ ν•„κΈ°ν•˜λ©΄μ„œ μƒμ„±ν•œ 슀트둜크 데이터, μž‰ν¬λ§ν¬λ‘œ ν•„κΈ°ν•˜λ©° μƒμ„±ν•œ 링크 데이터 λ“± λ‹€μ–‘ν•œ 데이터λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. μž‰ν¬μŠ€ν† μ–΄λŠ” λ³„λ„μ˜ μŠ€ν‚€λ§ˆκ°€ μ—†κ³ , λΉ„μ •ν˜•μ˜ λ°”μ΄λ„ˆλ¦¬ ν˜•νƒœμ˜ 데이터λ₯Ό μ·¨κΈ‰ν•˜λ―€λ‘œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μž 데이터λ₯Ό Base64둜 μΈμ½”λ”©ν•œ ν˜•νƒœλ‘œ μ—…λ‘œλ“œν•΄μ•Ό ν•©λ‹ˆλ‹€.

πŸ’‘ μ°Έκ³  | μž‰ν¬μŠ€ν† μ–΄μ˜ ν•˜λ‚˜μ˜ λ¬Έμ„œλŠ” μ΅œλŒ€ 1MB의 μ €μž₯곡간을 κ°–λŠ”λ‹€. λ”°λΌμ„œ μ‚¬μš©μžκ°€ μƒμ„±ν•œ λŒ€μš©λŸ‰ νŒŒμΌμ„ λ™κΈ°ν™”ν•˜κΈ° μœ„ν•΄μ„œλŠ” νŒŒμΌμ„ 일정 μš©λŸ‰ λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ—¬ μ˜¬λ¦¬κ±°λ‚˜, λ³„λ„μ˜ Storageμ„œλΉ„μŠ€λ₯Ό μ΄μš©ν•˜μ—¬μ•Ό ν•œλ‹€.

μž‰ν¬μŠ€ν† μ–΄λŠ” μ‚¬μš©μž(νšŒμ›) λ‹¨μœ„ μ„œλΉ„μŠ€λ‘œ, μž‰ν¬μŠ€ν† μ–΄λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ‚¬μš©μž μΈμ¦μ„œκ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ‚¬μš©μž λ°μ΄ν„°λŠ” μ‚¬μš©μž(νšŒμ›) λ³„λ‘œ κ΅¬λΆ„λ˜μ–΄ μ €μž₯λ©λ‹ˆλ‹€. 기본적으둜 ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ ν•΄λ‹Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ μ—…λ‘œλ“œν•œ λ°μ΄ν„°μ—λ§Œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€. 즉, λ‹€λ₯Έ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ—…λ‘œλ“œν•œ λ°μ΄ν„°μ—λŠ” μ ‘κ·Όν•  수 μ—†μŠ΅λ‹ˆλ‹€. μž‰ν¬μŠ€ν† μ–΄μ˜ μžμ„Έν•œ μŠ€νŽ™μ€ REST APIμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

μž‰ν¬λ°μ΄ν„°λŠ” 기본적으둜 μˆœμ„œκ°€ 보μž₯λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.μž‰ν¬μŠ€ν† μ–΄λŠ” λΉ„μ •ν˜•μ˜ λ°μ΄ν„°μ˜ μ €μž₯κ³Ό, 순차적인 접근에 μ ν•©ν•œ ꡬ쑰둜 λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.(순차적인 μ‘°νšŒμ— μ΅œμ ν™” λ˜μ–΄ μžˆμ§€λ§Œ, 랜덀 접근이 μš©μ΄ν•˜λ„λ‘ 데이터에 νƒœκ·Έλ₯Ό μ§€μ›ν•©λ‹ˆλ‹€.) μ‚¬μš©μžλŠ” 데이터λ₯Ό μ—…λ‘œλ“œ ν• λ•Œ λ°μ΄ν„°μ˜ νƒ€μž…(Media-Type)을 지정해야 ν•©λ‹ˆλ‹€.λ„€μ˜€λž©μ΄ μ •ν•œ μž‰ν¬ 데이터 νƒ€μž…μ— 맞좰 데이터λ₯Ό 생성해 올리면 ν”Œλž«νΌμ€ ν•΄λ‹Ή 데이터λ₯Ό μž‰ν¬ λ°μ΄ν„°λ‘œ μΈμ‹ν•©λ‹ˆλ‹€. μ—°κ²°λœ μ—¬λŸ¬ μ„œλΉ„μŠ€λŠ” ν•΄λ‹Ή 데이터λ₯Ό 각각의 μš©λ„μ— 맞게 κ°€κ³΅ν•˜κ±°λ‚˜ ν™œμš©ν•˜κ²Œ λ©λ‹ˆλ‹€.

λ°μ΄ν„°μ˜ ν™œμš© 및 뢄석에 많이 μ‚¬μš©λ˜λŠ” 각쒅 μ˜€ν”ˆ μ†ŒμŠ€ 도ꡬ듀도 μž‰ν¬μŠ€ν† μ–΄μ—μ„œ μ œκ³΅ν•˜λŠ”(ν• ?) 컀λ„₯ν„°λ₯Ό μ‚¬μš©ν•˜λ©΄ μ—°λ™ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

전체 ꡬ쑰도
μš©μ–΄ Β· μš”μ†Œ μ„€λͺ…
  • ν•Έλ“€
    μž‰ν¬μŠ€ν† μ–΄μ— μ‚¬μš©μž 데이터λ₯Ό μ—…λ‘œλ“œν•˜κ³  λ‹€μš΄λ‘œλ“œν•  λ•Œ μ‚¬μš©ν•˜λŠ” 도ꡬ(?)μž…λ‹ˆλ‹€. NDPλŠ” 핸듀을 톡해 ν•΄λ‹Ή 데이터λ₯Ό μ—…λ‘œλ“œν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ 무엇인지 μ‹λ³„ν•©λ‹ˆλ‹€. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ‚¬μš©μž 데이터λ₯Ό μ—…λ‘œλ“œν•  λ•Œ 핸듀을 μ‚¬μš©ν•  μˆ˜λ„ 있고, μ‚¬μš©ν•˜μ§€ μ•Šμ„ μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 핸듀을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 데이터λ₯Ό μ—…λ‘œλ“œν•˜λŠ” 경우, 각 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ””λ°”μ΄μŠ€ λ³„λ‘œ 핸듀을 μƒμ„±ν•˜κ³ , ν•Έλ“€ 정보λ₯Ό μ €μž₯ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

    핸듀에 μ†ν•œ μ£Όμš” μš”μ†ŒλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    • user_id : ν•΄λ‹Ή 핸듀을 λ§Œλ“  μ‚¬μš©μž(νšŒμ›) μ•„μ΄λ””μž…λ‹ˆλ‹€.
    • application_id : ν•΄λ‹Ή 핸듀을 λ§Œλ“  μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 고유 λ²ˆν˜Έμž…λ‹ˆλ‹€.
    • data_pointer : ν•΄λ‹Ή ν•Έλ“€λ‘œ 동기화λ₯Ό μ™„λ£Œν•œ λ°μ΄ν„°μ˜ 지점(seq)μž…λ‹ˆλ‹€.