SMAIVNN
article thumbnail

최근에 면접을 볼 기회가 있었는데요.. 몇가지 질문에 확실히 답을 못했습니다. 더 아쉬운 것은, 해당 질문들이 분명 과거에 프로젝트를 하고 공부를 하면서 한 번은 본 내용이라는 것입니다.

 

'아 그렇구나' 하면서 분명히 기억하던 내용인데 막상 면접에 들어가니 긴장해서인지 기억이 나지 않더라고요.. 면접장을 나오면서 차분히 떠올리니 스멀스멀 머릿속에 떠오르덥니다 ㅋㅋ

 

이와 관련한 내용을 저도 복기 및 숙지할 겸 기록합니다.

 

OSI 7계층, 전송 계층 그리 패킷

 

https://www.cloudflare.com/ko-kr/learning/ddos/glossary/open-systems-interconnection-model-osi/

 

우선, 네트워크의 통신 과정을 담는 OSI 7계층은 다들 아실겁니다. OSI 모델의 각 계층은 특정 작업을 처리하고 그 위와 아래의 계층과 통신합니다. 그 중 전송 계층은 네트워크 통신을 이해하기 위해 자주 언급되는데요, 주로 데이터 전송의 신뢰성과 효율성을 보장하는 중요한 역할을 합니다. TCP, UDP는 대표적인 L4 레이어인 전송 계층(Transport Layer)의 프로토콜입니다.

 

OSI 7계층에서는 각 레이어에 해당하는 패킷이 있는데요, 하위 레이어에서 올라온 패킷에, 해당 레이어의 추가적인 정보를 추가하는 방식입니다.

 

전송계층의 대표적인 패킷은 세그먼트입니다. 세그먼트는 데이터를 전달하기 위한 여러 필드로 구성됩니다. 주요한 필드로는 송신자와 수신자의 포트 번호, 순서 번호, 확인 응답 번호 등이 있습니다. 이러한 필드들은 데이터가 정확한 목적지에 도달하고, 전송 중 손실되거나 순서가 뒤바뀌지 않도록 보장하는 데 중요한 역할을 합니다.

 

저 같은 경우, 학부 시절 각 레이어의 패킷을 모두 외웠었는데.. 그 이후로는 모두 패킷으로 통합해서 사용하다가 이번 면접에서는 세그먼트라는 단어가 생각이 나지 않아 당황한 경험이 있습니다. 전송 계층의 패킷을 묻는 질문에, 순간 당황하여 아래 나올 3-way handshake의 의 연결 수립 패킷에 대해 답하려고 했습니다 ..하하

 

TCP와 UDP

전송계층에서 사용되는 대표적인 프로토콜로는 TCP(Transmission Control Protocol)와 UDP(User Datagram Protocol)가 있습니다. TCP는 신뢰성을 중시하며, 데이터의 순서 보장과 오류 복구 메커니즘을 통해 안정적인 통신을 제공합니다. 반면 UDP는 데이터의 빠른 전송을 우선으로 하며, 신뢰성을 보장하지 않기 때문에 실시간 통신이나 멀티미디어 스트리밍과 같이 지연이 중요한 경우에 사용됩니다.

 

HTTP3 이전의 HTTP 통신에서는 주로 TCP가 사용되었습니다. 그 이유는 웹 통신에서 데이터의 신뢰성과 순서 보장이 중요하기 때문입니다. TCP는 3-way handshake 과정을 통해 연결을 설정하고, 데이터의 손실을 복구하며, 전송된 데이터의 순서를 보장하여 웹 페이지를 안정적으로 로딩할 수 있도록 합니다. 이러한 특성 덕분에 HTTP1.1과 HTTP2에서는 TCP가 널리 사용되었습니다.

 

HTTP 1.1과 Keep-Alive

HTTP1.1에서는 Keep-Alive 기능이 추가되어 여러 번의 요청을 하나의 연결을 통해 처리할 수 있게 되었습니다. 만약 요청마다 계속해서 새로운 TCP연결을 생성하면 오버헤드가 중복해서 발생하는데요, 이는 이러한 오버헤드를 줄이고 해결하기 위해 도입되었습니다.

 

Keep-Alive가 활성화되면, 초기 연결이 설정된 이후 해당 연결을 일정 시간 동안 유지하여, 여러 요청들이 같은 연결을 재사용하게 됩니다. 이를 통해 연결 설정과 해제 과정에서 발생하는 지연을 줄이고, 서버와 클라이언트 간의 통신 효율을 높일 수 있습니다. 즉, Keep-Alive는 한번 설정된 연결을 계속 유지하여 다수의 요청을 효율적으로 처리할 수 있도록 합니다.

 

HTTP3

하지만 HTTP3는 조금 다릅니다. HTTP1.1과 HTTP2는 TCP를 사용하여 데이터의 신뢰성을 보장했지만, 이러한 신뢰성을 유지하기 위한 연결 설정 및 복구 과정에서 지연이 발생하는 단점이 있었습니다. 이를 개선하기 위해 HTTP3에서는 QUIC(Quick UDP Internet Connections) 프로토콜을 도입하여 UDP를 사용합니다. UDP는 TCP와 달리 연결 설정에 소요되는 시간이 없기 때문에 지연이 감소하고, QUIC은 UDP 위에서 데이터 신뢰성을 보장하는 추가적인 기능을 구현하여 빠른 속도와 신뢰성을 동시에 확보할 수 있게 합니다. 이러한 이유로 HTTP3에서는 UDP를 채택하여 네트워크 성능을 크게 향상시켰습니다.

 

결과적으로, 이제는 UDP에서도 어느정도의 신뢰성을 보장받을 수 있어 성능적인 개선이 이루어 진 것입니다.. 

 

CORS

CORS(Cross-Origin Resource Sharing)는 웹 브라우저가 다른 출처의 리소스를 요청할 때 발생할 수 있는 보안 문제를 해결하기 위해 사용되는 메커니즘입니다. 웹 브라우저는 보안 상의 이유로, 기본적으로 다른 출처의 리소스에 접근하는 것을 제한합니다. 그러나 실제로는 다양한 API와 서비스를 이용하여 여러 출처 간에 데이터를 주고받아야 하는 경우가 많습니다. 이때 CORS를 사용하여 서버 측에서 특정 출처에 대한 접근을 허용함으로써, 보안은 유지하면서도 필요한 자원 공유를 가능하게 합니다. 

 

같은 백엔드 서버 간의 통신에서는 일반적으로 CORS를 사용하지 않습니다. 이는 백엔드 간의 통신이 브라우저의 보안 정책에 의해 제한되지 않기 때문입니다. 서버 간 통신은 보통 네트워크 내부에서 이루어지며, HTTP 요청을 직접 주고받는 형태로 이루어집니다. 이러한 통신에서는 API 키, 인증 토큰 등의 보안 메커니즘을 사용하여 안전성을 확보합니다. 백엔드 서버 간의 통신은 신뢰할 수 있는 네트워크 환경에서 이루어지는 경우가 많아, 클라이언트-서버 통신에서와 같은 CORS 정책이 필요하지 않습니다.

 

정리

그 외에도 다양한 질문이 있었지만, 연관되는 분야의 내용들과 관련하여 정리해보려고 했습니다. 정말 뭔가 다 한번씩 생각해본 내용이고 이전에 유튜브든, 책에서든 본 내용이라 더 아쉬운 면접이였던 것 같습니다.

 

하지만 이번 기회에 제대로 알게 되었으니 그것 또한 좋은 일 아닐까요. 이 글을 읽은 여러분들도 확실하게 알고 가시면 좋을 것 같습니다. 

profile

SMAIVNN

@SMAIVNN

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!