URL ๋ถ์
๊ตฌ์กฐ
URL์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
scheme://[userinfo@]host[:port][/path][?query][#fragment]
scheme
ํด๋น ๋ถ๋ถ์๋ ์ฃผ๋ก ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ค. ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ์ ์๋ก ๋ค์ด๋ณด๋ฉด ์ฃผ๋ก http ๋๋ https ํ๋กํ ์ฝ์ด ์์นํ๋ค. ํ๋กํ ์ฝ์ด๋ ์ด๋ค ๋ฐฉ์์ผ๋ก ์์์ ์ ๊ทผํ ๊ฒ์ธ๊ฐ๋ฅผ ์ ํ ์ฝ์ ๋๋ ๊ท์น์ด๋ผ๊ณ ํ ์ ์๋ค. htttps๋ http์ ๊ฐ๋ ฅํ ๋ณด์์ ์ถ๊ฐํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
userinfo
URL์ ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ํฌํจํด์ ์ธ์ฆ์ ํ ์ ์๋๋ฐ, ๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.
host
๋๋ฉ์ธ ์ด๋ฆ ๋๋ IP ์ฃผ์๊ฐ ์์นํ๊ฒ ๋๋ค.
port
http๋ ๊ธฐ๋ณธ์ ์ผ๋ก 80 ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ๊ณ , https๋ 443 ํฌํธ ๋ฒํธ๋ฅผ ์ฌ์ฉํ๋ค. ํฌํธ ๋ฒํธ๋ ์๋ต์ด ๊ฐ๋ฅํ๋ค.
path
๋ฆฌ์์ค ๊ฒฝ๋ก(path), ๊ณ์ธต์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ธ๋ค.
query
- key = value์ ํํ์ด๊ณ , ํํ๋ ?๋ก ์์ํ๊ณ &๋ก query๋ฅผ ์ฌ๋ฌ ๊ฐ ์ถ๊ฐํ ์ ์๋ค.
- ์ฃผ๋ก query parameter, query string์ด๋ผ๋ ๋ช ์นญ์ผ๋ก ๋ถ๋ฅด๊ณ , value ๊ฐ์ string(๋ฌธ์)์ ํํ๋ก ์ธ์๋๋ค.
fragment
์๋ฒ์ ์ง์ ์ ์กํ๋ ์ ๋ณด๋ ์๋๊ณ , html ๋ด๋ถ ๋ถ๋งํฌ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
Swift์ URLComponents
URLSession์ ์ฌ์ฉํ๋ค๋ณด๋ฉด URLComponents๋ฅผ ๋ง๋๊ฒ ๋๋ค. URLComponents๋ Struct ํ์ ์ด๋ฉฐ, ํด๋น ๊ตฌ์กฐ์ฒด๋ฅผ ์ด์ฉํด์ ์ด๋ฆฌ์ ๋ฆฌ ๋ง์ ธ ๋ชจ๋ํ๋ฅผ ํ๊ธฐ๋ ํ๊ณ , Alamofire๋ Moya๋ฅผ ์ฌ์ฉํ ๋ ์ธ๋ถ์ ์ธ ์ปจํธ๋กค๋ ํ๊ฒ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก URLSession์ ์ฌ์ฉํ๋ฉด dataTask์ ์ธ์๋ก URL์ ๋ฐ์์ ์ฌ์ฉํ๊ฒ ๋ ํ ๋ฐ URL ์ฃผ์๋ฅผ ์ง์ ๋ด์์ ์ฌ์ฉํ ์๋ ์๊ฒ ์ง๋ง ๋ถ๋ฆฌํด์๋ ํ์ธํด๋ณผ ์ ์๋ค.
let url = URL(string: "https://api.themoviedb.org/3/search/person?api_key=YOUR_KEY&language=en-US&query=\(query)&page=1&include_adult=false®ion=ko-KR")!
URLSession.shared.dataTask(url)
SubComponent๋ก ๋ถ๋ฆฌํด์ ๋ณด๋ฉด ์์์ ํ์ธํ URL ๊ตฌ์กฐ๋ฅผ ์ดํดํด๋ณผ ์ ์์ ๊ฒ์ด๋ค. ์ฟผ๋ฆฌ ์์ดํ ์ ์ฌ๋ฌ ๊ฐ๊ฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ Array๋ก ๋ฐ์ ์ ์๊ฒ ๋ง๋ค์ด๋์ ๊ฒ ๊ฐ๋ค.
let scheme = "https"
let host = "api.themoviedb.org"
let path = "/3/search/person"
let language = "ko-KR"
let key = ""
let query = query.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)
var component = URLComponents()
component.scheme = scheme
component.host = host
component.path = path
component.queryItems = [
URLQueryItem(name: "api_key", value: key),
URLQueryItem(name: "query", value: query),
URLQueryItem(name: "page", value: "1"),
URLQueryItem(name: "region", value: language),
]
URLSession.shared.dataTask(with: component.url!)
๊ทธ ์ธ์ ๋ ์์ธํ ๋ด์ฉ์ด๋ ๊ตฌ์ฑ์ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ๊ณต์ ๋ฌธ์๋ฅผ ํ์ธํ๋๋ก ํ์~ ์ด๋ ๊ฒ ๊ฐ๋ ๊ณผ ์ฝ๋๊ฐ ๋งค์นญ์ด ๋๋๊น ์ ๊ธฐํ๊ณ ์ฌ๋ฐ๋ ๊ฒ ๊ฐ๋ค! :-)
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] UIToolbar LayoutConstraint Issue (4) | 2022.09.03 |
---|---|
[iOS] URLSession(1) - ๊ธฐ๋ณธ ํ๋ฆ (2) | 2022.08.30 |
[iOS] Realm ์ข ๋ ๋๋ํ๊ฒ ์ฌ์ฉํ๊ธฐ(with Singleton class) (0) | 2022.08.25 |
[iOS] ์ ์ (dash-line) ๊ทธ๋ฆฌ๊ธฐ (3) | 2022.08.24 |
[iOS] ์ฝ๋๋ก UI ๊ตฌ์ฑํ๊ธฐ - Then ๋ผ์ด๋ธ๋ฌ๋ฆฌ do ๋ฉ์๋ ์ด์ฉ (0) | 2022.08.22 |