URLSession
์ ๋ง๋ค์๋ค๋ฉด, ๊ทธ ์์ ๋ค์ด๊ฐ URL๊ณผ Request๋ฅผ ์ ์ํด์ผ ํ๋ค. ์ด๋ฒ์๋ ๋ฌธ์๋ฅผ ๋ณด๋ฉฐ ์์๋ณด์.
URL
์ธ์
์ ๋ง๋ค์๋ค๋ฉด, ์ด์ Resource์ ์์น๋ฅผ ์ ์ด์ค ์ฐจ๋ก๋ค. URL
๋ก ๋ง๋ค ์ ์๋ค. Apple์์ ์ ๊ณตํ๋ URL
์ local file, remote resource ๋ชจ๋์ ์ ๊ทผ๊ฐ๋ฅํ๋ค. local๋ก ์์ฑํ ๊ฒฝ์ฐ๋ค๋ ํ์ผ์ ๋ง์ง๋ง ์์ ๋ ์ง ๋ณ๊ฒฝ๊ณผ ๊ฐ์ด ํ์ผ ์์ฑ์ ์ง์ ์กฐ์ํ ์๋ ์๋ค.
URL
์ local file์ ์ฐธ์กฐํ ๋ ์ ํธ๋๋ ๋ฐฉ๋ฒ์ด๋ค.ํ์ผ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฑฐ๋, ์ฐ๋ ๊ฐ์ฒด์๋ ๊ฒฝ๋ก ์ด๋ฆ ๋์ ๋๋ถ๋ถ URL
์ ๋ฐ๋ method๋ค์ด ์๋ค. ์๋ฅผ ๋ค์ด String.init(contenstOf:encoding:)
, Data.init(contentsOf:options:)
๊ฐ ์๋ค.
URL Component
URL์ ์๊ฐ๋ณด๋ค ๋ณต์กํ๋ค. ์ฝ์ ์๋ ์์ง๋ง ์ฐ์๋ ๋ฌธ์์ ๋์ด๋ก ์ธํด ํํ!ํ๊ณ ๋ญ๊ฐ ๋ญ์ง ํ์ ํ๊ธฐ๋ ์ด๋ ค์ธ ์ ์๋ค. ์ด๋ฌํ ๋ถ๋ถ์ ๋ํด์ ์ฝ๊ฒ ๋ค๋ฃฐ ์ ์๋๋ก URL์ ๊ตฌ๋ฌธ๋ถ์ํ๋ struct๊ฐ ์ด๋ ์์ด๋ค. RFC 3986์ ๋ฐ๋ผ parsing ํ๋ค. ๊ธฐ์กด URL๋ก ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ก๋ถํฐ Component๋ฅผ ์ฝ๊ฒ ์ป์ ์ ์๊ณ , ๊ทธ ๋ฐ๋๋ ๊ฐ๋ฅํ๋ค.
Generating
๊ทธ๋ฅ url ์์ฒด๋ฅผ ์
๋ ฅํด์ ์ฒ๋ฆฌํ ์๋ ์๊ฒ ์ง๋ง, ํน์ ๋ชจ๋ฅผ ์ค์๋ฅผ ๋ฐฉ์งํ๋ ค๋ฉด URLComponent
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
Parsing
url ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก parsing๋ ๊ฐ๋ฅํ๋ฐ, ์์ ๊ฐ์ด ๋ค์ํ ์ ๋ณด๋ฅผ ๋ฐ๋ก๋ฐ๋ก ๊ฐ์ ธ๋ค๊ฐ ์ฌ์ฉํ ์ ์๋ค. parsing ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์ถ๋ค๋ฉด, URLComponents๋ฅผ ์ฐธ๊ณ ํ์.
URLRequest
URL
์ ๋ง๋ค์๋ค๋ฉด ์ด์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Request๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. URLRequest
์์๋ request์ ๋ํ ์ ๋ณด๋ง์ ๊ธฐ์ ํ๋ค. ์ค์ ๋ก ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ฒญ์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด์๋ URLSession
์ ์ฌ์ฉํด์ผ ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์์ฑ์๋ฅผ ๊ฐ์ง๋ค.
์ฌ๊ธฐ์ Cache ์ ์ฑ
์ ์ ํ ์ ์๋๋ฐ, ๊ธฐ๋ณธ ๊ฐ์ NSURLRequest.CachePolicy.useProtocolCachePolicy
์ด๋ค. ๋์์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด NSURLRequest.CachePolicy๋ฅผ ์ฐธ๊ณ ํ์.
์์ ๊ฐ์ด header ์ถ๊ฐ, http body ์ถ๊ฐ์ ๊ฐ์ ๊ฒ๋ค์ ํ ์ ์๋ค. ์ด์ ์ configuration์์ cellular ์ ๊ทผ ๊ถํ๋ฑ์ ์ค์ ํ ์ ์๋ค๊ณ ํ๋๋ฐ, URLRequest
์์๋ ํด๋น Request์ ๋ํด์๋ง ๋ฐ๋ก ์ค์ ํ ์๋ ์๋ค.
๋ง๋ฌด๋ฆฌ
URL๊ณผ Request๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์๋ณด์๋ค. ๊ทธ๋ผ ๋ค์๊ธ์์๋ ์ค์ ๋ก Task๋ก ๋คํธ์ํฌ ํต์ ์ ํด๋ณด์. ๋!