2022. 11. 04 : Architecture Kick - off

2022. 11. 7. 22:32ใ†ComputerScience

 

 

Architecture (11/4 ๊ฐ€์ฆˆ์œŒ)

 

 

View controller 

View ๋ผ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•œ์—†์ด ๋ˆ๋‹ค

OS์—์„œ๋Š” Process์•ˆ์— ์ˆ˜๋งŽ์€ thread๊ฐ€ ๋ˆ๋‹ค

 

์•„ํ‚คํ…์ณ๋ž€?

ํ•˜๋‚˜์˜ view๋งŒ ๋ณธ๋‹ค๋ฉด ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์˜ ๋ชจ์ž„์ด์ง€๋งŒ,

๋™์ ์ธ (๋Ÿฐํƒ€์ž„) ์ธก๋ฉด์—์„œ๋Š” Process, App ํ•˜๋‚˜๋ฅผ ์˜๋ฏธ

๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฃฝ์ง€ ์•Š๋Š” ์˜์—ญ

 

๋™์ ์ด๊ณ  ์ •์ ์ธ ์ธก๋ฉด์„ ๋‹ค ๋ณด์•„์•ผ ํ•œ๋‹ค.

MVC: Logical architecture

 

Runtime architecture

Process, Thread 

์‹ค์ œ๋กœ ๋Ÿฐํƒ€์ž„์—์„œ ๋ฐ”๋ผ๋ณด๋Š” ๊ตฌ์กฐ (OS๊ฐ€ ์ธ์‹ํ•˜๋Š” ๊ตฌ์กฐ)

๋‘ ๊ฐœ์˜ ์•ฑ์ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค๋ฉด?

ํ”„๋กœ์„ธ์Šค: ๋ฐ์ดํ„ฐ๋ฅผ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๊ทธ๋Ÿผ? ์„ธ์…˜ ๋ฉ”์„ธ์ง€ ํ†ต์‹  ๋“ฑ๋“ฑ์˜ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

 

Conceptual architecture 

์“ฐ์ž„์ƒˆ์— ๋งž๊ฒŒ ๋ถ™์ธ ์ด๋ฆ„๋“ค

์–ด์ฉŒ๊ตฌ ๋ทฐ ์ปจํŠธ๋กค๋Ÿฌ (Signin VC)

์“ฐ์ž„์ƒˆ๋“ค์˜ ๋ชจ์ž„ (์ปจ์…‰)

 

Physical architecture

์ด๊ฒŒ ๋ถ„๋ฆฌ๋˜๊ฒŒ ๋˜๋ฉด, ๋‹ค๋ฅธ OS

์„œ๋ฒ„์— ์žˆ๋Š” ๊ตฌ์กฐ (๋„คํŠธ์›Œํฌ ์ผ€์ด๋ธ”)

์•„์ดํฐ์— ์žˆ๋Š” ๊ตฌ์กฐ (LTE ๋ฌด์„ )

 

MVC, MVVM ๋“ฑ๋งŒ ์•„ํ‚คํ…์ฒ˜์— ํ•ด๋‹น๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

๋Ÿฐํƒ€์ž„ ์•„ํ‚คํ…์ณ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•  ๋•Œ ๋งŽ์€ ๊ณ ๋ฏผ์„ ํ•˜๊ฒŒ ํ•œ๋‹ค.

๋‘๋”์ง€ ๊ฒŒ์ž„ ์Šค๋ ˆ๋“œ ์˜ˆ์‹œ (ํ•œ ์“ฐ๋ ˆ๋“œ์— ๋‹ค ๋‘๋ฉด ์ปจํ”Œ๋ฆญ, ์ •์ง€ ๋ฌธ์ œ)

-> ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ (์Šค๋ ˆ๋“œ ๋ถ„๋ฆฌ๋ฅผ ํ•œ๋‹ค.)

๋Š˜ ์ด๋Ÿฐ ๋ฐฉ์‹์„ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•ด์•ผํ•œ๋‹ค.

์šฐ๋ฆฌ์˜ ์†”๋ฃจ์…˜์„ ๋ถ„๋ฆฌํ•˜์—ฌ, ์ ํ•ฉํ•œ ์•„ํ‚คํ…์ณ๋ฅผ ์ฐพ์•„๊ฐ€๋ฉด ๋œ๋‹ค.

 

์˜ˆ์‹œ: ์• ํ”Œ ๋ฎค์ง

view๋กœ ๋ณด๋Š”๊ฑด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ํ•ด๋‹นํ•จ

๋ทฐ๋ฅผ ๋ณผ ํ•„์š”๊ฐ€ ์—†๋‹ค๋ฉด ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋Œ๋ฆฐ๋‹ค. 

Background process๊ฐ€ ๋ˆ๋‹ค

 

Thread์™€ Process์˜ ์ฐจ์ด

๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ ๊ณต์œ 

 

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋กœ ์ผ์„ ์•ผ๊ธˆ์•ผ๊ธˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ์ข‹๊ฒ ๋‹ค. 

-> ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๋ฉด ์ข‹๊ฒ ๋‹ค.

 

๋ทฐ๋ฅผ ๋ณด๊ณ  ์žˆ์œผ๋ฉด์„œ, ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด?

-> ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋กœ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. (๋‹ค ํ”„๋กœ์„ธ์Šค์—ฌ์•ผ ํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค)

 

์ด๋Ÿฐ๊ฑธ ๊ณ ๋ฏผํ•˜๋ฉด์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์งœ์•ผํ•œ๋‹ค. 

์ด์ƒํ•œ ๋ฒ„๊ทธ, ๋ˆˆ์— ๋ณด์ด์ง€ ์•Š๋Š” ๋ฒ„๊ทธ๋ฅผ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌํ•œ ์ปจ์…‰์„ ์ด์•ผ๊ธฐํ•ด๋ณด์ž (์–ด๋–ค ์•„ํ‚คํ…์ณ๊ฐ€ ์ข‹๋‹ค๋ฅผ ๋…ผํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ)

 

QA (Quality Assurance)

์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž์—์„œ ๋” ์ข‹์€ ๊ฐœ๋ฐœ์ž๋กœ ๋‚˜์•„๊ฐ€๋ ค๋ฉด? 

์ดˆ๊ธ‰ ๊ฐœ๋ฐœ์ž ํ•™์ƒ๋“ค์€ QA ๊ด€๋ จ job์„ ๋งŽ์ด ๊ฐ–๊ฒŒ ๋œ๋‹ค.

๊ณ ๊ธ‰์ง€๊ณ , ์ข‹์€ ์ฝ”๋“œ๋ฅผ ๋งŽ์ด ๋ณด๊ฒŒ ๋˜๋ฉด ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.

 

ํšŒ์‚ฌ๋“ค์€ logical architecture๊ฐ€ ์ด๋ฏธ fix ๋œ ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. 

๋‹น๊ทผ๋งˆ์ผ“์€ ์˜ˆ๋ฅผ ๋“ค์–ด RX Swift, ์•Œ๋ผ๋ชจํŒŒ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์‚ฌ์šฉ

(ํŠน์ • ํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์˜์กด์ ์ธ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.)

 

์ •ํ™•ํ•˜๊ฒŒ ์ž˜ ๋™์ž‘ํ•˜๋Š”๊ฐ€?

๋งŽ์€ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๊ณ , ํ…์ŠคํŠธ ํ•˜๋Š” ์—…๋ฌด

: ์ฝ”๋”ฉ์ด ์ •ํ™•ํ•˜๊ฒŒ, ๋ชจ๋“  edge case์—์„œ ๋™์ž‘ํ•˜๋Š”๊ฐ€? 

Verification ์—…๋ฌด

+ ๋””์ž์ธ ๋Œ€๋กœ ๊ฐœ๋ฐœ์ด ์ž˜ ๋˜์—ˆ๋Š”๊ฐ€? (Validation ์—…๋ฌด)

 

์˜๋„ํ•œ ๋””์ž์ธ ๋Œ€๋กœ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ณ ,

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์›ํ•˜๋Š” ๋Œ€๋กœ ์„œ๋ฒ„ API๊ฐ€ ์ž‘์„ฑ์ด ์•ˆ ๋œ ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. 

ํ•ญ์ƒ happy ์‹œ๋‚˜๋ฆฌ์˜ค๋งŒ ์žˆ์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค. (์œ ์ €๋“ค์€ ์—‰๋šฑํ•œ ํ–‰๋™์„ ํ•˜๊ฒŒ ๋œ๋‹ค.)

 

์šฐ๋ฆฌ์˜ ์†”๋ฃจ์…˜์—์„œ, ํ•ด๋‹น ์•„ํ‚คํ…์ณ๊ฐ€ ์ตœ์„ ์˜ ๋ฐฉ๋ฒ•์ธ์ง€

QA ๋ฆฌ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ๋‚˜๋ˆ„์–ด์•ผ๊ฒ ๋‹ค. 

ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ„๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค

 

ํ•ด๋‹น ์ฑ•ํ„ฐ์˜ ๋ชฉ์ : ์ด๋Ÿฌํ•œ ๋…ผ์˜๋ฅผ ํ•ด๋ณด๊ณ  ์‹ถ์—ˆ๋‹ค.

์•„ํ‚คํ…์ณ๋ž€ ๊ฐ๊ฐ์˜ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ทธ ์ž์ฒด๋กœ ์„ค๋ช… ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, 

ํ•จ๊ป˜ ํ–ˆ์„ ๋•Œ ์ƒํ˜ธ ๊ฐ„์˜ ๋™์ž‘์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ์•„ํ‚คํ…์ณ์ด๋‹ค.

์•„ํ‚คํ…์ฒ˜: ํ† ๋ชฉ์—์„œ ํ™œ์šฉํ•˜๋Š” ๋ง

(๋นŒ๋‹น ์ž์ฒด๋กœ, ๋˜ ๋‹ค๋ฆฌ๋„ ๋ชจ๋‘ ๊ทธ ์ž์ฒด๋กœ ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ, ๋นŒ๋”ฉ ์‚ฌ์ด๋ฅผ ์ด์–ด์ฃผ๋Š” ๋‹ค๋ฆฌ๋Š” ์•„ํ‚คํ…์ณ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.)

 

 

3-5๋…„ ๊ฐœ๋ฐœํ•˜๋‹ค๋ณด๋ฉด

์Šค๋ ˆ๋“œ or ํ”„๋กœ์„ธ์Šค์— ๊ฐ์ด ์žกํžˆ๋Š” ๊ฒƒ

Physical condition ์ƒ๊ฐ ์•ˆํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์งœ๋ฉด ์–ด๋–กํ•ด?

๋„คํŠธ์›Œํฌ๊ฐ€ ์ž์› ๋จน๊ณ , ๋ฐฐํ„ฐ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๋œ ์“ฐ๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

 

ํ—ˆ์ค€์ด ๊ต์ˆ˜๋‹˜ ์œ ํŠœ๋ธŒ ๊ผญ ๋ณด์ž ์ธ์‚ฌ์ดํŠธ๊ฐ€ ์žˆ๋‹ค.

 

๋ชจ๋‘ OS ์—์„œ ๋‚˜๋‰˜์–ด์ง„ ๊ฒƒ

OOP -> ๋””์ž์ธ ํŒจํ„ด 23๊ฐœ

 

์“ฐ์ž„์ƒˆ๋Š” ๋‹ฌ๋ผ

๊ทธ์น˜๋งŒ ๊ฐ™์€ ํŒจํ„ด์˜ ๋ฌธ์ œ๋ฅผ ํ’€๊ณ  ์žˆ๋‹ค

Ex) ๊ฐ’์ด ๋ณ€ํ–ˆ์„ ๋•Œ ๋นจ๋ฆฌ ์ฝ์–ด์˜ค๊ณ  ์‹ถ๋‹ค

-> ๊ทธ ๊ฐ’์„ ์ง€์ผœ๋ณด๊ณ  ์žˆ๋‹ค๊ฐ€ ์•Œ๋ ค์ค˜

Observable ๋“ฑ๋“ฑ

 

๋„คํŠธ์›Œํฌ๋ผ๋Š” ๊ฑด ๋Š์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ๊ณ ๋ คํ•ด์•ผ ํ•จ

sync๋ผ๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ƒ๊ฐํ•˜์ง€๋งŒ, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋‘๊ณ ,

sync์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ iOS์—์„œ๋Š” ๋งŽ์ด ๋ณด์ธ๋‹ค.

๋น„๋™๊ธฐ๋ฅผ ๋™๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ด๋„๋ก ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

Sequence Diagram

Object - Thread ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๊ตฌ์กฐ

๊ทธ๋ƒฅ ์น ํŒ์— ๊ทธ๋ฆฐ๋‹ค

ํ˜‘์—…์„ ํ•˜๋ ค๋ฉด -> ์†์œผ๋กœ ๊ทธ๋ฆฌ๋Š”๊ฒŒ ์ œ์ผ ๋น ๋ฅด์ง€ ์•Š์„๊นŒ?

๋ชจ๋“  API๊ฐ€ ๋น„์Šทํ•œ Flow๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋Š๋‚Œ -> ์„ค๊ณ„๋ฅผ ํ•˜๊ณ  ๊ฐœ๋ฐœ

 

UML : ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ๋‹ค ๋งŒ๋“ค ๋•Œ (ํฐ ์กฐ์ง์—์„œ ์œ ์˜๋ฏธํ•œ ๊ฒƒ)

iOS์˜ lifecycle (์ œ์•ฝ ์กฐ๊ฑด์ด ์žˆ๋‹ค)

์šฐ๋ฆฌ์˜ ์•ฑ ๊ฐœ๋ฐœ: ์ฐธ์กฐํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ ๋ฐ‘๋ฐ”๋‹ฅ์ด ๋งŽ์€ ๊ฒƒ

์šฐ๋ฆฌ๋Š” ์ž‘๊ณ , agileํ•˜๊ณ  ๊ธฐ๋ฏผํ•œ ์กฐ์ง (ํ•˜์ง€๋งŒ ๊ธฐ๋ก์€ ๋‚จ๊ฒŒ)

 

10๋ช… ์ด์ƒ ๋“ค์–ด๊ฐ€๋ฉด ์˜์‚ฌ์†Œํ†ต ๋น„์šฉ์ด ํฌ๋‹ค

๊ณตํ†ต์˜ ์ •ํ˜•ํ™”๋œ ์–ธ์–ด๋ฅผ ๋งŒ๋“ค์ž -> UML

 

์ •๋‹ต์„ ์ฐพ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ

ํ•จ๊ป˜ ์ƒ๊ฐํ•ด๋ณด๋Š” Chapter

 

์ฝ”๋“œ ๋ฆฌ๋ทฐ: QA ์ ๊ฒ€ ๋ฆฌ์ŠคํŠธ ์ค‘ ํ•˜๋‚˜

์„œ๋กœ์˜ ํŒจํ„ด์ด ํŒ€์˜ ํŒจํ„ด์ด ๋˜์–ด๊ฐ€๋Š” ์ข‹์€ ํ”„๋กœ์„ธ์Šค

 

์šฐ๋ฆฌ๋Š” ์™œ Clean Architecture๋ฅผ ์ถ”๊ตฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€?

๋‚จ์„ธ๋™ ๋Œ€ํ‘œ: ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋‹ˆ ํด๋ฆฐ ์•„ํ‚คํ…์ณ๊ฐ€ ๋˜๋”๋ผ

๋ฌธ์ œ๋“ค์€ ๋น„์Šท๋น„์Šทํ•˜๋‹ˆ๊นŒ, ์ž๊พธ ๋‹ค๋“ฌ๋‹ค๋ณด๋ฉด ๋น„์Šทํ•ด์ง„๋‹ค.

๋ฌธ์ œ๋Š” ํ•˜๋Š˜์—์„œ ๋š ๋–จ์–ด์ง„ ๊ฒŒ ์—†๋‹ค. ๋‹ค๋“ค ์œ ์‚ฌํ•œ ๋ฌธ์ œ

(ํŠน๋ณ„ํžˆ ํŠน๋ณ„ํ•˜๊ณ  ์ข‹์€ ๋ฌธ์ œ๋Š” ์—†๋‹ค)