우리는 웹 통신을 할때 엄격한 규약(프로토콜)을 준수해야한다.
HTTP(Hyper Text Transfer Protocol)
- HyperText를 전송하기 위한 프로토콜
- Html 문서를 주고받는데 사용하는 통신 프로토콜
- 요청request , 응답response로 이루어져 있음
- 서버는 클라이언트가 요청하는 정보를 전송하고 곧바로 연결을 종료시킴
- 서버에 요청을 보내고 서버로부터 필요한 파일을 받으면 연결이 종료됨
- 계속 연결되지 않는다는게 HTTP의 특징
- HTTP통신은 요청을 보내고 응답을 받을때 패킷에 넣어보냄
- 패킷은 크게 해더와 바디로 나뉘는데 헤더에서는 보내고 받는 사람의 주소, 패킷의 생명시간
- 바디에는 우리가 전하고자하는 실제 내용들이 들어가있음
HTTP 메서드
클라이언트가 서버에 요청을 하려면 URL주소와 HTTP메서드를 정해줘야함
서버에서는 메서드에 따라 어떤 요청인지 파악이 가능함
GET: 클라이언트가 서버에 리소스를 요청할때 사용 (정보를 받아올때 )
POST: 클라이언트가 서버에 리소스를 새로만들때 사용 (로그인, 게시급 업로드등)
PUT: 클라이언트가 서버의 리소스를 전체 수정할때 사용 (회원정보를 전체 수정할때)
PATCH:클라이언트가 서버의 리소스를 일부 수정할때 사용(회원정보를 일부 수정할때)
DELETE:클라이언트가 서버의 리소스를 삭제할때 사용
HEAD: 클라이언트가 서버의 정상 작동 여부를 확인할때 사용
OPTIONS:클라이언트가 서버에서 해당하는 URL이 어떤 메서드를 지원하는지 확인할때 사용
CONNECT:클라이언트가 프록시를 통하여 서버와 SSL통신을 하고자할 때사용
TRACE:클라이언트와 서버간 통신 관리 및 디버깅할때 사용
서버는 클라이언트의 요청에 응답하면서 요청이 성공적으로 완료되었는지를 알려주는 선택 코드를 보냄
100번대
- Informational(요청 정보를 처리중)
- 서버가 요청을 클라이언트에서 성공적으로 수신했으면 서버끝에서 처리중 이라는 정보를 나타냄
200번대
- Success
- 서버요청을 받고 성공적으로 처리되었음을 나타냄
300번대
- 요청을 완료하기 위해 추가 동작이 필요함을 나타냄
- 브라우저 자동으로 Redirection됨
- 브라우저창에서는 표시되지 않지만 이미지 파일처럼 캐싱된 파일을 새로고침 후 확인하면 확인할 수 있음
400번대
- 서버가 해결할 수없는 클라이언트 측에러 Client Error
500번대
- 서버가 클라이언트요청처리 실패함 Server Error
애플에서 HTTP 통신을 하기 위해 URLSession API를 만듦
URL(Uniform Resource Locator)?
- 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약임
- 흔히 우리가 자주 접하는 웹사이트 주소뿐만 아니라 컴퓨터 네트워크 상의 자원을 모두 나타낼 수 있음
Session?
- 사전적인 의미 -> 기간,시간
- 반영구적이고 상호적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나 송수신 연결상태를 의미하는 보안적인 다이얼로그 및 시간대를 말함
URLSession이란?
- 특정한 url을 이용하여 데이터를 다운로드하고 업로드하기 위한 API
- 서버와 통신하기 위해 제공하는 API
- 하나이상의 URLSession 인스턴스를 생성하며 각 인스턴스는 관련 데이터 전송작업 그룹을 조정함
ex) 웹브라우저를 만드는 경우 앱은 탭 또는 창당 하나의 세션을 만들 수 있음
각 세션내에서 앱은 특정 URL에 대한 요청을 나타내는 일련의 작업을 추가함
- URLSession은 기본적으로 request와 response를 기본 구조로 가지고 있음
- request는 서버로 요청을 보낼때 어떤 HTTP메서드를 사용할 것인지 캐싱장치를 어떻게 할 것인지등의 설정을 할 수 있음
- response는 URL요청에 응답을 나타내는 객체
URLSession Life Cycle
1. Session Configuration 을 결정하고 Session을 생성
2. 통신할 URL과 Request 객체를 설정
3. 사용할 Task를 결정하고 그에 맞는 Completion Handler나 Delegate 메소드들을 작성
4. 해당 Task를 실행
5. Task완료 후 Completion Handler 클로저가 호출이 됨
URLSessionConfiguration을 통해 URLSession을 생성할 수 있음
-> 이렇게 생성된 URLSession을 통해 한개 이상의 URLSessionTask를 생성할 수 있으며
-> 이URLSessionTask를 통해 실제 서버와 통신할 수 있음
URLSession은 여러가지 유형의 Session을 제공함
이타입은 URLSession 객체가 소유한 configuration프로퍼티 객체에 의해 결정됨
URLSession의 종류
1. 공유 세션(Shared Session) -URLSession.shared()
- 싱글톤으로 사용할 수 있음, 기본 요청을 하기 위한 session
- 직접 만든 세션만큼 맞춤설정을 할 수는 없지만 쉽게 만들어 사용할 수 있음
2.기본세션(Default Session) - URLSession(configuration:.default)
- 직접원하는 설정을 할 수 있고 캐시와 쿠키 인증등을 디스크에 저장함
- 순차적으로 데이터를 처리하기 위해 Delegate를 지정할 수 있음
3.임시세션(Ephemeral Session) - URLSession(configuration:.ephemeral)
- 캐시 쿠키 사용자 인증 정보를 디스크에 저장하지 않음
- 메모리에 올려서 세션을 연결하고
- 세션만료시 데이터가 사라짐
4. 백그라운드 세션 (Background Session) - URLSession(configuration:.background)
- 앱이 실행되지 않는 동안 백그라운드에서 컨텐츠 업로드 및 다운로드를 수행할 수있음
URLSession구성되었으면 URLSessionTask를 이용해서 각 세션내에 작업을 추가할 수 있음
1.URLSessionDataTask
- 데이터 객체를 사용하여 데이터를 요청하고 응답 받음
- 주로 짧고 빈번하게 요청할때 사용
2. URLSessionUploadTask
- 데이터 객체 또는 파일형태의 데이터를 업로드하는 작업을 수행함
- 앱이 실행되지 않았을때 백그라운드 다운로드를 지원함
3. URLSessionDownloadTask
- 데이터를 다운로드 받아서 파일형태로 저장하는 작업을 수행함
- 앱이 실행중이지 않을때는 백그라운드다운로드를 지원함
4. URLSessionStreamTask
- TCP/IP를 연결을 생성할때 사용되는 TASK
5. URLSessionWebSocketTask
- WebSocket 프로토콜 표준을 통해 통신하는 Task
'iOS랑 친해지기' 카테고리의 다른 글
[iOS] JSON 배열의 인덱스마다 구조가 다른 데이터 파싱 (옵셔널) (0) | 2023.08.02 |
---|---|
[iOS] pod init 실패 (XCode 업데이트하고 Podfile 안깔릴때 응급치료법 Search for existing GitHub issues similar to yours) (0) | 2022.10.27 |
[iOS] 알람어플 만들기 (0) | 2022.10.24 |
[iOS] 일기장 만들기 1/8 (Swift) (0) | 2022.10.19 |
[iOS] UICollectionView 파헤치기 (0) | 2022.10.13 |