Network
ARC ๋ชฉ์ฐจ
๋คํธ์ํฌ ํต์ ์ ๊ฐ๋จํ ์ดํด
www๋ฅผ ๊ตฌ์ฑํ๋ ๊ธฐ์
HTTP๋ ๋ฌด์์ธ๊ฐ?
HTTP ์์ฒญ ๋ฉ์๋ ์ข ๋ฅ
HTTP ์๋ต ์ํ ์ฝ๋
iOS์์์ ๋ฐ์ดํฐ ์์ฒญ ๋จ๊ณ
URL Session
๋คํธ์ํฌ ํต์ ์ ๊ฐ๋จํ ์ดํด
www (world wide web)์ ๊ตฌ์ฑํ๋ ๊ธฐ์
HTML
HPPT
URL
HTTP (HyperText Transfer Protocol)
ํ์ดํผ ๋ฌธ์๋ฅผ ์ ์กํ๋ ๊ฒ์์ ์์๋์๋ค.
ํ์ฌ๋ ์ด๋ฏธ์ง, ์์, ์์ฑ, json ๋ฑ ๋ชจ๋ ํํ์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ค.
์ธํฐ๋ท์ ๋ชจ๋ ๊ฒ์ HTTP๋ก ๊ตฌ์ฑ ๋ผ ์๋ค.
RFC ๋ฌธ์ : HTTP์ ๊ด๋ จ๋ ๋ด์ฉ์ด ๊ธฐ์ ๋ผ ์๋ค.
HTTP : Request
ํ์์ด ์๋ ํธ์ง์ง
์ฑ๋จ์์ ์ด๋ฃจ์ด์ง๋ค.
๊ฐ ์ดํ์์ HTTP ๋ฃฐ์ ๋ง์ถฐ ํธ์ง ์์ฑ โ ์ฑ์์ ํธ์ง์ง๋ฅผ ๋์ง๊ณ , iOS์ ์ ๋ฌํ๋ค.
iOS๋ ํธ์ง๋ฅผ ๋ฐ์ ๊ฐ๊ฐ ๋ค๋ฅธ Port ๋ฒํธ๋ฅผ ๋ถ์ธ๋ค.
ํธ์ง๋ฅผ ๋ณด๋ผ ๊ณณ์ ์ฃผ์๋ฅผ ๋ถ์ธ๋ค.(IP) โ ์ ๋ฌํ๋ค.
LAN : MAC ์ฃผ์๋ฅผ ์ถ๊ฐํ๋ค โ ์๋ฒ๋ก ์ ๋ฌํ๋ค.
HTTP: ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ์์ง์ ๋ํ ์ฝ์(์์ฒญ: request, ์๋ต: response)
TCP : ์ฃผ๊ณ ๋ฐ์ ๋ ์ํ ํ์ธ ๋ฐ ๊ฒ์ฆ / PORT : ์ด๋ค ์ฑ๊ณผ ํต์ ํ๋์ง
ํด๋ผ์ด์ธํธ๊ฐ Request (์์ฒญ)์ ๋ณด๋ด๋ฉด, ์๋ฒ์์ Response(์๋ต)์ ์ค๋ค.
HTTP ์์ฒญ ๋ฉ์์ง
์์๋ผ์ธ : ๋ฉ์๋, ์์ฒญ ๋์, (๊ฒฝ๋ก) , HTTP ๋ฒ์ header (ํค๋ ํ๋) : ๋ฉํ ๋ฐ์ดํฐ (๋ชจ๋ ๋ถ๊ฐ ์ ๋ณด) ๊ณต๋ฐฑ๋ผ์ธ message body (๋ฉ์ธ์ง ๋ณธ๋ฌธ) : ์ค์ ์ ์กํ ๋ฐ์ดํฐ
HTTP ์๋ต ๋ฉ์ธ์ง : HTTP ๋ฒ์ , ์ํ์ฝ๋, ๋ฌธ๊ตฌ
์์๋ผ์ธ header (ํค๋ ํ๋) ๊ณต๋ฐฑ๋ผ์ธ message body (๋ฉ์ธ์ง ๋ณธ๋ฌธ) : ์ค์ ์ ์กํ ๋ฐ์ดํฐ
HTTP ์์ฒญ ๋ฉ์๋ ์ข
๋ฅ (CRUD)
GET (Read)
์กฐํ (๊ฒ์ํ ๊ธ ์ฝ์ด์ค๊ธฐ)
POST (Create)
๋ฑ๋กํ๊ธฐ (๊ฒ์ํ ๊ธ ์ฐ๊ธฐ, ๋๊ธ ๋ฌ๊ธฐ, ์๋ก์ด ์ฃผ๋ฌธ ์์ฑ)
PUT (Update)
๋ฐ์ดํฐ ๋์ฒด, ์์ผ๋ฉด ์์ฑ (๊ฒ์๊ธ ์์ )
PATCH
PUT์์ ํ์ํ ๋ถ๋ถ ๋ณ๊ฒฝ (์ข์์ ๋๋ฅด๊ธฐ)
DELETE
์ญ์ (๊ฒ์๊ธ ์ญ์ ํ๊ธฐ)
HTTP ์๋ต ์ํ ์ฝ๋
2xx (success)
request ์ ์ ์ฒ๋ฆฌ ์๋ฃ
4xx (Client Error)
client error
์๋ชป๋ ์์ฒญ (์๋ฒ๊ฐ request๋ฅผ ์ดํดํ ์ ์์)
5xx (Server Error)
server error
์๋ฒ ๋ด๋ถ์ ๋ฌธ์ (์๋ฒ ๋ค์ด, ์ผ์์ ์ผ๋ก ์ฌ์ฉ ๋ถ๊ฐ)
iOS์ ๋คํธ์ํน
iOS์์์ ๋ฐ์ดํฐ ์์ฒญ ๋จ๊ณ
์ฃผ์๋ฅผ ์ด์ฉํด์ URL ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
URL Session์ ๋ง๋ ๋ค. (๋คํธ์ํน์ ํ๋ ๊ฐ์ฒด)
์ธ์ ์ ์์ ์ ๋ถ์ฌํ๋ค. (์ผ์์ ์ง ์ํ์ ์์ )
์์ ์ ์์ํ๋ค. (Resume) โ ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ๋ค.
// 1. URL ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
let url = "https://~์ฃผ์"
let structURL = URL(string: url)
// 2. URL Session์ ๋ง๋ ๋ค.
let sesson = URLSession.shared // ์ฑ๊ธํค ๊ฐ์ฒด
// 3. ์ธ์
์ ์์
์ ๊ตฌํํ๋ค.
let task = session.dataTask(with structURL) { data, response, error in
if let error {
print(error)
return
}
if let data {
print(String(decoding: data, as UTF8.self) // JSON
}
}
// 4. ์์
์ ์์ํ๋ค.
task.resume()
์ดํ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉ ํ class๋ struct๋ก ๋ฐ๊ฟ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
URL Session
URL ๊ตฌ์กฐ์ฒด
URL Session
dataTask
์์ (resume)
โ ๊ฒฐ๊ณผ๋ฅผ ์ป์
โ JSON/DATA ํ์ผ์ ์ฐ๋ฆฌ๊ฐ ์ฐ๋ ค๋ Class, Struct๋ก ๋ณํ์์ผ์ผํ๋ค.
Last updated