1. 쿠키와 세션의 차이에 대해 설명해 주세요.
사용자의 정보가 저장되는 위치가 다름 (쿠키 : 서버 자원 사용 X / 세션 : 서버의 자원을 사용)
보안은 세션이 더 좋음 (쿠키는 로컬에 저장되기 때문에 변질되거나 스니핑 당할 위험이 있음)
요청 속도는 쿠키가 더 빠름 (세션은 서버의 처리가 필요하기 때문)
쿠키는 만료시간이 있어도 파일로 저장되기 때문에 브라우저를 종료해도 정보가 남아있을 수 있지만 세션은 브라우저가 종료되면 만료 시간에 상관 없이 삭제됨
쿠키는 클라이언트(브라우저) 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
사용자 인증이 유효한 시간을 명시할 수 있으며, 유효 시간이 정해지면 브라우저가 종료되어도 인증이 유지된다는 특징이 있음
쿠키는 클라이언트의 상태 정보를 로컬에 저장했다가 참조
클라이언트에 300개까지 쿠키저장 가능, 하나의 도메인당 20개의 값만 가질 수 있음, 하나의 쿠키값은 4KB까지 저장
Response Header에 Set-Cookie 속성을 사용하면 클라이언트에 쿠키를 만들 수 있음
쿠키는 사용자가 따로 요청하지 않아도 브라우저가 Request시에 Request Header를 넣어서 자동으로 서버에 전송
세션은 쿠키를 기반하고 있지만, 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리
서버에서는 클라이언트를 구분하기 위해 세션 ID를 부여하며 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지
물론 접속 시간에 제한을 두어 일정 시간 응답이 없다면 정보가 유지되지 않게 설정 가능
사용자에 대한 정보를 서버에 두기 때문에 쿠키보다 보안에 좋지만, 사용자가 많아질수록 서버 메모리를 많이 차지하게 됨
→ 즉 동접자 수가 많은 웹 사이트인 경우 서버에 과부하를 주게 되므로 성능 저하의 요인이 됨
클라이언트가 Request를 보내면, 해당 서버의 엔진이 클라이언트에게 유일한 ID를 부여하는 데 이것이 세션 ID
세션 방식의 로그인 과정에 대해 설명해 주세요.
답
사용자가 로그인할 때 서버에서 세션 ID를 생성하고 이를 쿠키를 통해 클라이언트에 전달 → 이후 사용자는 해당 사이트에 대한 모든 request에 세션 ID를 쿠키에 담아 전송 → 서버는 클라이언트가 보낸 세션ID와 세션 저장소에서의 세션ID를 비교해서 일치하면 인가 수행
HTTP의 특성인 Stateless에 대해 설명해 주세요.
Stateless의 의미를 살펴보면, 세션은 적절하지 않은 인증 방법 아닌가요?
규모가 커져 서버가 여러 개가 된다면, 세션을 어떻게 관리할 수 있을까요?
답
여러 개의 서버가 세션을 공유하도록 한다.
공유방법 1 Session Clustering
각 서버의 세션 저장소를 하나로 묶어서 관리하는 방법
모든 서버가 동일한 세션을 공유하여 특정 서버로만 트래픽이 몰리지 않음
하나의 서버가 죽어도 세션 정보를 잃지 않음
단점
- 모든 서버의 세션 데이터를 동일하게 유지하기 위해 하나의 세션이 생기면 모든 서버의 세션 저장소를 업데이트해야 함 → 그만큼 많은 메모리가 필요하여 성능저하 발생
- 새로운 서버를 만들 때마다 기존의 세션 데이터를 옮겨 클러스터링해야 하는 번거로움 존재
공유방법 2 Session Server
세션만 관리하는 별도의 서버를 하나 두는 방식
모든 서버의 세션 저장소를 업데이트하거나 클러스터링 할 필요 없음
Redis같은 In-memory 데이터 저장소를 사용함으로써 빠르게 세션을 조회할 수 있음
2. HTTP 응답코드에 대해 설명해 주세요.
답
1xx - informational
2xx - successful
3xx - redirection
유저의 추가 조치 필요
완전한 처리를 위해 추가 동작이 필요한 경우
주로 서버의 주소 또는 요청한 URI의 웹 문서가 이동되었으니 그 주소로 다시 시도하라는 의미
리다이렉션 종류
4xx - client error
5xx - server error
401 (Unauthorized) 와 403 (Forbidden)은 의미적으로 어떤 차이가 있나요?
200 (ok) 와 201 (created) 의 차이에 대해 설명해 주세요.
필요하다면 저희가 직접 응답코드를 정의해서 사용할 수 있을까요? 예를 들어 285번 처럼요.
답
필요한 경우 사용자가 직접 응답코드를 정의해서 사용할 수 있음
다만, 표준 응답 코드와 충돌하지 않도록 주의해야 하며 사용자가 정의한 코드는 문서화되어 클라이언트와 공유되어야 함
3. HTTP Method 에 대해 설명해 주세요.
답
GET : 조회
POST : 요청 데이터 처리
PUT : 리소스 대체
PATCH : 부분 변경
DELETE : 삭제
조회시 사용
서버에 전달하고 싶은 데이터는 쿼리를 통해 전달
메세지 바디를 사용하는 것은 권장 X
요청 데이터 처리
메시지 바디를 통해 서버로 요청 데이터를 전달
서버는 요청 데이터 처리
주로 신규 리소스 등록이나 프로세서 처리에 사용
다른 메서드로 처리하기 애매한 경우에도 사용
리소스 대체 - 있으면 대체 없으면 생성
클라이언트가 리소스를 식별!!
- 클라이언트가 리소스 위치를 알고 URI 지정함 - POST와의 차이점
부분 수정을 위해 사용
사용 못하는 경우도 있음 - POST 사용하면 됨
리소스 삭제시 사용
리소스가 지원하고 있는 메소드를 취득합니다.
프록시 동작의 커널 접속을 변경합니다.
대상 리소스에 대한 경로를 따라 메시지 루프백 테스트를 수행합니다.
HTTP Method의 멱등성에 대해 설명해 주세요.
답
동일한 요청을 몇 번을 호출하든 최종 결과가 똑같은 성질
즉, 멱등한 메소드는 같은 요청을 여러 번 실행하더라도 서버의 상태가 변하지 않거나 동일한 상태로 유지됨
외부 요인으로 리소스가 변경되는 것은 고려하지 않음
GET과 POST의 차이는 무엇인가요?
POST와 PUT, PATCH의 차이는 무엇인가요?
HTTP 1.1 이후로, GET에도 Body에 데이터를 실을 수 있게 되었습니다.
그럼에도 불구하고 왜 아직도 이런 방식을 지양하는 것일까요?
- 답
1. 캐싱 및 브라우저 호환성
- GET요청은 캐싱이 잘 이루어지기 때문에, 반복된 요청에는 캐싱을 사용해서 응답할 수 있음
BUT!! body에 데이터를 담아 보내면 캐싱이 어려워지는 문제가 있을 수 있음
→ 캐싱이나 프록시 설계 일부는 GET의 body값을 참조하지 않는 경우가 있기 때문
- 중간에 캐시 프록시 서버가 있는 경우, 쿼리 파라미터를 활용한 GET 요청 시 프록시 서버가 중간에 캐싱하여 다수의 클라이언트에 동일한 데이터를 제공할 수 있지만, 데이터를 body에 담아 보내는 경우 이러한 캐싱이 어려워질 수 있음
2. **어떤 메소드를 사용해야 할지 명확한 분리**
- HTTP의 설계 원칙에 따르면 GET은 정보를 요청하고 POST는 데이터를 제출하는 역할로 분리되어야 함
- 본문을 포함한 GET 요청은 이러한 역할 분리를 어렵게 만들 수 있음
3. **서버 및 프록시 제약**
- 일부 서버 및 프록시 서버는 GET 요청에서 본문을 지원하지 않거나 처리하지 않을 수 있음
4. HTTP에 대해 설명해 주세요.
암호화와 복호화에 사용하는 키가 서로 다름
비대칭키 암호화라고도 함
속도가 느린 단점이 있지만 기밀성/인증/부인방지 기능을 제공함
키분배 필요가 없음
방식
대표적인 알고리즘
- Diffie Hellman : 최초의 공개키 알고리즘, 위조에 취약
- RSA : 대표적 공개키 알고리즘
- DSA : 전자서명 알고리즘 표준
- ECC : 짧은 키로 높은 암호 강도, 빠른 구현 가능 PDA, 스마트폰등에 사용
암호화와 복호화에 사용하는 키가 동일함
속도가 빨라 대용량 Data 암호화에 적합하다는 장점이 있음
키를 교환해야하는 문제, 탈취 관리 걱정, 사용자 증가에 따른 키관리 어려움, 확장성이 떨어진다는 단점이 있음
기밀성을 제공하나, 무결성/인증/부인방지 를 보장하지 않음
대표적 알고리즘 : 공인인증서의 암호화방식으로 유명한 SEED, DES, 3DES, AES, ARIA, 최근 주목받고 있는 암호인 ChaCha20
답
메시지 인증
SSL과 TLS의 주요 차이점은 메시지 인증입니다.
SSL은 메시지 인증 코드(MAC)를 사용하여 전송 중에 메시지가 변조되지 않도록 합니다.
TLS는 보호를 위해 MAC을 사용하지 않고 대신 암호화와 같은 다른 수단을 사용하여 변조를 방지합니다.
기록 프로토콜
레코드 프로토콜은 TLS와 SSL 모두에서 보안 통신 채널을 통해 데이터를 전송하는 방식이지만, 몇 가지 사소한 차이점이 있습니다.
TLS에서는 패킷당 하나의 레코드만 가져올 수 있는 반면, SSL에서는 패킷당 여러 개의 레코드가 전송될 수 있습니다(거의 구현되지 않았지만).
또한 압축 및 패딩 옵션과 같은 TLS의 레코드 프로토콜의 일부 기능은 SSL에 포함되어 있지 않습니다.
사이퍼 스위트
TLS는 암호화 및 암호 해독에 사용되는 알고리즘인 다양한 암호 제품군을 지원합니다. 가장 잘 알려진 암호 집합은 타원 곡선을 기반으로 하는 임시 DHE(Diffie-Hellman) 키 교환으로, 완벽한 순방향 비밀성(PFS)을 제공하며 모든 키 길이에 사용할 수 있습니다. 다른 몇 가지 암호 제품군도 PFS를 지원하지만 널리 사용되지는 않습니다. SSL은 1024비트 RSA 키를 사용하는 PFS를 사용하는 하나의 암호 제품군만 지원합니다.
알림 메시지
SSL 프로토콜은 경고 메시지를 사용하여 통신 중 특정 오류에 대해 클라이언트 또는 서버에 알립니다. TLS 프로토콜에는 이와 동등한 메커니즘이 없습니다.
💡 간단히 말해, SSL은 더 이상 사용되지 않으며, TLS는 현재 모든 사람이 사용하는 암호화 표준으로 구식 SSL 프로토콜을 대체하는 새로운 용어입니다. 기술적으로 TLS가 더 정확하지만 SSL이 널리 사용됩니다.
컴퓨터 네트워크를 통해 통신 보안을 제공하는 암호화 프로토콜
암호화를 사용하여 데이터의 무결성과 기밀성을 보호함
현재는 사용 종료됨
인터넷을 통한 보안 통신을 위한 표준
클라이언트/서버 애플리케이션이 도청 및 정보 변조를 방지하도록 설계된 방식
네트워크를 통해 통신할 수 있도록 함
SSL의 업데이트 버전으로 TLS와 SSL을 혼용하여 부름
5. 웹소켓과 소켓 통신의 차이에 대해 설명해 주세요.
답
소켓은 인터넷 프로토콜에 기반하기 때문에 TCP, UDP가 속한 4계층에 위치하고, 웹 소켓은 HTTP에 기반하므로 7계층에 위치함
소켓 통신은 바이트 스트림을 통한 데이터 전송이기 때문에 바이트로 이루어진 데이터를 다루지만, 웹 소켓은 어플리케이션 계층인 7계층에 기반하기 때문에 메시지 형식의 데이터를 다룸
둘은 상반된 개념이 아니기 때문에 완전하게 차이점을 비교할 수 없음
웹 소켓은 TCP 소켓과 구분되는 것이 아니라 TCP 소켓의 추상화된 형태이다.
소켓 통신에 기반하여 웹 소켓은 웹 어플리케이션에 맞게 발전한 형태로 소켓 통신을 한다
네트워크 상에서 수행되는 두 프로그램 간의 양방향 통신 링크의 한쪽 끝 단을 의미
네트워크를 통해 데이터를 송수신하는 데 사용되는 소프트웨어 엔드포인트
OS 커널에 구현되어 있는 프로토콜 요소에 대한 추상화된 인터페이스
1:1 통신의 경우 양측 다 소켓이 존재해야 통신 가능
하나의 TCP 접속에 전이중 통신 채널을 제공하는 컴퓨터 통신 프로토콜
HTTP나 HTTPS 위에서 동작하도록 설계되었음 → 포트 80이나 443
HTTP 프로토콜과 구별되지만 호환됨
소켓과 포트의 차이가 무엇인가요?
소켓은 통신 경로를 제공하고 관리하는 역할을 하고, 포트는 통신 과정에서 데이터가 어떤 프로세스나 서비스에 도달해야 하는 지를 구분함
클라이언트-서버 모델에서 클라이언트와 서버 사이에 데이터를 전송할 수 있는 통신 경로를 제공해주는 일종의 톨게이트
네트워크에서 특정 소프트웨어에 데이터를 전달하기 위한 통신 채널을 식별하는 번호
0~65535 범위를 가짐
일반적으로 잘 알려진 포트 번호와 동적 포트 번호로 나뉨
여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요?
사용자의 요청이 무수히 많아지면, 소켓도 무수히 생성되나요?
답
6. HTTP/1.1과 HTTP/2의 차이점은 무엇인가요?
HTTP Body가 이진 데이터임
binary framing layer
라는 공간에 이진 데이터로 전송됨 ⇒ HTTP Request Method, 헤더 등은 여전히 문자열로 전송되지만 바디 부분이 변경되는 것이 가장 큰 변경점 중 하나임멀티 플렉싱 지원
HOL (Head-of-Line) Blocking
문제가 있음 ** HOL Blocking : 패킷은 순서대로 도착해야 하기 때문에 패킷이 도착할 때까지 이후의 패킷들은 전송되지 못함스트림 우선순위 지정
헤더 압축
- 1.0에서는 헤더가 문자열로 전송되어 성능 이슈를 일으켰지만 2.0에서는 HPACK압축을 이용하여 헤더를 압축해서 보냄
HTTP 헤더 + 바디로 구성되어 있음
사람이 읽을 수 있는 문자열이 그대로 전송됨
TCP connection을 이용함
connection을 재사용 함
파이프라이닝 추가
- 요청에 대한 응답이 끝나기 전에 다음 데이터를 미리 요청함
모든 통신을 단일 TCP 연결을 통해 이뤄질 수 있고, 스트림의 개수는 제한이 없음
각 스트림은 고유 식별자와 우선수위 정보(선택사항)이 있음
프레임은 통신의 최소 단위 → TCP가 데이터를 쪼개서 보낸 다음 헤더를 보고 재 조립 하는 것과 비슷함
7. TCP와 UDP의 차이에 대해 설명해 주세요.
답
인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
연결 지향 방식으로 패킷 교환 방식을 사용
3-way handshake 과정을 통해 연결을 설정하고 4-way handshake을 통해 해제함
흐름 제어 및 혼잡 제어
높은 신뢰성을 보장
UDP 보다 속도가 느림
전이중(Full-Duplex), 점대점(Point to Point) 방식
데이터를 데이터그램 단위로 처리하는 프로토콜
비연결 방식으로 데이터 그램 패킷 교환 방식을 사용함
신뢰성이 떨어짐
효율적으로 데이터를 전송함
헤더 오버헤드가 적음
TCP 보다 속도가 빠름
Checksum이 무엇인가요?
TCP와 UDP 중 어느 프로토콜이 Checksum을 수행할까요?
그렇다면, Checksum을 통해 오류를 정정할 수 있나요?
TCP가 신뢰성을 보장하는 방법에 대해 설명해 주세요.
TCP의 혼잡 제어 처리 방법에 대해 설명해 주세요.
왜 HTTP는 TCP를 사용하나요?
그렇다면, 왜 HTTP/3 에서는 UDP를 사용하나요? 위에서 언급한 UDP의 문제가 해결되었나요?
그런데, 브라우저는 어떤 서버가 TCP를 쓰는지 UDP를 쓰는지 어떻게 알 수 있나요?
본인이 새로운 통신 프로토콜을 TCP나 UDP를 사용해서 구현한다고 하면, 어떤 기준으로 프로토콜을 선택하시겠어요?
8. DHCP가 무엇인지 설명해 주세요.
답
네트워크의 컴퓨터 및 기타 장치에 IP 주소를 할당하기 위한 표준화 된 프로토콜
네트워크 관리자가 각 장치에 수동으로 IP 주소를 할당하는 번거로움 없이 장치들이 네트워크에 연결될 때 자동으로 필요한 네트워크 구성 정보를 받을 수 있음
💡 네트워크 관리를 단순화하고 IP 주소를 효율적으로 관리할 수 있게 해줌
구성 요소
DHCP는 몇 계층 프로토콜인가요?
DHCP는 어떻게 동작하나요?
답
DHCP Discover
메시지를 브로드캐스트DHCP Offer
메시지를 통해 클라이언트에게 IP 주소를 제안임대 시간(Lease Time)
이 포함됨DHCP Request
메시지를 통해 수락 의사를 전달DHCP Acknowledgement
메시지를 통해 IP 주소 할당을 확정하고, 필요한 기타 네트워크 구성 정보(서브넷 마스크, 기본 게이트웨이, DNS 서버 주소)를 클라이언트에게 전달DHCP에서 UDP를 사용하는 이유가 무엇인가요?
DHCP에서, IP 주소 말고 추가로 제공해주는 정보가 있나요?
DHCP의 유효기간은 얼마나 긴가요?
9. IP 주소는 무엇이며, 어떤 기능을 하고 있나요?
답
IPv6는 IPv4의 주소 고갈 문제를 해결하기 위해 만들어졌지만, 아직도 수많은 기기가 IPv4를 사용하고 있습니다. 고갈 문제를 어떻게 해결할 수 있을까요?
공인 IP와 사설 IP로 나누고 중간 NAT이라는 기술을 통해 해결
** NAT
사설 네트워크에서 사용되는 사설 IP 주소를 인터넷에 연결된 단일 공용 IP 주소로 변환 → 여러 기기가 하나의 공용 IP 주소를 공유하여 인터넷에 접속할 수 있게 함 → 공용 IP 주소의 사용을 최소화 함
IPv4와 IPv6의 차이에 대해 설명해 주세요.
수많은 사람들이 유동 IP를 사용하고 있지만, 수많은 공유기에서는 고정 주소를 제공하는 기능이 이미 존재합니다. 어떻게 가능한 걸까요?
답
DHCP 서버 기능을 끄거나, IP주소를 수동으로 할당하거나 동적 DNS 서비스를 이용한 경우 공유기에서 고정 IP 주소를 제공할 수 있음
1.DHCP 서버 기능 끄기
대부분의 공유기는 DHCP 서버 기능을 제공합니다. 이 기능은 공유기에 연결된 기기들에게 자동으로 IP 주소를 할당하는 역할을 함
공유기에서 DHCP 서버 기능을 끄면, 공유기에 연결된 기기들은 고정 IP 주소를 사용하게 됨
2.IP 주소 수동 할당
공유기의 설정 페이지에서 IP 주소를 수동으로 할당할 수 있음
IP 주소는 네트워크 관리자가 직접 설정해야 하며, 할당된 IP 주소는 기기가 공유기에 연결되어 있는 동안 유지됨
3.동적 DNS(DDNS) 서비스 이용
유동 IP를 사용하는 환경에서 공유기에 연결된 기기들이 고정 IP 주소를 사용하는 것처럼 동작하게 하는 서비스
DDNS 서비스를 이용하면, 유동 IP 주소가 변경되더라도, 도메인 이름을 통해 기기에 접근할 수 있음
IPv4를 사용하는 장비와 IPv6를 사용하는 같은 네트워크 내에서 통신이 가능한가요? 가능하다면 어떤 방법을 사용하나요?
IP가 송신자와 수신자를 정확하게 전송되는 것을 보장해 주나요?
IPv4에서 수행하는 Checksum과 TCP에서 수행하는 Checksum은 어떤 차이가 있나요?
적용범위
목적
동작 방식
- IPv4 패킷은 라우터를 거칠 때마다 헤더 체크섬이 재계산되고 검증되는 반면, TCP 체크섬은 송신지와 수신지에서만 계산되어 전체 데이터의 무결성을 확인함
IPv4 헤더 체크섬은 패킷의 헤더만을 대상으로 함
IPv4 체크섬은 패킷의 전송 과정에서 헤더 정보의 무결성을 보장하는 데 초점을 맞춘다. 만약 체크섬이 일치하지 않는 경우, 패킷은 손상되었다고 간주되어 폐기됨.
IPv4 체크섬은 헤더 정보만을 검증하므로, 패킷의 데이터 부분(페이로드)에 대한 무결성 검증은 제공하지 않음
TCP 체크섬은 TCP 세그먼트의 전체(헤더 + 데이터)에 대해 계산됨
→ 데이터의 무결성 뿐만 아니라, 전송 순서와 데이터의 완전성까지도 검증하는 데 도움을 줌
TCP 체크섬은 세그먼트가 수신지에 도달했을 때 전체 세그먼트를 대상으로 다시 계산되며, 송신 시와 비교하여 검증함
→데이터가 네트워크를 통해 정확하게 전송되었는지 확인할 수 있음
TCP 체크섬은 페이로드 무결성을 보장하기 때문에, 데이터가 손상되었을 경우 재전송을 요청할 수 있음
TTL(Hop Limit)이란 무엇인가요?
IP 주소와 MAC 주소의 차이에 대해 설명해 주세요.
해당 글은 보초님 깃허브의 질문을 토대로 작성된 글입니다.
출처
쿠키(Cookie)와 세션(Session)
쿠키와 세션 개념
[HTTP] HTTP 메소드의 멱등성(Idempotence)과 Delete 메소드가 멱등한 이유
Http Method 란? (GET, POST, PUT, DELETE)
[HTTP] GET, POST, PUT, PATCH 차이
[HTTP] GET vs POST, GET은 body 값을 가지면 안 될까?
HTTP GET 메소드와 body
HTTP란 무엇인가?
대칭키 vs 공개키(비대칭키)
HTTPS 도대체 왜 쓰는 거야? | HTTPS, SSL Handshake
SSL과 TLS: 차이점, 비교 등!
웹소켓과 소켓은 어떻게 다른가
Network: 소켓(Socket)과 웹소켓
[Network] 소켓과 포트의 의미와 차이점
CS공부 - 네트워크 - 2
[네트워크] HTTP/1.1, HTTP/2.0, HTTP/3.0