21일차 수업을 듣고 새로 배운 내용을 정리한 글입니다.
Learned
HTTP (Hyper Text Transfer Protocol)
- 네트워크(인터넷)를 통해 클라이언트와 서버가 데이터를 주고받을 수 있는 통신 규약
- 메시지가 문자(Text)로 구성되기 때문에 의도치않은 누군가가 메세지를 읽을 수도 있다.
- 클라이언트와 서버가 데이터 전송 시 서로간의 약속(통신 규약)을 지키기 때문에 통신 가능
- 네트워크 통신에 필요한 것 3가지 : 요청과 응답(HTTP 메시지), HTTP 메서드, 인증 키
1) HTTP 통신의 특징
- 단방향 통신 : 클라이언트가 요청하고 서버가 응답하는 방식
데이터를 주고 받기 위해서 반드시 클라이언트가 요청을 해야함. - 비연결성 : 클라이언트가 요청할때마다 매번 새로운 연결을 생성함.
계속 연결을 유지하지 않고 데이터 전송 등 필요할 때만 연결됨. - 무상태 : 서버가 클라이언트의 상태(정보)를 저장하지 않아서 클라이언트를 식별하지 못함.
어떤 클라이언트인지 관계없이 서버는 단지 클라이언트의 요청에 응답만 함.
2) HTTP 메서드
- 클라이언트가 보내는 요청의 목적
- GET, POST, PUT, DELETE, PATCH 등이 있음.
- GET
- 서버에 데이터를 요청할 때 사용
- 쿼리 스트링과 헤더에 요청할 데이터를 포함해서 전달(바디가 없음)
- 요청 URL에 데이터가 포함되기 때문에 보안에 취약함.
쿼리 스트링(Query String)
URL의 일부로, 클라이언트가 요청하는 데이터(쿼리)를 전달하는 방법이다.
URL에서 ? 뒤에 따라오는 문자열이며 key=value 형식의 파라미터가 &로 이어진 구조
통신 규약 상 URL 길이 제한은 없지만 일반적으로 웹 브라우저에서 제한을 두고 있음.
- POST
- 서버에 새로운 데이터 생성을 요청할 때 사용
- 요청할(생성) 데이터를 바디에 포함해서 전달
- 전달하는 데이터에 길이 제한이 없음.
3) 상태 코드 (Status Code)
- 클라이언트와 서버의 요청 및 응답 상태를 숫자 코드로 나타낸 것.
- 요청 및 응답의 성공과 실패 여부같은 다양한 상태를 표현하는데 사용함.
- 통상적으로 사용되는 코드들이 있지만 절대적인 것은 아니다.
4) HTTP 메시지
- 요청 메시지와 응답 메시지가 있으며 라인 - 헤더 - 바디로 구성돼있다.
- 라인 : HTTP 메서드, 상태 코드, 프로토콜 버전 등이 포함됨.
- 헤더 : 메시지 본문(바디)에 대한 메타 데이터가 key-value 형태로 포함됨.
날짜, 바디의 타입, 길이 등 - 바디 : 메시지를 통해 전달할 내용(Content)가 포함됨.
XML과 JSON
1) XML(eXtensible Markup Language)
- <>로 이뤄진 Tag를 사용해서 문서의 구조를 표현하는 마크업 언어
- 인터넷을 통해 다른 시스템과 데이터를 주고 받을 목적으로 만들어짐.
- iOS에는 Foundation 프레임워크에 XML 데이터를 다룰 수 있는 XMLPaser 모듈이 존재함.
- 태그를 사용하기 때문에 전달하는 데이터 용량이 커질 수 있음.
2) JSON(JavaScript Object Notation)
- 자바 스크립트에서 배열 또는 key-value로 이뤄진 데이터 객체를
사람이 읽을 수 있는 텍스트 형태로 주고 받기 위한 경량의 데이터 전달 방식 - 전송하는 데이터는 배열이나 사전 자료형으로 이뤄짐.
- 데이터를 계층적으로 표현해서 구조화하기 좋다.
- iOS에서 JSON을 다루는 방식
- Swift 4 이전 : JSONSerialization
JSONSerialization을 사용하는 라이브러리가 SwiftyJson - Swift 4 이후 : Codable
- Swift 4 이전 : JSONSerialization
URL(Uniform Resource Locator)의 구조
1) Protocol (Scheme)
- 네트워크 통신 시 사용할 프로토콜이 들어가는 영역
- http, https, ftp 등
2) Host
- 도메인 이름 또는 IP 주소가 들어가는 영역으로 서버 컴퓨터의 주소를 나타냄.
- 도메인
- IP주소를 쉽게 사용하기 위해서 IP를 영문자로 표기한 이름
- www, .com, naver 등이 도메인 이름에 해당한다.
- DNS(Domain Name Server)에 등록된 이름만 사용 가능
3) Port
- 호스트(서버 컴퓨터)에서 실행중인 프로세스의 주소를 의미함.
- 서버 프로그램의 포트 번호가 들어가는 영역
- 명시하지 않으면 프로토콜의 기본 포트번호가 적용됨.
ex) http: 80, https: 443
4) Path
- 서버 프로그램 내부 로직에 저장된 폴더 또는 파일 경로가 들어가는 영역
- '/'로 구분된 문자열로 이뤄짐.
- https://comic.naver.com/webtoon/weekday
5) Query String (Parameter)
- 요청할 데이터를 전달하는 방식으로 ? 뒤에 따라오는 문자열
- key=value가 &로 이어진 형태
- URL에서는 ASCII 코드만 사용 가능하므로 ASCII에 해당되지 않는
한글과 일부 특수 문자는 인코딩이 필요함. - URL에 사용할 수 있게 문자를 16진수로 변환하는 방법 : URLEncoding
print("안녕하세요".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed))
// Optional("%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94")
API (Application Programming Interface)
- UI가 사용자와 프로그램 사이의 상호작용을 담당한다면
API는 프로그램과 프로그램 사이의 상호작용을 담당함. - 프로그램 간 통신을 위해 규칙을 정해놓은 것
- 프로그램과 프로그램 사이의 중개자 역할
- 제한적으로 프로그램의 기능을 외부에 간접적으로 제공하고 싶을 때 사용함.
ex) 카카오와 구글의 로그인 API, 날씨 API 등
이상입니다.
'TIL' 카테고리의 다른 글
[Sesac IOS] 23일차 TIL (0) | 2022.08.04 |
---|---|
[Sesac IOS] 22일차 TIL (0) | 2022.08.03 |
[Sesac IOS] 20일차 TIL (0) | 2022.07.29 |
[Sesac IOS] 19일차 TIL (0) | 2022.07.28 |
[Sesac IOS] 18일차 TIL (0) | 2022.07.27 |