SW엔지니어 핵심 역량은 디버깅 및 트러블 슈팅이다. 간단한 것은 검색으로 해결되지만 low level 에러를 만났을 때, CS 기초적인 부분에 대한 이해가 충분해야한다.
yaml 파일 명세 과정이나 디버깅 과정에서 TPCP, HTTP 등 네트워크 프로토콜을 만나게 된다. 가장 중요하면서도 기초적인 네트워크 지식인 OSI 7계층과 TCP/IP를 다시 복습해보면서 low level 에러를 대응하기 위한 기본 체력을 다듬어보자.
네트워크에서 통신이 일어나는 과정을 7단계로 나눈것
(Open Systems Interconnection Reference Model)
서로 연결된 컴퓨터 (네트워크)내의 프로세스들은 지속적으로 데이터를 주고 받는다.
이 데이터를 주고 받기 위한 단계들을 세분화 시켜놓은 것이다.
어플리케이션 간 최종 통신 방법을 결정하는 계층
애플리케이션 목적에 맞게 HTTP, DNS, FTP 등 프로토콜을 사용해서 통신하는 계층이다. iOS 개발에서는 URLSession이라는 클래스로 HTTP 통신을 지원한다.
(HTTP 통신은 TCP/IP 기반의 프로토콜이다.)
여기서는 어떤 방식으로 데이터를 보내는지는 관심사가 아니고, 어떤 프로토콜을 사용하는지 자체에 관심을 두는 계층이다.
애플리케이션 간 통신에서 메시지 포맷을 관리하는 계층
인코딩과 디코딩, 암호화 복호화, 압축/압축풀기 등이 여기서 수행된다.
애플리케이션 간 통신에서 세션을 관리하는 계층
세션이란 통신하려는 두 컴퓨터 간의 논리적인 연결을 뜻한다.
애플리케이션 간 데이터 전송을 위한 기본 통신 프로토콜을 구현, 담당하는 계층
이 때 크게 2가지 프로토콜을 중 1개를 사용한다.
목적지 Host 컴퓨터로 데이터를 전송하는 계층
데이터를 패킷으로 분할하고, 각 패킷에 목적지 주소와 출발지 주소를 부여한다. 이 때 각 주소를 식별하기 위해 32비트나 128비트 숫자로 표기한 것을 IP 주소라고 하며 이러한 규약을 IP (인터넷 프로토콜)이라고 한다.
데이터 전송 중간 중간, 패킷은 라우터를 거치게 되며 이때 라우팅 알고리즘을 사용하여 가장 적합한 경로를 선택한다.
최종 목적지 host까지 보내는게 역할이지, 중간에 라우터 같은 노드 사이에서 어떻게 데이터를 전송하는지는 관심x
직접 연결된 노드 간 통신을 담당하는 계층
데이터를 프레임(Frame)이라는 작은 단위로 분할하고, 각 프레임에는 출발지와 목적지의 물리적인 주소인 MAC(Media Access Control) 주소를 부여한다.
MAC 주소는 네트워크 인터페이스 카드에 고유하게 할당되며, 이를 통해 특정 기기를 식별할 수 있다.
// MAC 주소
00:1A:2B:3C:4D:5E
// IPv4 주소
192.168.0.1
// IPv6 주소
2001:0db8:85a3:0000:0000:8a2e:0370:7334
데이터를 물리적으로(전선을 통한 전기적 신호로) bit 단위로 전송하는 계층
인터넷에 특화된 네트워크 구조로 OSI에서 좀 더 단순화된 구조이다. 현대에서 가장 많이 채택되고 있는 통신 모델이다.
OSI의 link layer애서 데이터 링크와 물리 계층을 하나로 묶었고,
어플리케이션 레이어에서는 3개를 묶어서 4계층이 된 것이다.