TeamCoook / iOSInterviewQuestions

✅ iOS 개발자 기술 면접 대비
18 stars 0 forks source link

[레벨 0] `2주차` 4. 네트워크 프로토콜 스택과 iOS에서의 네트워크 통신 방식에 대해 설명해주세요. #4

Open longlivedrgn opened 5 months ago

longlivedrgn commented 5 months ago
llimental commented 5 months ago
1. 네트워크 프로토콜 스택 ### 1-1) 네트워크 프로토콜 스택 - 네트워크 프로토콜이란 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고받는 양식과 규칙의 체계입니다. 통신 규약 또는 규칙에는 전달 방식, 통신 방식, 자료의 형식, 오류 검증 방식, 코드 변환 규칙, 전송 속도 등을 정하게 됩니다. 다른 기종의 장비는 각기 다른 통신 규약을 사용하지만 프로토콜을 사용하면 다른 기기 간 정보의 전달을 표준화할 수 있습니다. - OSI 7 Layer로 알려진 계층별로 프로토콜이 나뉘어져 있는데, 응용 계층에서는 HTTP와 FTP, 표현 계층에서는 JPEG와 MPEG, 세션 계층에서는 RPC와 NetBIOS, 전송 계층에서는 TCP와 UDP, 네트워크 계층에서는 IP와 ICMP, 데이터링크 계층에서는 HDLC와 PPP, 물리 계층에서는 RS-232C 프로토콜을 사용합니다.
2. HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요. ### 2-1) HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요. - 가장 큰 차이점은 암호화, 인증 및 인가, 포트 사용, 무결성이 있습니다. 암호화를 하지 않아 데이터가 취약한 HTTP와 다르게 HTTPS는 암호화를 수행하고, SSL/TLS 증명을 통해 인증을 하며, 표준 포트로 통신하는 대신 보안 포트를 사용하고, 데이터의 무결성을 보증합니다. - [Preventing Insecure Network Connections](https://developer.apple.com/documentation/security/preventing_insecure_network_connections) - 애플에서는 앱 전송 보안(ATS)이라는 보안 기능을 사용하여 모든 앱의 개인 정보 보호 및 데이터 무결성을 향상시킵니다. 앱에서 만든 네트워크 연결이 신뢰할 수 있는 인증서와 암호를 사용하여 전송 계층 보안(TLS) 프로토콜에 의해 보호되도록 요구함으로써 이를 수행합니다. 때문에 ATS는 최소 보안 요구 사항을 충족하지 않는 연결을 차단합니다. - 그러나 개발자로서는 종종 HTTPS를 지원하지 않는 서버와의 통신을 해야 하는 경우가 있는데, 이 경우에는 해당 특정 도메인만 예외처리를 할 수 있습니다. 다만 예외로 설정한 이유를 충분히 제공해야만 심사를 통과할 수 있습니다.
3. 소켓 통신에 대해 설명해주세요. ### 3-1) 소켓 통신에 대해 설명해주세요. - 소켓은 일반적으로 클라이언트 및 서버 상호작용에 사용됩니다. 클라이언트는 서버에 연결하여 정보를 교환한 후 연결을 끊습니다. - 연결 지향성 클라이언트 대 서버 모델에서는 서버 프로세스의 소켓이 클라이언트의 요청을 기다립니다. 이를 수행하기 위해 서버는 먼저 클라이언트가 서버를 찾는 데 사용할 수 있는 주소를 설정하고, 주소가 설정되면 서버는 클라이언트가 서비스를 요청하길 기다립니다. - 클라이언트 대 서버 데이터 교환은 클라이언트가 소켓을 통해 서버에 연결하면 이뤄집니다. 서버는 클라이언트의 요청을 수행한 후 클라이언트에 응답을 송신하는 방식입니다. - 소켓이 통신을 위한 종료점을 만들고 그것을 나타내는 소켓 설명자를 반환하면, 애플리케이션은 그 설명자를 획득하여 고유 이름을 지정할 수 있습니다. 이후 listen 상태에서 connect API를 사용하여 서버에 대한 연결을 설정하고, 서버가 accept API를 사용하여 연결 요청을 승인합니다. 이렇게 클라이언트와 서버 간에 연결이 설정되면 데이터 송수신을 할 수 있고 모든 과정이 끝나면 close API를 실행하여 소켓의 시스템 자원을 해제하는 과정으로 마무리됩니다. - 소켓 API는 응용 계층과 전송 계층 사이의 통신 모델에 위치하나 통신 모델 층이 아니며 애플리케이션이 일반 통신 모델의 전송층 또는 네트워킹층과 상호작용할 수 있도록 해주는 역할을 합니다.
4. REST API ### 4-1) REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요 - API란 애플리케이션이나 디바이스가 서로 간에 연결하여 통신할 수 있는 방법을 정의하는 규칙이고, REST API는 REST 아키텍처 스타일의 디자인 원칙을 준수하는 API입니다. 그렇기 때문에 REST API를 RESTful API라고도 합니다. - REST 아키텍처 디자인은 거의 모든 프로그래밍 언어를 사용하여 개발이 가능하며, 다양한 데이터 포맷을 지원합니다. 요구사항으로는 6가지 원칙이 있는데 첫째는 동일한 리소스에 대한 모든 API 요청은 동일하게 보여야 한다는 '균일한 인터페이스 원칙', 둘째는 클라이언트와 서버 애플리케이션은 서로간에 완전히 독립적이어야 한다는 '클라이언트-서버 디커플링', 셋째는 각 요청에서 처리에 필요한 모든 정보를 포함해야 함을 의미하는 'Stateless', 넷째는 가능하면 리소스를 클라이언트 또는 서버측에서 캐싱할 수 있어야 한다는 '캐싱 가능성', 다섯번째는 엔드 애플리케이션 또는 중개자와 통신하는지 여부를 클라이언트나 서버가 알 수 없도록 설계되어야 한다는 '계층 구조 아키텍처', 마지막으로 일반적으로 정적 리소스를 전송하지만, 특정 경우에는 응답에 실행 코드를 포함할 수도 있는 '코드 온디맨드' 입니다. ### 4-2) REST API에서 Method들의 차이점을 설명해주세요. - 작동 방식으로는 HTTP 요청을 통해 통신함으로써 리소스 내에서 레코드의 작성, 읽기, 업데이트, 삭제의 CRUD 기능을 수행합니다. 가령 GET 요청으로 레코드를 검색하고, POST 요청으로 레코드를 작성하며, PUT 요청으로 레코드를 업데이트하고, DELETE 요청으로 레코드를 삭제합니다.
5. HTTP 상태 코드에 대해서 설명해주세요. ### 5-1) HTTP 상태 코드에 대해서 설명해주세요. - 정보 응답을 나타내는 100번대 코드, 성공 응답을 나타내는 200번대 코드, 리다이렉션 메시지를 나타내는 300번대 코드, 클라이언트 에러 응답을 나타내는 400번대 코드, 서버 에러 응답을 나타내는 500번대 코드로 구성되어 있습니다. - 요청이 성공적으로 이뤄진 200번, 잘못된 문법으로 생기는 에러인 400번, 인증이 필요한 에러인 401, 권한 문제인 403, 리소스를 찾을 수 없는 문제인 404, 서버가 요청을 처리하는 과정에서 잘못된 응답을 수신한 문제인 502번을 주로 볼 수 있었습니다.
longlivedrgn commented 5 months ago

OSI 7계층

Internet 프로토콜 스택

기본적으로 iOS는 URLSession을 통해서 네트워크 통신을 한다.


HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요.

HTTP

iOS는 보안 통신을 위하여 ATS라는 기능을 활용한다.

ATS(App Transport Security)

TCP와 UDP의 차이점에 대해서 설명해 주세요.

TCP

UDP

소켓 통신에 대해 설명해주세요.

socket

REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요.

Rest란?

  1. HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시하고,
  2. HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
  3. 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것을 의미합니다.

특징

  1. Server-Client(서버-클라이언트 구조)
  2. Stateless(무상태)
  3. Cacheable(캐시 처리 가능)
  4. Layered System(계층화)
  5. Uniform Interface(인터페이스 일관성)
  6. HTTP 프로토콜의 인프라를 그대로 사용

Rest API는 Rest 원리를 따르는 API를 말한다.

기본적으로 iOS는 Rest API를 통해서 통신을 한다.

REST API에서 Method들의 차이점을 설명해주세요.

(with GPT)

  1. GET: 리소스를 요청하고 가져올 때 사용됩니다. 이 메서드는 서버에서 데이터를 읽고, 클라이언트에게 반환합니다. GET 요청은 보통 데이터를 변경하지 않고 읽기만 하는 데 사용됩니다.
  2. POST: 새로운 데이터를 생성하거나 리소스를 업데이트할 때 사용됩니다. 이 메서드는 서버에 데이터를 보내고, 그에 대한 응답으로 새로운 리소스를 생성합니다. 주로 HTML 폼을 통해 데이터를 제출하는데 사용됩니다.
  3. PUT: 리소스를 생성하거나 업데이트할 때 사용됩니다.(리소스 전체 내용은 업데이트한다) 이 메서드는 클라이언트가 지정한 위치에 리소스를 생성하거나 업데이트합니다. 보통 리소스의 전체 내용을 업데이트할 때 사용됩니다. 동일한 요청을 여러 번 보내더라도 리소스의 상태가 동일하게 유지됩니다. PUT 요청은 동일한 요청을 여러 번 보내더라도 리소스가 변경되지 않습니다.(멱등하다)
  4. DELETE: 리소스를 삭제할 때 사용됩니다. 이 메서드는 서버에서 지정된 리소스를 삭제합니다.
  5. PATCH: 리소스의 일부를 수정할 때 사용됩니다. PUT과 유사하지만, 리소스의 전체 내용을 보내는 대신 일부를 변경할 때 사용됩니다. PATCH는 리소스의 부분적인 수정에 사용됩니다.
  6. HEAD: GET과 유사하지만, 실제 데이터를 요청하는 대신 헤더 정보만을 요청합니다. 이 메서드는 리소스의 메타데이터를 가져올 때 사용됩니다.
  7. OPTIONS: 서버에서 지원되는 메서드들을 확인할 때 사용됩니다. 클라이언트는 서버에게 요청하여 해당 엔드포인트에서 어떤 작업들을 수행할 수 있는지 확인할 수 있습니다.

HTTP 상태 코드에 대해서 설명해주세요.

HTTP 상태 코드

SunnnySong commented 5 months ago

1️⃣ HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요.

HTTP

HTTPS

2️⃣ TCP와 UDP의 차이점에 대해서 설명해 주세요.

TCP**(Transmission Control Protocol)**

UDP**(User Datagram Protocol)**

3️⃣ 소켓 통신에 대해 설명해주세요.

소켓, Socket

: 네트워크 상 데이터를 내보내거나, 데이터를 받기 위한 실질적인 통로, 인터페이스 역할을 한다.

소켓의 구성

소켓 통신의 구성

소켓 종류

HTTP와 소켓 통신의 차이점

4️⃣ REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요.

  1. URLSession을 사용해 요청을 생성한다.
  2. URLSession의 dataTask를 사용해 요청을 전송하고 응답을 받는다.
  3. 응답의 http 상태 코드와 데이터를 확인한다.
    1. 응답의 상태 코드가 200번대로 성공적이라면, 응답 데이터를 특정 형식으로 파싱한다.
    2. 응답의 상태코드가 400~500번대로 실패했다면, 오류 처리를 한다.

5️⃣ REST API에서 Method들의 차이점을 설명해주세요.

REST API Method

: 서버가 리소스(resource)를 이용해 무엇을 해야하는지 말해주는 명령어

종류

6️⃣ HTTP 상태 코드에 대해서 설명해주세요.

HTTP 상태 코드

: 특정 http 요청이 성공적으로 완료되었는지 알려주는 코드

종류

soo941226 commented 5 months ago

HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요.

HTTP와 HTTPS의 차이점은 Secure의 유무로 보통 TLS를 의미합니다. Secure의 유무가 있다는 것은, 자연스럽게 HTTP는 안전하지 않다는 것을 연상할 수 있는데요. 실제로 HTTP는 암호화를 하지 않은 메시지를 주고 받기 때문에 나쁜 의도를 가진 사람이 이를 들춰보고 악용할 수도 있습니다. 이를 방지하기 위해 도입된 계층이 구 SSL, 현 TLS이며 인증기관을 통해 서버와 연결되는 과정을 거칩니다.

iOS를 포함한 애플 플랫폼에서 일반적인 통신은 Foundation의 URLSession 타입을 통해 이루어지는데요. 정확한 상하관계는 기억이 나지 않지만, ATS라고 하는 기능이 이 URLSession의 통신에 통제권을 가지고 안전하지 않은 통신들은 차단하게 됩니다. 결과적으로 보통 HTTPS만을 사용하고 특수한 경우 WSS도 사용을 하게 되는데요. HTTP를 포함한 그 외의 프로토콜로 통신을 하기 위해서는 ATS에게 이 프로토콜을 통해서 통신을 할 것이라고 명시를 해주어야합니다.

TCP와 UDP의 차이점에 대해서 설명해 주세요.

잘 기억이 나지 않는데... TCP가 Transmission control protocol, UDP가 User datagram protocol인 것으로 기억하는데요. 둘다 통신규약인데 TCP가 순서를 보장하고 UDP가 보장이 되지 않는 것으로 알고 있습니다. 실제로 주고 받게 되는 데이터의 성격에 따라 달리 사용할 수 있을 것 같은데, 순서가 보장되지 않아도 되는 데이터가 무엇이 있을지 제가 고민하거나 경험해본 적이 없어서 잘 모르겠네요. 당장 생각나는 건 스팸메일...? 일반적으로 통신을 할 때 HTTPS를 사용하는데 얘가 HTTP가 밑에 깔려있고, HTTP가 TCP/IP의 확장인 것으로 알고 있어서 UDP보다는 TCP가 대중적인 게 아닌가 싶습니다.

소켓 통신에 대해 설명해주세요.

저희가 흔히 사용하는 게 HTTP 프로토콜이기 때문에 HTTP와 비교를 해보면, HTTP는 클라이언트의 일방적인 요청과 서버의 응답으로 통신이 구성됩니다. 나아가 HTTP로 통신하는 경우 서로 다른 컴퓨터 간의 연결을 지속시키기 위해 세션이라는 기술을 이용하게 되는데요. 실제로 연결이 된 건 아니지만, 마치 연결이 된 것처럼 통신을 기록하게 됩니다. 이 과정에서 또 많은 비용이 발생하게 됩니다. 소켓 통신은 여기서 클라이언트의 일방적인 요청연결을 지속시키기 위한 비용이라는 문제를 해결하는 프로토콜로 양방향 통신이 가능한 프로토콜입니다.

REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요.

REST API의 REST는 Representational state.... 뭐시기... 인데요... transfer? transmission? 정확히 기억이 안나네요. 어쨌거나 서버 아키텍처의 한 종류로, 자원을 명시적으로 쉽게 구분하고 주고 받기 위한 약속입니다. 특히 HTTP 통신에서 URI와 HTTP Method를 잘 사용하여 서로 오해가 발생하지 않도록 하는데에 목적이 있습니다. 예를 들면 myhompage.com/myId/name에 GET으로 접근하면 해당 아이디의 사용자명을 myhomepage를 운영하는 서버가 건네주고, 또 같은 URI에 PUT method로 페이로드를 작성하면, 해당 페이로드로 사용자명이 갱신되는 맥락입니다. 앞서 말씀드렸듯이 iOS도 URLSession을 사용하고, HTTPS를 기본적으로 사용합니다. 즉 HTTP Method를 그대로 사용하게 되는데요. 필요한 URLRequest를 만들어서 어떤 자원에 대해 무엇을 요구하는지를 명시해서 서버에 전달하면, 해당 결과값과 함께 응답상태, 에러 등을 전달받고 이를 핸들링하게 됩니다.

REST API에서 Method들의 차이점을 설명해주세요.

메소드가 많아서 모두 기억하지는 못하기 떄문에, 모든 차이점을 나열하기는 어려울 것 같은데요. 일반적으로 사용하는 GET, POST, PUT, DELETE 정도만 이야기를 해보겠습니다. GET과 DELETE는 이름 그대로 자원을 얻거나, 삭제하는데 사용하는 메소드입니다. POST는 영화 포스터를 벽에 붙이거나, 블로그 포스트를 인터넷에 올리거나 하는 이미지를 연상하시면 좋은데요. 새로운 자원을 등록하는 메소드입니다. PUT은 이미 존재하는 자원을 갱신하는 메소드입니다. 이 맥락에서 POST과 PUT이 분명히 비교가 되지만, 특히 이 둘을 구분하는데에 자주 사용되는 말이 멱등성인데요. POST는 새로운 자원을 등록하는 것이기 때문에 완전히 똑같은 요청이 여러번 발생하면 그만큼 똑같은 자원이 많이 생성되지만, PUT은 이미 있는 자원을 갱신하는 것이기 때문에 아무리 많이 요청을 하더라도 모든 결과가 같습니다.

HTTP 상태 코드에 대해서 설명해주세요.

HTTP 통신이 이루어진 뒤, 해당 통신의 결과에 대해서 맥락을 구분할 수 있도록 미리 약속한 범주입니다. 신호등이 빨강색이면 건너면 안된다는 것처럼요. 크게 분류하면 200번대가 성공, 300번대가 리다이렉트, 400번대가 클라이언트 에러, 500번대가 서버 에러인데요. 이러한 코드를 내려주는 것도 사람이 개발을 해야하기 때문에 맹신할 수는 없고, 상태코드와 함께 내려주는 결과값들을 분석하고 납득이 되지 않는다면 서버 개발자와 이야기할 필요가 있습니다.

ueunli commented 5 months ago

HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요. HTTP 상태 코드에 대해서 설명해주세요.

HTTP는 Hypertext Transfer Protocol의, HTTPS는 Hypertext Transfer Protocol Secure의 줄임말이다. 즉 'secure'가 둘의 핵심적인 차이점이다. HTTPS는 SSL(Secure Sockets Layer)나 TLS(Transport Layer Security)를 사용하여 데이터를 암호화하기 때문에 보안 측면에서 HTTP보다 월등히 낫다. iOS는 ATS(App Transport Security)를 통해, 그리고 개발자들이 URLSession을 쓰도록 함으로써 'https'를 쓰도록 하고 있다. 또한 다양한 데이터 암호화 방법을 제시하고 권장한다.

TCP와 UDP의 차이점에 대해서 설명해 주세요. 소켓 통신에 대해 설명해주세요.

위 'SSL'의 중간 S는 '소켓'이다. 소켓이란 네트워크를 통해 데이터를 주고받는 양 끝점을 일컫는 말이다. 어떤 프로토콜을 사용하여 통신하냐에 따라 TCP 소켓과 UDP 소켓 두 가지 유형으로 나뉜다. TCP는 Transmission Control Protocol의, UDP는 User Datagram Protocol의 준말이다. UDP는 제어 프로토콜이 덜하여 연결 설정 없이 즉시 데이터를 전송하므로 신뢰성을 덜 보장하지만 속도가 빠르다. 실시간 스트리밍 등에 주로 사용된다. 반면 TCP는 순서가 바뀌면 재전송하는 등 어느 정도의 신뢰성을 보장한다. 따라서 정보의 무결성이 중요한 이메일, 파일 전송 등에 사용된다. 소켓 통신이란, 이렇게 (앱이나 기능의 성격에 따른 프토토콜을 사용하여) 소켓을 생성하고 이 극단을 통해 서버와 클라이언트 간에 정보를 주고 받는 과정을 말한다.

REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요. REST API에서 Method들의 차이점을 설명해주세요.

REST API의 'REST'는 'Representational State Transfer'의 약자다. 효율적인 웹 서비스개발을 위해 개발된 아키텍처로, Get, Post, Put, Delete의 메서드를 통해 의사를 표현하고 데이터를 주고받는다. iOS에서는 URLRequest와 URLResponse를 통해 이를 요청, 구현하고 해석, 처리할 수 있다.

ohdair commented 5 months ago

블로그에 기재: https://raidho.tistory.com/277

네트워크 프로토콜은 네트워크 통신을 위한 약속이다. 데이터의 형식, 순서, 시스템과의 조율 등 다양한 역할을 수행한다. 프로토콜 스택은 TCP/IP 4계층과 OSI 7계층 모델이 있으며, 각기 다른 역할로 사용된다. TCP/IP 모델은 실제 네트워크 작동 방식으로 사용되며 OSI는 교육 혹은 개념적인 모델로 사용된다.

OSI 7계층

TCP/IP 4계층

HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법

HTTP는 웹 브라우저와 웹 서버 간 데이터 전송을 위한 프로토콜로 사용자의 요청과 서버의 응답을 주고 받는다. HTTPS는 Secure이 추가된 것으로 데이터 전송을 보호하는 프로토콜이다.

SSL/TLS 프로토콜을 사용하여 통신을 암호화 하여 개인정보 유출을 방지한다. 사용자가 HTTPS에 접속하면 서버에서 인증서를 보내고 인증서가 유효하다면 신뢰할 수 있다고 판단한다. 안전한 통신을 위해 암호화 키를 교환하며 모든 데이터를 암호화하여 전송한다.

Apple은 ATSApp Transport Security라는 네트워킹 기능이 개인 정보 보호 및 데이터 무결성을 향상시킨다. 네트워크 통신을 HTTPS로 강제화한다. HTTPS라도 최소 보안 사양을 충족하지 못하면 연결을 차단한다. 필요한 경우에는 예외를 등록할 수 있지만, 보안을 저하시키는 문제가 있다.

TCP와 UDP 차이점

데이터를 보내기 위해 사용하는 프로토콜이다.

TCP는 1:1 통신방식으로 연결지향적이다. 연결지향적은 두 개체 간 연결 상태를 유지하고 교환이 가능한 것으로 논리적으로 이루어진 것이다. 쉽게 이야기하면 양측 협상으로 설정하고 데이터를 교환하고 연결을 종료한다. 신뢰성이 높지만 속도가 느리다. TCP/IP로 쓰이며, IP가 데이터의 배달을 처리한다면 TCP는 Packet을 추적하고 관리한다.

UDP는 비연결형 서비스로 순서화되지 않은 데이터그램 방식을 제공한다. 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다. TCP보다 속도가 빠르지만 신뢰성이 낮다. 1:1 뿐만 아니다 N:M 등으로 연결될 수 있다. 여기서 데이터 그램은 Packet의 동의어이다.

HTTP 는 버전이 존재하며, 2022년에는 HTTP/3가 출시되었다. HTTP/2에서는 TCP로 전송이 되었다면 HTTP/3에서는 Quick UDP Internet Connections(QUIC)로 대체된다. 더 빠르고 짧은 지연시간의 데이터 전송을 위해 UDP를 활용하게 되었다. 하지만 아직까지 사용되는 사이트는 많지 않다. Google이 개발했으니 H3를 사용하지만 아직 네이버도 H2이다.

소켓 통신

네트워크에서 두 개의 프로그램 간 양방향 데이터 전송을 가능하게 하는 통신 방식이다. 클라이언트-서버 모델을 기반으로 작동하며, TCP/IP에서 Transport에 해당한다. 파일 전송, 온라인 게임, 채팅, 원격 제어 등 다양하게 활용된다. Socket을 생성하고 IP주소와 Port 번호를 가지고 통신하게 된다. 서버 측에서는 연결을 수락하고 데이터를 받은 뒤 연결을 끊는다.

REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법

RESTREpresentational State Transfer 아키텍처 스타일의 디자인 원칙을 준수하는 API이다. 이러한 이유로 RESTful API라고도 한다.

HTTP 요청을 통해 통신함으로써 리소스 내에서 레코드(CRUD)의 작성, 읽기, 업데이트 및 삭제 등의 표준 데이터베이스 기능을 수행한다. GET 요청을 사용하여 레코드를 검색하고 POST로 요청을 PUT으로 업데이트를 DELETE로 레코드를 삭제한다. 요청 헤더와 매개변수 역시 메타데이터, 권한 부여, URI, 캐싱, 쿠키 등의 식별자 정보를 포함하기에 REST API 호출에서 중요하다.  요청 헤더와 응답 헤더는 일반적인 HTTP 상태 코드와 함께 사용된다.

iOS에서는 URLSession으로 네트워크를 할 수 있으며, httpMethod의 기능들도 사용할 수 있다. 리소스로 표현되는 것은 JSON 혹은 다른 데이터 형식으로 인코딩 및 디코딩하여 내부 데이터를 확인할 수 있다.

HTTP 상태 코드

클라이언트 요청에 대한 서버에서 보내는 응답이다.

상태 코드 분류
1xx 요청이 수신되고 이해된 것으로 처리가 계속되는 동안 임시로 발행
2xx 요청이 성공적으로 수신되고 수락된 상태
3xx 요청이 완료되려면 추가 조치가 필요한 상태
4xx 요청에 잘못된 구문이 포함되거나 처리할 수 없는 상태
5xx 서버가 명백히 유효한 요청을 이행하지 못한 상태

상태 코드 200이라면 성공적인 HTTP 요청에 대한 응답으로 GET 요청이라면 요청된 리소스에 해당하는 엔티티가 포함된다. 일반적으로는 상태 코드에 맞춰서 동작을 해야하지만 따르지 않는 경우도 있다. 

JasonLee0223 commented 4 months ago
HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요. 둘의 가장 큰 차이점으로는 HTTPS보다 먼저 사용되던 HTTP는 Hypertext Transfer Protocol 으로 HTTPS는 이 뒤에 Security 단어가 추가적으로 붙여집니다. 이름에서 알 수 있듯이 보안 여부의 차이가 가장 두드러지며 보안 여부에서 HTTP는 제공하지 않지만 HTTPS에서는 공개키 암호화에 SSL 인증서가 사용됩니다. HTTPS에서 암호화에 SSL/TLS와 함께 HTTP/2를 사용합니다. (HTTP는 HTTP/2와 TCP/IP 사용) iOS에서는 애플의 자체 플랫폼 ATS(Application Transport Security)를 사용을 권장합니다. 이 기술에는 TLS 프로토콜이 적용되어있기에 HTTPS 프로토콜을 사용할 수 있으며 URLSession 인스턴스를 생성하여 사용할 때 자동으로 적용됩니다. 그러나 HTTPS를 지원하지 않는 서버와의 통신을 해야하는 경우가 발생할 수 있는데, 특정 도메인만 예외처리를 할 수 있으며 예외로 설정한 이유를 충분히 제공하여 심사 항목에 유의하여야합니다.
TCP와 UDP의 차이점에 대해서 설명해 주세요. TCP는 연결 지향적 UDP는 비연결 지향적 프로토콜입니다. UDP는 패킷 단위로 데이터를 전송하기 때문에 신뢰성 면에서 가상 회선 방식을 사용하는 TCP보다 떨어지지만 속도는 빠르다는 장점이 있습니다. 하여 실시간 서비스(streaming) 방식에 자주 사용되며 TCP는 파일 전송과 같은 경우에 사용됩니다.
소켓 통신에 대해 설명해주세요. 간단하게 클라이언트와 서버, 두 컴퓨터 간의 특정한 포트를 통해서 실시간으로, 양방향 통신을 가능하게 만든 통신 방법을 말합니다. 이는 클라이언트만이 통신을 시작할 수 있었던 HTTP 통신과의 큰 차이점을 보여줍니다. 그러므로 지속, 반복적인 통신을 더 적은 자원으로 가능하게 만들어 현재 채팅 서비스 및 게임 등이 클라이언트와 무관하게 발생하는 이벤트에 대한 정보를 정확한 시점에 클라이언트에게 전달하는 것이 가능하게 되었습니다.
REST API와 iOS에서의 네트워크 요청 및 응답 처리 방법에 대해 설명해주세요. Client로 볼 수 있는 iOS에서는 Server인 REST API에 원하는 데이터를 요청하기 위해 다양한 네트워크 기술이 있지만 대표적인 URLSession으로 예를 들어 설명드리자면 네트워크 데이터를 관리할 URLSession 인스턴스를 생성합니다. 이후 초기화 과정에서 configuration을 사용하여 요청할 URL의 구성을 만들며 REST API에 어떤 요청을 할지 HTTPMethod를 사용하며 이 밖에 요청할 쿼리 및 HTTP Header를 작성합니다. Response를 통해 받아온 바이너리 데이터를 보통 JSON 형식으로 포맷팅하여 사용하게됩니다.
REST API에서 Method들의 차이점을 설명해주세요. 대표적인 GET, POST, PUT, PATCH, DELETE에 대해 설명할 수 있습니다. GET은 단어 뜻 그 자체로서 자원 즉, 데이터를 받아올 때 사용됩니다. 어떠한 방식으로도 자원의 상태를 변경시키지 않으므로, Safe Method라고 불리기도 하며 멱등성을 띕니다. 멱동성이란, 동일한 API를 여러번 호출하여도 동일한 결과를 얻을 수 있음을 의미합니다. POST는 새로운 자원을 추가할 때 사용합니다. 서버의 상태를 변경시키며 응답코드 201을 받아야 정상적으로 수행됨을 확인할 수 있습니다. PUT은 존재하는 자원을 전체적으로 변경할 때 사용됩니다. 만약 자원이 존재하지 않는 경우 API는 새로운 자원을 생성하도록 할 수 있으며 이 경우의 응답코드로 201을 받게 됩니다. 존재하는 자원을 변경시키게 된다면 200(Ok) 또는 204(No Content)를 받게됩니다. POST는 여러개의 자원에 수행되는 반면, PUT은 단일 자원에만 수행됩니다. PATCH는 한 자원의 데이터를 부분적으로 변경할 때 사용됩니다. 좀 더 명확하게 표현하자면 존재하는 자원에 대해 부분적으로 업데이트를 하기 위해서 사용되며 PUT은 자원을 완전히 대체하는 경우 사용되는게 일반적입니다. DELETE는 자원을 삭제할 때 사용하며 GET과 같이 멱동성 성질을 띕니다.
HTTP 상태 코드에 대해서 설명해주세요. HTTP 응답 코드는 5개의 클래스(분류)로 구분됩니다. 상태 코드의 첫 번째 숫자는 응답의 클래스를 정의하며 마지막 두 자리는 클래스나 분류 역할을 하지 않는 것이 일반적입니다. - 1xx (정보): 요청을 받았으며 프로세스를 계속한다 - 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다 - 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다 - 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다 - 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다