💡 HTTP 프로토콜에 대해 설명해주세요.
- HTTP(Hyper Text Transfer Protocol)란 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜로써, 웹에서 이루어지는 모든 데이터 교환의 기초가 되는 프로토콜입니다.
- HTTP는 상태 정보를 저장하지 않는 Stateless의 특징과 클라이언트의 요청에 맞는 응답을 보낸 후 연결을 끊는 Connectionless의 특징을 갖고 있습니다.
- 통신간의 연결 상태 처리나 상태 정보를 관리할 필요가 없어 서버 디자인이 간단하다는 장점이 있으나
- 이전 통신의 정보를 모르기 때문에 매번 인증을 해줘야 하며, 이를 해결하기 위해서는 쿠키(cookie)나 세션(session)을 추가로 사용해서 데이터를 처리해야 한다는 불편함도 있습니다.
💡 HTTP와 HTTPS의 차이점은 무엇인가요?
- HTTP는 평문 데이터를 전송하는 프로토콜이기 때문에, HTTP로 중요한 정보를 주고 받게되면 제 3자에 의해 조회될 가능성이 있습니다.
- 이러한 문제를 해결하기 위해서 HTTP에 암호화가 추가된 프로토콜이 HTTPS입니다.
- HTTPS는 통신간에 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화함으로써 데이터의 적절한 보호를 보장합니다.
- SSL(Secure Sockets Layer): 웹 사이트와 브라우저 사이(또는 두 서버 사이)에 전송되는 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술
- TLS(Transport Layer Security): SSL이 향상된, 더욱 안전한 버전
💡 쿠키(Cookie)와 세션(Session)의 차이점에 대해 말해주세요.
- 쿠키
- 쿠키는 사용자의 컴퓨터에 저장하는 작은 정보 파일입니다.
- HTTP에서 클라이언트의 상태 정보를 PC에 저장했다가 필요시 해당 정보를 참조하거나 재사용할 수 있습니다.
- 세션
- 세션은 일정 시간동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술입니다.
- 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 합니다.
- 쿠키는 클라이언트 쪽에 저장되며, 세션은 서버 쪽에 저장됩니다.
- 때문에 사용하는 리소스 역시 각각 클라리언트 리소스와 서버 리소스를 사용하게 됩니다.
- 속도 측면에서는 클라이언트 쪽에 저장되는 쿠키가 세션보다 더 빠르며
- 보안 측면에서는 서버 쪽에 저장되는 세션이 쿠키보다 안전하다고 볼 수 있습니다.
💡 www.naver.com에 접속할 때 생기는 과정에 대해 설명해주세요. (웹 동작 방식 이해)
- 먼저 사용자가 브라우저에 URL을 입력합니다.
- 이후 DNS 서버에서 도메인 네임으로 서버의 진짜 주소를 찾습니다.
- 그렇게 찾은 IP 주소로 웹 서버에 HTTP 요청 메시지를 보냅니다.
- 이후 웹 서버는 HTTP 응답 메시지를 클라이언트 측으로 보내고
- 도착한 HTTP 응답 메시지는 웹 페이지 데이터로 변환되어, 웹 브라우저에 의해 출력됩니다.
💡 TCP와 UDP의 차이를 설명해주세요.
- TCP는 연결형 서비스로 3-way handshaking 과정을 통해 연결을 설정하기 때문에 높은 신뢰성을 보장하지만, 속도가 비교적 느리다는 단점이 있습니다.
- UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다.
- 때문에, TCP는 신뢰성이 중요한 파일 교환과 같은 경우에 주로 쓰이고 UDP는 실시간성이 중요한 스트리밍에 자주 사용됩니다.
- 💡 3-way-handshaking에 대해 설명해주세요.
- 3-way handshaking이란 TCP 네트워크 상에서 통신하는 장치가 서로 연결이 잘 되었는지 확인하는 방법입니다. 송신자와 수신자는 총 3번에 걸쳐 데이터를 주고 받으며 통신이 가능한 상태인지 확인합니다.
- 간단하게 과정을 요약하자면
- A 클라이언트에서 B 서버에 접속을 요청하면
- B 서버에서는 해당 요청에 대한 응답을 A 클라이언트로 보내고
- A 클라이언트에서는 그 응답을 받은 뒤, 다시 B 서버에게 응답함으로써
- 그 이후에야 연결이 이루어지고 데이터 교환이 이루어지게 되는 것입니다.
- 💡 3-way handshaking에 대해 얘기 해주셨는데, TCP 통신은 종료시에도 3-way handshaking을 사용하나요?
- TCP 통신을 종료할 때에는 4-way handshaking을 수행합니다.
- 4-way handshaking이란 TCP 네트워크 상에서 통신하는 장치의 연결을 해제하는 방법입니다. 송신자와 수신자는 총 4번에 걸쳐 데이터를 주고 받으며 연결을 끊습니다.
- 4-way handshaking의 과정을 간단하게 요약하자면
- 우선 클라이언트가 연결을 종료하겠다는 메시지를 서버에 전송합니다.
- 그럼 서버에서는 확인 메시지를 보낸 후, 자신의 통신이 끝날 때까지 기다리게 됩니다.
- 이후 통신이 끝났으면 연결이 종료되었다는 메시지를 클라이언트에게 전송하고
- 클라이언트는 확인했다는 메시지를 다시 서버에 보냄으로써 통신이 완전히 종료됩니다.
- 💡 3-way-handshaking에 대해 설명해주세요.
💡 OSI 7 layer와 각 계층에 대해 아는대로 설명해주세요.
- 1 계층(물리 계층): 데이터를 전기 신호로 바꾸어주는 계층으로, 단지 데이터를 전달만 할 뿐 전송하려는 데이터가 무엇인지, 어떤 에러가 있는지 등에는 전혀 신경쓰지 않습니다.
- 2 계층(데이터 링크 계층): 물리 계층을 통해 송수신되는 정보의 오류와 흐름을 관리하여 안전하게 정보를 전달할 수 있도록 도와주는 역할을 수행합니다.
- 3 계층(네트워크 계층): 경로를 선택하여 경로에 따라 패킷을 전달하는 계층으로, 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 수행합니다.
- 4 계층(전송 계층): 종단간 신뢰성 있고 효율적으로 데이터를 전송하는 기능을 수행하며, 오류 검출 및 복구와 흐름제어, 중복 검사 등을 수행합니다.
- 5 계층(세션 계층): 통신을 위한 세션을 확립/유지/중단하는 역할을 수행합니다.
- 6 계층(표현 계층): 코드 간의 번역을 담당하여 데이터 표현이 상이한 응용 프로세스에게 독립성을 제공하고, 암호화를 수행합니다.
- 7 계층(응용 계층): 인터페이스의 역할을 수행하며, 응용 프로세스와 직접 관계하여 사용자에게 일반적인 응용 서비스를 제공합니다.
💡 HTTP Method와 각각이 사용되는 경우에 대해서 설명해주세요.
- HTTP 메소드는 클라이언트가 서버에게 사용자 요청의 목적을 알리는 '수단'을 말합니다.
- 주요 메소드로는 5가지가 있는데
- GET은 리소스 조회시 사용하며
- POST는 요청 데이터 처리시에 사용하고
- PUT은 리소스 변경시에 사용하며
- PATCH는 리소스 부분 변경시에 사용하고
- DELETE는 리소스 삭제시에 사용합니다.
💡 GET과 POST의 차이에 대해 설명해주세요.
- GET
- GET은 데이터를 조회하기 위해 사용하는 방식으로 데이터를 Header에 추가하여 전송하는 방식입니다.
- URL에 데이터가 노출되므로 보안적으로 중요한 데이터를 포함해서는 안됩니다.
- POST
- POST는 데이터를 추가 또는 수정하기 위해 사용하는 방식으로 데이터를 Body에 추가하여 전송하는 방식입니다.
- 완전히 안전하다는 것은 아니지만 URL에 데이터가 노출되지 않아 GET 보다는 상대적으로 안전합니다.
💡 세션 기반 인증과 토큰 기반 인증의 차이에 대해 얘기해주세요.
- 세션 기반 인증
- 세션 기반 인증은 사용자의 인증 정보가 서버의 세션 저장소에 저장되는 방식입니다.
- 이 경우 사용자의 상태 정보가 서버에 저장되기 때문에 Stateful한 구조를 갖습니다.
- 토큰 기반 인증
- 토큰 기반 인증은 사용자의 인증 정보가 클라이언트에 저장되는 방식입니다.
- 이때 인증 정보가 토큰의 형태로 브라우저의 로컬 저장소 혹은 쿠키로 저장됩니다.
- 이 경우 사용자의 상태 정보가 서버에 저장되지 않으므로 Stateless한 구조를 갖습니다.
💡 세션 기반 인증과 토큰 기반 인증의 장단점에 대해 얘기해주세요.
- 세션의 경우 모든 인증 정보를 서버에서 관리하고, 토큰의 경우 모든 인증 정보를 클라이언트에서 관리하기 때문에 보안 측면에서 세션이 조금 더 유리하다고 할 수 있습니다.
- 그럼에도 불구하고 최근 모던 웹 어플리케이션이 토큰 기반 인증을 사용하는 이유는 바로 확장성 때문입니다.
- 일반적으로 웹 어플리케이션의 서버 확장 방식은 수평 확장을 사용합니다. 즉, 한 대가 아닌 여러 대의 서버가 요청을 처리하게 됩니다.
- 이때 세션 기반 인증 방식은 세션 불일치 문제를 방지하기 위해 별도의 작업을 수행해주어야 합니다.
- 하지만 토큰 기반 인증 방식은 서버가 직접 인증 방식을 저장하지 않고, 클라이언트가 저장하는 방식을 취하기 때문에 위와 같은 문제에서 자유로울 수 있습니다.
- 또한 세션 기반 인증 방식은 서버에서 세션 데이터를 직접 저장하고 관리하기 때문에 세션 데이터의 양이 많아질수록 서버의 부담이 증가하게 됩니다.
- 하지만 토큰 기반 인증 방식은 인증 데이터를 클라이언트에서 관리하고 있기 때문에 유저의 수가 얼마나 되던 서버의 부담이 증가하지 않습니다.
💡 JWT(JSON Web Token)에 대해 설명해주세요.
- JWT란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미합니다.
- JWT는 Header, Payload, Signature로 구성되며 각 파트를 점(.)으로 구분합니다.
- Header에는 토큰의 타입과 해시 알고리즘의 종류가 담겨있으며
- Payload에는 서버와 클라이언트가 주고받는 시스템에서 실제로 사용될 정보가 담겨있고
- Signature에는 Payload를 인코딩한 후, Header에 명시된 해시함수를 적용하고, 개인키로 서명한 전자서명이 담겨있습니다.
💡 대칭키, 비대칭키 암호화 방식에 대해 설명해주세요.
- 대칭키와 비대칭키는 양방향 암호화 방식이며
- 대칭키
- 대칭키는 암호화와 복호화에 같은 암호 키를 쓰는 알고리즘으로
- 이는 중간에 누군가 암호 키를 가로채면 암호화된 정보가 유출될 수 있다는 단점이 있는데,
- 이러한 문제를 보완한 새로운 방식이 비대칭키(공개키)입니다.
- 비대칭키
- 비대칭키는 암호화와 복호화할 때 키를 서로 다른 키로 사용하는 암호화 알고리즘입니다.
- 공개적으로 개방되어 있는 공개키(public key)와 타인에게 절대 노출되어서는 안되는 개인키(private key)가 쌍으로 이루어진 형태입니다.
💡 Connection Timeout과 Read Timeout의 차이에 대해 설명해주세요.
- Connection Timeout
- Connection Timeout은 종단 간 연결하는데 소요되는 최대 시간을 의미합니다.
- 이 시간을 넘기게 되면 연결할 수 없는 것으로 판단하여 에러가 발생합니다.
- Connection이라는 단어가 의미하는 것처럼 종단 간 연결에 사용되는 타임아웃입니다.
- Read Timeout
- Read Timeout은 연결된 종단 간에 데이터를 주고받을 때 소요되는 최대 시간을 의미합니다.
- 이 시간을 넘기게 되면 데이터를 받을 수 없는 것으로 판단하여 에러가 발생합니다.
- Read라는 단어가 의미하는 것처럼 연결되어 있는 종단 간 데이터를 주고 받을 때 사용되는 타임아웃입니다.
💡 공인(public) IP와 사설(private) IP의 차이에 대해 설명해주세요.
- 공인 IP는 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소이며, 외부에 공개되어 있는 IP주소 입니다.
- 사설 IP는 일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소이며, IPv4의 주소부족으로 인해 서브넷팅된 IP이기 때문에 라우터(공유기)에 의해 로컬 네트워크상의 PC나 장치에 할당됩니다.
📌 References
- https://dev-coco.tistory.com/161
- https://developer.mozilla.org/ko/docs/Web/HTTP/Overview
- https://ko.wikipedia.org/wiki/HTTPS
- https://www.digicert.com/kr/what-is-ssl-tls-and-https
- https://shlee0882.tistory.com/110
- https://hudi.blog/session-based-auth-vs-token-based-auth/
- https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC#jwt_json_web_token_%EC%9D%B4%EB%9E%80
- https://alden-kang.tistory.com/20
'🎤 Tech Interview' 카테고리의 다른 글
[Tech Interview] Part 7. Back-End (0) | 2023.06.03 |
---|---|
[Tech Interview] Part 6. Operation System (0) | 2023.06.02 |
[Tech Interview] Part 4. Algorithm (0) | 2023.05.24 |
[Tech Interview] Part 3. Data Structure (0) | 2023.05.22 |
[Tech Interview] Part 2. Database (0) | 2023.05.21 |