2022. 11. 21. 22:17ใUniversityMakeUsChallenge/UMCiOS
iOS ๊ฐ๋ฐ์ด๋ผ๋ฉด? ์๋ฒ์ ์์ฌ์ํตํ๊ฒ ๋๋ค
ํด๋น ๊ท์น์ด ์ง์ผ์ง์ง ์๋๋ค๋ฉด
ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์๋ก ์์๋ค์ ์ ์๋ ๋จ์ด๋ก ๋งํ๋ ์ํฉ
== ์์ฌ์ํต์ด ์ด๋ฃจ์ด์ง์ง ์๋ ์ํฉ
๋ง์ฝ์ ์ฌํฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ค๋ฉด?
ํ์ค์ด์ ์ฐจ์ด๋ ์์ง๋ง, ์์๋ค์ ์ ์๋
or ๊ณต์ ์ธ ์๋ฆฌ์์์ ๋ํ ๋ฐฉ์๊ณผ ํธํ ์๋ฆฌ์์์ ๋ํ ๋ฐฉ์
- ์ธ์ฐ์ง ๋ง๋ผ
- ์ฌ๋ฌ ์ต์ ์ด ์๋ค๋ ์ ๋๋ง ์๊ณ ๊ฐ์
- ์ง๊ธ์ ์ธ์ฐ์ง ๋ง๊ณ , ์ดํด๋ณด์
- ์ค์ ๋ก ๋ํ๋ฅผ ๋๋๋ค๋ฉด ๋ฌธ์ฅ์ ์ฃผ๊ณ ๋ฐ๊ฒ ์ง
- ์ด๋ฌํ ๋ฌธ์ฅ์ API ๋ผ๊ณ ํ๋ค (์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ๋ฌธ์ฅ == API)
- ์๋ฒ์ ํด๋ผ์ด์ธํธ, iOS์ ์๋๋ก์ด๋ (๋ค๋ฅธ ํ๋ซํผ) : ๋ค๋ฅธ ํ๊ฒฝ๋ผ๋ฆฌ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋
- ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฌธ์ฅ์ API ๋ผ๊ณ ์ดํดํ๋ฉด ์ข๋ค.
- REST API
- ํธ๋ฆฌ๋ฅผ ์ํด ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ ํ ๋ฐฉ์
- ์๊ธฐ์๊ฐ์์ ์์ => API์ ์์
- REST ์ค์๋ง
- Representational State Transfer
- REST / restful : ํ๋์ API ๊ฐ๋ฐ ์ํคํ ์ฒ (๋ฐฉ์ ์ค ํ๋)
- ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์ฃผ๊ณ ๋ฐ๋ ๋ฌธ์ฅ, ์ฆ API๋ฅผ ์ ํด์ง ์์์ ๋ง์ถ์ด ํ๋์ ์ํคํ ์ฒ์ ๋ง์ถ ๊ฒ
- ์์ - ์ ์ ์ ๋ฐ์ดํฐ
- ์ด๋ฆ์ URL๋ก ๊ตฌ๋ถ
1) ํ์
- ์๋ฒ์ ํต์ ํ ๋ ๋ชฉ์ ์ฑ
- GET, POST, PUT, DELETE
- ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ / ๋ณด๋ด๋ ๊ฒ / ์ญ์ ํ๋ ๊ฒ / ์ ๋ฐ์ดํธ ํ๋ ๊ฒ
- ํ์ : ๋ชฉ์ ์ฑ์ด REST API ์ ํ๋์ ๊ตฌ์ฑ์์๋ก ๋ค์ด๊ฐ๋ค.
- HTTP ๋ฉ์๋ 8๊ฐ์ง ์ต์ ์ค 4๊ฐ์ง ์ฌ์ฉ
2) ์์
- URI๋ฅผ ํตํด ์ค๋ธ์ ํธ์ ์ ๊ทผํ๊ฒ ๋๋ค
- URI (๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ์์์ ์ฃผ์) vs URL (ํํ์ด์ง ์ ๊ทผํ ๋, ์ฌ์ดํธ ์ ๊ทผํ ๋, ์ฌ์ดํธ๊ฐ ๊ฐ์ง ๋๋ฉ์ธ ์ฃผ์)
- ์ ์ ์ ์ด๋ฆ์ ๊ฐ์ ธ์ค๊ณ ์ถ๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋๊ฐ์ ๋ด๊ฒจ ์๋ ์ ์ ์ด๋ฆ ์ฃผ์๋ฅผ URI
- ์๊ธด๊ฑด ๊ฑฐ์ ๋น์ทํ๋ฐ, ์๋ฏธ๊ฐ ๋ค๋ฅด๋ค
- http๋ก ์์ํ๋ URI -> ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฒ ๋๋ค.
3) ๋ฉ์ธ์ง
- ์๋ฒ์ ์์ฒญํ๊ฑฐ๋ ์์ฌ์ํต ์๋ํ ๋ -> ์๋ฒ ์๋ต
- ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ ๋ณด๋ด๋, ๋์์ค๋ ์๋ต์ด ๋ฉ์ธ์ง๋ก ๊ตฌ์ฑ๋๋ค
- JSON์ด๋ผ๋ ๋ฐ์ดํฐ ํฌ๋งท์ผ๋ก ๊ตฌ์ฑ๋์ด ์จ๋ค
- JSON format
REST - ํ์, ์์, ๋ฉ์ธ์ง๋ก ๊ตฌ์ฑ๋๋ค.
- ์๊ธฐ์๊ฐ์ ์์
- ์ฌ๋ฌ ํญ๋ชฉ (์ด๋ฆ, ์ ํ๋ฒํธ, ๋ฑ๋ฑ ์์์ด ์ ํ์๋ค.)
- ์ด์ฒ๋ผ REST API๋ ์ด๋ฏธ ๊ตฌ์ฑ๋์ด ์๋ ์์์ ๋ฐ๋ผ,
- ํด๋น ์์์ ์งํค๋ฉด์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ์์ฌ์ํตํ๊ฒ ๋๋ค.
- ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ํ์ฉํด์ ๋ฐฑ์๋ ํ๋ ์์ํฌ ๊ตฌ์ฑํ ์ ์๋ค.
- ํนํ๋ ํด๋ผ์ด์ธํธ: ์ค์ํํธ or ์ค๋ธ์ ํธ ์จ
- ์๋ฒ์ ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๋ผ๋ฆฌ๋ ์ฌ์ฉํ๋ ์ธ์ด๊ฐ ๋ค๋ฅด๋ค
- ์๋ฒ - ํด๋ผ์ด์ธํธ ๊ฐ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ตฌ์ฑ์ด ๋ค๋ฅด์ง๋ง,
์ ์ธ๊ณ ๊ณตํต ์ธ์ด์ ๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, ๊ณตํต์ ์ผ๋ก ์ํตํ ์ ์๋ ์์
- ์๋ฒ์ ์์ฒญํ ๋๋, ์๋ต์ ๋ฐ์ ๋๋ JSON ํํ๋ฅผ ๋ง์ถ๋ค.
- JSON: key - value ํํ
- dictionary ํํ๋ก ๊ตฌ์ฑ (userdefaults ์ฒ๋ผ)
[ ์ ๋ฆฌ ]
REST : ํ์, ์์, ๋ฉ์ธ์ง - 3๊ฐ์ง ๊ตฌ์ฑ์์
ํ์: HTTP ๋ฉ์๋ ์ค 4๊ฐ์ง ์ต์
์์: URI๋ฅผ ํตํด ๋ฐ์ดํฐ์ ์ ๊ทผํ๊ฒ ๋จ
uri - http๋ก ์์ํ๋ ์ฃผ์
๋ฉ์ธ์ง: JSON format์ ํํ๋ก ์๋ก ์ฃผ๊ณ ๋ฐ๋๋ค
์๋ก ์์๋ค์ ์ ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์
- ๋์ฝ๋๋ธ ํ๋กํ ์ฝ ์ฑํํ ๋ฐ์ดํฐ๋ชจ๋ธ?
- ์ค์ํํธ๊ฐ ์์์ ๋์ฝ๋ฉ ํด์ค๋ค (์๋ ๋ณํ)
- ์ธ์ฝ๋๋ธ - ์ฐ๋ฆฌ์ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ์ ์ฅํ ๋
- ๋์ฝ๋๋ธ - ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ๋
: ์๊ฐ๋ณด๋ค ์๋ก ๋ณํํ๋๊ฑฐ ๊ฐ๋จํจ
- ๊ฐ๋ฐ์๋ค์ด API๋ฅผ ํ ์คํธํ ์ ์๋ ํ๋ซํผ
- ์น์์์๋ ๊ฐ๋ฅํ๊ณ , ํ๋ก๊ทธ๋จ ๋ค์ด๋ก๋ํด์ ์ฌ์ฉํ ์ ์๋ค.
- ๋ค์ด๋ก๋ ๋ฐ๋๊ฒ ์ต์ ํ๊ฐ ์ ๋์ด์๋ ๊ฒ ๊ฐ๋ค. (์ถ์ฒ)
- ์์ด๋ ๊ฐ๋ฐ ๊ฐ๋ฅํจ
- ํธํ๊ฒ ๊ฐ๋ฐํ๊ณ ์ถ๋ค๋ฉด, ํ๋ฒ์ฏค ํ ์คํธํด๋ณด๋ฉด์
- swift ์ฝ๋ ์ด๋ป๊ฒ ์ง์ผํ ์ง ๊ฐ์ ์ก์๋ณผ ์ ์๋ค.
- ์ ๋ฌธ์๋ผ๋ฉด ์ ์ฉํ๊ฒ ํ์ฉํด๋ณด์! :)
- ๊ธํ๊ฒ ๋ฐ๋ผํ ํ์ ์๋ค.
์ค์ ๋ก API๋ฅผ ๊ฐ์ ธ์์
postman์ ํตํด ์ค์ตํด๋ณด๊ธฐ
๊ณต๊ณต๋ฐ์ดํฐ API๋ฅผ ์ธ ๊ฒ (๊ณต๊ณต๋ฐ์ดํฐ ํฌํธ)
๊ตญ๊ฐ ๊ธฐ๊ด์์ ํ์ฉํ ์ ์๋๋ก ๋ฌด๋ฃ API๋ฅผ ๊ฐ๋ฐํ๋ ๊ฒ
์ ์ฒญ: ์๋น์ค ํค๋ฅผ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํด์
API ๋ง๋ค ๋ค๋ฅธ๋ฐ, ์๋์ผ๋ก ๋ฐ๋ก ๋ฐ๊ธ ๋๋ API๋ ์๊ณ ์๊ฐ์ด ์ข ๊ฑธ๋ฆฌ๋ ๊ฒ๋ ์๋ค.
API - ํด๋ผ์ด์ธํธ ๊ฐ๋ฐ์๋ค์ด ์ฌ์ฉํ ์ ์๊ฒ ์ ์ค๋ช ์ด ๋์ ์๋ค. (๋ฐฑ์๋ ๊ฐ๋ฐ์๋ค๋)
API ๋ช ์ธ์๋ฅผ ํตํด์ ์ด๋ป๊ฒ ์ฌ์ฉํด์ผํ๋ ์ง ์ฌ์ฉ ์ค๋ช ์๊ฐ ์๋ค.
- ์งํ์ฒ ์ญ ์ด๋ฆ์ ๊ฒ์ํ๋ฉด, ๊ฐ๋จ์ด๋ผ๋ ์ด๋ฆ์ด ํฌํจ๋ ์งํ์ฒ ์ญ๋ค์ด ์ถ๋ ฅ๋ ์ ์๋๋ก ํ๊ณ ์ ํ๋ค.
(๋ฐ๊ธ๋ฐ์) ์๋น์ค ํค ๋ฃ์ด์ฃผ๊ณ
์ด๋ค ๋ฉ์๋ ํ์ฉํ ์ง ๊ณ ๋ฏผ (์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค๋ฉด get ๋ฉ์ธ์ง ํ์ฉ)
๋ช ์ธ์ ์ ์ดํด๋ณด๋ฉด ๋ฉ์๋ ๋ค ์ ๋์์๋ค.
๊ณต๊ณต๋ฐ์ดํฐ๋๊น ๋๋ถ๋ถ get ์ผ ๊ฒ์ด๋ค.
- ์๋จ: ์์ฒญ ๋ถ๋ถ / ํ๋จ: ์๋ฒ์ ์๋ต ๋ถ๋ถ
- ์๋ฒ๋ก ๋ณด๋ผ ๋, parameter๋ค ํน์ JSON ํํ๋ก ๋ณด๋ด์ผ ํ๋ ๊ฒฝ์ฐ๋ ์๋ค. (body)
[ ์ค์ต ]
์๋ฒ์ ๋ฐํ ๊ฐ(response ์๋ต ๋ฐ๋ ๊ฒ)์ swift๋ก ๋ณํํ๋ ๊ณผ์ = decodable
- ์๋์ผ๋ก ๋ฐ์ดํฐ๋ชจ๋ธ์ ๋ณํํด์ฃผ๋ ํ๋ซํผ์ ๋์์ ๋ฐ์
- ํต ํ์ . io
์๋ฒ์ ์๋ต์ swift๋ก ๋ฐ์ ์ค๋น๋ ๋!
์ด์ ๋จ์ ์ผ: ์ฝ๋ ์ง์ ์๋ฒ์ ์์ฒญ ๋ณด๋ด๊ธฐ
URLSession์ ๋ํ ๊ตฌ์ฒด์ ์ธ ๋ด์ฉ์ ๊ฐ์ธ์ ์ผ๋ก ๊ณต๋ถ
URLSession: ๊ณต์ ๋ฌธ์์ ์๋ฃ๊ฐ ์ ๋ง ๋ง๋ค - ๊ณต๋ถ ์์ฒด๋ ์ด๋ ต์ง ์์ ๊ฒ
์ด๋ฅผ ํตํด์ ์๋ฒ์ ๋ฐ์ดํฐ ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค.
์กฐ๊ธ ๋ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ช ๊ฐ ์๋ค - Alamofire
์ ๋ง ๋์ค์ ์ธ, ๋ง์ด ์ ๋ช ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (์๋ผ๋ชจํ์ด์ด ์ฌ์ฉํด๋ ๋๋ค)
์ฝ์ฝ์ํ์ ํตํด ์ค์นํ๊ณ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ฐ์ธ์ ์ธ ์ ์ฅ
- ๋ญ๊ฐ ๋ ์ฐ๊ธฐ ์ฝ๋ค๋ ์ ๋ชจ๋ฅด๊ฒ ๋ค.
- ๊ฐ๊ฐ์ ์ฅ๋จ์ ์ด ์๋ค.
- URLSession ๊ณต๋ถ๋ฅผ ์ถ์ฒํ๋ค.
- ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ํด
- ๋ฉด์ ์์๋ ๋ฌผ์ด๋ณด๊ธฐ ๋๋ฌธ์, ์ฒ์ ์ ๋ฌธ์๋ผ๋ฉด ์ถ์ฒ
์ง๊ธ์ print๋ง ์ฐ์์ง๋ง, ๊ฐ๊ณตํด์ ์ด๋ค๋ฉด?
์๋ฒ์ ์์ฒญ -> ์๋ฒ์์ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ swift๋ก ๊ฐ๊ณต -> ์ํ๋ ๋ฐฉ์์ผ๋ก ํ์ฉ (ํ ์ด๋ธ ๋ทฐ์ ๋ฃ๋๋ค๊ฑฐ๋ ๋ฑ๋ฑ)
์๋ฒ ํต์ ์ ๊ฐ๋ ๋ถํฐ, iOS ์ฑ๊ฐ๋ฐ์์ ์ค์ง์ ์ผ๋ก ์๋ฒ ํต์ ์ด ์งํ๋๋ ๋ฐฉ์์ ๋ฐฐ์๋ณด์๋ค.
ํต์ ์ ํ์ฉํ์ง ์๋ ์ฑ๋ณด๋ค๋, ์๋ฒ ํต์ ์ด ํ์ํ ์ฑ์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ๊ฐ ํจ์ฌ ๋ ๋ง์ ๊ฒ์ด๋ค.
์ค๋ ๋ฐฐ์ด ๋ด์ฉ๋ค์, ๊ธฐ๋ณธ ๊ฐ๋ ๋ค์ ๊ณต๋ถํ๋ฉด์ ์์งํ๋ฉด ๋ง์ ๋์์ด ๋ ๊ฒ์ด๋ค.
URLSession, Alamofire, Moya ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ
์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ๊น์ง ๋ค๋ค๋ณด์
[์คํ ๋ค๋ ๋ฏธ์ ]
- ๊ณต๊ณต ๋ฐ์ดํฐ ํฌํธ ์ฌ์ดํธ๋ฅผ ํตํด ๋ฌด๋ฃ ์คํ API๋ฅผ ์์ฒญ
- ๊ณต๊ณต API๋ฅผ ํ์ฉํ์ฌ ์๋ฒ ํต์ ์ ํด๋ณด๊ธฐ
- ๊ณต๊ณต ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์ค๋ ์์ ์ ํด๋ณด์
- ์๋ก์ด ํ๋ก์ ํธ ์์ฑํด์ ์ ์ฉํด๋ ๋๋ค. (์ฌ๋ฌ๊ฐ์ง ํ๋ก์ ํธ์์ ํ๊ณ ์ถ์ ์์ ์ ์งํํด๋ณด๋ฉด ๋๋ค)
- ์ค์ํํธ์์ ํ์ฉํ ์ ์๋ ๊ธฐ์ ๋ค์ ์์๋ณด๊ณ ์ ์ฉํด๋ณด์
- ์ฒผ๋ฆฐ์ง ๋ฏธ์ ์ ์๋ค
- ํ๊ฐ์ง ๋ฏธ์ ์ ๋ ์ฃผ์๋ฉด, ์์ ๋ก๊ทธ์ธ์ ๊ตฌํํด๋ณด๋ฉด ์ข๊ฒ ๋ค.
- ์นด์นด์ค or ๊ตฌ๊ธ or ์ ํ ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํด๋ณด๊ธฐ
- ์ธ๋ถ ๊ธฐ๊ด์ ํตํ ๋ก๊ทธ์ธ์ ์์ ๋ก๊ทธ์ธ์ด๋ผ๊ณ ํ๋ค.
- ์ ํ ๋ก๊ทธ์ธ : ๊ฐ๋ฐ์ ๊ณ์ ์ด ํ์ํ๋ค
- ๊ฐ์ธ์ ์ผ๋ก ์นด์นด์ค ๋ก๊ทธ์ธ ๊ตฌํ์ ์ถ์ฒํ๋ค.
- API ๋ช ์ธ์๊ฐ ์ ๋์ด์๋ค.
- ์์ ๋ก๊ทธ์ธ ๊ตฌํ
'UniversityMakeUsChallenge > UMCiOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
UMC iOS 10์ฃผ์ฐจ ์ธ๋ฏธ๋ (0) | 2022.11.28 |
---|---|
UMC iOS ์ธ๋ฏธ๋ 8์ฃผ์ฐจ (0) | 2022.11.14 |
UMC iOS ์ธ๋ฏธ๋ 7์ฃผ์ฐจ : DB (0) | 2022.11.07 |
UMC iOS ์ธ๋ฏธ๋ 6์ฃผ์ฐจ: Thread (0) | 2022.10.31 |
UMC iOS 5์ฃผ์ฐจ ์ธ๋ฏธ๋ (10/17 ์์์ผ) (0) | 2022.10.18 |