Interview Questions - Network
1. 브라우저 검색창에 URL을 입력하면 어떤 일이 발생하는지 설명해주세요. (네트워크 관점)
- 부라우저 주소창에 URL을 입력합니다.
- 브라우저가 URL의 IP 주소를 찾기 위해 캐시에서 DNS 기록을 확인합니다.
- 캐시에 요청한 URL이 없으면, ISP의 DNS 서버가 DNS 쿼리로 URL을 호스팅하는 서버의 IP 주소를 찾습니다.
- 브라우저가 해당 서버와 TCP 연결을 시작합니다.
- 브라우저가 웹서버에 HTTP 요청을 합니다.
- 서버가 요청을 처리하고 HTTP 응답을 보냅니다.
- 브라우저가 HTML 컨텐츠를 보여줍니다.
1.1 DNS에 대해 설명해주세요.
- DNS는 Domain Name System의 약어로 웹 사이트의 IP 주소와 도메인 주소를 연결해주는 시스템입니다.
1.2 브라우저가 어디서 DNS 기록을 확인하나요?
- 브라우저는 브라우저 캐시, OS 캐시, 라우터 캐시, ISP 캐시를 순서대로 확인하면서 원하는 DNS 기록을 찾습니다.
- 캐시에 원하는 DNS 기록이 없다면, ISP에서 DNS 기록을 찾습니다.
1.3 DNS Lookup에 대해 설명해주세요.
- DNS Lookup은 DNS 서버에서 인터넷 도메인 이름을 사용해 IP 주소를 알아내는 과정을 말합니다.
- 루트 네임 서버, 최상위 도메인 네임 서버, 2차 도메인 네임 서버, 3차 도메인 네임 서버 순으로 이동하면서 URL과 일치하는 IP 주소를 찾습니다.
1.4 TCP에 대해 설명해주세요.
- TCP는 Transmission Control Protocol의 약어로 전송 제어 프로토콜을 말합니다. TCP는 3-way handshake를 통해 서버 간의 연결을 합니다.
- 3-way handshake는 클라이언트와 서버가 SYN과 ACK 메세지를 교환하여 연결을 설정하는 과정을 말합니다.
- 클라이언트가 서버에 SYN 패킷을 보내 새 연결이 가능한지 여부를 묻습니다.
- 서버에 새 연결을 수락할 수 있는 열린 포트가 있을 경우, SYN/ACK 패킷을 사용하여 응답합니다.
- 클라이언트는 SYN/ACK 패킷을 받고 ACK 패킷을 보내서 연결을 승인합니다.
1.5 HTTP 상태 코드에 대해서 간략하게 설명해주세요.
- HTTP 상태 코드는 HTTP 응답의 상태를 나타내는 코드입니다.
- 1xx (Information Response) : 정보 메세지를 나타냅니다.
- 2xx (Successful Response) : 서버와의 요청이 성공했음을 나타냅니다.
- 3xx (Redirection Message) : 요청 완료를 위해 추가 작업 조치가 필요하다는 것을 의미합니다.
- 4xx (Client Error Response) : 클라이언트의 요청에 에러가 있음을 의미합니다.
- 5xx (Server Error) : 서버의 오류로 요청을 수행할 수 없다는 것을 의미합니다.
2. REST API에 대해 설명해주세요.
- REST API는 REST를 기반으로 구현한 API를 말합니다.
- 여기서 REST는 HTTP를 기반으로 클라이언트가 서버의 리소스를 접근하는 방식을 규정한 아키텍처를 말합니다.
- REST API는 자원, 자원에 대한 행위, 행위에 대한 구체적인 표현으로 구성됩니다.
2.1 REST API의 설계 원칙에 대해 설명해주세요.
- URL은 리소스를 표현하는 데 중점을 두어야 합니다.
- 리소스에 대한 행위는 HTTP 요청 메소드로 표현합니다.
3. HTTP와 HTTPS의 차이점에 대해 설명해주세요.
- HTTP는 암호화가 추가 되지 않았기 때문에 보안에 취약한 반면에, HTTPS는 암호화로 인해 안전하게 데이터를 주고 받을 수 있습니다.
- HTTPS를 사용하면 암호화/복호화 과정이 필요해서 HTTP에 비해 속도가 느립니다.
- HTTPS는 인증서를 발급하고 유지하기 위한 추가 비용이 발생합니다.
3.1 HTTP와 HTTPS를 언제 사용하나요?
- HTTP는 노출이 되도 괜찮은 단순한 정보를 처리할 때, HTTPS는 개인 정보와 같은 민감한 정보를 처리할 때 사용합니다.
3.1 HTTPS의 암호화 방식에 대해 설명해주세요.
- HTTPS는 대칭키 암호화 방식과 비대칭키 암호화 방식을 모두 사용하고 있습니다.
- 대칭키 암호화 방식은 클라이언트와 서버가 동일한 키를 사용해 암호화와 복호화를 진행합니다. 그래서 키가 노출되면 매우 위험하지만 연산 속도가 빠릅니다.
- 비대칭키 암호화 방식은 한쌍의 공개키와 개인키를 사용하여 암호화와 복호화를 진행합니다. 공개키는 노출되어도 비교적 안전하지만 연산 속도가 느립니다.
참고