iOS/개념

서버 연동을 위한 기초 이론

누알라리 2020. 8. 27. 15:27

1. HTTP 메세지

 

1. 정의

웹 브라우저의 주소줄에 도메인 입력 & 특정 링크 클릭 시 원하는 페이지로 이동하는 순간을 생각해 보자.

이 때 우리가 보낸 요청은 "일정한 형식을 갖춘 텍스트 기반 메세지"로 변환되어 웹 서버로 전달되는데, 이 형식을 HTTP 메세지라고 한다.

 

웹 브라우저 <-> 서버로의 모든 요청은 HTTP 메세지 형태로 전송된다.

서버는 메세지를 분석하여 원하는 바를 파악하고, 그에 맞는 처리 후 응답 내용을 HTTP 메세지로 만들어 전송한다.

 

대부분의 웹 서버는 응답용 HTTP 메세지에 HTML, CSS, 자바스크립트 코드 혹은 이미지 등의 구성 요소를 담아 보내며,

이를 받는 브라우저가 데이터를 시각적으로 구조화하면 우리에게 친숙한 홈페이지가 표시된다.

 

실제 웹 브라우저와 서버 사이에 이루어지는 모든 요청과 응답은 HTTP 메세지 형태로 이루어진다.

iOS앱이 서버와 연동하기 위해서는 서버에 요청할 HTTP 메세지를 직접 만들어서 전송해주어야 한다.

 

 

2. HTTP 메시지의 구조

HTTP 메시지는 크게 요청 메세지와 응답 메세지로 나눌 수 있다.

'라인 - 헤더 - 바디' 세 부분으로 구성된다.

 

  • 라인
    • 메세지의 가장 기본적인 내용인 응답/요청 여부
    • 메세지 전송 방식 (GET/POST 등 전송 메서드)
    • 상태 정보 (요청 내용에 대한 경로, 요청 형식에 대한 버전 정보)
  • 헤더
    • 메세지 본문에 대한 메타 정보
    • [키 : 값] 으로 이루어져 있다. (ex. Host: 도메인/포트 번호, ContentType: 메세지 본문이 어떤 형식으로 작성되어 있는지) 
  • 바디
    • 실제로 보내고자 하는 메세지 본문 내용

HTTP 메세지의 형식은 매우 정형화 되어 있다.

라인은 무조건 한 줄로만 작성된다.

그 아래로는 필요한 만큼 여러줄로 작성된 헤더가 들어간다.

헤더와 바디의 길이는 모두 유동적으로, 구분을 위해 한 줄의 공백이 삽입된다.

 

GET 방식에서는 POST 에서 보낸 본문의 내용이 첫 번째 라인의 경로 뒤에 '?' 문자열과 함께 연결된다.

GET 방식에서는 파라미터를 모두 URL 뒤에 연결해서 전달하기 때문이다. 이렇게 연결된 파라미터를 쿼리 스트링(Query String)이라 한다.

 

따라서 데이터를 '전송'하는 경우보다는 필요한 정보를 '요청'할 때 주로 GET 방식이 사용됩니다.

GET 방식은 언제나 서버에서 GET 방식의 요청을 허용해주어야만 제대로 응답받을 수 있다.

 

일반적으로 웹 브라우저에서는 GET과 POST 두 가지 방식만 지원하지만,

RESTful API에서는 다양한 형식의 HTTP 메서드를 사용한다.

 

3. 다양한 HTTP 메서드들
메서드(전송 방식) 목적
GET 특정 리소스의 대표적인 정보를 요청할 때
POST ID 없이 리소스를 생성하거나 수정할 때
PUT ID 기반으로 리소스를 생성하거나 수정할 때
DELETE 리소스를 삭제할 때
HEAD GET 방식의 요청이지만 내용 없이 메타정보만 요청할 때
OPTIONS 특정 URL에 대한 보조 메서드 역할

 

4. HTTPS

HTTP 메세지들은 모두 평문 그대로 전송하기 때문에 누군가 패킷을 훔쳐보는 스니핑 공격에 취약함.

따라서 메세지가 보호될 필요가 있을 때에는 인증서를 통해 패킷을 암호화한 다음에 전송하게 되는데, 이를 HTTPS라고 부른다.

 

HTTP + S(Security) 가 합쳐진 단어로, 여기에 적용되는 보안 인증에는 SSL 인증 또는 TLS 인증 등 다양한 버전이 존재한다.

 

HTTPS 인증 = 공개키 + 개인키 인증서를 이용하여 메세지를 암호화한 후 전달함으로써, 중간에서 데이터를 훔치더라도 열어 볼 수 없도록 보호하는 것에 있다.

인증기관으로부터 신뢰성 있느 인증서를 구매하고, 전송 프로토콜을 HTTPS로 변경해서 보내면 앱 개발자가 할 일은 없다.

 

애플은 2016년부터 앱스토어에 등록되는 모든 앱에서 HTTPS 프로토콜을 통한 네트워크 통신만 허용하고 있다.

 

5. RESTful API

HTTP를 위한 아키텍처의 한 형식

REST란 웹 콘텐츠나 데이터를 HTTP 기반으로 간단히 주고 받기 위해 정의된 간단한 형식의 인터페이스를 말한다.

 

REST 구조를 따라 구현된 시스템을 RESTful 이라고 부른다.

RESTful 시스템은 네트워크 서버를 통해서 뿐만 아니라 일반 웹서버를 통해서도 약간의 설정만으로 쉽고 간단하게 구현할 수 있다는 장점이 있어 널리 확산되고 있다.

최근 대부분의 모바일 통신은 RESTful 기반이다.

 

RESTful 시스템은 데이터를 전송하거나 받기 위해 요청 형식을 명확히 정의해야 한다.

이 때 요청 형식은 표준이 정해져있지 않으며, 서버-클라이언트 간에 어떤 식으로 데이터를 주고 받을 것인지 서로 협의하는 데에 따라 달라진다.

RESTful 기반으로 서버에서 요청과 응답을 주고 받을 수 있도록 정의된 형식을 RESTful API 라고 한다.

 

RESTful API에서 주고받는 내용들은 모두 HTTP 메세지의 본문에 담겨서 전달된다.

특히 RESTful API는 메세지 본문을 JSON 형식으로 구성하여 보내기 때문에, RESTful API 통신을 위해서는 JSON 데이터 형식을 알아야 한다!