์๋ฒ ํต์ ์ด๋?
๐ก ํด๋ผ์ด์ธํธ(ํ๋ก ํธ์๋)์ ์๋ฒ(๋ฐฑ์๋)๊ฐ ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ
๊ฐ์ธ ํ๋ก์ ํธ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ง์๋ดค์ 10๊ฐ ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์ Dummy๋ฅผ ํ์ฉํด์ ๋ฃ์ ์ ์์ง๋ง, ๋ ์จ ์ฑ์ ์์๋ก ๋ค๋ฉด ์ ๊ตญ์ ์ง์ญ๋ณ ๋ ์จ, ์๊ฐ๋๋ณ, ๊ฐ์ํ๋ฅ , ์ต๊ณ ์จ๋, ์ต์ ์จ๋ ๋ฑ๋ฑ…. ๋๋ฌด ๋ง์ ๋ฐ์ดํฐ๋ค์ dummy๋ก ๋ค๋ฃจ๋ ๊ฑด ๋ถ๊ฐ๋ฅํ ์ผ์ด๋ค.
๋๋ฌธ์, ํด๋ผ๋ฆฌ์ธํธ์์ ํ์ํ ์ ๋ณด๊ฐ ์์ ๋๋ง๋ค ์๋ฒ์๊ฒ ์์ฒญ์ ํ๊ณ , ์๋ฒ๋ ๊ทธ ์์ฒญ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค. ์ด๋ฅผ ์๋ฒ ํต์ ์ด๋ผ๊ณ ํ๋ค.
iOS์์๋ ๋ํ์ ์ผ๋ก URLSession, Alamofire, Moya๋ก ์๋ฒ ํต์ ์ ํ ์ ์๋ค.
URL Session
๐ก - Swift์์๋ URLSession์ ์ด์ฉํ์ฌ API๋ฅผ ํธ์ถํ ์ ์๋ค.
- URLSession์ ์น ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์์ ์ ์ํํ๋ ๊ฐ์ฒด๋ค.
- URLSession์ Apple์ด ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๋คํธ์ํฌ API๋ก, iOS, macOS, tvOS, watchOS ๋ฑ ๋ค์ํ ํ๋ซํผ์์ ์ฌ์ฉํ ์ ์๋ค.
URL ๊ฐ์ฒด ์์ฑ
let session = URLSession.shared
let url = URL(string: "<https://api.example.com/data>")
URLRequest ๊ฐ์ฒด ์์ฑ
let request = URLRequest(url: url!)
URLSessionDataTask ๊ฐ์ฒด ์์ฑ ๋ฐ ์คํ
let task = session.dataTask(with: request) { (data, response, error) in
if let error = error {
print("Error: \\\\(error.localizedDescription)")
return
}
guard let data = data else {
print("No data received")
return
}
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
print(json)
} catch let error {
print("Error: \\\\(error.localizedDescription)")
}
}
task.resume()
Alamofire
๐ก Alamofire ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ API๋ฅผ ํธ์ถํ ์๋ ์๋ค.
- Alamofire๋ Swift์์ HTTP ๋คํธ์ํน์ ์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- Alamofire๋ Swift ๊ธฐ๋ฐ์ HTTP ๋คํธ์ํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, URLSession์ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ถ์ํํ ๊ฒ์ด๋ค.
Alamofire ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น
pod 'Alamofire'
Alamofire์ ์ด์ฉํ API ํธ์ถ
import Alamofire
let url = "<https://api.example.com/data>"
AF.request(url, method: .get).responseJSON { response in
switch response.result {
case .success(let value):
print(value)
case .failure(let error):
print(error.localizedDescription)
}
}
Moya
๐ก Moya๋ Alamofire๋ฅผ ๋ ์ถ์ํํ ๋คํธ์ํฌ ์ถ์ํ ๊ณ์ธต์ด๋ค.
- Moya๋ ๋คํธ์ํฌ ๊ณ์ธต์ ํ ํ๋ฆฟํํ์ฌ ์ฌ์ฌ์ฉ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ๋์ธ๋ค.
๊ทธ๋์ 3์ค์์ฝ ๋ญ๋ฐ์?
URLSession์
๐๐ป๋ก์ฐ๋ ๋ฒจ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ณ , ๋ค๋ฅธ ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง,
๐๐ป์ฌ์ฉ์ด ๋ณต์กํ๊ณ ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ์ข์ง ์๋ค.
Alamofire๋
๐๐ปFoundation Networking์ ๊ธฐ๋ฐ์ผ๋กํ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด ๋คํธ์ํน ์์ ์ ๋จ์ํ ํด์ฃผ์ง๋ง
๐๐ปiOS ์ฑ์ ๊ฐ๋ฐํ ๋ ๊ฐ์ฅ ๋ณดํธ์ ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ ๋ฐฉ๋ฒ์ด์ง๋ง, ์ ์ง๋ณด์์ ์ ๋ ํ ์คํธ๊ฐ ํ๋ค๋ค๋ ๋จ์ ์ด ์๋ค.
Moya๋
URLSession์ ์ถ์ํํ Alamofire๋ฅผ ๋ค์ ์ถ์ํํ ํ๋ ์์ํฌ๋ก
๐๐ปNetwork Layer๋ฅผ ํ ํ๋ฆฟํ ํด์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ์ฃผ๋ฉด์ ๊ฐ๋ฐ์๊ฐ request, response์๋ง ์ ๊ฒฝ์ ์ฐ๋๋ก ํด์ค๋ค.