네트워크에 관한 정리

YEON·2022년 7월 12일
0

면접 준비

목록 보기
2/5

📝 네트워크에 관해 공부한 것을 한 큐👁에 정리해보고자 합니다 (업데이트 상시 예정)


네트워크

웹 동작 방식 (Google)

www.google.com 에 접속할 때 생기는 과정은?

  1. 사용자가 브라우저에 URL(www.naver.com)을 입력
  2. DNS 서버에 해당 도메인의 IP 주소를 요청하고 받는다.
  3. 브라우저는 HTTP 프로토콜을 사용하여 요청 메시지를 보냄
  4. HTTP 요청 메시지는 TCP/IP 프로토콜을 사용하여 서버로 전송
  5. 웹 서버는 HTTP 응답 메시지를 보냄
  6. 도착한 HTTP 응답 메세지는 웹 페이지 데이터로 변환되고, 웹 브라우저에 의해 출력





OSI 7 Layer

OSI 7 Layer 란?

계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 파악할 수 있기 때문이다.
또한 특정 이상이 생기면 다른 단계의 장비 및 SW를 건들이지 않고도 이상이 생긴 단계만 고칠 수 있기 때문이다.

  • 1 계층 (물리 계층)
    ◦ 물리적으로 연결된 장치를 위해서 전기 신호로 변환하는 계층
    ◦ 통신 단위 : Bit / 대표 장비 : Repeater, Hub, 케이블

  • 2 계층 (데이터링크 계층)
    ◦ 데이터를 받아서 에러 검출 및 신뢰 할 수 있게 전송하는 역할
    ◦ 전송 단위 : frame(패킷을 담는 컨테이너) / 대표 장비 : 브리지, 스위치

  • 3 계층 (네트워크 계층)
    ◦ 데이터를 목적지까지 가장 빠르게 전달하는 계층
    ◦ 통신 단위 : Packet / 대표 장비 : Router, L3 Switch / 프로토콜 : IP, ICMP

  • 4 계층 (전송 계층)
    ◦ 최종 수신 프로세스로 데이터의 전송을 담당하는 계층 (3 way-handshake)
    ◦ 통신 단위 : Segment / 프로토콜 : TCP, UDP

  • 5 계층 (세션 계층)
    ◦ 컴퓨터끼리(양 끝의 프로세스가) 통신을 하기 위한 세션을 담당하는 계층
    ◦ Data, Message / 동기화

  • 6 계층 (표현 계층)
    ◦ 사용자에게 보여줄 수 있도록 데이터의 형식을 정의하는 계층
    ◦ Data / 암호화, 코드 간 번역

  • 7 계층 (응용 계층)
    ◦ 사용자에게 통신을 위한 서비스 제공
    ◦ Data / HTTP, FTP, SMTP, DNS 등







HTTP 프로토콜

HTTP

✔︎ 인터넷에서 클라이언트와 서버가 데이터를 주고받기 위한 프로토콜(규칙)이다.

HTTP의 특징
대표적으로 2가지가 있다.

  • 상태 정보를 저장하지 않는 Stateless (무 상태)
    ◦ 서버가 클라이언트 상태를 보존하지 않는 것이다.
    ◦ 이는 해당 서버가 장애가 생겨도 다른 서버로 대체할 수 있는 서버 확장성 높일 수 있지만 (스케일 아웃)
    ◦ 클라이언트가 데이터를 추가적으로 전송해야한다는 단점이 있다. (로그인 등에서 불편)

  • 응답을 보낸 후 연결을 끊는 Connectionless (비 연결성)
    ◦ 비 연결성을 지니므로 응답을 주고 받고나면 TCP/IP 연결을 끊는다. (기본적으로 TCP/IP는 연결을 유지)
    ◦ 이를 통해 최소한의 자원 으로 서버를 유지할 수 있다.
    ◦ 그 얘기는 즉슨, TCP/IP 연결을 다시 맺어야 하므로 시간이 소요된다. (HTTP 지속 연결로 문제 해결)

이러한 특징들은, 각각의 HTTP 요청에 독립적으로 응답 만 보내주는 것으로 간단하지만
이전 통신 정보를 모르기 때문에 매번 인증을 해주거나, 쿠키나 세션을 사용하여 데이터를 처리해야한다.

HTTP 구성
Method, Path, Version, Headers, Body 등으로 구성된다.

HTTPS

✔︎ HTTPS는 HTTP의 보안적 약점을 보완한 프로토콜이다.

HTTP는 평문 통신으로 원래 TCP와 직접 통신했지만,
HTTPS에서 HTTP는 SSL과 통신하고, SSL이 TCP와 통신함으로써 암호화와 증명서, 안전성 보호를 이용할 수 있다.

(* SSL : 인터넷을 통해 전달되는 정보를 보호하기 위해 개발한 통신 규약 )
(* SSL 동작방법 : SSL은 암호화된 데이터를 전송하기 위해서 '공개키'와 '대칭키' 암호화 방식을 혼합하여 사용한다.)


HTTP Method

HTTP 프로토콜에서 서버와 클라이언트 간 통신에 활용되는 요청(Request)메소드이다.

  • GET
    데이터를 조회하기 위해 사용되는 방식으로 데이터를 헤더에 추가하여 전송하는 방식.
    URL에 데이터가 노출되기 때문에 보안적으로 중요한 데이터를 포함해서는 안된다.

  • POST
    데이터를 추가 또는 수정하기 위해 사용되는 방식으로 데이터를 바디에 추가하여 전송하는 방식.
    완벽히 안전하지는 않지만, URL에 데이터가 노출되지 않아 GET보다는 안전하다.

  • PUT / PATCH
    POST와 유사한 전송 구조를 가지며 데이터 수정을 위해 전송되는 방식.
    다만 PUT은 데이터 전체 (없을시 NULL), PATCH는 데이터 일부에 활용된다.

  • DELETE
    데이터를 제거할때 사용한다.

멱등성

"HTTP 메서드가 멱등성을 가졌다." 는 것은,
동일한 요청을 한 번 보내는 것과 여러 번 연속으로 보내는 것이 같은 효과를 지니고, 서버의 상태도 동일하게 남는다는 것이다. 한 마디로 멱등성은 '요청의 효과'를 보고 판단하는 것이다.
서버의 상태는 멱등성이 유지되어야 하는경우 같은 행위를 여러 번 반복하더라도 같은 효과를 가져야 한다.
때문에 조회 목적인 GET 은 멱등성을 가지고 수정 목적인 POST 는 멱등성을 가지지 않는다.


REST

Resource와 Method를 활용하여 자원에 접근하는 방식 을 정해놓은 방식(규칙)이다.

  • HTTP URI 를 통해 자원을 명시하고
  • HTTP Method 를 통해 자원에 대한 행위를 표현한다.

REST의 원리(특징)를 따르는 API를 REST API 라고 말하고,
REST의 원리를 잘 따르는 시스템을 RESTful 이라고 지칭한다.

REST 장점

  • HTTP 프로토콜 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다
  • HTTP 프로토콜 표준을 최대한 활용하여 여러 추가적인 장점들을 가져간다
  • REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다
  • 서버와 클라이언트의 역할을 명확하게 분리한다

다만, HTTP Method가 4가지로 제한적이고 표준 자체가 존재하지 않아 정의가 필요하다는 단점이 있다.





쿠키 vs 세션

HTTP의 특징을 보완 하기 위하여 활용된다. (Connectionless , Stateless)

한마디로, 쿠키와 세션은 HTTP 프로토콜에서 상태를 유지하기 위한 기술 이다.
쿠키, 세션을 활용하게 되면 상태값을 저장 함으로써 사용자의 현재 상태값을 기억할 수 있다.
또한, 쿠키의 지속성 덕분에 서버로 유입되는 수많은 요청들에 대해 각 요청이 어느 브라우저에서 오는 것인지 판단할 수 있다.

쿠키

쿠키라는 데이터는 단순히 <이름>=<값> key, value 로 구성된 형태의 문자열(데이터) 이다.
서버가 어떤 데이터를 브라우저 측에 저장한 후 다시 그 데이터를 받아오는 기술(데이터 그 자체) 를 뜻한다.
쿠키는 주로 일정시간 임시 데이터를 클라이언트인 브라우저에 저장하기 위하여 사용된다.

세션

세션이란 클라이언트의 상태 정보를 서버 메모리에 저장하는 기술,
일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술이다.
클라이언트와 서버간 네트워크 연결이 지속 유지되어있는지 를 알기 위하여 사용된다.

세션은 쿠키와 달리 서버에서 관리한다.
클라이언트에게 세션ID를 부여하며, 브라우저가 종료될 때까지 인증 상태를 유지한다.
서버에만 저장되므로 쿠키에 비해 보안성이 높으나, 동접자 수가 많은 경우 서버에 과부하를 줄 수 도 있다.


세션 vs 토큰 기반인증

세션 기반 인증
클라이언트로부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful 한 구조를 가진다.
다만, 서버에 세션을 저장하기 때문에 사용자가 증가하면 서버에 과부하를 줄 수 있어 확장성이 낮을 수 있다.
또한, 세션을 관리할 때 사용되는 쿠키는 설계 상 여러 도메인에서 관리하기 어렵기 때문에 단일 도메인에서 더 적합하다.

토큰 기반 인증
토큰 기반 인증은 상태 정보를 서버에 저장하지 않으므로 Stateless 한 구조를 가진다.

JWT 토큰 기반인증

JWT는 JSON 포맷을 이용하는 Claim 기반의 웹 토큰이다.
토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.

JWT는 [헤더(Header).내용(Payload).서명(Signature)] 으로 구성되며 각 파트를 점(.)으로 구분한다.
이때, 서명은 암호화 코드로 헤더와 내용의 값을 인코딩하거나 토큰의 유효성을 검증한다.






TCP vs UDP

TCP

네트워크 계층 중 전송 계층(Transport Layer)에서 사용하는 데이터 통신을 위한 프로토콜이다.

TCP는 연결형 서비스3-way handshaking 과정을 통해 연결을 설정한다.
(다만 통신 종료시에는 4-way handshaking 과정이 이루어진다.)
그렇기 때문에 높은 신뢰성을 보장하지만(연결이 확인된 후 통신), 속도가 비교적 느리다는 단점이 있습니다.
TCP는 신뢰성이 중요한 파일 교환과 같은 경우에 쓰입니다.

TCP 서버 특징

  • 서버소켓은 연결만 담당한다.
  • 서버와 클라이언트는 1대1로 연결된다.
  • 스트림 전송으로 전송 데이터의 크기가 무제한이다.
  • 패킷에 대한 응답을 해야하기 때문에(시간 지연, CPU 소모) 성능이 낮다.
  • Streaming 서비스에 불리하다. (손실된 경우 재전송 요청을 하므로)

3 way-handshaking

TCP/IP 프로토콜을 이용하여 통신하기 전에 정확한 전송을 보장하고자 연결이 잘 되어있는지 확인 하는 것이다.
보통 데이터 송수신 시작 전에 이뤄지며 3단계로 이루어져 3 way-handshaking 이다.

  1. 클라이언트가 서버에게 연결 요청 메시지를 전송한다. (SYN 패킷)
  2. 서버가 수락하고 (SYN + ACK) 를 보낸다.
  3. 클라이언트가 다시 ACK 를 보내고 연결을 맺는다. (데이터 송수신)

UDP

마찬가지로, 네트워크 계층 중 전송 계층(Transport Layer)에서 사용하는 데이터 통신을 위한 프로토콜이다.

UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있.
하지만 수신 여부를 확인하지 않기 때문에 속도가 빠릅니다.
UDP는 실시간성이 중요한 스트리밍에 자주 사용됩니다.
(+ 하지만 UDP도 신뢰성을 UDP자체에서 보장하지 않는 것 뿐이지, 개발자가 직접 신뢰성을 보장하도록 할 수 있다.)

UDP 서버 특징

  • 비연결형 서비스로 데이터그램 방식을 제공한다.
  • 비연결형 서비스이기 때문에, 연결을 설정하고 해제하는 과정이 존재하지 않는다. (TCP보다 속도가 빠르다.)
  • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
  • UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
  • 신뢰성이 낮다.
  • 패킷에 순서를 부여하여 재조립을 하거나 흐름 제어 또는 혼잡 제어와 같은 기능을 처리하지 않는다.





IP

공인 IP

전세계에서 유일한 IP로 ISP(인터넷 서비스 공급자)가 제공하는 IP주소

외부에 공개되어 있기 때문에 인터넷에 연결된 다른 장비로부터 접근이 가능하다.
그에 따라 방화벽 등과 같은 보안 설정을 해주어야 한다.

사설 IP

일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소이다.

IPV4가 부족하므로 네트워크 안에서 라우터를 통해 할당받는 가상의 주소이다.
별도의 설정 없이는 외부에서 접근이 불가능하다.
(라우터를 통해 1개의 공인 IP를 할당하고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당 받아 인터넷에 접속 할 수 있다.)





CORS

CORS(Cross Origin Resource Sharing) 는, '서로 다른 도메인간에 자원을 공유 ' 하는 것을 의미하며 기본적으로 차단되어있다.

원래, SOP(Same-Origin Policy)는 '같은 출처에서만 리소스를 공유할 수 있다.'는 규칙을 가진 정책이다.
하지만 다른 출처의 리소스를 사용해야하는 경우는 많으므로 'CORS 정책을 지킨 리소스 요청' 은 예외 조항으로 허용되었다.

CORS의 동작

  1. 클라이언트가 다른 출처의 리소스를 요청할 때는 HTTP 프로토콜을 사용하여 요청을 보낸다.
  2. 브라우저는 요청 헤더에 Origin 이라는 필드에 요청을 보내는 출처를 함께 담아 보낸다.
    (Origin이란 출처를 말하며, Protocol + Host + Port 를 합친 것을 의미한다.)
  3. 서버가 이 요청에 대한 응답을 할 때 응답 헤더의 Access-Control-Allow-Origin 을 비교해본 후 이 응답이 유요한 응답인지 아닌지를 결정한다.

CORS 에러 해결은 서버에서 응답 헤더에 특정 헤더를 포함 하는 방식으로 해결할 수 있다.

  • 자세한 정리는 CORS 포스팅 참조








🖍 면접 질문

1. 브라우저에 google을 검색했을 때 동작 방식에 대해서 설명해주세요

사용자가 브라우저에 URL 을 검색하고나면, DNS 서버에서 도메인에 맞는 IP 주소를 요청하고 받아오게 됩니다.
HTTP 프로토콜을 사용하여 TCP/IP 프로토콜을 사용하여 서버에게 요청 메시지를 보냅니다.
이후 웹 서버가 HTTP 응답 메시지를 보내면 웹 페이지 데이터로 변환되어 브라우저에 의해 출력됩니다.

2. OSI 7 Layer에 대해서 설명해주세요

OSI 7 Layer는 네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것입니다.
계층을 나눈 이유는 통신이 일어나는 과정을 단계 별로 파악할 수 있고, 특정 이상이 생기면 해당 단계만 살펴볼 수 있기 때문입니다.

물리, 데이터 링크, 네트워크, 전송, 세션, 표현, 응용 계층으로 나뉘어져있으며
네트워크(3계층)에서 라우터를 통해 데이터의 경로를 설정하고, IP 프로토콜을 통해 패킷을 전달합니다.
전송(4계층)에서 TCP/UDP프로토콜을 사용하여 패킷(데이터)들을 전송합니다.
이후 응용(7계층)에서 HTTP 프로토콜을 사용하여 사용자에게 통신을 위한 서비스 제공합니다.

3. HTTP 프로토콜에 대해서 설명해주세요

클라이언트와 서버가 데이터를 주고받기 위한 프로토콜입니다.
HTTP 특징으로는 Stateless, Connectionless 가 있으며
이와 같은 특징 들로 HTTP 요청에 독립적으로 응답을 보내줄 수 있지만, 통신 정보를 모르기 때문에 인증 혹은 쿠키 세션 등으로 데이터를 처리해야합니다.

4. HTTP 와 HTTPS 프로토콜은 어떤 차이가 있는지 설명해주세요

HTTPS는 HTTP의 HTTP의 보안적 약점을 보완한 프로토콜입니다.
HTTP가 TCP와 직접 통신하는 것과 달리, HTTPS에서 HTTP는 SSL과 통신하고, SSL이 TCP와 통신함으로써 보안적인 측면을 보완하였습니다.

5. GET, POST에 대해 설명해주세요

Http method 로 GET은 헤더에 데이터를 담아서 데이터 조회를 요청합니다.
POST는 바디에 데이터를 담아서 데이터를 추가, 수정하기 위해 사용되는 방식입니다.

이때 둘의 차이점은 GET은 헤더에 데이터가 노출되기 때문에 보안적인 측면을 고려해야하고,
GET은 멱등성을 가지지만 POST는 멱등성을 가지지 않습니다.

6. REST API 에 대해 설명해주세요

REST 는 자원과 메서드를 활용하여 자원에 접근하는 방식을 정해놓은 방식입니다.
HTTP URI 를 통해 자원을 명시하고, HTTP Method 를 통해 자원에 대한 행위를 표현합니다.

7. 왜 REST API 로 구현하였나요?

REST API로 개발하게 되면 다양한 플랫폼으로의 확장이 가능하다는 장점이 있었고,
RESTful API 로 설계한다면 다른 애플리케이션들도 RESTful API를 통해 상호간에 통신이 편리하다고 생각했기 때문에 REST API로 개발하게 되었습니다.

8. TCP, UDP에 대해 설명해주세요

전송 계층에서 사용하는 데이터 통신을 위한 프로토콜이다.
TCP는 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하고, 그렇기 때문에 신뢰성은 높지만 속도가 느리다는 단점이 있습니다. (신뢰성이 높은 파일 교환등)
UDP는 비연결형 서비스로 속도는 빠르지만 UDP 자체에서 신뢰성을 보장하지 않기 때문에 개발자가 직접 신뢰성을 보장해야합니다. (실시간 스트리밍 등)

9. TCP의 3 way-handshaking 과정에 대해서 설명해주세요

클라이언트가 서버에게 SYN 연결 요청 메시지를 전송하면, 서버가 SYN + ACK을 통해 수락합니다.
이후 클라이언트가 다시 ACK 를 보내며 연결을 맺습니다.

10. 쿠키, 세션에 대해 설명해주세요

쿠키와 세션은 HTTP 프로토콜에서 상태를 유지하기 위한 기술이다.
쿠키, 세션을 활용하게 되면 상태값을 저장 함으로써 사용자의 현재 상태값과 상태 유지를 기억할 수 있습니다.

쿠키는 key,value 로 이루어진 데이터로 클라이언트에 저장됩니다.
세션은 클라이언트의 상태 정보를 서버 메모리에 저장시키는 기술입니다.

11. 세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요

토큰 기반 인증은 클라이언트의 상태 정보를 서버에 저장하지 않으므로 Stateless 구조인 반면,
세션 기반 인증은 상태 정보를 저장하는 Stateful 구조입니다.

다만, 서버에 세션을 저장하기 때문에 사용자가 증가하면 서버에 과부하를 줄 수 있어 확장성이 낮을 수 있다.

12. CORS 에 대해 설명해주세요

서로 다른 도메인간에 자원을 공유하는 것을 의미합니다.
원래 SOP에 따라 같은 출처에서만 리소스를 공유할 수 있지만 CORS 정책을 지킨 리소스 요청은 예외 조항으로 허용되었습니다.







[참조]
https://dev-coco.tistory.com/161?category=1056309
https://kangsu-2ji.tistory.com/160
https://shlee0882.tistory.com/110 /7L
https://worlf.tistory.com/5 /7L
https://mangkyu.tistory.com/91 /TCP

profile
- 👩🏻‍💻

0개의 댓글