iOS 네트워킹에 대한 이해 (1)
HTTP 프로토콜의 특징
- HTTP는 연결 상태를 유지하지 않는 무상태 프로토콜이다. 각 요청은 독립적이며, 이전 요청과의 관련성이 없다.
- 클라이언트는 요청 메시지를 생성하여 서버로 전송하고 서버는 요청을 받아 처리한 후 응답 메시지를 클라이언트로 반환한다.
- 요청은 주로 HTTP 메서드 (GET, POST, PUT, DELETE) 와 헤더 , 바디로 구성되어 있다.
- HTTP 응답에는 상태 코드와 헤더가 포함된다. 상태 코드는 요청의 성공, 실패를 나타내는 코드이며, 헤더는 요청 또는 응답에 대한 메타 데이터를 포함한다.
- 상태코드는 클라이언트에게 요청 결과를 알려주는데 사용되며, 200대 번호는 성공 , 400대 번호는 클라이언트 문제 등 나타내게된다.
HTTP 메서드
- GET: 리소스를 요청하고 읽기 위해 사용된다.
- POST: 서버에 새로운 데이터를 생성하거나 수정하기 위해 사용된다.
- PUT: 서버에 새로운 데이터를 생성하거나 수정하기 위해 사용된다.
- DELETE: 서버의 리소스를 삭제하기 위해 사용된다.
- PATCH: 서버의 리소스를 부분적으로 수정하기 위해 사용된다.
동일한 내용으로 이를 'crud' 라고 한다.
HTTP 요청 메시지 예시
요청 메시지
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 35
{"username": "user123", "password": "pass123"}
응답 메시지
HTTP/1.1 200 OK
Date: Wed, 15 Jun 2022 12:00:00 GMT
Server: Apache/2.4.41 (Unix)
Content-Length: 348
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
API란
응용 프로그램 간에 데이터를 교환하기 위한 규칙 세트, 쉽게 말해 API는 소프트웨어 간에 데이터를 주고받을 수 있는 방법을 정의하는 것을 말한다.
API의 주요 특징
- 표준화된 인터페이스 : API는 요청과 응답을 교환하기 위한 표준화된 방법을 제공한다
- 재사용성 : API를 사용하여 기존의 기능을 활용하고 새로운 솔루션을 빠르게 개발할 수 있다.
- 상호 운용성 : 서로 다른 플랫폼이나 기술 사이에 상호 작용을 할 수 있도록 한다.
- 보안 : API는 인증 및 권한 부여와 같은 보안 기능을 제공하여 데이터의 안전한 전송을 보장한다.
- 문서화 : API는 사용법과 기능을 설명하는 문서를 제공하여 개발자가 쉽게 이해하고 사용할 수 있다.
Facebook, Twitter, Instagram 등의 소셜 미디어 플랫폼은 외부 애플리케이션에서 사용할 수 있도록 API를 제공하거나 Google Maps, Kakao Maps, Naver Maps 등의 지도 서비스는 위치 데이터를 검색하고 표시하기 위한 API를 제공하는 것이 그 특징이다.
간단한 API 사용예시를 한번 보도록 하자
날씨 API 를 사용하여 현재 및 예상 날씨 정보를 얻고 싶다고 가정해 보자 그럼 날씨 API 를 가져와 쉽게 구현할 수 있다.
요청
GET /data/2.5/weather?q=Seoul&appid=내꺼 api key
Host: api.openweathermap.org
저기서 q 매개변수에는 도시 이름이 들어가고 appid 매개변수에는 API 키가 들어가게 된다.
응답
{
"coord": {
"lon": 126.9778,
"lat": 37.5683
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01d"
}
],
"base": "stations",
"main": {
"temp": 289.92,
"feels_like": 288.79,
"temp_min": 288.71,
"temp_max": 290.93,
"pressure": 1009,
"humidity": 57
},
...
}
응답은 JSON 형식으로 이뤄지며, JSON 형식과 자세한 내용은 2탄에서 작성할 예정이다!
예시 정도만 남겨두고 2탄에서 자세한 내용을 더 다루도록 하겠당
iOS 네트워킹 과정 4단계
네트워크 요청 준비
- URL 구조체를 사용하여 요청 URL을 생성하고, URLSession을 생성하여 요청 객체를 만든다
// 0. URL주소 - 문자열로
let movieURL = "<http://kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.json?&key=⭐️본인들각자의키값입력⭐️&targetDt=20210201>"
// 1. URL 구조체 만들기
let url = URL(string: movieURL)!
// 2. URLSession 만들기 (네트워킹을 하는 객체 - 브라우저 같은 역할)
let session = URLSession.shared
요청 보내기
- URLSession의 dataTask 메서드를 사용하여 서버로 요청을 보낸다.
// 3. 세션에 (일시정지 상태로)작업 부여
let task = session.dataTask(with: url) { (data, response, error) in
if error != nil {
print(error!)
return
}
guard let safeData = data else {
return
}
// 데이터를 그냥 한번 출력해보기
//print(String(decoding: safeData, as: UTF8.self))
dump(parseJSON1(safeData)!)
}
응답 처리
- dataTask의 completion handler에서 서버로부터의 응답을 처리하고 이 때, 클로저 파라미터로 받은 data, response, error를 사용한다.
요청 시작
- URLSessionTask의 resume 메서드를 호출하여 요청을 시작한다.
// 4.작업시작
task.resume() // 일시정지된 상태로 작업이 시작하기 때문
URL 구조체를 사용하여 요청 URL을 생성하고, URLSession을 생성하여 요청 객체를 만든 다음, dataTask 메서드를 사용하여 서버로 요청을 보내고 응답을 처리한다.
마지막으로, 요청을 시작하기 위해 URLSessionTask의 resume 메서드를 호출하면 완료!
다음 2편에서는 JSON 문법에 대해 자세하게 알아보고 API를 적용하는 방식과 네트워킹에 대한 내용을 더 자세하게 다루도록 하겠습니다 :)
'◽️ Programming > UIKit' 카테고리의 다른 글
URLSession (0) | 2024.04.09 |
---|---|
CollectionView, Segment Control 개념정리 🧑🏻💻 (0) | 2024.04.02 |
UIKit 에서 UI 구성하는 두가지 방법의 장단점 (스토리보드 , 코드) (0) | 2024.03.28 |
UIViewController 란 무엇일까? (0) | 2024.03.28 |
알럿(Alert) 사용법 , 비밀번호 입력값 숨김표시 on/off (0) | 2024.03.17 |