๋ฒˆํ˜ธ : 035, ์ž‘์„ฑ์ผ์ž: 2024-09-03

2024.08.27 ~ 2024.09.02

๐Ÿฌย TCA (The Composable Architecture)


ํ•ด๋‹น Tutorial์€ TCA ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“  pointfreeco์—์„œ ์ œ๊ณตํ•˜๋Š” Tutorial์ธ๋ฐ ์ฒ˜์Œ TCA๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ์ข‹์•„์„œ ์ •๋ฆฌํ•˜๋ฉด์„œ ์‚ฌ์šฉ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์•˜๋‹ค.

TCA๋Š” ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ๋„์›€์„ ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•œ ํ›„ ๋นŒ๋“œ์‹œ๊ฐ„์„ ๋ดค๋Š”๋ฐ ๋งค์šฐ ์ฆ๊ฐ€๋˜์—ˆ๋‹ค. ์ผ๋‹จ ๊ฒ€์ƒ‰ํ•ด๋ณธ ๊ฒฐ๊ณผ Apple ์ธก์—์„œ Swift Syntax ์ปดํŒŒ์ผ์‹œ๊ฐ„์ด ๋Š˜์–ด๋‚˜์„œ ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

TCA์™€ SwiftUI๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ View์— Store๋ฅผ ์—ฐ๊ฒฐํ•œ ํ›„ Action์„ ์ž…๋ ฅ๋ฐ›์•„ State๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ์‹์ด์˜€๋‹ค.

Action์„ ์ž…๋ ฅ๋ฐ›์•„ State๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฐ์ฒด๋Š” Reducer ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” Feature์—์„œ ๋‹ด๋‹นํ•œ๋‹ค.

TCA๋ฅผ ๋ฐฐ์šฐ๋ฉด์„œ ๋А๋‚€์ ์€ ์‚ฌ์‹ค์ƒ ํฌ๊ฒŒ ๋ณด๋ฉด View์™€ Feature๋งŒ ๋‚˜๋ˆ ์ ธ์žˆ์–ด์„œ Feature๊ฐ€ MVC์˜ Controller๋‚˜ MVVM์˜ ViewModel ์ฒ˜๋Ÿผ ๋ฌด๊ฑฐ์›Œ์ง€์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ Feature๋ฅผ ๋” ์ž‘๊ฒŒ ๋‚˜๋ˆˆ ํ›„ ํ†ตํ•ฉํ•˜๋Š” ๋ถ€๋ถ„์ด ์ž์—ฐ์Šค๋Ÿฌ์› ๊ณ  Swift Macro๊ฐ€ ๊ตฌํ˜„์ด ์ž˜๋˜์–ด ์žˆ์–ด์„œ ์ผ๋‹จ ๊น”๋”ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  Unitํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ Feature๋งŒ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋˜๊ณ  TestStore๋ฅผ ๋น„๋กฏํ•ด ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋„๊ตฌ๋„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์ฝ”๋“œ ์ž‘์„ฑ์ด ๋งค์šฐ ํŽธ๋ฆฌํ–ˆ๋‹ค.

๐ŸŽจย Design System


๊ฐœ์ธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” DesignSystem์„ ์—ฌ๋Ÿฌ Target์œผ๋กœ ๋‚˜๋ˆ„์—ˆ์„ ๋•Œ ๋น„๊ณต๊ฐœ Spec ์ €์žฅ์†Œ ํ•˜๋‚˜์—์„œ ์˜ฌ๋ฆฌ๊ณ  ์‹ถ์–ด์„œ SwiftUI Target์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ์˜ฌ๋ฆด ๋•Œ podspecํŒŒ์ผ๋“ค์„ ์ฐพ์•„์„œ version์„ ์˜ฌ๋ ค์ฃผ๋Š” ์‰˜์Šคํฌ๋ฆฝํŠธํŒŒ์ผ์„ ์ž‘์„ฑํ–ˆ๊ณ  ํ•ด๋‹น ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด workflow๊ฐ€ ๋Œ์•„์„œ tag ๋ฒ„์ „๋„ ์˜ฌ๋ฆฌ๋Š” ํŒŒ์ผ์„ ์ž‘์„ฑํ–ˆ์ง€๋งŒ Linux์—์„œ ์ด์Šˆ๊ฐ€ ์žˆ์–ด์„œ ์ผ๋‹จ ์‰˜์Šคํฌ๋ฆฝํŠธํŒŒ์ผ์—์„œ tag ๋ฒ„์ „๊นŒ์ง€ ์˜ฌ๋ฆฌ๋„๋ก ์ž„์‹œ๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๐Ÿšจย Tuist์™€ Fastlane์„ ์‚ฌ์šฉํ•  ๋•Œ ๊ด€๋ จ๋œ ์ด์Šˆ


์ „์ฒ˜๋ฆฌ๋ฌธ ์กฐ๊ฑด๋ฌธ์—์„œ Build Configuration์ด ์ œ๋Œ€๋กœ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ ๋˜์ง€ ์•Š๋Š” ์ด์Šˆ

Tuist๋ฅผ ์ ์šฉํ•˜๋ฉด์„œ fastlane ๋ฐฐํฌ ํ›„ ๋ฒ„์ „์—…๋ฐ์ดํŠธ๋ฅผ xcodeํ”„๋กœ์ ํŠธ์—๋งŒ ์ ์šฉํ•ด์„œ ๋ฒ„์ „์ด ๋งž์ถฐ์ง€์ง€ ์•Š๋Š” ์ด์Šˆ

fastlane์—์„œ get_build_number๋ฅผ ๊ฐ€์ ธ์˜ค์ง€ ๋ชปํ•˜๋Š” ์ด์Šˆ

๐Ÿ™‹๐Ÿปโ€โ™‚๏ธ ๊ธฐํƒ€ ์‚ฌํ•ญ


  1. UnitTest๋ฅผ SwiftPM์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ณธ Target์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์˜์กด์„ฑ๋“ค์ด ๊ฐ™์ด ์ถ”๊ฐ€๋˜๊ธฐ ๋•Œ๋ฌธ์— CocoaPods์ฒ˜๋Ÿผ Test ํƒ€๊ฒŸ์—์„œ ๋”ฐ๋กœ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.