[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

💻 CS/네트워크 20

[Network] HTTPS의 동작방식

안녕하세요 이누입니다!🐶 일반적인 브라우저는 HTTPS가 아닌 HTTP만으로 구성된 사이트에 접속하려하면 경고 메세지를 띄웁니다. 해당 사이트가 신뢰할 수 있는 사이트가 아닐 수 있기 때문입니다. HTTPS는 HTTP와 무엇이 다르길래 이를 확인하고 경고 메세지까지 띄우는 것일까요? HTTPS 기존의 HTTP 방식은 전송중인 데이터를 가로채면 누구나 데이터를 읽을 수 있었습니다. 가령 고객이 특정 쇼핑몰에서 신용카드 정보를 작성하여 서버에 전송하면, 해당 내용이 전혀 암호화되지 않은 채로 인터넷을 돌아다니게 되는 것입니다. HTTPS는 HTTP의 이런 보안적 문제를 해결한 프로토콜입니다. HTTP를 SSL(Secure Sockets Layer) 프로토콜 위에서 돌아가도록하여 클라이언트와 서버가 주고받는 ..

[Network] TCP의 흐름제어와 혼잡제어

네트워크 통신과정 도중에는 네트워크 혼잡성 및 receiver의 overload 등의 사유로 데이터가 손실되거나, 전달 순서가 바뀌는 등의 문제가 발생할 수 있습니다. 이런 문제를 해결하고 통신의 신뢰성을 보장하기 위해 TCP/IP에서 사용하는 것이 흐름 제어와 혼잡 제어입니다. cf. TCP 버퍼 : 전송 및 수신 전 TCP 세그먼트는 보관하는 곳입니다. 송신 측은 버퍼에 TCP 세그먼트를 보관한 후 순차적으로 전송하고, 수신 측은 도착한 TCP 세그먼트를 애플리케이션이 읽을 때까지 버퍼에 보관합니다. 이 크기에 너무 작으면 당연히 손실되는 데이터가 많아지겠죠? 흐름 제어 수신 측이 송신 측보다 데이터 처리 속도가 느릴 경우 데이터를 손실할 위험이 존재합니다. 흐름 제어는 이런 송신 측과 수신 측의 데..

[Network] HTTP 헤더 : 캐시와 조건부요청

캐시 브라우저 내부에서 캐시저장 cache-control 헤더를 조정하여 cache에 대한 설정을 해줄 수 있음 (Pragma, Expires 헤더도 존재하지만 cache-control의 하위호환임) 캐시가 존재하더라도 만료될 경우 서버로부터 데이터를 다시 받아야함 cache-control cf. 클라이언트에서 사용하는 캐시 저장소 이외에도 서버와 데이터 전송을 원활하도록 하기위한 '프록시캐시'도 존재한다. cache-control: no-cache : 데이터를 캐시하지만 항상 origin 서버(프록시캐시 서버x)까지 와서 검증을 받고 사용해야함 cache-control: no-store : 데이터에 민감한 정보가 있으므로 저장하지 않도록함 cache-control: must-revalid..

[Network] HTTP 일반헤더

HTTP 헤더 field-name ":" field-value field-name은 대소문자 구분이 없다. HTTP 전송에 필요한 부가정보를 담는 역할을 한다. 매우 다양한 표준 헤더가 존재하며, 필요시 임의의 헤더를 추가할 수 있다. RFC2616 (과거버전) General 헤더 : 메세지 전체에 적용되는 정보 (ex. Connection: close) Request 헤더 : 요청정보 (ex. User-Agent: Mozilla/5.0 ...)' Response 헤더 : 응답정보 (ex. Server: Apache) Entity 헤더 : 엔티티 바디에 대한 정보 (ex. Content-Type: text/html, Content-Length: 2433) 메시지 본문 안에 엔티티 본문이 포함되어 ..

[Network] HTTP 상태코드

상태코드란 클라이언트가 보낸 요청에 대한 처리 상태를 응답에서 알려주는 기능을 하는 코드이다. 100번대부터 500번대까지 존재하며, 각 코드마다 정해진 의미가 있다. 클라이언트는 해당 상태 코드들에 대해 반응하여 정해진 작업을 수행한다. 클라이언트가 인식할 수 없는 상태 코드를 서버가 반환하는 경우, 클라이언트는 상위 상태코드로 해석해서 작업을 처리한다. 100번대는 Informational로, 요청이 수신되어 처리중이라는 뜻인데, 거의 사용하지 않으므로 설명에서 생략한다. 200번대 (Successful) : 요청 정상 처리 200 (OK) : 요청에 대해 성공적으로 처리했음을 의미 201 (Created) : 요청에 성공해서 서버에서 새로운 리소스를 생성했음을 의미, 응답에 Location 헤더가 ..

[Network] HTTP API 설계 예시

일반적으로 HTTP API는 POST를 기반으로하는 시스템과 PUT으로 하는 시스템으로 나뉜다. 그 외에도 HTML FORM만을 사용하면서 Control URI라고 하는 것을 활용해 여러 작업을 수행할 수도 있다. HTTP API : POST 기반 POST 기반 API의 대표적인 시스템으로는 회원관리 시스템이 있다. 회원 등록을 POST로 진행한다.(물론 회원 수정이나 조회, 삭제 등에는 각각 PATCH, GET, DELETE 메서드가 사용될 수 있다.) EX : POST /members 사용자가 등록하는 리소스의 URI를 모른다는 특징이 있다. 이처럼 POST를 기반으로 하여 클라이언트가 새로 등록될 리소스의 URI를 모르는 시스템을 컬렉션이라고 부른다. HTTP API : PUT 기반 PUT 기반 A..

[Network] HTTP 메서드 활용

데이터 전달 방식은 크게 2가지 쿼리 파라미터를 통한 데이터 전송 : GET / 주로 정렬 필터(검색어) 메시지 바디를 통한 데이터 전송 : POST, PUT, PATCH / 회원가입, 상품 주문, 리소스 등록, 리소스 변경 등 클라이언트에서 서버로 데이터를 전송하는 4가지 상황 정적 데이터 조회 이미지 혹은 정적 텍스트문서. 쿼리파라미터를 사용하지 않고 경로만으로 데이터를 조회한다. (GET) 동적 데이터 조회 주로 정렬 필터(검색어)에 활용. 쿼리 파라미터를 전송하면 서버에서 이를 기반으로 동적으로 생성한 결과를 조회한다. (GET + 쿼리 파라미터) HTML Form을 통한 데이터 전송 HTML Form을 submit하면 POST가 전송된다. form의 내용을 메시지 바디를 통해 전송 (key=va..

[Network] HTTP 메서드 기초

API URI 고민 Uniform Resource Indentifier. 즉, URI는 Resource를 관리하는 기준이라고 할 수 있다. 따라서 리소스를 기준으로 식별하는 것이 바람직하다. 예를 들어 '미네랄을 캐라' 라는 목적이 있다면 여기서 리소스는 '캐는 행위'가 아닌 '미네랄'이 되어야 한다는 것이다. '리소스'와 '리소스를 대상으로 한 행위'를 분리하여 생각해야한다. 물론 단순 리소스 기준으로 URI 구별이 어려울 경우에는 추가적인 식별이 필요하지만, 기본적인 원칙은 이렇다. HTTP 메서드 종류 GET: 리소스를 조회한다. POST: 요청 데이터 처리한다. PUT: 리소스를 대체하여 등록한다. 해당 리소스가 없으면 생성한다. PATCH: 리소스 내용을 부분 변경한다. DELETE: 리소스를 ..

[Network] HTTP 프로토콜

7계층 프로토콜은 매우 다양하다. 그 중 하나가 웹 통신을 위한 프로토콜인 HTTP 프로토콜이다. HTTP 프로토콜 HyperText Transfer Protocol 웹 표준 데이터를 받아오는 프로토콜 처음엔 Text, Html을 전송하는게 목적이었지만, 현재는 음성, 영상, 이미지, Json 등 거의 모든 형태의 데이터를 전송한다. 서버간 데이터를 주고받을 때도 대부분 HTTP를 사용하고 있다. Request / Response 동작에 기반해 서비스를 제공 HTTP 버전 HTTP/0.9 1991년 : GET 메소드만 지원, HTTP 헤더X HTTP/1.0 1996년 : 메소드, 헤더 추가 HTTP/1.1 1997년 : 현재 가장 많이 사용 (RFC2068 -> RFC2616 -> RFC7230~7235..

[Network] NAT와 포트포워딩

NAT (Network Address Translation) IP 패킷의 TCP/UDP 포트 숫자, 소스 및 목적지의 IP 주소 등을 재기록하며 라우터를 통해 네트워크 트래픽을 주고받는 기술 쉽게 말해 특정 IP 주소의 특정 포트로 가는 패킷을 다른 IP 주소의 다른 포트로 가도록 해주는 것 패킷에 변화가 생기기 때문에 IP, TCP/UDP의 Checksum도 다시 계산되어 기록해야 한다. 일반적으로 사설 네트워크에 속한 여러 개의 호스트가 하나의 공인 IP주소를 사용해 인터넷에 접속하도록 할 때 사용된다. 포트포워딩 패킷이 라우터나 방화벽과 같은 네트워크 장비를 가로지르는 동안 특정 IP 주소와 포트 번호의 통신요청을 다른 IP와 포트 번호로 넘겨주는 NAT의 응용기술이다. 이 기법은 게이트웨이(외부망..