Goals

  • ๋ฌด์—‡์„ ๋ชฉํ‘œํ–ˆ๋‚˜์š”?

Good

  • ๋ญ”๊ฐ€ ์–ด๋–ป๊ฒŒ๋“  ๋๋‚ด๋ ค ํ–ˆ๋‹ค..?
  • ๋ฌด์–ธ๊ฐ€ ๋‚˜๋งŒ์˜ ์ƒˆ๋กœ์šด ๊ฒƒ์„ ํ•˜๋ ค๋Š” ์‹œ๋„๋ฅผ ํ•˜๋Š” ์ค‘์ด๋‹ค.

Bad

  • ๋ฌธ์„œ๋ฅผ ์กฐ๊ธˆ๋” ๊ผผ๊ผผํžˆ ๋ณด์ง€ ์•Š์•˜๋˜ ๊ฒƒ: ์งˆ๋ฌธ์œผ๋กœ ํ•ด๊ฒฐํ•˜์ž
  • ์ค‘๊ฐ„์— ๋ฃจํ‹ด์ด ๊นจ์ง„ ๊ฒƒ
  • ๋ธ”๋กœ๊ทธ ๊ธ€์„ ๋งŽ์ด ์“ฐ์ง€ ๋ชปํ•œ ๊ฒƒ

Learns

  • RawType์„ ๋ฐ›์•„ ViewModel์˜ ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ•˜์ž.
  • RawType extension์—์„œ ๊ณตํ†ต์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋งŒํ•œ ๊ฒƒ๋“ค์„ ์ฒ˜๋ฆฌํ•ด๋‘”๋‹ค (var~)
  • ViewModel์—์„œ๋Š” RawType์„ ๋ฐ›๋Š” ํ˜•ํƒœ์˜ Protocol์„ ๋งŒ๋“ค๊ณ , ๊ธฐ๋ณธ ๊ฐ’๋“ค์„ extension์—์„œ ์ฒ˜๋ฆฌํ•ด๋‘”๋‹ค.
  • ์‹ค์ œ๋กœ ViewModel์—์„œ๋Š” ํ•ด๋‹น RawType์„ ๋ฐ›์•„ View์— ์—ฐ๊ด€๋œ ์„ธ๋ถ€๋กœ์ง๋งŒ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ๋‚ด ๋ฌธ์„œ์— ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ฃผ์„ ์ฒ˜๋ฆฌ ํ•ด๋‘์—ˆ๋‹ค.
  • ๋จผ์ € ์ถ”์ธกํ•˜๊ธฐ
    • ์ด๋Ÿฐ ์ƒํ™ฉ ๋งˆ์ฃผ์น˜๊ธฐ ์‰ฝ์ง€ ์•Š์Œ
    • App ๊ธฐ๋™ โ†’ ์ฆ๊ฒจ์ฐพ๊ธฐ sync โ†’ ๋ฐ์ดํ„ฐ 5000๊ฐœ๋กœ ์ƒํ–ฅ๋จ
    • ์ผ๋‹จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š˜์–ด๋‚˜๋‹ˆ ์‹œ๊ฐ„ ๋” ๊ฑธ๋ฆด ๊ฑฐ๋‹ค.
      • ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ
        • ์ผ๋‹จ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ 2๋ฐฐ ๋„˜์–ด๊ฐ
        • 2๋ฐฐ ์ด์ƒ ์ฆ๊ฐ€ํ•  ๊ฒƒ์ž„
        • 2.5์ดˆ ๊ฑธ๋ ธ๋‹ค๊ฐ€ 5์ดˆ ์ •๋„๋กœ ๊ฐ€์ง€ ์•Š์„๊นŒ?
        • ๊ทผ๋ฐ 11์ดˆ..? ๋ฉ”์ธ์€ ์•„๋‹ ์ˆ˜ ์žˆ์Œ
      • ํŒŒ์‹ฑ
        • json ํŒŒ์‹ฑ
        • ์–ผ๋งˆ์•ˆ ๊ฑธ๋ฆด ๊ฒƒ์ด๋ผ ์˜ˆ์ƒํ•˜๋‚˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด?
        • ์š”์ฆ˜์€ ๋””๋ฐ”์ด์Šค๊ฐ€ ์ข‹์•„ ํฌ๊ฒŒ ์•ˆ๊ฑธ๋ฆด ์ˆ˜๋„ ์žˆ์œผ๋‚˜ 10๋ฉ”๊ฐ€ 10๋ฒˆ๋ณด๋‹ค 100๋ฉ”๊ฐ€ ํ•œ๋ฒˆ์ด ๋” ์˜ค๋ž˜๊ฑธ๋ ธ์—ˆ์Œ
        • ์™œ? ํ•œ๋ฒˆ์— ๋” ๋งŽ์€ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๊ธฐ ๋•Œ๋ฌธ, ์ฆ‰ ๋ฆฌ์†Œ์Šค๋ฅผ ํ•œ๋ฒˆ์— ๋งŽ์ด ์”€
        • ์ด๊ฒƒ์— ๋”ฐ๋ผ ์ตœ์ ํ™”๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Œ
      • App ๋‚ด๋ถ€ ๋กœ์ง
      • DB ๋„ฃ๊ธฐ
        • 2000 โ†’ 5000๊ฐœ 2๋ฐฐ ์ด์ƒ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ๊ฒƒ์ž„
      • ๋งˆ์ปค ํด๋Ÿฌ์Šคํ„ฐ๋ง
        • ์–˜๋„ 2๋ฐฐ์ •๋„ ๊ฑธ๋ฆด ๊ฒƒ์ž„
        • ๊ทผ๋ฐ 2๋ฐฐ ์ด์ƒ์œผ๋กœ ์ปค์งˆ ์ˆ˜๋„ ์žˆ์Œ, ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๋”ฐ๋ผ.
  • ํ”„๋กœํŒŒ์ผ๋ง
    • ๋‹จ์ˆœํžˆ CPU ํƒ€์ž„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒ๋‹จํ•  ์ˆ˜๋Š” ์—†์„ ์ˆ˜ ์žˆ์Œ
      • ๋ฝ?
    • ๊ทธ๋ž˜๋„ ๊ทธ๋‚˜๋งˆ ์‹œ๊ฐ„ ์ธก์ •์ด ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.
    • Product > Profile
      • ๋นŒ๋“œ ์ƒˆ๋กœํ•จ
      • ๋นŒ๋“œ ๊ณผ์ •์— profiling ํ•„์š”ํ•œ ์ฝ”๋“œ ์‹ฌ์Œ
    • Time Profiler
      • ์–ด๋””์„œ ์‹œ๊ฐ„ ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š”์ง€?
      • simulator๋กœํ•˜๋ฉด ์‹œ๊ฐ„ ์ข€๋” ์˜ค๋ž˜๊ฑธ๋ฆผ
      • ๋“œ๋ž˜๊ทธ ํ•ด์„œ ์„ ํƒํ•˜๋ฉด ๋ณด์ž„
      • ์‹œ๊ฐ„ ์˜ค๋ž˜๊ฑธ๋ฆฐ ๊ฒƒ๋ถ€ํ„ฐ ๋ณด๋ฉด ๋จ
      • ์ฝ”์–ด๋ฐ์ดํ„ฐ๋Š” ์กฐ๋‚ธ ๋Š๋ฆฌ๋‹ค.
      • 5000๊ฐœ๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด 5000๋ฒˆ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์žˆ์—ˆ์Œ
      • ์—ฌ๊ธฐ์„œ ์ค‘๋ณต์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์•„๋‹ˆ๋ฉด ๋„ฃ๋Š” ํ•จ์ˆ˜
      • ์—ฌ๊ธฐ์„œ ์ค‘๋ณต ์ฒดํฌ ์•ˆํ•˜๋ฉด ๋นจ๋ผ์ง€์ง€ ์•Š์„๊นŒ?
      • ์ œ์•ˆ ๋ฐฉ๋ฒ•
        • ์ฒ˜์Œ์— ํ• ๋•Œ๋Š” ์ค‘๋ณต์ฒดํฌ ํ•„์š”์—†์ž–์•„
        • ์ผ์ผํžˆ ์ค‘๋ณต ์ฒดํฌํ•˜๋Š”๊ฒŒ ์˜ค๋ž˜๊ฑธ๋ฆผ
          • ์ฝ”์–ด๋ฐ์ดํ„ฐ๋Š” key๊ฐ€ ์—†์Œ
          • ์ฆ‰, ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค ๋’ค์ง. Hash๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ.
          • 5000๋ฒˆ ๋“ค์–ด์˜ค๋ฉด ๋‹ค ๋’ค์ ธ์„œ ์ฐพ์Œ
      • core data๋Š” search๊ฐ€ ๋Š๋ฆผ.
      • insert๋Š” ์ƒ๊ฐ๋ณด๋‹ค ๋น ๋ฆ„
    • ์ฝ”๋“œ ์ˆ˜์ •
      • ์ง€์šฐ๋‹ˆ๊นŒ 1์ดˆ์ธ๊ฐ€๋งŒ์— ๋จ
    • ์ด์ œ ๋ฌธ์ œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•  ๊ฒƒ์ธ๊ฐ€?
      • ํด๋Ÿฌ์Šคํ„ฐ๋ง์ด 6์ดˆ๋‚˜ ๊ฑธ๋ฆผ
      • ๊ทธ๋ฆฌ๊ณ  ์ด๊ฒŒ main thread.. ui blocking
      • ์–ด๋–ป๊ฒŒ?
        • background๋กœ ๊ฐ€๋Šฅ?
    • ๋ฐฉ์•ˆ
      • addBookmark์—์„œ ์žˆ๋Š”์ง€ ํ™•์ธ ์–ด๋–ป๊ฒŒ ๋น ๋ฅด๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€?
      • ๋งˆ์ปค๋งค๋‹ˆ์ € background thread?
  • ํ”„๋กœํŒŒ์ผ๋ง์‹œ ๋ฐฐ์šด ๊ฒƒ
    • ์ฒ˜์Œ๋ถ€ํ„ฐ ์–ด๋ ต๊ฒŒ ์ฝ”๋“œ ์งœ์ง€ ๋งˆ๋ผ
    • ๊ตณ์ด backgroundํ•  ํ•„์š”์—†์œผ๋ฉด main์—์„œ ํ•ด๋ผ
    • ๋‚˜์ค‘์— ์ƒ๊ฐํ•ด๋ผ
    • ์ถ”์ธกํ•˜๋Š” ๊ณผ์ •, ๊ณ„ํšํ•˜๋Š” ๊ณผ์ •๋„ ํ•„์š”
    • ํ”„๋กœํŒŒ์ผ๋ง์€ ์น˜๋ช…์ ์ธ ๋ถ€ํ„ฐ ๋ณธ๋‹ค, ์ž‘๊ฒŒํ•˜๊ณ  ํฐ ํšจ๊ณผ
    • CPU ์ˆ˜์น˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.
    • ํ”„๋กœํŒŒ์ผ๋ง์€ ๊ผญ! ํ•ด๋ด์•ผ ํ•œ๋‹ค.
    • main thread์„ ๋ฌถ๊ณ  ์žˆ๋Š” ๋…€์„์ด ์žˆ๋‹ค๋ฉด background๋กœ ๋ณด๋‚ผ ๋ฐฉ๋ฒ•์„ ํ•ด๋ด์•ผ ํ•œ๋‹ค.
  • UI ์ ์šฉ ์ฝ”๋“œ ๋ณด๋‹ค๊ฐ€ ๋ฐฐ์šด ๊ฒƒ
    • shaver๋ณด๊ณ  ๊นœ์ง ๋†€๋žŒ
    • ๊ทธ๋ƒฅ extension์— ์ •์˜ํ•˜๊ณ  ํ•จ์ˆ˜ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ๋งŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,
    • ๊ทธ๋ ‡๊ฒŒ ํ•˜์ง€ ์•Š๊ณ  ์—ฐ์‚ฐ์ž๋ฅผ ์ •์˜ํ•˜์—ฌ ์ ์šฉํ•˜๋Š” ๊ฐœ๋…์œผ๋กœ ํ™•์žฅํ•จ
    • ์ฆ‰, ๊ตฌ์กฐ์ฒด์—๋Š” ๊ด€๋ จ ๊ฐ’๋งŒ ์ •์˜ํ•˜๊ณ  ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉ
    • ๋†€๋ผ์›€.. ๊ฐ’์„ ์ฃผ์ž…ํ•˜๋Š” ํ˜•ํƒœ(์—ฐ์‚ฐ์ž)๋ฅผ ํ†ตํ•ด ์ƒ๊ฐํ•˜๋Š” ๋ฐฉ์‹์„ ๊ฐœ์„  ๊ฐ€๋Šฅ

Commitment

๋ฐฐ์šด ๋‚ด์šฉ

  • ์„ฑ๊ณผ๋ฅผ ๋‚ด๋ ค๋Š” ๊ฒƒ๋ณด๋‹ค ์„ฑ์žฅ์— ์ดˆ์ ์„ ๋งž์ถฐ๋ผ.
  • ๊ธ€์“ฐ๊ณ  ๊ณต์œ  ์กฐ๊ธˆ๋” ์ž์ฃผํ•ด๋ผ.
  • ๊ธ€์„ ์“ธ ๋•Œ, ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๋ ค๋Š” ์ƒ๊ฐ์„ ์กฐ๊ธˆ ๋‚ด๋ ค๋†”๋ผ.
  • ๊ธ€์˜ ๊ธธ์ด๋ฅผ ์กฐ๊ธˆ ์ค„์—ฌ๋ผ. ๊ฒฐ๊ตญ ๋งํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ„๋‹จํ•˜๋‹ค.
  • ๋งํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ฏผํ•˜๋Š” ์‹œ๊ฐ„์„ ๋” ์Ÿ์•„์„œ ๊ธ€์„ ์งง๊ฒŒ ์“ฐ๋ ค๋Š” ์—ฐ์Šต์„ ํ•ด๋ผ.
  • ํฌ๊ณ  ๊ฐ„๊ฐ„ํžˆ๋ณด๋‹ค, ์ž‘๊ณ  ์ž์ฃผ๊ฐ€ ๋” ์ข‹๋‹ค.
  • ๋” ๋งŽ์€ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ์ž‘๊ณ , ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ์ ์–ด๋ผ.
  • ๊ตฌํ˜„ ํŒจํ„ด์„ ์ฝ์–ด ์ฝ”๋“œ์˜ ํ‘œํ˜„์— ๋“œ๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ๋ผ.
  • ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ์€ ์•„์ง ์ด๋ฅด๋‹ค.
  • ๋””์ž์ธ ํŒจํ„ด์„ ์ฝ์—ˆ๋‹ค๊ณ  ๋ฐ”๋กœ ์ ์šฉํ•˜๋ ค๋Š” ์‹œ๋„๋Š” ์˜คํžˆ๋ ค ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž‘์€ ํŒ๋‹จ์ด ๋ชจ์ด๋ฉด ๊ทธ๋Ÿฌํ•œ ํŒจํ„ด์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž‘์€ ํŒ๋‹จ์— ์žˆ์–ด ๋” ์˜ณ์€ ๋ฐฉํ–ฅ์œผ๋กœ ํ•˜๋ ค๋Š” ์—ฐ์Šต์„ ๋” ๋งŽ์ด ํ•ด๋ผ.
  • ๊ฐ„๊ฐ„ํžˆ ์ƒˆ๋กœ์šด ์‹œ๋„๋ฅผ ์ž๋ฐœ์ ์œผ๋กœ ํ•ด๋ผ.

๋ฐฉํ–ฅ

  • ์ด๋ฒˆ๋‹ฌ์—๋Š” ์–ด์ฐŒ๋ณด๋ฉด ์ฒซ ์ŠคํŽ™์ด๋ผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ฒ˜๋ฆฌํ–ˆ๋‹ค.
  • ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋Š” ๊ฒƒ์ด ์–ด๋ ค์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์–ด๋– ํ•œ ํ˜•ํƒœ๋“ค๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋ž˜๊ฑธ๋ ธ๋‹ค.
  • ํŒ€์›๋ถ„์˜ ๋„์›€์„ ๋ฐ›์œผ๋ฉด ๋ฐ›์„ ์ˆ˜๋ก ์ง๊ด€์ ์œผ๋กœ ์ดํ•ดํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ๋‹ค.
  • ๊ทธ๋žฌ๋‹ค๋ฉด ์กฐ๊ธˆ๋” ๋‚˜์€ ์ฝ”๋“œ๋ฅผ ๋„ฃ์„ ์ˆ˜ ์žˆ์—ˆ์„ ํ…๋ฐ ํ•˜๋Š” ์•„์‰ฌ์›€์ด ์žˆ๋‹ค.
  • ์ง๊ด€์ ์œผ๋กœ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ”๋กœ ๋„์›€์„ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.
  • ๋‚ด๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹น์‹œ์˜ ์ตœ์„ ์˜ ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๋‹ค๋Š” ๋งˆ์Œ์œผ๋กœ ํฌ๊ธฐํ•˜์ง€ ๋ง๊ณ  ์ž„ํ•˜์ž.
  • ๋ฃจํ‹ด์ด ๊นจ์ง€๋ฉด์„œ ๊นŒ์ง€ ๋ฌด๋ฆฌํ•ด์„œ ํ•˜์ง€๋Š” ๋ง์ž. ๋” ์ค‘์š”ํ•œ ๊ฒƒ์ด ์žˆ๋‹ค.