UMC iOS 10์ฃผ์ฐจ ์„ธ๋ฏธ๋‚˜

2022. 11. 28. 22:20ใ†UniversityMakeUsChallenge/UMCiOS

 

 

 

 

 

 

 

๋งˆ์ง€๋ง‰ ์„ธ๋ฏธ๋‚˜ ์‹œ๊ฐ„! :)

 

 

 

 

์ด๋ฒˆ์ฃผ์˜ ์‹ค์Šต์€ ์—†๋‹ค! ์ด๋ก  ์œ„์ฃผ์˜ ์ˆ˜์—…์ด ๋  ๊ฒƒ

 

 

 

 

 

 

 

 

 

 

1. encoding ํƒ€์ž…๋„ ์ œ์ด์Šจ์œผ๋กœ ๋ณด๋‚ด์•ผํ•œ๋‹ค.

 

 

 

2. addingPercentEncoding - ๊นจ์ง€์ง€ ์•Š๋„๋ก

 

 

 

์ตœ์‹ ๊ธฐ์ˆ ์ด๋ผ๋Š” ํ•œ๊ธ€์ด url์— ๋“ค์–ด๊ฐ”์„ ๋•Œ, ๊นจ์ง€์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ

 

 

 

 

 

 

3. ์Šค์œ„ํ”„ํŠธ๊ฐ€ ํ—ˆ๊ฐ€๋˜์ง€ ์•Š์€ HTTP ํ†ต์‹ ์„ ๋ง‰์Œ 

-> infoPlist์—์„œ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. (๋นŒ๋“œ๋ถ€ํ„ฐ ์—๋Ÿฌ๋‚จ)

- ๋‚˜๋„ ๋ฐœ์ƒํ–ˆ๋˜ ์—๋Ÿฌ! 

 

๊ณต๊ณต api ์‚ฌ์šฉ ์‹œ ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ

 

 

 

 

+ kingFisher - ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ/์บ์‹ฑ ์ž‘์—…์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•˜๋„๋ก ํ•˜๋Š” ๋Œ€์ค‘์ ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

 

 

 

 

์„ฑ์žฅ ๊ฐ€๋Šฅํ•œ iOS ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๋ฉด?

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ์ ์ธ ์ž‘๋™ ์›๋ฆฌ๋Š” ์•Œ๊ณ  ์“ฐ์ž

 

 

 

 

 

 

 

 

์ง€๋‚œ ์ฃผ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณธ ์„œ๋ฒ„ ํ†ต์‹  

๋ณธ๊ฒฉ์ ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์—, ์•Œ์•„๋ณด๋ฉด ์ข‹์„ ๋‚ด์šฉ์ด๋‹ค.

๊ฐ€์žฅ ์–ด๋ ค์› ๋˜ ๊ณผ์ •์ด ์ฒ˜์Œ์œผ๋กœ ์„œ๋ฒ„๋ฅผ iOS์—์„œ ํ™œ์šฉํ•  ๋•Œ์˜€๋˜ ๊ธฐ์–ต์ด ์žˆ๋‹ค.

 

 

 

๋กœ๊ทธ์ธ ์ดํ›„์˜ ๊ธฐ๋Šฅ

 

 

 

 

๋กœ๊ทธ์ธ์€ ์•ฑ์„œ๋น„์Šค์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ

๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š”, ๋กœ๊ทธ์ธ ์ดํ›„์˜ ๋’ท๊ณผ์ •์ด ๋” ์ค‘์š”ํ•˜๋‹ค.

์ƒ๊ฐํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ - ์šฐ๋ฆฌ๊ฐ€ ์–ดํ”Œ ์‚ฌ์šฉํ•  ๋•Œ ๋กœ๊ทธ์ธ ์ดํ›„์— ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€?

์ž๋™ ๋กœ๊ทธ์ธ(User defaults), ๋งˆ์ด ํŽ˜์ด์ง€ ํƒญ, ๋กœ๊ทธ์ธ ์ •๋ณด์™€ ์—ฐ๋™๋œ ๋ฐ์ดํ„ฐ๋“ค, ๋‹‰๋„ค์ž„, ํ”„๋กœํ•„

์ปค๋ฎค๋‹ˆํ‹ฐ ์–ดํ”Œ์— ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ๊ฒŒ์‹œ๋ฌผ, ๋‚ด๊ฐ€ ์ฐœํ•œ ๋ฌผํ’ˆ๋“ค -> ๋‚˜์˜ ๊ฐœ์ธ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ •๋ณด

๋‹ค๋ฅธ ID๋กœ ์ ‘๊ทผํ•œ๋‹ค๋ฉด? ํ•ด๋‹น ์‚ฌ์šฉ์ž์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒƒ์ด๋‹ค.

 

 

 

 

 

3๊ฐ€์ง€ ๋Œ€ํ‘œ์ ์ธ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

 

 

 

 

๋ฌถ์–ด์„œ ๋ถ€๋ฅด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

 

 

 

์ฟ ํ‚ค - ๊ตฌ๊ธ€ ์„ค์ •์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฐพ์•„ ๋“ค์–ด๊ฐˆ ํ•„์š”๋„ ์—†์ด, ์›น ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์ฟ ํ‚ค ๊ด€๋ จ ๋ฌธ๊ตฌ๋ฅผ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์ฟ ํ‚ค๋ž€? ์‚ฌ์šฉ์ž๊ฐ€ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” ์ด์ƒ, ๊ณ„์† ๋‚จ์•„ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ

ํฌ๋กฌ ์ฟ ํ‚ค or ์บ์‹œ๋ฅผ ์‚ญ์ œํ•˜๋ฉด? ๊ธฐ์กด์— ์œ ์ง€๋˜๋˜ ๋กœ๊ทธ์ธ๋“ค์ด ํ’€๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์ž๋™ ๋กœ๊ทธ์ธ / ์ž๋™์œผ๋กœ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๊ด€๋ จ์ด ์žˆ๋‹ค.

 

 

 

 

๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ณผ์ • _ ์ดํ›„ ํŠน์ • ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋Š” flow

 

 

 

 

1. ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค

2. ์„œ๋ฒ„์—์„œ ํšŒ์› DB์— ์ €์žฅ๋˜์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. (ํšŒ์›๊ฐ€์ž…์ด ๋œ ์œ ์ €์ธ์ง€ ํ™•์ธ)

3. ๋กœ๊ทธ์ธ ๊ณผ์ •์—์„œ session ์ €์žฅ์†Œ์— ๋“ค๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์™œ?

4. ์„œ๋ฒ„๊ฐ€ ์„ธ์…˜ ์•„์ด๋””๋ฅผ ๋ฐœ๊ธ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋“ค๋ฆฌ๋Š” ๊ฒƒ!

5. ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.

6. ์‚ฌ์šฉ์ž์—๊ฒŒ ์ฟ ํ‚ค๋กœ ์„ธ์…˜ ์•„์ด๋””๊ฐ€ ์ €์žฅ๋˜๊ฒŒ ๋œ๋‹ค. (์šฐ๋ฆฌ๋„ ๋ชจ๋ฅด๊ฒŒ ์ €์žฅ๋˜๋Š” ๊ฒƒ)

์ฟ ํ‚ค์— ๋„˜์–ด๊ฐ„ ์„ธ์…˜ ์•„์ด๋””๋Š” ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”๊ฐ€?

๋„ค์ด๋ฒ„ ๋กœ๊ทธ์ธ - ๋ธ”๋กœ๊ทธ, ์นดํŽ˜, ์Œ์•…, ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ๋“ฑ๋“ฑ ์œ ์ €์˜ ๊ณ ์œ  ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ 

๊ฐ๊ฐ์˜ ์„œ๋น„์Šค๋งˆ๋‹ค ๋กœ๊ทธ์ธ ๊ณผ์ •? ์„œ๋ฒ„ ๋น„ํšจ์œจ

๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์˜ ์ฟ ํ‚ค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•œ๋‹ค. 

์„ธ์…˜ ์•„์ด๋”” ๋ฐœ๊ธ‰ - ์ฟ ํ‚ค๋งŒ ๊ฒ€์ฆํ•˜๋ฉด ๋”ฐ๋กœ ๋กœ๊ทธ์ธ ํ•  ํ•„์š” ์—†์ด, ์‚ฌ์šฉ์ž ์‹๋ณ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•˜์—ฌ ์ฟ ํ‚ค์— ์ €์žฅํ•˜๋Š” ๊ฒƒ

์ฟ ํ‚ค์— ์ €์žฅ๋œ ์„ธ์…˜ ์•„์ด๋””๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์œ ์ € ์ธ์‹ -> ๋ฐ”๋กœ ์‘๋‹ต์„ ์ค„ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ํ†ตํ•ด ํฌ๋กฌ์„ ๊ป๋‹ค๊ฐ€ ์ผฐ์„๋•Œ, ๋กœ๊ทธ์ธ ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ (์ฟ ํ‚ค์— ์„ธ์…˜ ์•„์ด๋””๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ์œผ๋‹ˆ๊นŒ ๊บผ๋‚ด์„œ ๋ณด๋ฉด ๋จ. ๋ฐ”๋กœ ๋ฉ”์ผํ•จ์œผ๋กœ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค.)

 

๋ณดํ†ต ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹ 

์žฅ์  - ๊ฐœ๋ฐœ์ž๋“ค์ด ๋น ๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค

๋‹จ์  - ๋ˆ„๊ตฌ๋‚˜ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ณต PC์— ๋‚จ๊ธฐ๊ธฐ ์ฐ์ฐํ•œ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

๊ฐœ์ธ ์ •๋ณด๋ฅผ ๋‚จ๊ธฐ์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ ์ง€์šฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค

์„ธ์…˜ ์•„์ด๋””๊ฐ€ ์ฟ ํ‚ค์— ์ €์žฅ๋œ๋‹ค.

์ฟ ํ‚ค์—๋Š” ์ ‘์†ํ•œ ์‚ฌ์ดํŠธ๋“ค ๋“ฑ ๊ธฐ๋ณธ ์ •๋ณด๋“ค์ด ๋ชจ๋‘ ์ €์žฅ๋จ

์ฟ ํ‚ค๊ฐ€ ์œ ์ถœ๋˜๊ฑฐ๋‚˜, ์•…์˜์ ์ธ ํ•ด์ปค์˜ ์กฐ์ž‘์œผ๋กœ ๋ณ€์กฐ๋˜๋ฉด

๊ฐœ์ธ์ •๋ณด๊ฐ€ ์œ ์ถœ๋˜๊ฑฐ๋‚˜ ๋ณ€์กฐ๋  ์ˆ˜ ์žˆ์–ด ์œ„ํ—˜์„ฑ์ด ์žˆ๋‹ค.

 

 

 

 

 

์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž์™€ ํ˜‘์—…ํ•  ๋•Œ ์ •๋ง ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ๋ฐฉ์‹

 

 

 

๋ฐ˜๋“œ์‹œ ๊ธฐ๋ณธ ๊ฐœ๋…์€ ์ตํ˜€๋‘ฌ์•ผ ํ•œ๋‹ค.

์ฟ ํ‚ค ์„ธ์…˜ ๋ฐฉ์‹๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•˜๋‹ค.

 

 

 

 

์„œ๋ฒ„์—์„œ๋Š” ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋„˜๊ฒจ์ค€๋‹ค.

 

 

 

์„ธ์…˜ ์•„์ด๋””์ฒ˜๋Ÿผ ํ† ํฐ์„ ๋„˜๊ฒจ์ค€๋‹ค

๊ณ ์œ ํ•œ ์œ ์ €์˜ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ API๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค 

ํ—ค๋”์— ๋ฐœ๊ธ‰๋ฐ›์€ ํ† ํฐ์„ ๋„ฃ์€ ์ƒํƒœ๋กœ ํ˜ธ์ถœํ•˜๊ฒŒ ๋œ๋‹ค.

ํ—ค๋”๋ฅผ ์—ด์–ด์„œ ํ† ํฐ์„ ๋ณด๋ฉด ์œ ์ €๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ฟ ํ‚ค ์„ธ์…˜ ๋ฐฉ์‹๊ณผ ๊ฑฐ์˜ ๋™์ผํ•œ๋ฐ, 

์ฟ ํ‚ค/์„ธ์…˜ ๋ฐฉ์‹์€ ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ

JWT๋Š” ํ† ํฐ์„ ํ—ค๋”์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ด ์ฐจ์ด์ 

 

 

 

ํ† ํฐ์„ ์—ด์–ด๋ดค์„ ๋•Œ ๋ชจ์Šต

 

 

 

ํ† ํฐ์˜ ๊ตฌ์กฐ

3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ์Œ

ํ—ค๋” / ๋‚ด์šฉ / ์„œ๋ช…

 

 

 

JSON ํฌ๋งท์œผ๋กœ ๊ตฌ์„ฑ๋œ JWT ํ† ํฐ

์•”ํ˜ธํ™” ๋œ ๋ฌธ์ž์—ด๋กœ ๊ตฌ์„ฑ -> ๋‚ด์šฉ์„ ์•Œ์•„๋ณด๊ธฐ ํž˜๋“ค๋‹ค

์ „๊ณต์ƒ์ด๋ผ๋ฉด ์•”ํ˜ธํ™” ์ˆ˜์—…์—์„œ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ • ๋ฌธ์ž๋ฅผ ์•”ํ˜ธํ™”ํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”๊ฐ€?

๋ˆ„๊ตฌ๋‚˜ ์‰ฝ๊ฒŒ ๋ณผ ์ˆ˜ ์—†๋„๋ก ์—ฌ๋Ÿฌ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ,

์•”ํ˜ธํ™” ๋ฐฉ์‹์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ๋“ค ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ—ค๋”์ด๋‹ค.

(์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ์•”ํ˜ธํ™”๊ฐ€ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค ์•Œ๋ ค์คŒ)

 

์ค‘๊ฐ„ ์ฃผํ™ฉ์ƒ‰ ๋ถ€๋ถ„ - ์‹ค์งˆ์ ์ธ ํ† ํฐ์˜ ๋‚ด์šฉ

 

๋…ธ๋ž€์ƒ‰ ๋ถ€๋ถ„ - ์„œ๋ช…

๋‚ด์šฉ์ด ๋ณ€์กฐ๋˜์ง€ ์•Š์•˜๋Š”์ง€, ๋ฐ”๋€ ๋‚ด์šฉ์€ ์—†๋Š”์ง€

์ž˜๋ชป๋œ ์ •๋ณด๋Š” ์—†๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ถ€๋ถ„์ด ์„œ๋ช… ๋ถ€๋ถ„์ด๋‹ค.

 

 

 

 

 

JSON ํฌ๋งท์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ† ํฐ - ํ•ด๋…ํ•˜๋ฉด ํ‰๋ฒ”ํ•œ JSON ํ˜•์‹

 

 

 

 

 

 

์†Œ์…œ ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ์ค‘ API ๋ฌธ์„œ์—์„œ ๋ดค์„ ๊ฒƒ์ด๋‹ค.

 

 

์†Œ์…œ ๋กœ๊ทธ์ธ์„ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋กœ๊ทธ์ธ ๊ตฌํ˜„ ๋ฐฉ์‹

 

 

 

์ฟ ํ‚ค/์„ธ์…˜ ๋ฐฉ์‹๊ณผ JWT๋ฅผ ํ•ฉ์ณ๋†“์€ ๋ฐฉ์‹!

 

 

 

- ์•ฑ์—์„œ ์ฒ˜์Œ ๋กœ๊ทธ์ธ ํ™”๋ฉด

- ์•ฑ ์ž์ฒด์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์นด์นด์˜ค์— ๋กœ๊ทธ์ธํ•˜๋Š” ๊ณผ์ •

์นด์นด์˜ค์—์„œ ์ œ๊ณตํ•˜๋Š” SDK๋ฅผ ํ†ตํ•˜์—ฌ, ์œ ์ € ์ž…๋ ฅ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์นด์นด์˜ค DB์— ์ ‘๊ทผ 

์นด์นด์˜ค DB์—์„œ ์œ ํšจํ•œ ์œ ์ €์ธ์ง€ ํ™•์ธํ•œ๋‹ค -> ์นด์นด์˜ค์—์„œ ํ™•์ธ ๋ฐ›์€ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜จ๋‹ค.

 

- ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ณด๋‚ด์ค€ API

- ์˜ฌ๋ฐ”๋ฅธ ์•„์ด๋””๋กœ ์นด์นด์˜ค์—์„œ ํด๋ผ์ด์–ธํŠธ์— ๋„˜์–ด์˜จ ์œ ์ € ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ

ํ•ด๋‹น ์œ ์ €๋Š” ์šฐ๋ฆฌ์˜ ์„œ๋น„์Šค์— ๋กœ๊ทธ์ธํ•˜๊ฒŒ ๋œ๋‹ค.

- JWT ํ† ํฐ ๋ฐœ๊ธ‰ -> JWT ๋ฐฉ์‹๊ณผ ๋™์ผํ•˜๊ฒŒ ๋„˜์–ด๊ฐ„๋‹ค.

 

 

 

 

JWT์˜ ์žฅ๋‹จ์ ์„ ์•Œ์•„๋ณด์ž

์ฟ ํ‚ค ์„ธ์…˜๊ณผ JWT -> ๋‘˜์ด ํ•ฉ์ณ์ง€๋ฉด OAuth ๋ฐฉ์‹์ด๋‹ค.

JWT ๋ฐฉ์‹์˜ ๊ฐ€์žฅ ํฐ ๋ฐฉ์‹ (JSON๊ณผ ํ† ํฐ)

- JSON์€ ์ต์ˆ™ํ•œ ๊ฐœ๋…. ํ† ํฐ์ด๋ž€? 

 

 

 

 

 

ํ™”ํ์ฒ˜๋Ÿผ ํ†ต์šฉ๋˜๋Š” ๊ณ ์œ ํ•œ ์ธ์ฆ์„œ

 

 

 

 

TOKEN: ๊ณ ์œ ํ•œ ์œ ์ €์˜ ์ •๋ณด๋ฅผ ์ธ์ฆํ•˜๋Š” ์ˆ˜๋‹จ

์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ธ์ฆ์„œ ๊ฐœ๋… (ํ† ํฐ ๋งŒ๋ฃŒ, ํ† ํฐ ๊ฐฑ์‹ )

์œ ์ €์˜ ์ •๋ณด๋ฅผ ์„œ๋ฒ„์™€ ์†ก์ˆ˜์‹ ํ•  ๋•Œ ์ธ์ฆํ•˜๋Š” ์ˆ˜๋‹จ

 

 

 

 

๋ฌธ์ œ - ํ† ํฐ์ด ์™ธ๋ถ€์— ์œ ์ถœ๋˜๋ฉด, ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ - ๋ณ€์กฐ ์œ„ํ—˜์ด ์žˆ๋‹ค.

 

 

 

 

Access Token / Refresh Token

ํ† ํฐ์ด ์™ธ๋ถ€์— ์œ ์ถœ๋˜์—ˆ์„ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ๋Œ€์ฒ˜ - ํ† ํฐ์— ์ข…๋ฅ˜๋ฅผ ๋‘๋Š” ๊ฒƒ 

์„œ๋ฒ„ ํ˜ธ์ถœ ์‹œ ํ™œ์šฉ๋˜๋Š” ํ† ํฐ์€ Access Token

Access Token์ด ์œ ์ถœ๋˜๋ฉด? - ํ•ด์ปค๋กœ ์ธํ•ด ๊ฐœ์ธ์ •๋ณด ์œ ์ถœ ๋ฐ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ

๋”ฐ๋ผ์„œ ์„œ๋ฒ„์™€ ์•ฝ์† - Access Token์— ์œ ํšจ ๊ธฐ๊ฐ„์„ ๋ถ€๊ณผํ•œ๋‹ค. (ex. 1์‹œ๊ฐ„ ์ดํ›„ ๋งŒ๋ฃŒ๋จ)

ํ•ด์ปค๊ฐ€ ๊ฐˆ์ทจํ–ˆ๋”๋ผ๋„, ํ™œ์šฉํ•  ์ˆ˜ ์—†๋„๋ก ์œ ํšจ ๊ธฐ๊ฐ„์„ ๋ถ€์—ฌํ•œ๋‹ค.

 

Refresh Token : ๊ฐฑ์‹ ํ•˜๋Š” ํ† ํฐ 

Access Token์ด ๋งŒ๋ฃŒ๋˜์—ˆ์„ ๋•Œ, Refresh Token๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Access Token ๊ฐฑ์‹ 

Refresh Token๋„ ๋งŒ๋ฃŒ๋˜๊ฑฐ๋‚˜, ํ•ด์ปค์—๊ฒŒ ๊ฐˆ์ทจ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ƒ? 

Refresh Token๋„ ์กฐ๊ธˆ ๋” ๊ธด ์œ ํšจ ๊ธฐํ•œ์ด ์žˆ๋‹ค. (Access๊ฐ€ 1์‹œ๊ฐ„์ด๋ผ๋ฉด, Refresh๋Š” 3์ผ ์ •๋„๋ผ๋˜์ง€)

Refresh Token๋„ ๋งŒ๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด (๋‘˜ ๋‹ค ๋งŒ๋ฃŒ) ์ž๋™์œผ๋กœ ๋กœ๊ทธ์•„์›ƒ์ด ๋˜๋„๋ก ์„ค์ •

๋”์ด์ƒ ํ•ด์ปค๋„ ๋‘ ๊ฐœ์˜ ํ† ํฐ์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

 

 

 

 

 

์„œ๋ฒ„ ํ†ต์‹  ์ดํ›„๋Š”?

iOS ์ž์ฒด ๋””๋ฐ”์ด์Šค์˜ DB๋ฅผ ํ™œ์šฉํ•˜์—ฌ

CoreData, UserDefaults, Key-Chain ๋“ฑ๋“ฑ

๋ฐ›์•„์˜จ ์œ ์ € ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ iOS ์–ดํ”Œ ๊ตฌํ˜„

 

 

 

 

 

์ •๊ทœ ๊ณผ์ • ์ด์™ธ์— ๊ผญ ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์„ ๋‚ด์šฉ

 

 

 

 

 

 

 

 

ํด๋กœ์ € - ์Šค์œ„ํ”„ํŠธ์˜ 1๊ธ‰ ๊ฐ์ฒด

ํ•จ์ˆ˜์˜ parameter๋กœ์„œ ํด๋กœ์ €๋ฅผ ๋„˜๊ธธ ์ˆ˜ ์žˆ๋‹ค.

ํด๋กœ์ €๋ฅผ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ง‰์•„๋‘์—ˆ๋‹ค - ํƒˆ์ถœ ๋ถˆ๊ฐ€ ์ƒํƒœ

์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•ด ์• ํ”Œ์—์„œ ๋ง‰์•„๋‘” ๊ฒƒ 

 

 

 

 

๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ ํด๋กœ์ € ๋ณ€์ˆ˜์—, parameter๋กœ ๋„˜๊ฒจ๋ฐ›์€ ํด๋กœ์ €๋ฅผ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค. (์™ธ๋ถ€๋กœ ํƒˆ์ถœ ๋ถˆ๊ฐ€๋Šฅ)

 

 

 

 

 

@escaping ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด ์—๋Ÿฌ๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค!

 

 

 

 

์–ด๋– ํ•œ ์ด์ ์ด ์žˆ๋Š”๊ฐ€? ์–ด๋–ป๊ฒŒ ํ™œ์šฉ์ด ๋˜๊ธธ๋ž˜?

escaping closure -> ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋œ ์ดํ›„ ์‹คํ–‰

ํ•จ์ˆ˜๋“ค ๊ฐ„์˜ ํ˜ธ์ถœ ์ˆœ์„œ (์‹คํ–‰ ์ˆœ์„œ)๋ฅผ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

https://hcn1519.github.io/articles/2017-09/swift_escaping_closure

 

๋„คํŠธ์›Œํฌ ์„œ๋ฒ„ ํ†ต์‹  - API ํ˜ธ์ถœ์— ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์žˆ๋‹ค.

API ํ˜ธ์ถœ์ด ๋๋‚˜๊ธฐ๋„ ์ „์— ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค.

5์ดˆ ๋ชป๊ธฐ๋‹ค๋ฆฌ๊ณ  1์ดˆ๋งŒ์— ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด?

์„œ๋ฒ„ API ํ˜ธ์ถœ์€ ์™„๋ฃŒ๋˜์ง€๋„ ์•Š์•˜๋Š”๋ฐ, ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ๋˜์–ด ์˜๋„์™€ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Œ 

์ฆ‰, ํ•จ์ˆ˜๊ฐ€ ์„œ๋ฒ„ ํ†ต์‹ ์„ ๊ธฐ๋‹ค๋ ค์ค˜์•ผ ํ•จ

 

์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋งŽ์ด ํ™œ์šฉ๋˜๋Š” ๊ฒƒ์ด escaping closure

ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ API ํ˜ธ์ถœ ๋กœ์ง์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ํƒˆ์ถœ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜ ์™ธ๋ถ€๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

 

 

 

 

 

 

 

 

 

 

 

 

์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด

 

 

 

 

 

Class - ์—ฌ๋Ÿฌ VC์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค

 

 

 

 

Class - ์—ฌ๋Ÿฌ VC์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค (์ถ”์ƒ)

class๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. 

์—ฌ๋Ÿฌ VC๊ฐ€ ์žˆ์„ ๋•Œ, class๋Š” ๊ฐ๊ฐ ์ธ์Šคํ„ด์Šคํ™” ๋˜์–ด, ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.

์ฆ‰ ์‚ฐ์žฌ๋œ ํด๋ž˜์Šค๋“ค์ด ๊ฐ๊ฐ ๋™์ผํ•œ ์ •๋ณด๋ฅผ ๋“ค๊ณ  ์žˆ์ง€ ์•Š๋‹ค. (์˜ค,, ์šฐ๋ฆฌ ํƒ€์Šค ์ฒœ์ฒด ๋ชจ๋ธ์˜ ๋ฌธ์ œ์ !)

 

ํšŒ์› ๊ฐ€์ž… - ๋‹จ๊ณ„๋ณ„ ํšŒ์› ๊ฐ€์ž… ๊ณผ์ • 

1๋‹จ๊ณ„ - ์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ

2๋‹จ๊ณ„ - ์ด๋ฆ„๊ณผ ์„ฑ๋ณ„๊ณผ ์—ฐ๋ฝ์ฒ˜

-> ๊ฒฐ๊ตญ ํ•œ ์œ ์ €์— ๋Œ€ํ•œ ํšŒ์› ๊ฐ€์ž… ๊ณผ์ •

- ํšŒ์› ๊ฐ€์ž… API parameter๋กœ ๋„˜๊ธธ ๋•Œ 

๊ฐ๊ฐ์˜ class๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌ -> ํ•˜๋‚˜๋กœ ์ข…ํ•ฉํ•ด์•ผํ•จ

protocol delegate or VC ๋„˜์–ด๊ฐˆ ๋•Œ๋งˆ๋‹ค ๋„˜๊ฒจ์ฃผ๋ฉด - ๋น„ํšจ์œจ์ 

 

 

 

 

 

๋” ํšจ์œจ์ ์ผ ์ˆœ ์—†์„๊นŒ? ์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด 

ํ•˜๋‚˜์˜ ๊ณ ์œ ํ•œ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋””์ž์ธ ํŒจํ„ด 

์Šค์œ„ํ”„ํŠธ์— ๊ตญํ•œ๋œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์†Œํ”„ํŠธ์›จ์–ด๊ณตํ•™์  ๊ธฐ์ˆ 

 

๊ฐ๊ฐ์˜ VC๊ฐ€ ๊ณ ์œ ํ•œ class์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ์Œ 

์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋‚˜?

 

 

 

 

class ๋‚ด๋ถ€์— static ํƒ€์ž…์œผ๋กœ ์ž๊ธฐ ์ž์‹ ์˜ property(๊ฐ์ฒด)๋ฅผ ๊ฐ€์ง€๋Š” ๊ฒƒ

 

 

 

์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋“ฏ์ด

์—ฌ๋Ÿฌ VC์—์„œ ๊ณ ์œ ํ•œ ๊ฐ์ฒด, class์— ์ ‘๊ทผํ•˜์—ฌ

๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๋„ ์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ •๋ง ๋งŽ๋‹ค. (์•Œ๋ผ๋ชจํŒŒ์ด์–ด, ์œ ์ € ๋””ํด์ธ  ๋“ฑ๋“ฑ)

 

 

 

AF๋„ ์•Œ๋ผ๋ชจํŒŒ์ด์—์„œ

์‹ฑ๊ธ€ํ†ค ๋””์ž์ธ ํŒจํ„ด์œผ๋กœ ๊ตฌํ˜„๋œ 

(AF. ) ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ!

 

iOS ๊ฐœ๋ฐœ์ž๋ผ๋ฉด, ๊ผญ ๊ฐœ๋…์„ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€์•ผํ•œ๋‹ค.

 

 

 

 


 

 

 

 

๋‘ ๋‹ฌ ๋ฐ˜ ๋™์•ˆ 10์ฃผ ๊ฐ„์˜ iOS ์„ธ๋ฏธ๋‚˜๋ฅผ ๋งˆ์นฉ๋‹ˆ๋‹ค. 

10์ฃผ๊ฐ„์˜ ์ปค๋ฆฌํ˜๋Ÿผ์€ iOS ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ์ ์ธ ๋‚ด์šฉ๋“ค์ด๋‹ค.

์ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๊ณ , ๊ฐœ์ธ์ ์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉด์„œ

๋ฐ‘๋ฐ”ํƒ•์ด ๋  ๋‚ด์šฉ๋“ค. ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋‚˜์•„๊ฐˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ฒ˜์Œ์— ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์—์„œ์˜ ๊ฐœ๋ฐœ์— ์ ์‘ํ•˜๊ธฐ ์–ด๋ ค์› ๋Š”๋ฐ,

์ด๋Ÿฌํ•œ ๊ณผ์ •์—์„œ ์šฐ๋ฆฌ๊ฐ€ ๋„์›€์„ ๋ฐ›์•˜๋‹ค๋ฉด ๋งŒ์กฑ์Šค๋Ÿฌ์šธ ๊ฒƒ์ด๋‹ค!

 

 

 

 

 

 

 

์ด๋ฒˆ ์„ธ๋ฏธ๋‚˜์˜ ๋ชฉํ‘œ 4๊ฐ€์ง€ 

1. iOS ๊ฐœ๋ฐœ์— ํฅ๋ฏธ

2. iOS ๊ฐœ๋ฐœ์˜ ๊ณต๋ถ€ ๋ฐฉ๋ฒ•์„ ์ตํžŒ๋‹ค.

3. ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ ๋ฏธ์…˜์„ ํ†ตํ•ด ์‹ค๋ ฅ ํ–ฅ์ƒ

4. ์„ฑ์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ์ž๋กœ ๋‚˜์•„๊ฐ€๋Š” ๊ฒƒ

 

 

 

 

 

 

 

 

๋งˆ์ง€๋ง‰ UMC ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ

๋งŽ์€ ์–ด๋ ค์›€๋“ค์ด ์šฐ๋ฆฌ์˜ ์‹ค๋ ฅ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

10์ฃผ ์„ธ๋ฏธ๋‚˜๋ฅผ ๋”ฐ๋ผ์˜ค๋ ค๊ณ  ๋…ธ๋ ฅํ–ˆ๋‹ค๋ฉด, ์•ž์œผ๋กœ์˜

์–ด๋ ค์›€๋„ ์Šค์Šค๋กœ์˜ ํž˜์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์ด๋‹ค.

๊ทธ๊ฐ„์˜ ๋ฏธ์…˜๋“ค์ด ๋‚œ์ด๋„๊ฐ€ ์‰ฌ์šด ๋ฏธ์…˜๋“ค์ด ์•„๋‹ˆ์—ˆ๋‹ค.

์•ž์œผ๋กœ์˜ ์–ด๋ ค์›€๋„ ๋ฏธ์…˜๋ณด๋‹ค ์‰ฌ์šธ ์ˆ˜ ์žˆ์œผ๋‹ˆ ํฌ๊ธฐํ•˜์ง€ ๋ง๊ณ  ๊ณต๋ถ€ํ•ด๋‚˜๊ฐ€์ž!

(๊ณต์‹๋ฌธ์„œ ๋ณด๊ณ , reference ์ฐธ๊ณ ํ•˜๊ณ  ๋“ฑ๋“ฑ)