Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

676 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

TnT iOS โ€” ๋‹ค์‹œ ๋ณด๋Š” ํ™”๋ฉด์„ ๋‹ค์‹œ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ฒŒ

TnT iOS์˜ ๋‹ค์„ฏ ์žฌ์ง„์ž… ํ”Œ๋กœ์šฐ์—์„œ ๋ฐ˜๋ณต ์š”์ฒญ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์„ ์ค„์ธ ๊ฒฐ๊ณผ

TnT๋Š” ํŠธ๋ ˆ์ด๋„ˆ์˜ ํšŒ์›ยท์ˆ˜์—… ๊ด€๋ฆฌ์™€ ํŠธ๋ ˆ์ด๋‹ˆ์˜ ์šด๋™ยท์‹๋‹จ ๊ธฐ๋ก์„ ์—ฐ๊ฒฐํ•˜๋Š” PT ๊ด€๋ฆฌ ์•ฑ์ž…๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ๋Š” ๊ธฐ์กด TnT iOS๋ฅผ ํฌํฌํ•ด, ๊ฐ™์€ ํ™”๋ฉด์„ ๋‹ค์‹œ ์—ด ๋•Œ๋งˆ๋‹ค ๋ฐ˜๋ณต๋˜๋˜ APIยท์ด๋ฏธ์ง€ ์š”์ฒญ๊ณผ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ธ ๊ฐœ์„  ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๋ถ„๊ธฐ ์‹œ์ ์—๋Š” ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ๊ฐ€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ œํ’ˆ ๊ทœ์น™๊ณผ ์‹คํŒจ ์ƒํƒœ๋ฅผ 302๊ฐœ์˜ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๋กœ ๋จผ์ € ๊ณ ์ •ํ•˜๊ณ , ์‚ฌ์šฉ์ž๋‚˜ ๊ธฐ๋ก์ด ๋ฐ”๋€Œ์—ˆ์„ ๋•Œ ์ž˜๋ชป๋œ ๊ฐ’์„ ์žฌ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ๋„๋ฉ”์ธยท์ด๋ฏธ์ง€ ์บ์‹œ๋ฅผ ๊ฐ๊ฐ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์„ฏ ์žฌ์ง„์ž… ํ”Œ๋กœ์šฐ์—์„œ ๋Œ€์ƒ ๋ฐ˜๋ณต ์š”์ฒญ์„ ๋ชจ๋‘ ์ œ๊ฑฐํ–ˆ๊ณ , ๋™์ผํ•œ Profile ์‹คํ–‰ ํŒŒ์ผ๋กœ ์ง„ํ–‰ํ•œ 100ํšŒ์˜ ์œ ํšจ ์‹ค๊ธฐ๊ธฐ A/B์—์„œ ๋‚ด๋ถ€ ์™„๋ฃŒ ์‹œ์  p50์ด 74.9~97.5% ์ค„์—ˆ์Šต๋‹ˆ๋‹ค.

์›๋ณธ ํ”„๋กœ์ ํŠธ์˜ ๊ธฐํš๊ณผ UI, TrainerยทTrainee ํ”Œ๋กœ์šฐ๋Š” ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„์˜ ๋ ˆ์ด์–ด ๋ฆฌํŒฉํ† ๋ง๊ณผ ํ…Œ์ŠคํŠธ, ์บ์‹œ ํŒŒ์ดํ”„๋ผ์ธ, ์‹ค๊ธฐ๊ธฐ ์ธก์ •์€ ์ง์ ‘ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Diet Before/After ยท ์‹ค๊ธฐ๊ธฐ ์ธก์ • ๊ฒฐ๊ณผ

๊ฐœ์„  ๊ฒฐ๊ณผ

Diet ์žฌ์ง„์ž… Before/After ๋น„๊ต

Diet๋Š” ์บ˜๋ฆฐ๋”, ๋‚ ์งœ๋ณ„ ์‹๋‹จ, ์ƒ์„ธ ๊ธฐ๋ก๊ณผ ์ด๋ฏธ์ง€๋ฅผ ์ฐจ๋ก€๋กœ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜๋Š” ํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค. ์บ์‹œ ์ ์šฉ ํ›„์—๋Š” ์„ธ ๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ์™€ ์ƒ์„ธ ์ด๋ฏธ์ง€๋ฅผ ์›๊ฒฉ ์š”์ฒญ ์—†์ด ๋‹ค์‹œ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž ๋‹ค์‹œ ๋“ค์–ด๊ฐ„ ํ™”๋ฉด ๋Œ€์ƒ ์›๋ณธ ์š”์ฒญ ์ ์šฉ ์ „ โ†’ ์ ์šฉ ํ›„ p50
Trainer Home ยท ์ˆ˜์—… ๋ชฉ๋ก API 1ํšŒ โ†’ 0ํšŒ 687.4 โ†’ 172.5ms ยท 74.9% ๊ฐ์†Œ
Trainer Home ยท ํšŒ์› ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ 6ํšŒ โ†’ 0ํšŒ 1,937.9 โ†’ 183.4ms ยท 90.5% ๊ฐ์†Œ
Trainee Home ยท ์‹๋‹จ ์นด๋“œ ์ด๋ฏธ์ง€ 3ํšŒ โ†’ 0ํšŒ 1,490.0 โ†’ 171.2ms ยท 88.5% ๊ฐ์†Œ
Trainee Diet ยท ์บ˜๋ฆฐ๋”์—์„œ ์‹๋‹จ ์ƒ์„ธ API 3ํšŒยท์ด๋ฏธ์ง€ 1ํšŒ โ†’ ๋ชจ๋‘ 0ํšŒ 1,092.6 โ†’ 212.6ms ยท 80.5% ๊ฐ์†Œ
๊ณตํ†ต MyPage ยท ๋‚ด ์ •๋ณด API 1ํšŒยท์ด๋ฏธ์ง€ 1ํšŒ โ†’ ๋ชจ๋‘ 0ํšŒ 1,133.3 โ†’ 28.2ms ยท 97.5% ๊ฐ์†Œ

์บ์‹œ ์„ค๊ณ„

์บ์‹œ ์ ์ค‘๋ฅ ๋ณด๋‹ค โ€œ์ง€๊ธˆ ์ด ๊ฐ’์„ ๋‹ค์‹œ ๋ณด์—ฌ์ค˜๋„ ๋˜๋Š”์ง€โ€๋ฅผ ๋จผ์ € ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋น ๋ฅด๋”๋ผ๋„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋‚˜ ์ˆ˜์ • ์ „ ๊ธฐ๋ก(์บ์‹œ)์ด ๋ณด์ด๋ฉด ์œ ์ € ๊ฒฝํ—˜์€ ๋” ๋‚˜๋น ์ง€๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ƒํ™ฉ ์ ์šฉํ•œ ๊ธฐ์ค€
๋กœ๊ทธ์•„์›ƒยท๊ณ„์ • ์ „ํ™˜ ์ด์ „ ์‚ฌ์šฉ์ž์˜ ์บ์‹œ๋ฅผ ๋น„์šฐ๊ณ  ์„ธ์…˜๋ณ„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ
์‹๋‹จยทํ”„๋กœํ•„ ๋ณ€๊ฒฝ ๊ด€๋ จ ๋„๋ฉ”์ธ ์Šค๋ƒ…์ƒท์„ ๋ฌดํšจํ™”
TTL ๋งŒ๋ฃŒ ์„œ๋ฒ„ ์š”์ฒญ์ด ์‹คํŒจํ–ˆ์„ ๋•Œ๋งŒ ์˜ค๋ž˜๋œ ์Šค๋ƒ…์ƒท์„ ์ œํ•œ์ ์œผ๋กœ ์‚ฌ์šฉ
์ด๋ฏธ์ง€ URL ๋ณ€๊ฒฝ ๋Šฆ๊ฒŒ ๋๋‚œ ์ด์ „ ์š”์ฒญ์ด ํ˜„์žฌ ํ™”๋ฉด์„ ๋ฎ์ง€ ๋ชปํ•˜๊ฒŒ ์ฐจ๋‹จ
๋™์ผ URL ๋™์‹œ ์š”์ฒญ ์ง„ํ–‰ ์ค‘์ธ ์š”์ฒญ ํ•˜๋‚˜๋ฅผ ๊ณต์œ 
์ €์žฅ ๊ณต๊ฐ„ ๋ฉ”๋ชจ๋ฆฌยท๋””์Šคํฌ ์บ์‹œ์˜ ํฌ๊ธฐ์™€ ์ˆ˜๋ช…์„ ์ œํ•œํ•˜๊ณ  LRU๋กœ ์ •๋ฆฌ

๋„๋ฉ”์ธ ๋ฐ์ดํ„ฐ์™€ ์ด๋ฏธ์ง€๋Š” ํ•˜๋‚˜์˜ ์ €์žฅ ๊ตฌ์กฐ๋กœ ๋ฌถ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ์บ์‹œ๋Š” ์„ธ์…˜๊ณผ ๊ธฐ๋ก ๋ณ€๊ฒฝ์ด ์ˆ˜๋ช…์„ ๊ฒฐ์ •ํ•˜๊ณ , ์ด๋ฏธ์ง€ ์บ์‹œ๋Š” URL๊ณผ ๋””์ฝ”๋”ฉ ๋น„์šฉ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค‘์‹ฌ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์บ์‹œ ์ €์žฅ ๋ฐฉ์‹

์บ์‹œ์— DTO๋‚˜ ํ™”๋ฉด ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. Data์— ๋„๋ฉ”์ธ ์นœํ™”์ ์ธ ์Šค๋ƒ…์ƒท์„ ์ €์žฅํ•˜๊ฒŒ ํ•ด ์„œ๋ฒ„ ์‘๋‹ต ํ˜•์‹๊ณผ ํ™”๋ฉด ์ƒ๋ช…์ฃผ๊ธฐ์—์„œ ์บ์‹œ ํ˜•์‹์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ก์ด ๋ฐ”๋€ ๋’ค์—๋Š” ๊ฐœ๋ณ„ key๋ฅผ ์ฐพ์•„ ์ง€์šฐ๋Š” ๋Œ€์‹  ๊ด€๋ จ ์„ธ์…˜ namespace๋ฅผ ๋น„์› ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์š”์ฒญ ๋น„์šฉ์€ ๊ฐ์ˆ˜ํ•˜๋”๋ผ๋„ ํŒŒ์ƒ ์กฐํšŒ ๊ด€๊ณ„๋ฅผ ๋น ๋œจ๋ ค ์ˆ˜์ • ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ์ชฝ์ด ๋” ์œ„ํ—˜ํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™์ผํ•œ ์ž‘์€ ์Šค๋ƒ…์ƒท 60๊ฐœ๋ฅผ ์ˆœ์ฐจ ์ €์žฅยท์กฐํšŒํ•˜๋Š” ๋””์Šคํฌ ๊ธฐ๋ฐ˜ ๋ฒค์น˜๋งˆํฌ ํ…Œ์ŠคํŠธ์—์„œ JSON์€ ์ดˆ๊ธฐํ™”ยท์ €์žฅยท์กฐํšŒ๊ฐ€, CoreData๋Š” ์ผ๊ด„ ์ •๋ฆฌ์™€ ์ €์žฅ ๊ณต๊ฐ„์ด ์œ ๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋А ํ•œ์ชฝ์˜ ์ „๋ฉด์ ์ธ ์„ฑ๋Šฅ ์šฐ์œ„๋Š” ํ™•์ธ๋˜์ง€ ์•Š์•˜๊ณ , ํ˜„์žฌ ์ ‘๊ทผ ํŒจํ„ด์—์„œ๋Š” CoreData์˜ ์ถ”๊ฐ€ ๋ณต์žก๋„๋ฅผ ๊ฐ์ˆ˜ํ•  ๊ทผ๊ฑฐ๋„ ๋ถ€์กฑํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ณธ ํ”„๋กœ์ ํŠธ ๋ฒ”์œ„์—์„œ๋Š” CoreData ์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ์— ๋น„ํ•ด ํ™•์—ฐํ•œ CoreData ์‚ฌ์šฉ์˜ ์ด๋“์ด ์—†์–ด JSON์„ ๊ธฐ๋ณธ ์ €์žฅ ๋ฐฉ์‹์œผ๋กœ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง๊ณผ ํ…Œ์ŠคํŠธ

๊ธฐ์กด ํ”„๋กœ์ ํŠธ๋Š” ๋ ˆ์ด์–ด๋ณ„ ๋ชจ๋“ˆ๋กœ ๋‚˜๋‰˜์–ด ์žˆ์—ˆ์ง€๋งŒ, ์ž…๋ ฅ ๊ฒ€์ฆ๊ณผ ์„ธ์…˜ ํŒ๋‹จ์ด TCA Reducer์— ๋‚จ์•„ ์žˆ์—ˆ๊ณ  Domain์ด ๋„คํŠธ์›Œํฌ DTO์™€ Mapper๋ฅผ ์•Œ๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋„คํŠธ์›Œํฌ์™€ Keychain ๊ฐ™์€ ์™ธ๋ถ€ ์˜์กด์„ฑ๋„ ์‹คํŒจ ์ƒํ™ฉ์„ ์žฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด ํ˜•ํƒœ์˜€์Šต๋‹ˆ๋‹ค.

๊ธฐ์กด ๋™์ž‘์„ ํ…Œ์ŠคํŠธ๋กœ ๊ณ ์ • โ†’ ์ฑ…์ž„ ๋ถ„๋ฆฌ โ†’ ์‹คํŒจ ์ƒํƒœ ์žฌํ˜„ โ†’ ์บ์‹œ ์ ์šฉ โ†’ ์‹ค์ œ ํ™”๋ฉด A/B

๊ธฐ์กด ๊ตฌ์กฐ ๋ฆฌํŒฉํ† ๋ง ํ›„
Reducer๊ฐ€ ์ž…๋ ฅ ๊ฒ€์ฆ, ๊ธฐ๋ก ์ดˆ์•ˆ, ์„ธ์…˜ ์‹œ์ž‘ ์กฐ๊ฑด๊นŒ์ง€ ํŒ๋‹จ Domain validator์™€ policy๊ฐ€ ์ œํ’ˆ ๊ทœ์น™์„ ํŒ๋‹จ
Domain์ด DTO์™€ Mapper๋ฅผ ์†Œ์œ  DTO, ์š”์ฒญ payload, ๋งคํ•‘ ์ฑ…์ž„์„ Data๋กœ ์ด๋™
์™ธ๋ถ€ ์˜์กด์„ฑ์˜ ์‹คํŒจ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค๊ธฐ ์–ด๋ ค์›€ ๋„คํŠธ์›ŒํฌยทKeychainยทํ‘ธ์‹œ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ์ฃผ์ž… ๊ฐ€๋Šฅํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋ถ„๋ฆฌ
์‹คํŒจ ๋’ค์—๋„ ์„ฑ๊ณต ์ƒํƒœ๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ ์‹คํŒจ ์‹œ ๊ธฐ์กด ํ™”๋ฉด ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ํ…Œ์ŠคํŠธ๋กœ ๊ณ ์ •

ํ˜„์žฌ 302๊ฐœ์˜ ์ œํ’ˆ ํšŒ๊ท€ ํ…Œ์ŠคํŠธ๊ฐ€ ์ž…๋ ฅ ๊ทœ์น™, ์„ธ์…˜, ๋„คํŠธ์›Œํฌ ์‹คํŒจ, ์บ์‹œ ์ƒ๋ช…์ฃผ๊ธฐ์™€ ํ™”๋ฉด ์ƒํƒœ ์ „ํ™˜์„ ๊ฒ€์ฆํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ๋™์ž‘๊ณผ ์‹คํŒจ ์ƒํƒœ๋ฅผ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋จผ์ € ์žฌํ˜„ํ•œ ๋‹ค์Œ ์•ˆ์ „ํ•˜๊ฒŒ ๋ฆฌํŒฉํ† ๋ง์„ ์ง„ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ์ธก์ •

๊ฐ™์€ Profile ์‹คํ–‰ ํŒŒ์ผ์—์„œ cache-bypass(์บ์‹œ X)์™€ cache-enabled(์บ์‹œ O)๋ฅผ ์‹คํ–‰ ์‹œ์ ์— ์„ ํƒํ•˜๊ณ , ๊ฐ™์€ ํ™”๋ฉด์„ ๋ฒˆ๊ฐˆ์•„ ์‹คํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

Trainer Home 30ํšŒ, Trainee Home 30ํšŒ, Diet 20ํšŒ, MyPage 20ํšŒ๋กœ ์ด 100ํšŒ์˜ ์œ ํšจ ์‹คํ–‰์„ ์ˆ˜์ง‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์ƒ ์š”์ฒญ ์ˆ˜์™€ ๋‚ด๋ถ€ ์™„๋ฃŒ ์‹œ์ , ์ด๋ฏธ์ง€ ๋ฉ”๋ชจ๋ฆฌ, Release ์ธก์ • ์ฝ”๋“œ ์ œ์™ธ, ๊ธฐ์กด ๊ธฐ๋Šฅ์ด ๋‹ค์‹œ ๊นจ์ง€์ง€ ์•Š๋Š”์ง€๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์„ฏ ํ”Œ๋กœ์šฐ์˜ ์ง€์—ฐ ์‹œ๊ฐ„์€ ๋ชจ๋‘ ๊ฐœ์„ ๋จ์œผ๋กœ ํŒ์ •๋๊ณ , ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ๋Š” 20๊ฐœ ์ธก์ • ๋ฌถ์Œยท120ํšŒ ์žฌ์ง„์ž…์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ€๋“œ๋ ˆ์ผ์„ ํ†ต๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

์ธก์ •๊ฐ’์€ ์‚ฌ์šฉ์ž ๋™์ž‘ ์‹œ์ž‘๋ถ€ํ„ฐ ๋‚ด๋ถ€ ์ข…๋ฃŒ marker๊นŒ์ง€ ๊ฑธ๋ฆฐ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค. ํ‘œ๋ณธ ์ˆ˜์™€ ํŒ์ • ๊ธฐ์ค€์€ PortfolioPerformanceV2์— ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ์‚ดํŽด๋ณด๊ธฐ

๊ตฌํ˜„

  1. Domain / Data: ํ™”๋ฉด์—์„œ ๋ถ„๋ฆฌํ•œ ์ œํ’ˆ ๊ทœ์น™๊ณผ ๋„คํŠธ์›Œํฌ ์ฑ…์ž„
  2. DomainCacheEngine.swift: ์„ธ์…˜ namespace, TTL, ์Šค๋ƒ…์ƒท ์ €์žฅ๊ณผ ์ •๋ฆฌ
  3. CachedRemoteImage.swift: URL identity, generation guard, ๋ฉ”๋ชจ๋ฆฌยท๋””์Šคํฌยท์›๊ฒฉ ๋กœ๋”ฉ
  4. TNT_PERFORMANCE_VARIANTS: ๋™์ผ ์‹คํ–‰ ํŒŒ์ผ์˜ runtime A/B

๋Œ€ํ‘œ ํ…Œ์ŠคํŠธ

ํ™•์ธํ•  ๋‚ด์šฉ ๋Œ€ํ‘œ ํ…Œ์ŠคํŠธ
์„ธ์…˜ ์‹œ์ž‘๊ณผ ์‹๋‹จ ์ž…๋ ฅ ๊ทœ์น™ SessionBootstrapPolicyTests ยท DietRecordDraftValidatorTests
๋„๋ฉ”์ธ ์บ์‹œ์˜ freshยทstaleยทcleanup DomainCacheEngineTests
repository ์บ์‹œ hit๊ณผ ๋ณ€๊ฒฝ ํ›„ ๋ฌดํšจํ™” TrainerRepositoryCacheTests ยท TraineeRepositoryCacheTests
์ด๋ฏธ์ง€ URL identity์™€ generation guard CachedRemoteImageTests
์‹ค์ œ ํ™”๋ฉด ์ธก์ • ์กฐ๊ฑด ScreenUseCasePerformanceMeasurementTests

์„ฑ๋Šฅ ๊ทผ๊ฑฐ

  • PortfolioPresentationV1: Diet Before/After ์˜์ƒ๊ณผ ์ด๋ฏธ์ง€
  • PortfolioPerformanceV2: ๋‹ค์„ฏ ํ”Œ๋กœ์šฐ์˜ ํ‘œ๋ณธ ์ˆ˜, p50, ํŒ์ •๊ณผ ์š”์ฒญ ์ˆ˜
  • 163684bc: ์›๋ณธ TnT iOS์˜ ํ”„๋กœ์ ํŠธ ๊ธฐ์ค€์ 

์›๋ณธ trace์™€ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋กœ๊ทธ๋Š” ๊ณต๊ฐœํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๊ฐ€๋Šฅํ•œ ์ธก์ • ๊ฒฐ๊ณผ์™€ ๊ฒ€์ฆ ๋ฒ”์œ„๋Š” PortfolioPerformanceV2์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Tech ยท iOS 17 ยท SwiftUI ยท The Composable Architecture ยท Clean Architecture ยท Tuist 4.188.0

Measured on ยท Profile ยท iPhone 13 Pro ยท iOS 26.5.2

About

๐Ÿงจ Trainer & Trainee [25th App-2 Team] ์˜ ํ…Œ์ŠคํŠธ ๋„์ž…/์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•œ ์‹คํ—˜์‹ค์ž…๋‹ˆ๋‹ค. ๐Ÿ‘จโ€๐Ÿ”ฌ

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages