제가 나중에 보기 위해 정리해놓은 자료이므로 틀린 내용이 있을 수 있습니다. 댓글로 피드백 주시면 바로 수정하겠습니다. 감사합니다. ☺️ - 민쏜 -
🏞️ 네트워킹은 어떻게 이루어지는가?
- 모든 기기가 인터넷과 관련된 여러 프로토콜(규약)에 따라 소통한다.
- 클라이언트 입장의 컴퓨터와 아이폰, 서버 입장의 컴퓨터 등, 네트워킹에 개입하는 모든 기기를 말한다.
- HTTP, IP, TCP, UDP, FTP, IEEE 802.3 등…
- 위와 같은 다양한 프로토콜의 집합을 간단하게 TCP/IP 라고 줄여서 말하기도 한다.
- 이 중 iOS 개발자로서 웬만큼 알고 있어야 하는 것은 HTTP이다.
🧩 WWW를 구성하는 기술
- WEB 쪽에서는 HTML 언어로 내용을 작성하고, HTTP라는 규범을 따르며, 주소를 나타내기 위해 URL을 사용한다.
- HTML: HyperText Markup Language
- HTTP: HyperText Transfer Protocol
- URL: Uniform Resource Locator
- iOS 개발자인 우리는 HTTP에 집중하면 된다.
🧩 HTTP (HyperText Transfer Protocol)
- 다른 프로토콜들과 마찬가지로, 클라이언트와 서버 모두 이 HTTP 프로토콜을 준수하여 데이터를 주고 받는다.
- 이름에서 알 수 있듯, 하이퍼 문서를 전송하는 것에서 시작 되었다.
- 현재는 이미지, 음성, 영상, 파일, JSON 등 모든 형태의 데이터를 전송할 수 있다.
- 버전
- HTTP 0.9 - 1990년 등장
- HTTP 1.1 - 1997년 1월 - 2014년
- 이때 우리가 사용하는 대부분의 기능이 내장되어, 현재도 많은 웹사이트에서 사용하고 있다.
- HTTP 2.0, HTTP 3.0 - 2015년 이후… (성능 개선 중)
- 22년 현재 기준 일반적인 사이트는 대부분 2.0버전이고, 정말 트랜디한 소수의 웹사이트만 3.0이다.
- 웹브라우저에서 개발자도구를 통해 볼 수 있다.
- 그래도 이제 조금씩 3.0으로 넘어가는 추세라고 한다.
🏞️ 네트워킹의 계층
🧩 요약
- 이 부분의 내용은 자세히 몰라도 될 것 같다. 그래도 궁금해서 조사해서 정리해봤지만, 완전히 이해하지는 못했다. 백엔드 개발자 분들이 공부하시는 것 같다.
- 아무튼 iOS 개발자 입장에서는 Request를 잘 작성하면 나머지는 OS단에서 알아서 해준다. 이 Request를 잘 보내기 위해 HTTP 공부가 필요하다.
- 네트워킹의 계층 관련해서는 비유적으로 이해해보려고 한다.

- 결과적으로, 각 계층을 통과하며 이런 모양이 된다.
- 그림의 전송데이터에는 Request, Response가 들어간다고 보면 될 것 같다.
- 아래의 덩어리는 네트워크 통신을 위한 여러 프로토콜을 지킨 결과물이다. 이 덩어리를 클라이언트와 서버가 주고 받는 것이다.
- 보내는 쪽에서는 전송데이터를 각 계층에서 포장하고, 받는 쪽에서는 덩어리의 바깥쪽에서부터 포장을 풀어 안에 있는 전송데이터를 확인한다.

- 채팅 프로그램에서 메시지를 보내면 아래와 같은 일이 일어난다고 한다.
- (HTTP) 프로그램에서 메시지 생성
- (TCP) Socket 라이브러리를 통해 전달
- TCP 세그먼트 생성
- (IP) IP 패킷 생성, TCP 데이터 포함
- 이더넷 프레임 워크에 포함되어 서버로 전송

🧩 TCP(Transmission Control Protocol, 전송 제어 프로토콜)가 뭘까?
- 컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 규약(프로토콜)의 일종이다.
- 패킷교환(Packet Switching) 방식으로 네트워킹할 때의 문제점을 해결하고자 만들어, 신뢰성을 보장할 수 있는 통신 규약이다.
- 네트워크 환경의 안정성이 떨어지고, 중간에 데이터가 유실되거나 너무 늦게 전달되는 등 신뢰성이 떨어지는 문제가 있었다.
- Request를 안전한 편지봉투에 넣는 작업이라고 생각하면 된다.
- 현존하는 상당수의 네트워크 프로그램은 TCP를 기반으로 통신한다. 물론 필수는 아니지만, 신뢰성이 떨어지는 리스크가 발생한다.
- 실시간성이 중요하거나 응답성이 중요한 프로그램의 경우 TCP가 비효율적이라 UDP라는 걸 개발했다.
- TCP에 쓰이는 흐름 제어 및 신뢰성 제어 알고리즘이 현대 기준으로는 너무 구식이고 성능상 비효율적이라는 평을 듣고 있기 때문이다.
- UDP에 대한 자세한 내용은 지금의 나에게는 불필요해 보이므로 나중에 알아보자.
🧩 IP(Internet Protocol, 인터넷 프로토콜)가 뭘까?
- 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약
- 컴퓨터는 운영체제가 다를 수 있고, 프로그램은 구현 언어가 다를 수 있어, 네트워크에서 이들이 통신하기 위한 공통 통신 규약이 필요하고, 이게 IP 이다.
- 현재의 인터넷에서 IP를 통하지 않고 통신하는 건 불가능하다.
- 보내는 컴퓨터(호스트)에서 받는 컴퓨터(얘도 호스트)까지의 통신을 책임진다.
- 편지 봉투에 보내는 주소, 받는 주소를 작성하고 우표를 붙여서 우체통에 넣는 일과 우편함에 들어온 편지를 꺼내서 나한테 온 편지가 맞는지 확인하는 정도의 작업이라고 생각하면 된다.
- IP 주소
- IP 통신에 필요한 고유 주소로, 논리적 주소
- 통신 기능이 제공되는 기기들이 서로 통신을 하기 위해 필요한 고유 번호
- 각 장치 간 통신을 식별할 수 있는 전화번호라고 생각할 수 있다.
- 네트워크 계층(Network Layer)에서 사용되는 주소
- MAC 주소와 구분 필요
- MAC 주소: MAC 주소는 데이터 링크 계층(Data Link Layer)에서 사용되는 주소로, LAN(Local Address Network)에서 목적지와 통신하기 위한 실질적인 주소이다.
- 모든 네트워크 장비 혹은 컴퓨터는 NIC(Network Interface Card)에 고유한 MAC 주소를 가지고 있다. 물리적으로 거기에 써있다.
- IP 주소가 있는데 굳이 왜 필요하지?
- IP에 대한 자세한 내용은 지금의 나에게는 불필요해 보이므로 나중에 알아보자.
참고
앨런 Swift문법 마스터 스쿨 (온라인 BootCamp - 2개월과정) - 인프런 | 강의
TCP / UDP (feat. IP, IP Packet)
[네트워크] MAC주소와 ARP(Address Resolution Protocol)란? | MAC 주소의 필요성
나무위키 - TCP
나무위키 - IP