[Sesac IOS] 21일차 TIL
TIL

[Sesac IOS] 21일차 TIL

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)가 포함됨.

HTTP 요청 메시지와 응답 메시지
HTTP 요청 메시지의 구조

 

 

XML과 JSON

1) XML(eXtensible Markup Language)

  • <>로 이뤄진 Tag를 사용해서 문서의 구조를 표현하는 마크업 언어
  • 인터넷을 통해 다른 시스템과 데이터를 주고 받을 목적으로 만들어짐.
  • iOS에는 Foundation 프레임워크에 XML 데이터를 다룰 수 있는 XMLPaser 모듈이 존재함.
  • 태그를 사용하기 때문에 전달하는 데이터 용량이 커질 수 있음.

XML 예시

 

2) JSON(JavaScript Object Notation)

  • 자바 스크립트에서 배열 또는 key-value로 이뤄진 데이터 객체를
    사람이 읽을 수 있는 텍스트 형태로 주고 받기 위한 경량의 데이터 전달 방식
  • 전송하는 데이터는 배열이나 사전 자료형으로 이뤄짐.
  • 데이터를 계층적으로 표현해서 구조화하기 좋다.
  • iOS에서 JSON을 다루는 방식
    • Swift 4 이전 : JSONSerialization
      JSONSerialization을 사용하는 라이브러리가 SwiftyJson
    • Swift 4 이후 : Codable

JSON과 XML의 데이터 표현

 

URL(Uniform Resource Locator)의 구조

URL의 구조

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