Skip to content

๐Ÿ“† Daily Scrum

ezhoon edited this page Nov 25, 2022 · 62 revisions

๊ธฐ๋กํ•˜๋Š” ์‚ฌ๋žŒ

image

โœ… Daily 01

Wiki

  • Ground Rule
    • ๋ช‡์‹œ๋ถ€ํ„ฐ ๋ช‡์‹œ๋ฅผ ์ฝ”์–ด ํƒ€์ž„์œผ๋กœ ํ• ์ง€
    • ๋ฐฅ์‹œ๊ฐ„ ๋“ฑ๋“ฑ
  • Convention
    • Git, Resource, Kotlin ์ปจ๋ฒค์…˜
  • Setting
    • ktlint ์ ๊ทน ํ™œ์šฉ

ํ”„๋กœ์ ํŠธ

  • ๋ฉ€ํ‹ฐ๋ชจ๋“ˆ ํ™œ์šฉ
  • ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜ ๊ธฐ๋ฐ˜
  • gradle -> kts ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ ์šฉ
    • ์—ฌ๋Ÿฌ import ๊ตฌ๋ฌธ๋“ค List๋กœ ํ•ฉ์ณ์„œ Boilerplate Code ์ œ๊ฑฐ

๋ฆฌ๋ทฐ์–ด๋‹˜๊ณผ์˜ ๋งŒ๋‚จ

  • ์ฒซ์ฃผ๋Š” ์ˆ˜์š”์ผ 20์‹œ์— ๋งŒ๋‚จ์„ ๊ฐ–๊ธฐ๋กœ ๊ฒฐ์ •
  • ํ˜„์žฌ ์šฐ๋ฆฌ๊ฐ€ ๊ตฌํ˜„ ์˜ˆ์ •์ธ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…

โœ… Daily 02

์œ„์น˜ ๊ถŒํ•œ

  • ์‚ฌ์šฉ์ž๊ฐ€ ์ธ์ฆ์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ถŒํ•œ์„ ์š”์ฒญ
  • ๊ถŒํ•œ์„ ๋ฐ›์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • ํ™ˆ ํ™”๋ฉด ์ƒ๋‹จ์— ์œ„์น˜ ์ •๋ณด๋ฅผ ์š”์ฒญํ•˜๋Š” UI
  • ์œ„์น˜ ๊ถŒํ•œ์ด ์žˆ๋Š” ๊ฒฝ์šฐ
    • ํ™ˆ ํ™”๋ฉด ์ƒ๋‹จ์— ๊ฑฐ๋ฆฌ์— ๋”ฐ๋ฅธ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ๋ชฉ๋ก UI
    • ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์ถ”๊ฐ€์™€ ๋™์‹œ์— ํ•ด๋‹น ๋ธŒ๋žœ๋“œ๋ฅผ DB์— ์ €์žฅ

๊ธฐํ”„ํ‹ฐ์ฝ˜ ์ถ”๊ฐ€

  • ์นด์นด์˜คํ†ก, ๋ฉ”์„ธ์ง€ ๋“ฑ์—์„œ ์ด๋ฏธ์ง€ ์ „๋‹ฌ์„ ํ†ตํ•ด ์ถ”๊ฐ€
  • ์•ฑ ๋‚ด์—์„œ + ๋ฒ„ํŠผ์„ ํ†ตํ•ด ์ถ”๊ฐ€
    • ๊ฐค๋Ÿฌ๋ฆฌ๋กœ ์ด๋™
  • ๋ฐ”์ฝ”๋“œ ๋ฒˆํ˜ธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต๋œ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ํ™•์ธ
  • ์ž๋™์™„์„ฑ
    • ์นด์นด์˜คํ†ก, ํ‚คํ”„ํ‹ฐ์‡ผ, ์‹œ๋Ÿฝ, ์‚ก์˜ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์ด๋ฏธ์ง€์—์„œ ์ž๋™ ์ถ”์ถœ
    • ์„ฑ๊ณต์‹œ, ์ด๋ฏธ์ง€๊ฐ€ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์œผ๋ฉด ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ • ๊ฐ€๋Šฅ
    • ์‹คํŒจ์‹œ, ์ด๋ฏธ์ง€๋ฅผ ์ง์ ‘ ๋“œ๋ž˜๊ทธ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€ ์ถ”๊ฐ€
    • ๋ชจ๋“  ํ…์ŠคํŠธ ๊ธ์–ด ์™€์„œ AutoCompleteTextView

๊ธฐ๋Šฅ ๋ช…์„ธ์„œ ์ž‘์„ฑ

  • ํ™”๋ฉด > Epic > Story > Task - ๊ฐœ๋ฐœ ์šฐ์„ ์ˆœ์œ„ - ์˜ˆ์ƒ ์†Œ์š”์‹œ๊ฐ„ - ์Šคํ”„๋ฆฐํŠธ

โœ… Daily 03

๋ชจ๋ธ ์ •์˜

  • ๋„๋ฉ”์ธ ๋ชจ๋ธ(๊ณตํ†ต)
  • ๊ฐ์ž ์‚ฌ์šฉํ•  ๋ชจ๋ธ
  • ์กฐ์œจ

์•Œ๋žŒ

  • ์•Œ๋žŒ๋งค๋‹ˆ์ €
  • ์›Œํฌ๋งค๋‹ˆ์ €

โœ… Daily 04

  • Android Studio ์ด์Šˆ ์—ฐ๋™
  • Projects ์‚ฌ์šฉ๋ฒ• ๊ณต์œ 
  • Milestone ์‚ฌ์šฉ๋ฒ• ๊ณต์œ 
  • Projects, Milestone ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •
  • PR approve ํ…Œ์ŠคํŠธ
  • PR Template ์ถ”๊ฐ€
  • ๋ชจ๋“ˆ์— ๋”ฐ๋ฅธ Model ์ด๋ฆ„ ์ปจ๋ฒค์…˜ ์ •์˜
  • Domain ๋ชจ๋“ˆ์˜ Model๊ณผ Usecase ์ •์˜

์ด์Šˆ ๋ผ๋ฒจ ์ถ”๊ฐ€

- feat : ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
- refactor : ๋ฆฌํŒฉํ† ๋ง
- fix : ๋ฒ„๊ทธ / ์š”๊ตฌ์‚ฌํ•ญ ๋ณ€๊ฒฝ์œผ๋กœ ์ธํ•œ ์ˆ˜์ •
- bug : ๋ฒ„๊ทธ ์กด์žฌ
- style : ๋ ˆ์ด์•„์›ƒ, ์ปจ๋ฒค์…˜ ์ž‘์—…
- chore : ์žก์ผ ex) gradle dependency
- test : ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ
- docs : ๋ฌธ์„œ ์ž‘์—…

PR Template

resolved #number

## ์ž‘์—… ๋‚ด์šฉ

> ์–ด๋–ค ์ž‘์—…์„ ํ–ˆ๋Š”์ง€ ์ ์–ด์ฃผ์„ธ์š”!

## ์ฒดํฌ๋ฆฌ์ŠคํŠธ
- [ ] Assignees ์„ค์ •
- [ ] Labels ์„ค์ •
- [ ] Projects ์„ค์ •
- [ ] Milestone ์„ค์ •

## ๋™์ž‘ ํ™”๋ฉด

> ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํŒจ์Šคํ•ด์ฃผ์„ธ์š”!

## ๋ฒ„๊ทธ

> ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํŒจ์Šคํ•ด์ฃผ์„ธ์š”!

๋ชจ๋ธ ์ด๋ฆ„ ์ปจ๋ฒค์…˜ ์ •์˜

Data
Model (Room) / Data (Retrofit, Firebase)

Domain
PostFix ๊ฐ€ ์—†์Œ

Presentation 
UIModel
sealed class ์˜ ์ž์‹์€ UIModel ์„ ์•ˆ๋ถ™์ž„ 

โœ… Daily 06

๊ฐ์ž ์ด๋ฒˆ์ฃผ ์–ด๋–ค ๊ฒƒ์„ ํ• ์ง€ ์Šคํ”„๋ฆฐํŠธ ๊ณ„ํš์„ ๋Œ€๋žต์ ์œผ๋กœ๋งŒ ์ด์•ผ๊ธฐ๋ฅผ ํ•ด๋ดค์Šต๋‹ˆ๋‹ค!

์ด์ง€ํ›ˆ

  • ์›” : ์นด์นด์˜ค ์„œ์น˜๋กœ ์ฐพ์€ ๋ธŒ๋žœ๋“œ ์œ„์น˜๋“ค ๋„ค์ด๋ฒ„ ๋งต์— ๋งˆํฌ ํ•ด์ฃผ๊ธฐ / Beep Tech์— Mockk ๊ด€๋ จ ์ •๋ฆฌ ๊ธ€ ์˜ฌ๋ฆฌ๊ธฐ
  • ํ™” : ๋งต ํ•˜๋‹จ ViewPager2 ์ ์šฉ (๊ธฐํ”„ํ‹ฐ์ฝ˜ ์นด๋“œ ๋ทฐ)
  • ์ˆ˜ : ์นด๋“œ๋ฅผ ํด๋ฆญํ–ˆ์„๋•Œ detail ํŽ˜์ด์ง€ ์ด๋™ / ์นด๋“œ๋ทฐ ์Šคํฌ๋กคํ• ๋•Œ ๋ธŒ๋žœ๋“œ๊ฐ€ ๋ณ€๊ฒฝ ๋˜๋ฉด map์—์„œ ์œ„์น˜๋„ ๋ณ€๊ฒฝ
  • ๋ชฉ : ํ˜„์žฌ ์œ„์น˜์— ๋”ฐ๋ผ์„œ ๋ธŒ๋žœ๋“œ๋ฅผ ๋ณด์—ฌ์ค˜์•ผ ํ•˜๋Š”๋ฐ ๊ฐ section์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ์ง€ ๊ณ ๋ฏผํ•˜๊ณ  flow ๊ทธ๋ ค๋ณด๊ธฐ

๋ฐ•๋ช…๋ฒ”

  • ์›” - (๊ธฐํ”„ํ‹ฐ์ฝ˜)์„ธ๋ถ€ํ™”๋ฉด xml ์ž‘์„ฑ + ๊ธฐํ”„ํ‹ฐ์ฝ˜ FakeRepository
  • ํ™”, ์ˆ˜ - ์„ธ๋ถ€ํ™”๋ฉด ๊ด€๋ จ Room DB ๊ตฌ์ถ•
  • ๋ชฉ - ์„ธ๋ถ€ํ™”๋ฉด๊ณผ Room ์—ฐ๋™

์–‘์ˆ˜์ง„

  • ์›”: ์Šคํ”Œ๋ž˜์‹œ ํ™”๋ฉด, ๊ตฌ๊ธ€ ๋กœ๊ทธ์ธ ๋ณด์™„
  • ํ™”: ์ง€๋ฌธ ์ธ์‹
  • ์ˆ˜: ์ง€๋ฌธ ์ธ์‹
  • ๋ชฉ: PIN ์„ค์ • ๊ด€๋ จ ๊ณ ๋ฏผ ํ›„ ๊ตฌํ˜„์‹œ์ž‘ (์–ด๋””์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š”๊ฐ€? ์•”ํ˜ธํ™”๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ•˜๋Š”๊ฐ€?)

๊น€๋ช…์„

  • ์›” : ๊ฐค๋Ÿฌ๋ฆฌ ํŽ˜์ด์ง• ๋ฐ ์„ ํƒ ๊ตฌํ˜„
  • ํ™” : ํ…Œ์ŠคํŠธ์ผ€์ด์Šค junit5
  • ์ˆ˜ : image crop ui ๊ตฌํ˜„์‹œ์ž‘
  • ๋ชฉ : ๊ตฌํ˜„ ์ •๋ฆฌ ๋ฐ ๋ณด๊ฐ•

์Šคํฌ๋Ÿผ์— ๋‚˜์˜จ ์ด์•ผ๊ธฐ

  • ๊ฐ ํฐํŠธ๋“ค string font styles ๋งŒ๋“ค๊ธฐ

image

โœ… Daily 07

์ƒˆ๋ฒฝ ๋‚ด์— ์˜ฌ๋ผ์˜จ PR๋“ค์— ๊ด€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ช…์„

    • PagingData cachedIn์ด ์‚ฌ์šฉ๋˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ
      • ์•ˆ ๋ถ™์—ฌ๋„ ์ž‘๋™์€ ๋˜๋Š”๋ฐ, ์—ฌ๋Ÿฌ๋ฒˆ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋ฉด ์•ฑ์ด ํ„ฐ์ง. ์•„๋งˆ ์บ์‹œ์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•˜๋ฉด ํ„ฐ์ง€๋Š” ๊ฒƒ ๊ฐ™์Œ
      • ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š”์ง€ ์‚ดํŽด๋ดค๋Š”๋ฐ shareIn์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์–ด์„œ stateIn์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ๋‚˜ ์‹ถ๋”๋ผ๊ณ ์š”
      • collectํ•  ๋•Œ ๊ฒฝ๊ณ  ๋œจ๋Š” ๊ฒƒ์€ ์ฝ”๋ฃจํ‹ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „์ด ์™„์ „ ์˜ˆ์ „ ๊ฒƒ์ด์–ด์„œ ๊ทธ๋žฌ๋˜ ๊ฑฐ์˜€์Œ~
    • cacheIn์€ ๋ทฐ๋ชจ๋ธ์—์„œ ํ•˜๋Š” ๊ฒŒ ๋งž์„๊นŒ์š”?
      • ๋„ค. ๊ทธ์ •๋„์˜ ๊ฐ€๊ณต์€ ๋ทฐ๋ชจ๋ธ์ด ๋งž์„ ๋“ฏ
    • ์™œ ํŽ˜์ด์ง•์€ ์ฝœ๋“œ๋กœ ๋„˜๊ฒจ์ค„๊นŒ์š”?
      • ํ•ซ์ผ ๋•Œ๋Š” ์ „๋ถ€ ๋‹ค ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ•˜๋‹ˆ๊นŒ ์ฝœ๋“œ๋กœ ์ฃผ๋Š”๊ฒŒ ์•„๋‹๊นŒ์š”? ์ฝœ๋“œ๋ฉด ์กฐ๊ธˆ์”ฉ ๋“ค๊ณ  ์žˆ์–ด๋„ ๋˜๋‹ˆ๊นŒ์š”
      • BindingAdapter๋กœ ํ•ซ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์—ˆ๋˜ ๊ฒƒ์„ ์‚ญ์ œ
  • ๋ช…๋ฒ”

    • ์ƒ์„ธํ™”๋ฉด์—์„œ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์‚ฌ์šฉ ๋ฒ„ํŠผ์„ ํ™”๋ฉด ํ•˜๋‹จ์— ๋ถ™์ด๋‹ˆ ๋ชป์ƒ๊ฒจ์„œ ์นฉ์œผ๋กœ ๋ณ€๊ฒฝ. ๋ฒ„ํŠผ์ด ํ™”๋ฉด ์•„๋ž˜์— ์žˆ์„ ๋•Œ ์นฉ์„ ๋ˆ„๋ฅด๋ฉด ์•„๋ž˜๋กœ ์ด๋™
    • isVisible์ด setFlag๊ฐ€ ๋  ๋•Œ invalidate ๋จ์„ ํ™•์ธํ•จ
  • ์ง€ํ›ˆ

    • LocationManager -> FusedLocationProvider
    • ์‹œ๊ฐ„ ๊ณ„์‚ฐ์— 9์‹œ๊ฐ„์˜ ์˜ค์ฐจ๊ฐ€ ์žˆ์„ ๊ฑฐ์—์š” - ๋ช…์„ -

โœ… Daily 08

์ˆ˜์ง„

  • ์ง€๋ฌธ ์ธ์‹ ๊ตฌํ˜„ํ•œ ๋‚ด์šฉ ๊ณต์œ 
  • FingerprintManager์˜ ๊ฒฝ์šฐ ์ง€๋ฌธ ์ธ์‹ UI๋ฅผ BottomDialog ๋กœ ๋งŒ๋“ค๊ณ  show() ํ•ด์ค˜์•ผ ์ง€๋ฌธ ์ธ์ฆ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ˆ˜์ •ํ•  ์˜ˆ์ •

์ง€ํ›ˆ

  • Mokk ๊ด€๋ จ ์ •๋ฆฌ
  • ์œ„์น˜ ์บ์‹ฑํ•œ ์ด์œ  ์ •๋ฆฌ
  • ์‚ฌ์šฉ์ž ์œ„์น˜ ์ค‘์‹ฌ์œผ๋กœ ๋‚˜๋ˆŒ ์ง€ ๊ณ ๋ฏผ
    • ๊ฒน์น˜๋Š” ์˜์—ญ์ด ๋ฐœ์ƒํ•œ๋‹ค
  • (์ˆ˜์ง„) ์ขŒํ‘œ๋ฅผ ๊ฑฐ๋ฆฌ ๋‹จ์œ„๊ฐ€ ์•„๋‹Œ ๋ชจ๋“ˆ๋Ÿฌ ์—ฐ์‚ฐ์œผ๋กœ ๊ทธ๋ฃนํ•‘

๋ช…์„

  • ๊ฐค๋Ÿฌ๋ฆฌ ๊ตฌํ˜„ํ•œ ๋‚ด์šฉ ๊ณต์œ 
  • ์‚ฌ์ง„ ์„ ํƒ ์‹œ ์„ ํƒ๋œ ์‚ฌ์ง„ UI ๊ณ ๋ฏผ
    • position ์„ ๋„˜๊ฒจ์ฃผ๊ณ  NotifiItemChanged(position) ์„ ํ˜ธ์ถœํ•˜๋ฉด ๋˜๊ธด ํ•˜์ง€๋งŒ ์ด๋ฏธ์ง€์™€ ํ•จ๊ป˜ ํ•˜์–—๊ฒŒ ๊นœ๋นก๊ฑฐ๋ฆฌ๋Š” ํ˜„์ƒ์ด ๋ฐœ์ƒํ•œ๋‹ค
    • xml ์— selection ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ๋„˜๊ฒจ์ค˜์„œ ์ฒ˜๋ฆฌํ•จ (๋ฉ˜ํ† ๋‹˜๊ป˜ ์งˆ๋ฌธ ์˜ˆ์ •)

๋ช…๋ฒ”

  • ํ…์ŠคํŠธ ์Šคํƒ€์ผ ์ถ”๊ฐ€
  • Material Theme ์ ์šฉ
    • ๋ฒ„ํŠผ ํ…Œ๋งˆ ์•ˆ ๋จน๋˜ ๋ฌธ์ œ ๋ช…์„๋‹˜ ๋„์›€์œผ๋กœ MaterialButtonStyle ๋กœ ์ง€์ •ํ•˜์—ฌ ํ•ด๊ฒฐ
    • ํˆด๋ฐ” ํƒ€์ดํ‹€์— colorOnPrimary ๊ฐ€ ๋จน์ง€ ์•Š๋Š” ๋ฌธ์ œ ์กด์žฌ -> ๊ธฐ๋ณธ์ ์œผ๋กœ title ์ƒ‰์ƒ์€ theme ์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๊ฒ€์ •์ƒ‰๋งŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธ. ๋”ฐ๋กœ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค
    • BottomSheetDialog ์—์„œ Theme ์ด ์•ˆ ๋จน๋Š” ๋ฌธ์ œ -> BottomSheetDialog ๊ฐ€ ๋”ฐ๋กœ Theme ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ถ”์ •

โœ… Daily 09

  • DatePickerDialog ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ ๋„์ค‘ ๋ฒ„ํŠผ์˜ ์ƒ‰์ด ์ ์šฉ์ด ๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ

    • ๊ตฌ๊ธ€์ฝ”๋“œ[https://android.googlesource.com] ๋ฅผ ํ™•์ธ
    • Dialog ๋ฅผ show ํ•˜๊ธฐ ์ „์—๋Š” AlartController ์—์„œ inflate ๋ฅผ ํ•˜์ง€ ์•Š์•„ ์ƒ‰์„ show ์ดํ›„์— ์ ์šฉํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐ
  • Handler(Looper.getMainLooper()) ๋ฅผ ์ด์šฉํ•˜์—ฌ biometricPrompt.authenticate ๋ฅผ ์‹คํ–‰ ํ•ด์•ผ ํ•˜๋Š” ์ด์œ 

    • ์ง€๋ฌธ ์ธ์‹์„ ์š”์ฒญ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ Fragment ๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ ์‹คํ–‰์„ ํ•˜๋‹ค ๋ณด๋‹ˆ Fragment์˜ Transaction๊ณผ biometric ์—์„œ FragmentDialog ์˜ Transaction ๊ฐ๊ฐ์ด ์‹คํ–‰์ด๋˜ ์•ฑ์ด ์ฃฝ๋Š” ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด biometric ์˜ ์‹คํ–‰์„ ๋ฏธ๋ฃธ
    • ์‹คํ–‰๋งŒ ๋ฏธ๋ฃจ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— CoroutineScope(Dispatchers.Main).launch ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋Œ€์ฒดํ•˜๊ณ  job ์„ ์ด์šฉํ•˜์—ฌ ์ •๋ฆฌ
    • activity๋ฅผ ๋ณ€์ˆ˜๋กœ ๋ฐ›๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— activity.lifecycleScope.launch(Dispatchers.Main) ์„ ์‚ฌ์šฉํ•˜๋ฉด job์„ ์ •๋ฆฌ ํ•  ํ•„์š”๊ฐ€ ์—†์Œ
    • activity.lifecycleScope.launch๋ฅผ ์ด์šฉํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด Dispatchers.Main.immediate ์ด๊ธฐ ๋•Œ๋ฌธ์— Transaction์˜ ์ถฉ๋Œ์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค
    • ์ธ์ฆ ๋ฐฉ์‹์ด ๋ฐ”๋กœ ์‹คํ–‰์ด ์•„๋‹ˆ๋ผ ์„ ํƒ์„ ํ•˜๋Š” ํ”Œ๋กœ์šฐ๊ฐ€ ์ƒ๊ฒจ์„œ ์ด์ œ ๋™์ž‘์„ ๋ฏธ๋ฃฐ ํ•„์š”๊ฐ€ ์—†์–ด์กŒ๋‹ค.
  • ์ฝ๊ธฐ ํž˜๋“  ์ฝ”๋“œ๋Š” ๊ฐ€๋Šฅํ•˜๋ฉด ์ฃผ์„๊ณผ ํ”Œ๋กœ์šฐ๋ฅผ ์ž‘์„ฑํ•˜์ž

/*
* CropWindow ์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ๊ฐ€ ํ™”๋ฉด์˜ 50% ์ดํ•˜์˜ ํฌ๊ธฐ๊ฐ€ ๋œ๋‹ค๋ฉด,
* CropWindow ์€ (1 <= a < 2) ์˜ ๊ฐ’์„ ๊ณฑํ•ด๋„ ํ™”๋ฉด ๋ณด๋‹ค ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— scale ์ด 1 ์ด์ƒ์ด ๋œ๋‹ค.
* 1.5 ๋ฅผ ๊ณฑํ•ด ์ฃผ๋Š” ์ด์œ ๋Š” ํ•œ๋ฒˆ์— ๋„ˆ๋ฌด ๋งŽ์ด ์ปค์ง€๋Š” ๊ฒƒ์ด ๋ถ€๋‹ด ์Šค๋Ÿฝ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค
*/
if (zoom < MAX_ZOOM && cropWidth < width / 2f && cropHeight < height / 2f) {
    val scaleW = width / cropWidth * 1.5f
    val scaleH = height / cropHeight * 1.5f
    newZoom = minOf(scaleW * zoom, scaleH * zoom, MAX_ZOOM)
}

โœ… Daily 10

2์ฃผ์ฐจ ๋ฐ๋ชจ

  • ์šฐ๋ฆฌ๋ผ๋ฆฌ์˜ ๊ธฐ์ˆ  ๊ณต์œ  && ์„œ๋กœ์˜ ๋กœ์ง์ด๋‚˜ ์ฝ”๋“œ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ„์„ ์ •ํ•ด๋ณด๊ธฐ

๐Ÿป ๊น€๋ช…์„

์ข‹์•˜๋˜์ 

  • ๊ธฐ๋ณธ์ ์ธ ์ž‘์—…์„ ๊ฑฐ์˜๋‹ค ์ง„ํ–‰๋˜์–ด 4์ฃผ์ฐจ ๋ถ€ํ„ฐ๋Š” ๋‹ค๋“ฌ๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™๋‹ค

์•„์‰ฌ์šด์ 

  • ์ž‘์—…ํ•œ ๋‚ด์šฉ์—๋Œ€ํ•ด ์ •๋ฆฌํ•  ์‹œ๊ฐ„์ด ์ ์—ˆ๊ณ 
  • ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์€ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์ฃผ์„์ด ํ•„์š”ํ•ด ๋ณด์˜€๋‹ค
  • ๊ทธ๋ฆฌ๊ณ  ๋กœ์ง์— ๋Œ€ํ•œ ํ”Œ๋กœ์šฐ์— ๋Œ€ํ•ด ์ •๋ฆฌ๋ฅผ ํ•ด๋‘ฌ์•ผ ์ข‹๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ํ•˜๊ฒŒ๋˜์—ˆ๋‹ค

๊ฐœ์„ 

  • ๋ฉ”๋ชจ์™€ ์ •๋ฆฌ์— ์กฐ๊ธˆ๋” ์‹ ๊ฒฝ์„ ์จ์•ผ๊ฒ ๋‹ค

๐Ÿปโ€โ„๏ธ ๋ฐ•๋ช…๋ฒ”

์ข‹์•˜๋˜ ์ 

  • ํ˜ผ์ž ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ฐ™์ด ํ•˜๋Š” ํŒ€์›๋“ค์ด ์žˆ์œผ๋‹ˆ ๋” ๋ชฐ๋‘ํ•ด์„œ ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค

์•„์‰ฌ์šด ์ 

  • UI ์ž‘์—…์ด ๋“ค์ธ ์‹œ๊ฐ„์— ๋น„ํ•ด ์ƒ๊ฐ๋ณด๋‹ค ๋”๋””๊ณ  ์ดํ•ด๋˜์ง€ ์•Š๋Š” ๋ถ€๋ถ„์ด ๋งŽ์•„์„œ ๋‹ต๋‹ตํ–ˆ๋‹ค

๊ฐœ์„  ์‚ฌํ•ญ

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ์ž‘์—…์„ ์‹œ์ž‘ํ•˜๋ฉด ์ข€ ๋‚ซ์ง€ ์•Š์„๊นŒ?!

๐Ÿฃ ์ด์ง€ํ›ˆ

์ข‹์•˜๋˜ ์ 

  • ํŒ€์›๋“ค๊ณผ ๊ฑฐ์˜ 10์‹œ๋ถ€ํ„ฐ ์ƒˆ๋ฒฝ2์‹œ๊นŒ์ง€ ๋ชจ์—ฌ์„œ ๊ฐ™์ด ์ฝ”๋”ฉ์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ์„๋•Œ ๋น ๋ฅด๊ฒŒ ํšŒ์˜๋„ ๊ฐ€๋Šฅํ–ˆ๊ณ  ๋ˆ„๊ตฐ๊ฐ€์™€ ๊ฐ™์ด ์ฝ”๋”ฉ์„ ํ•˜๋Š” ๊ธฐ๋ถ„์ด ๋“ค์–ด์„œ ์ข‹์•˜์Šต๋‹ˆ๋‹ค.

์•„์‰ฌ์šด ์ 

  • ์ฒ˜์Œ์— ๊ณ„ํšํ–ˆ๋˜ ์„œ๋กœ์˜ ์—ญํ• ์ด ๋ฐ”๋€Œ์–ด๋„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค.
  • ๋‚˜๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ํŒŒํŠธ๋ฅผ ๋“ค์–ด๊ฐ€๋„ ๋ฐ”๋กœ๋Š” ์•„๋‹ˆ๋”๋ผ๋„ ๊ตฌํ˜„์„ ํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์ƒ๊ฐ์ด ๋“ค๊ณ  ๋˜๊ฒŒ ์‚ฌ์†Œํ•œ ๊ฒƒ๋“ค๋„ ์ •๋ฆฌํ•˜์ž ๋ผ๊ณ  ํ–ˆ์ง€๋งŒ ์ž˜ ์•ˆ์ง€์ผœ์ง€๋Š”๊ฑฐ ๊ฐ™์•„์„œ ์•„์‰ฌ์› ์Šต๋‹ˆ๋‹ค.

๊ฐœ์„  ์‚ฌํ•ญ

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

๐Ÿ‘ป ์–‘์ˆ˜์ง„

์ข‹์•˜๋˜ ์ 

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

์•„์‰ฌ์› ๋˜ ์ 

  • ์š”๊ตฌ์‚ฌํ•ญ ์„ค๊ณ„์„œ์— ๊ธฐํ•œ์ด๋ž‘ task ๋‹ค ์ •ํ•ด๋†“๊ณ  ์ •์ž‘ ๊ฐœ๋ฐœํ•  ๋• ์ฐธ๊ณ  ํ˜น์€ ์ƒํƒœ ๊ฐฑ์‹ ์„ ํ•˜์ง€ ์•Š์•˜๋‹ค
  • ์ž‘์—…์„ ํ•  ๋•Œ๋งˆ๋‹ค ์ด์Šˆ ํ•˜๋‚˜์”ฉ ์˜ฌ๋ฆฌ๊ณ  ํ•˜๊ณ  ์˜ฌ๋ฆฌ๊ณ  ํ•˜๊ณ  ํ•ด์„œ ๊ณ„ํš์„ ์ฒ ์ €ํžˆ ์งœ์ง€ ๋ชปํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค

๊ฐœ์„ ํ•  ์ 

  • ๋‹ค์Œ์ฃผ์—๋Š” ์›”์š”์ผ ์Šคํ”„๋ฆฐํŠธ ํšŒ์˜์—์„œ ์ž‘์—…ํ•  ์ด์Šˆ๋ฅผ ๋ฏธ๋ฆฌ ๋“ฑ๋กํ•˜๊ณ  ๊ณ„ํš์— ๋งž๊ฒŒ ํ•ด๋ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค
  • ์‹ค์ œ๋กœ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„๋„ ์ฒดํฌํ•ด์„œ ๋‹ค๋ฅธ ์ž‘์—…์˜ ์˜ˆ์ƒ ์‹œ๊ฐ„์„ ์ •ํ•˜๋Š”๋ฐ ์ฐธ๊ณ ํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค

โœ… Daily 11

์ด์ง€ํ›ˆ

  • ์นด์นด์˜ค ์„œ์น˜ ๊ฒฐ๊ณผ 9๊ฐœ์˜ section์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ €์žฅ
  • ์นด์นด์˜ค ์„œ์น˜ ๊ฒฐ๊ณผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ถ”๊ฐ€
  • ํ•˜๋‹จ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ViewPager2๋กœ ์ „ํ™˜์‹œ ๊ทผ์ฒ˜์— ์žˆ๋Š” ๋ธŒ๋žœ๋“œ ์ถ”์ฒœ
  • ๋„ค์ด๋ฒ„ ๋งต์— ๋ธŒ๋žœ๋“œ ๋งˆ์ปค ํด๋ฆญํ–ˆ์„๋•Œ ํ•ด๋‹นํ•˜๋Š” ์ฟ ํฐ๋“ค ๋ณด์—ฌ์ฃผ๊ธฐ

๊น€๋ช…์„

  • ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์ถ”๊ฐ€ ํ™”๋ฉด ๊ตฌํ˜„
  • ๊ฐค๋Ÿฌ๋ฆฌ์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€ ์ž๋™ ํŒŒ์‹ฑ
  • CropImageView๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด๋ฏธ์ง€ ํฌ๋กญ
  • CropImageView์˜ Clip์„ ์ด์š”ํ•œ ๊ทธ๋ฆผ์ž ์ฒ˜๋ฆฌ์™€ Zoom๊ธฐ๋Šฅ ์ถ”๊ฐ€

์–‘์ˆ˜์ง„

  • ์ง€๋ฌธ ์ธ์ฆ Biometric Compat์œผ๋กœ Migration
  • PIN ์•”ํ˜ธํ™”ํ•˜์—ฌ DataStore์— ์ €์žฅ
  • ์„ค์ • ๊ด€๋ จ ์ž‘์—…
  • ์•ฑ ์ดˆ๊ธฐ ์‹คํ–‰ ์‹œ ์œ„์น˜ ๊ถŒํ•œ ์š”์ฒญ

๋ฐ•๋ช…๋ฒ”

  • DB์—์„œ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์•„์ด๋””๋กœ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์ •๋ณด๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.
  • ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์‚ฌ์šฉ ์™„๋ฃŒ ๋ฒ„ํŠผ ๋™์ž‘ ๊ตฌํ˜„
  • ๊ธฐํ”„ํ‹ฐ์ฝ˜ ๊ณต์œ  ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๊ธฐ๋ก ๋‚จ๊ธฐ๊ธฐ

๊ธˆ์ผ ์Šคํ”„๋ฆฐํŠธ ๋‚ด์šฉ

โœ… Daily 12

์–ด์ œ์˜ ์ž‘์—… ๋ณด๊ณ 

๊น€๋ช…์„

  • ์‚ฌ์ง„ ์„ ํƒ ํ™”๋ฉด - RecyclerView์˜ Decoration ๊ด€๋ จ ์ˆ˜์ •
  • ์‚ฌ์ง„ ํŽธ์ง‘ ํ™”๋ฉด
    • ํ„ฐ์น˜๋ฒ”์œ„ ์ •์˜, ์ด๋™, ํฌ๊ธฐ ์กฐ์ ˆ ๋ฐฉ์‹ ์„ค๋ช…
    • ์ด๋ฒคํŠธ ์ •์˜์™€ ํ™œ์šฉ ๋ฐฉ์‹ ์„ค๋ช… (์ด๋™, ํฌ๊ธฐ์กฐ์ ˆ, NONE)
    • ํ™”๋ฉด ๊ทธ๋ฆฌ๊ธฐ (์„€๋„์šฐ, ์—ฃ์ง€, ์ฝ”๋„ˆ)
    • ์คŒ ์›๋ฆฌ ์„ค๋ช… ํ–‰๋ ฌ ์—ฐ์‚ฐ..

์ด์ง€ํ›ˆ

  • ๋„๋ถ„์ดˆ ๋ณ€ํ™˜
    • ์ดˆ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๊ณ„์‚ฐํ•˜๊ณ  ๋‹ค์‹œ ๋ณ€ํ™˜ํ•˜๋ฉด ๋˜์ง€ ์•Š๋Š”๊ฐ€?
    • ์•„
  • ์„น์…˜ ๋ณ„ ์บ์‹ฑ๊ณผ ๊ฒ€์ƒ‰
  • ๋ช…๋ฒ”๋‹˜์˜ DbResult ์™€ UIState๋ฅผ ํ•ฉ์น  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ
  • SharedFlow test ํ• ๋•Œ์˜ ์ด์Šˆ (Turbin)

๋ฐ•๋ช…๋ฒ”

  • Room์—์„œ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ๊ฐ€์ ธ์˜ค๊ธฐ
  • Intent๋กœ ๊ธฐํ”„ํ‹ฐ์ฝ˜ ํ‚ค ๊ฐ’์„ ๋„ฃ์–ด์„œ ์ƒ์„ธํ™”๋ฉด์„ ์—ด๊ธฐ
  • ๋ชฉ๋ก, ์ง€๋„, ์•Œ๋ฆผ์—์„œ ํ‚ค๋ฅผ ๋„˜๊ฒจ์ฃผ๋ฉด ๊ทธ๊ฑฐ ๋„์›Œ์ค€๋‹ค.
  • ์œ ํšจํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋„ ๊ด€์ธกํ•˜์—ฌ Dialog ์ถœ๋ ฅ

์–‘์ˆ˜์ง„

  • PIN UI ๊ตฌ์„ฑ
    • UI ์ˆ˜์ •ํ•ฉ์‹œ๋‹ค
    • ๋‹ค์Œ ๋ฒ„ํŠผ์„ ์—†์• ๊ณ  6์ž๋ฅผ ์“ฐ๋ฉด ๋„˜์–ด๊ฐ€๊ฒŒ ๋ฐ”๊พธ์ฃ ?
  • PIN์„ String์œผ๋กœ ๊ด€๋ฆฌ

โœ… Daily 13

์ด์ง€ํ›ˆ

  • ๊ฒ€์ƒ‰์„ ํ˜„์žฌ ์„น์…˜๋ณด๋‹ค ๋” ๋„“๊ฒŒ ํ•œ ๋ฒˆ์— ๊ฒ€์ƒ‰ํ•œ๋‹ค
  • ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ์„น์…˜ ์ •๋ณด์™€ ํ•จ๊ป˜ DB ์— ์ €์žฅํ•ด์•ผ ํ•˜๋Š”๋ฐ ๊ฒ€์ƒ‰ ๋  ๋•Œ๋งˆ๋‹ค ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์—์„œ ๊ฐœ์„  ๋ฐฉํ–ฅ์„ ํ•จ๊ป˜ ๊ณ ๋ฏผํ•ด ๋ด„

์–‘์ˆ˜์ง„

  • PIN ์ €์žฅ์„ AES256 ์œผ๋กœ ์•”ํ˜ธํ™” ํ›„ ์ €์žฅ (๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ ์ง„ํ–‰)
  • ์œ„ ๋กœ์ง์„ ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด๋กœ ์˜ฎ๊ธธ ์˜ˆ์ •
  • ์‹ค์ œ PIN ์ •๋ณด๋ฅผ ์•”ํ˜ธํ™” ํ›„ ์ €์žฅํ•˜๋Š” ๊ณผ์ • ์ˆ˜ํ–‰ํ•  ์˜ˆ์ •

๋ฐ•๋ช…๋ฒ”

  • ๊ธฐํ”„ํ‹ฐ์ฝ˜ ์‚ฌ์šฉ ์ฒ˜๋ฆฌ Room ๊ตฌ์ถ•
  • ๊ธฐํ”„ํ‹ฐ์ฝ˜์„ Flow ๋กœ ๋ฐ›๋Š” ์ด์œ : ์ƒ์„ธ ํŽ˜์ด์ง€์—์„œ ๊ธฐํ”„ํ‹ฐ์ฝ˜์˜ ์ƒํƒœ๋ฅผ ๋ณ€ํ™”์‹œํ‚ค๊ณ , ๋ฐ”๋กœ ๋ฐ˜์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก Flow ๋กœ ๋ฐ˜ํ™˜ ๋ฐ›์Œ

๊น€๋ช…์„

  • CropRect ๊ฐ€ ์›€์ง์ผ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฒ”์œ„ ์ง€์ • (์‚ฌ์ง„์„ ์•ˆ ๋„˜์–ด๊ฐ€๋„๋ก)
  • CropRect ์˜ ์ตœ์†Œ ํฌ๊ธฐ ์ง€์ • (์ตœ์†Œ์ผ ๋•Œ๋„ ์ด๋™ ๊ฐ€๋Šฅํ•ด์ง)
  • ์ด์ „ ํฌ์ธํŠธ์™€ ํ˜„์žฌ ํฌ์ธํŠธ๋ฅผ ๋น„๊ตํ•ด์„œ CropRect ์ด๋™
  • ๋์œผ๋กœ ๊ฐ”์„ ๋•Œ ํ™•๋Œ€๋œ ์‚ฌ์ง„์„ ์ด๋™์‹œ์ผœ์ค˜์•ผ ํ•˜๋Š”๋ฐ 2๋ฐฐ ๋น ๋ฅด๊ฒŒ ์ด๋™
  • 3dp ์ดํ•˜๋กœ ์‚ฌ์ง„ ๋ชจ์„œ๋ฆฌ์— ๋ถ™์œผ๋ฉด ๋”ฑ ๋ถ™๋Š” snap ๊ตฌํ˜„

โœ… Daily 14

์–‘์ˆ˜์ง„

  • ProtoDataStore ์ ์šฉ์ด kts ์—ฌ์„œ ์‹คํŒจ -> PreferenceDataStore ๋กœ ๋ณ€๊ฒฝ
  • iv ๋ฅผ PreferenceDataStore ์— ์ €์žฅํ•˜๋ฉด์„œ Exception ๋ฐœ์ƒ -> ํ•ด๊ฒฐ
  • Snackbar Animation ์ ์šฉ

๋ฐ•๋ช…๋ฒ”

  • ๊ธฐ์กด์— Mode ์— ๋”ฐ๋ผ ํ™”๋ฉด์„ ๋‹ค๋ฅด๊ฒŒ ๋ณด์—ฌ์ฃผ๋˜ ๋ถ€๋ถ„์„ Fragment๋ฅผ ์ด์šฉํ•œ ํŽ˜์ด์ง€ ๊ต์ฒด๋กœ ๋ณ€๊ฒฝ
  • ์‚ฌ์šฉ ๊ธฐ๋ก์„ reverse ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌ ์ˆœ์„œ ๋ณ€๊ฒฝ

์ด์ง€ํ›ˆ

  • ๊ฒ€์ƒ‰, Draw ๋ฅผ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ•œ๋ฒˆ์— ๋‹ค์šด ๋ฐ›์•„ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ๋” ํšจ์œจ์ 
  • Dark Mode ๋ณ€๊ฒฝ์— ๋”ฐ๋ผ Marker ๋ฅผ ๋‹ค์‹œ ๊ทธ๋ ค์ฃผ์ง€ ์•Š๋˜ ๋ฌธ์ œ ํ•ด๊ฒฐ

๊น€๋ช…์„

  • ActivePointerId ๋ฅผ ์ด์šฉ ํ•˜์—ฌ MultiTouch ๋ฅผ ํ•ด๊ฒฐ
  • ๋‚ด๋ถ€ ์ €์žฅ์†Œ๋ฅผ ์ด์šฉํ•˜์—ฌ Crop๋œ ์ด๋ฏธ์ง€ ์ €์žฅ ๋ฐ Uri๋ฅผ setResult๋กœ ์ „๋‹ฌ

โœ… Daily 15

๐Ÿป ๊น€๋ช…์„

์ข‹์•˜๋˜์ 

์•„์‰ฌ์šด์ 

๊ฐœ์„ 

๐Ÿปโ€โ„๏ธ ๋ฐ•๋ช…๋ฒ”

์ข‹์•˜๋˜ ์ 

์•„์‰ฌ์šด ์ 

๊ฐœ์„  ์‚ฌํ•ญ

๐Ÿฃ ์ด์ง€ํ›ˆ

์ข‹์•˜๋˜ ์ 

์•„์‰ฌ์šด ์ 

๊ฐœ์„  ์‚ฌํ•ญ

๐Ÿ‘ป ์–‘์ˆ˜์ง„

์ข‹์•˜๋˜ ์ 

์•„์‰ฌ์› ๋˜ ์ 

๊ฐœ์„ ํ•  ์ 

โœ๏ธ BEEP Tech Blog

๋ฐ•๋ช…๋ฒ”

์–‘์ˆ˜์ง„

๊น€๋ช…์„

์ด์ง€ํ›ˆ

๐Ÿ‘พ BEEP

๐Ÿ—ฃ Ground Rule

โœ๏ธ Conventions

โš™๏ธ Setting

๐ŸŒฑ Daily Scrum

week 1
week 2
week 3
week 4
week 5
week 6
Clone this wiki locally