이하 내용은 기술면접대비 CS 전공 핵심 요약집의 내용을 참고하였으며 스터디원들과 나누고 정리한 내용이기 때문에 틀린 부분이 있을 수 있습니다.
💡 데이터 캡슐화란 무엇인가요?
계층간 데이터를 전달하며 정보를 담은 헤더나 트레일러가 붙는 과정을 말합니다.
💡 그렇다면 데이터 캡슐화를 하는 이유는 무엇인가요?
수신부의 같은 계층에서 데이터의 호환성을 높이고 오류의 영향을 최소화하기 위함입니다.
💡 프로토콜은 무엇인가요?
프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계를 의미합니다.
💡 OSI 7계층에 대해 설명해주세요.
네트워크 통신이 이뤄지는과정을 7단계로 나눈 네트워크 표준 모델입니다.
- 응용 계층 : HTTP, FTP 등의 프로토콜을 응용 프로그램의 UI를 통해 제공합니다.
- 표현 계층 : 데이터의 형식을 정의하는 계층입니다.
- 세션 계층 : 세션의 유지 및 해제 등 응용 프로그램 간 통신 제어와 동기화를 합니다.
- 전송 계층 : 데이터를 전달하기 위한 계층이며 TCP, UDP 같은 전송 방식과 포트 번호를 결정합니다.
- 네트워크 계층 : 데이터를 보내기 위한 최적 경로를 선택하는 라우팅을 수행합니다.
- 데이터링크 계층 : 데이터의 물리적인 전송과 에러 검출, 흐름 제어를 담당합니다.
- 물리 계층 : 데이터를 전기 신호로 바꿔주는 계층입니다.
💡 OSI 7계층 중 어떤 계층이 헤더와 트레일러가 붙어있을까요? 그리고 트레일러가 붙는 이유는 무엇일까요?
데이터 링크 계층에 헤더와 트레일러가 붙습니다.
트레일러는 데이터 송신 도중 오류가 발생하는지 확인하는 용도로 사용되기 때문에 데이터 링크 계층에 붙습니다.
💡 패킷은 무엇인가요?
패킷은 네트워크에서 주고받는 데이터를 작게 분할한 단위를 말합니다. 패킷에는 데이터의 송신 주소, 수신 주소 등의 정보가 포함되어 있어 데이터를 목적지에 제대로 전달할 수 있도록 합니다.
💡 IPv4와 IPv6의 차이는 무엇인가요?
주소 공간이 32bit 에서 128bit로 증가했습니다.
헤더의 불필요한 필드를 제거했습니다.
보안 기능이 강화되었으며, IPSec 기능을 기본 사항으로 제공합니다.
주소를 자동으로 설정합니다.
IPSec은 네트워크에서의 안전한 연결을 설정하기 위한 통신 규칙 또는 프로토콜 세트입니다.
💡 IP주소는 무엇인가요?
Internet Protocol 의 약자로 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약을 의미합니다.
💡 서브넷마스크는 무엇인가요?
IP주소의 네트워크부와 호스트부를 구분하기 위해 사용됩니다.
IP와 동일한 구조인 8자리 2진수 4개로 구성되고, 1과 0으로 이루어져있습니다.
서브넷마스크를 IP주소와 and 연산을 통해 네트워크부와 호스트부를 구분할 수 있습니다.
💡 TCP와 UDP의 차이에 대해 설명해주세요.
TCP는 연결형 서비스입니다. 때문에 데이터의 신뢰성을 보장합니다. 패킷을 전달받았는지 확인하고, 패킷의 순서가 유지되며 전송 속도가 느립니다. 가상회선 방식을 사용하여 모든 패킷이 하나의 회선으로 전달됩니다.
3-way handshaking 방식을 통해 연결하고 4-way handshaking 방식을 통해 연결을 해제합니다.
UDP는 비연결형 서비스입니다. 때문에 데이터의 신뢰성을 보장하지 않습니다. 패킷을 전달받았는지 확인하지 않고 전송하고, 패킷의 순서가 유지되지 않으며 전송 속도가 빠릅니다. 데이터그램 방식을 사용하여 모든 패킷이 다른 회선으로 전달될 수 있습니다.
💡 3-way handshaking에 대해 설명해주세요.
TCP에서 연결할 때 사용되는 방식입니다.
1. 송신자가 수신자와 연결하기 위해 SYN(N)을 보냅니다.
2. 수신자는 이를 수신하고 ACK(N+1) + SYN(M) 메시지를 송신자에게 보냅니다.
3. 송신자는 ACK(M+1) 메시지를 다시 수신자에게 보내 연결됩니다.
💡 4-way handshaking에 대해 설명해주세요.
TCP에서 연결을 해제할 때 사용되는 방식입니다.
1. 송신자가 수신자와 연결을 종료하기 위해 FIN 메시지를 보냅니다.
2. 수신자가 송신자로부터 FIN 메시지를 받으면 응답으로 ACK 메시지를 보냅니다. 수신자는 메시지를 보낸 뒤 연결을 종료하기 위한 작업을 수행합니다.
3. 수신자는 연결을 종료할 준비가 끝나면 송신자에게 FIN 메시지를 보냅니다.
4. 송신자는 수신자로부터 받은 FIN 메시지에 응답하기 위해 ACK 메시지를 보냅니다.
💡 TCP가 데이터 신뢰성을 보장하기 위해 어떤 방법을 사용하나요?
흐름제어, 혼잡제어, 오류제어를 사용합니다.
💡 흐름제어는 무엇인가요?
송신자의 데이터 처리 속도와 수신자의 데이터 처리 속도의 차이 때문에 생기는 데이터 손실을 방지하는 방법입니다.
💡 그렇다면 흐름제어의 방식은 어떤 것이 있나요?
정지-대기 방식 : 송신자가 데이터를 보낸 뒤 수신자에게 ACK 메시지를 받을 때까지 기다리는 방법입니다. 응답을 받아야만 다음 메시지를 보낼 수 있어 속도가 느립니다.
슬라이딩 윈도우 : 송신자가 수신여부를 확인하지 않고 윈도우 크기만큼 데이터를 연속적으로 보낼 수 있게 해서 데이터의 흐름을 동적으로 제어하는 방식입니다.
💡 혼잡제어는 무엇인가요?
송신자의 데이터 전달 속도와 네트워크의 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법입니다.
여기서 혼잡은 네트워크에 패킷 수가 과도하게 증가하는 증상을 의미합니다.
💡 그렇다면 혼잡제어의 방식은 어떤 것이 있나요?
AIMD : 데이터를 전달할 때 합 증가 방식으로 혼잡 윈도우의 크기를 더해가면서 키우다 데이터 손실이 발생하면 혼잡 윈도우 크기를 곱 감소 방식을 적용하는 방식입니다. 이 방법은 시간이 지나면 여러 송신부 간에 네트워크 대역폭을 공평하게 사용할 수 있는 장점이 있지만 대역폭을 넓게 사용하기까지 시간이 오래 걸린다는 단점이 있습니다.
느린 시작 : 윈도우 크기를 지수 함수 형태로 늘려갑니다. 그러다 혼잡이 발생하면 윈도우 크기를 1로 줄이는 방식입니다.
혼잡 회피 : 느린 시작과 동일하지만 윈도우 크기에 대한 임계점을 정하는 방식입니다. 윈도우 크기가 임계점에 도달하면 윈도우 크기는 선형적으로 증가합니다. 타임아웃이 발생하면 해당 시점의 윈도우 크기에서 절반을 임계점으로 설정하고, 윈도우 크기를 초기값으로 변경합니다.
빠른 회복 : 혼잡이 발생하면 윈도우 크기를 절반으로 줄인 후, 선형적으로 증가하는 방식입니다. 혼잡이 처음 발생하면 AIMD 방식으로 동작한다고 할 수 있습니다.
빠른 재전송 : Duplicate ACK가 3번 발생하면 해당 시점의 윈도우 크기를 1/2로 줄입니다.
💡 오류제어는 무엇인가요?
데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어하는 방식입니다.
오류 또는 유실을 인지하는 경우는 다음과 같습니다. 수신부에게 NAK응답을 받거나, 3 Duplicate ACK가 발생할 때, 타임아웃이 발생할 때.
💡 그렇다면 오류제어의 방식은 어떤 것이 있나요?
정지 대기 : 타임아웃이 발생하면 해당 패킷을 다시 보내는 방식입니다.
Go-Back-N ARQ : 연속적으로 데이터를 보냈을 때 누락된 데이터가 있으면 송신부에서 해당 데이터부터 재전송하는 방식입니다.
Selective-Repeat ARQ : 연속적으로 데이터를 보냈을 때 누락된 데이터가 있으면 수신부에서 해당 데이터만 재전송을 요청하는 방식입니다. 받은 패킷을 재정렬하는 로직이 추가로 필요합니다.
💡 TCP Tahoe와 TCP Reno에 대해 설명해주세요.
TCP Tahoe : 느린 시작을 사용해 혼잡 윈도우 크기를 지수적으로 키웁니다. 혼잡이 발생했다고 판단되면 혼잡이 발생한 윈도우 크기의 절반을 ssthresh로 설정하고 혼잡 윈도우의 크기를 초기화합니다.
TCP Reno : 느린 시작을 사용해 혼잡 윈도우 크기를 지수적으로 키웁니다. 3 Duplicate ACK이 발생한 경우 혼잡 윈도우 크기를 절반으로 줄이고, 줄인 혼잡 윈도우 크기를 ssthresh 값으로 설정합니다. 타임아웃의 경우 혼잡 윈도우 크기를 1로 초기화 하고 ssthresh 값은 변경하지 않습니다.
💡 UDP의 오류 검출은 어떻게 하나요?
최소한의 신뢰성을 보장하기 위해 체크섬을 사용합니다.
체크섬은 데이터의 무결성을 보장하는 간단한 방법으로 체크섬을 만들기 위한 데이터를 모두 더한 뒤 오버플로우가 발생하는 캐리를 다시 더해 1의 보수를 취하여 만듭니다. 수신부는 체크섬을 포함한 모든 값을 더해 비트가 모두 1이 나오는지 확인합니다.
하지만 체크섬을 이용해도 100% 오류를 검출할 수 없습니다.
💡 세션과 쿠키의 차이가 무엇인가요?
세선 : 서버에서 클라이언트와의 연결 정보를 저장 및 관리하는 것을 말합니다. 상태를 유지시키며 접속자가 많은 경우 서버에 과부하가 올 수 있습니다.
쿠키 : 클라이언트에 저장하는 데이터로 키와 값을 저장합니다.
💡 HTTP와 HTTPS의 차이는 무엇인가요?
HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에 보안 계층을 추가한 것이 HTTPS입니다.
HTTP는 SSL과 통신하고 SSL이 TCP와 통신함으로써 암호화와 증명서, 안정성 보호를 이용할 수 있습니다.
💡 웹 페이지 접속 과정을 설명해주세요.
1. 사용자가 브라우저에 URL을 입력합니다.
2. DNS 서버에 도메인 네임으로 서버에 연결할 IP를 요청합니다.
3. DNS 서버는 IP 주소를 웹 브라우저에게 응답으로 제공합니다.
4. 브라우저는 IP주소로 웹 서버에 TCP/IP 연결을 하고 HTTP 요청 메시지를 보냅니다.
5. 웹 서버는 받은 HTTP 요청에 응답합니다. 응답은 웹 페이지와 필요한 리소스를 포함합니다.
6. 브라우저는 받은 응답을 바탕으로 사용자에게 웹 페이지를 보여줍니다.
💡 DNS는 무엇인가요?
Domain Name System의 약자로 도메인 이름과 IP주소를 서로 변환하는 역할을 합니다.
DNS는 HTTP 프로토콜 중 하나이고 UDP를 사용합니다.
💡 대칭키 암호화 방식과 공개키 암호화 방식에 대해 설명해주세요.
대칭키 암호화 방식 : 암호화와 복호화에 같은 암호 키를 사용하는 알고리즘입니다. (e.g AES)
공개키 암호화 방식 : 암호화와 복호화에 다른 암호 키를 사용하는 알고리즘입니다. (e.g RSA)
💡 REST는 무엇인가요?
Representational State Transfer의 약자로 HTTP 통신을 활용하기 위해 고안된 아키텍처이며 자원을 명시해 연산을 수행하고 상태를 주고받는 것입니다.
REST는 다음과 같은 특징을 갖습니다. 일관된 인터페이스 사용, 클라이언트-서버 구조, 무상태성, 캐싱 가능, 자체 표현 구조, 계층형 구조
💡 URL과 URI의 차이는 무엇인가요?
URI : 인터넷에 있는 자원을 나타내는 주소를 말합니다. URI의 하위 개념으로 URL이 있습니다.
URL : 인터넷에서 자원의 위치를 알 수 있는 규약입니다.
💡 RESTful 하다는 것은 어떤 것을 의미하나요?
REST 규칙을 지키며 API를 제공하는 서비스를 말합니다.
자원에 대한 행위는 HTTP 메서드로 나타내며, HTTP 메서드나 행위에 대한 표현이 URI에 들어가면 안됩니다.
HTTP 메서드는 명시적이어야 합니다. 요청하려는 목적에 맞게 HTTP 메서드를 사용해야 합니다.
URI 경로는 슬래시로 계층 관계를 표현하며 마지막에는 슬래시가 들어가면 안됩니다.
URI 경로는 언더바를 사용하면 안되고 소문자 사용을 지향합니다.
💡 데이터를 업데이트 하는 HTTP 메서드는 어떤 것이 있나요?
PUT과 PATCH가 있습니다.
💡 그렇다면 PUT, PATCH의 차이는 무엇인가요?
PUT은 리소스의 모든 것을 업데이트 합니다. 빈 정보는 Null로 변경됩니다.
PATCH는 리소스의 일부만을 업데이트 합니다. 빈 정보는 기존 데이터를 유지합니다.
💡 GET과 POST의 차이에 대해 설명해주세요.
GET : 데이터를 조회하기 위해 사용하는 방식으로 데이터를 헤더에 추가하여 전송하는 방식입니다. URL에 데이터가 노출되기 때문에 중요한 데이터를 포함해서는 안됩니다.
POST : 데이터를 추가하기 위해 사용하는 방식으로 데이터를 바디에 추가하여 전송하는 방식입니다. GET보다는 안전합니다.
💡 세션 기반 인증과 토큰 기반 인증의 차이에 대해 설명해주세요.
세션 기반 인증 : 클라이언트부터 요청을 받으면 클라이언트의 상태 정보를 저장하므로 Stateful한 구조를 가집니다.
토큰 기반 인증 : 상태 정보를 서버에 저장하지 않으므로 Stateless한구조를 가집니다.
💡 그렇다면 세션 기반 인증을 사용했을 때 단점은 어떤 것이 있을까요?
서버에서 세션을 저장하기 때문에 사용자가 증가하면 서버에 과부하를 줄 수 있어 확장성이 낮습니다.
💡 그렇다면 세선 기반 인증과 토큰 기반 인증은 각각 어느 경우에 적합한가요?
단일 도메인이라면 세션 기반 인증을 사용하고, 아니라면 토큰 기반 인증을 사용하는 것이 적합하다고 생각합니다.
왜? - 세션을 관리할 때 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계되어 있기 때문에 여러 도메인에서 관리하는 것은 어렵습니다.(CORS 문제)
💡 JWT 토큰에 대해 설명해주세요.
JSON 포맷을 이용하는 Claim 기반의 웹 토큰이며, 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달합니다.
JWT는 헤더(Header), 내용(Payload), 서명(Signature)로 구성되며 각 파트를 점(.)으로 구분합니다.
헤더 : 토큰의 타입과 해시 암호화 알고리즘으로 이루어져 있습니다.
내용 : 토큰에 사용자가 담고자 하는 정보를 담습니다. 내용에는 Claim이 담겨있고, JSON 형태의 한 쌍으로 이루어져 있습니다.
서명 : 토큰을 인코딩하거나 유효성 검증할 때 사용하는 고유한 암호화 코드입니다. 헤더와 내용을 인코딩합니다.