1. HTTP와 HTTPS의 차이점, iOS에서의 보안 통신 방법에 대해 설명해주세요.
HTTP
웹에서 가장 기본적으로 사용되는 프로토콜이다. 그럼 프로토콜은 무엇이냐, 컴퓨터나 원거리 통신 장비 사이에서 데이터를 주고받는 양식, 규칙이다. 보낸 사람과 받는 사람이 같은 양식으로 받아야 통신이 원활하게 이루어 질수 있기 때문에 규칙은 필요합니다. 프로토콜은 보내는 데이터 양을 조절하여 수신측의 처리능력을 넘어가지 않도록 하거나, 데이터를 잘게 나누어 전송을 용이하게 해주는 역할을 합니다.
우리가 네이버에 접속을 하려 할때 www.naver.com을 브라우저 주소창에 입력하면 네이버 서버와 TCP 연결을 하게 된다. 그리고 http 요청(request)을 처리한다. 그리고 나서 http 응답(response)을 받게 되고 페이지를 볼수 있게 된다. 과정이 많이 생략 됐지만 다른 부분에서 더 자세히 작성 하겠습니다.
HTTPS
HTTP에 S(Secure)를 추가한 말이다. 통신을 하던 도중 중간에 해커가 정보를 가로채가지 못하게 데이터를 암호화 해서 전송한다. 암호화 통신에는 SSL이 사용됩니다.
SSL(TSL)
SSL(TSL)은 암호화 기반 인터넷 보안 프로토콜이다. 동작방식을 쉽게 이야기 하자면, 서버와 클라이언트간에 서로 고유 키를 생성한 후 암호화와 복호화에 사용합니다.
HTTP와 HTTPS의 차이
HTTP와 HTTPS의 중요한 차이점은 보안기능이라고 할 수 있습니다. SSL(TSL)을 통하여 전송데이터를 암호화 하고 복호화 하여 안전하게 통신을 할 수 있습니다. 하지만 이런 과정에서 나오는 통신속도 저하가 또 차이점이라고 볼 수 있지만 기술의 발전으로 인하여 유의미한 차이는 아니라고 합니다. iOS에서는 HTTPS를 이용하여 보안통신을 구현하고 있습니다.
2. TCP와 UDP의 차이점에 대해서 설명해 주세요.
TCP
TCP통신의 중요한 특징은 연결 지향 방식을 사용한다는것이다. 통신을 시작하기 전에 클라이언트와 서버 간에 연결을 설정하고, 통신이 완료되면 연결을 종료합니다.(1대1 통신) 이러한 연결 방식은 데이터의 순서를 보장하여 신뢰성을 높이고, 데이터 전송 상태를 관리하는 데 도움이 됩니다. 하지만 이러한 과정에서 속도지연이 발생하여 UDP보다 느리다는 단점이 있습니다.
TCP통신은 연속성보다 신뢰성있는 전송이 중요할 때에 사용하는 프로토콜로 파일전송, 웹페이지(http) 등에 주로 사용됩니다.
UDP
UDP의 중요한 특징은 비연결형 프로토콜입니다. 연결을 설정하거나 종료하지 않고 데이터를 전송합니다. 따라서 데이터를 전송하기 위한 사전의 연결 설정 단계가 없습니다. 덕분에 속도가 빠르다는 장점이 있습니다. 하지만 데이터가 데이터 전송상태를 관리하지 않기 때문에 신뢰성이 낮다는 단점이 있습니다.
이러한 특징 때문에 신뢰성보다는 연속성이 중요시 되는 실시간 스트리밍 서비스등에 사용됩니다.
3. 소켓 통신에 대해 설명해주세요.
소켓이란?
소켓은 컴퓨터 네트워크에서 데이터를 주고받기 위한 끝점입니다. 예를 들어, 웹 브라우저가 웹 서버에 데이터를 요청할 때, 웹 브라우저는 자신의 컴퓨터에서 소켓을 열고, 해당 소켓을 사용하여 웹 서버에 데이터를 보냅니다. 웹 서버는 이 데이터를 받기 위해 자신의 컴퓨터에서도 소켓을 열고, 이 소켓을 통해 데이터를 받습니다. 이런 식으로, 소켓은 컴퓨터 사이에서 데이터를 주고받는 역할을 합니다.
소켓통신
위에서 설명했듯이 소켓이 컴퓨터 사이에 데이터를 주고받는 역할을 한다. 이것을 이용하여 통신하는 것을 소켓통신이라고 한다. 소켓통신의 특징은 데이터 통신이 끝난후에도 연결이 유지되는것이다. 그래서 실시간 으로 데이터 통신이 필요한 온라인게임등에 사용된다.
소켓통신의 종류에는 대표적으로 두가지가 있다.(위에서 설명함)
스트림 (TCP)
데이터그램 (UDP)
4. REST API에서 Method들의 차이점을 설명해주세요.
REST API
일단 REST API가 무엇인지 부터 설명하면, 클라이언트와 서버 간의 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스 이다. 개발을 조금 접해본 사람이면 GET, POST 요청이란 말을 들어봤을것이다. 이것은 HTTP에서 제공하는 메서드들인데 이것들을 활용하여 작업을 수행합니다.
REST API에서 사용되는 Method
- GET: 리소스를 가져오기 위해 사용됩니다. 서버에게 리소스를 요청하고 해당 리소스를 응답으로 받습니다. GET 요청은 서버의 상태를 변경하지 않고 오직 데이터를 가져올 때 사용됩니다.
- POST: 새로운 리소스를 생성하기 위해 사용됩니다. 클라이언트는 POST 요청을 통해 서버에게 새로운 데이터를 전송하고, 서버는 해당 데이터를 처리하여 새로운 리소스를 생성합니다.
- PUT: 기존의 리소스를 업데이트하기 위해 사용됩니다. 클라이언트는 PUT 요청을 통해 변경할 리소스의 전체 내용을 서버에게 제공하고, 서버는 해당 리소스를 업데이트합니다. PUT 요청은 해당 리소스의 전체 내용을 변경할 때 사용됩니다.
- PATCH: 리소스의 일부 내용을 수정하기 위해 사용됩니다. 클라이언트는 PATCH 요청을 통해 변경할 리소스의 일부 내용을 서버에게 제공하고, 서버는 해당 리소스의 일부 내용을 수정합니다. PUT과 달리 PATCH는 전체 내용이 아닌 일부 내용만을 수정할 때 사용됩니다.
- DELETE: 리소스를 삭제하기 위해 사용됩니다. 클라이언트는 DELETE 요청을 통해 삭제할 리소스의 식별자를 서버에게 전달하고, 서버는 해당 리소스를 삭제합니다.
5. HTTP 상태 코드에 대해서 설명해주세요.
HTTP 상태코드
HTTP 상태 코드는 클라이언트가 서버에 요청을 보내고, 서버가 이에 대한 응답으로 반환하는 상태를 나타내는 코드입니다. 이 코드들은 요청이 성공적으로 처리되었는지, 오류가 발생했는지, 그리고 어떤 종류의 오류인지 등을 나타냅니다. 상태 코드는 HTTP 응답의 일부로서, 응답 헤더의 일부로 전송됩니다.
상태코드 종류
- 1xx (Informational): 요청이 받아들여졌으며 처리 중임을 나타냅니다. 예를 들어, 100은 계속 진행 중임을 나타내고, 101은 프로토콜 변경 요청을 나타냅니다.
- 2xx (Success): 요청이 성공적으로 처리되었음을 나타냅니다. 예를 들어, 200은 성공적인 요청을 나타내고, 201은 새로운 리소스가 생성되었음을 나타냅니다.
- 3xx (Redirection): 추가 동작이 필요함을 나타냅니다. 예를 들어, 301은 리소스가 영구적으로 이동되었음을 나타내고, 302는 임시적으로 이동되었음을 나타냅니다.
- 4xx (Client Error): 클라이언트에 오류가 있음을 나타냅니다. 예를 들어, 400은 잘못된 요청을 나타내고, 가장 많이 볼 수 있고 밈으로도 유명한 404는 요청한 리소스를 찾을 수 없음을 나타냅니다.
- 5xx (Server Error): 서버에 오류가 있음을 나타냅니다. 예를 들어, 500은 서버 내부 오류를 나타내고, 503은 서비스를 사용할 수 없음을 나타냅니다.