개발놀이터

여태까지 공부한 네트워크 면접질문 / 답변 본문

CS 지식/면접준비

여태까지 공부한 네트워크 면접질문 / 답변

마늘냄새폴폴 2023. 4. 6. 05:26

https://coding-review.tistory.com/345

 

여태까지 공부한 데이터베이스 면접질문 / 답변

https://coding-review.tistory.com/344 여태까지 공부한 Spring 면접질문 / 답변 https://coding-review.tistory.com/343 여태까지 공부한 Java 면접질문 / 답변 4부터 시작하는 것은 넘어가주시길 바랍니다... 따로 정리

coding-review.tistory.com

위의 포스팅과 이어집니다. 

 

58. TCP와 UDP의 차이
TCP는 연결 지향형 프로토콜이고 UDP는 데이터를 데이터그램으로 전송하는 프로토콜입니다. TCP는 연결형 서비스를 지원하고 가상회선 연결을 지원하기 때문에 전송이 양방향으로 이루어질 수 있는 전이중 방식과 각각의 연결점이 종단점을 가지는 점대점 방식을 사용할 수 있습니다. 또한, TCP는 흐름제어, 혼잡제어와 같은 방식덕분에 높은 신뢰성을 가질 수 있습니다. UDP는 TCP와 다르게 데이터 수신여부를 체크하지 않기 때문에 낮은 신뢰성을 갖고 있습니다. 하지만 TCP에 비해 속도가 빠르고 1대1 1대다 다대다 통신이 가능합니다. 정리하자면 높은 신뢰성을 요구하는 파일전송과 같은 시스템에서는 TCP를 사용하고 그보다 연결성이 중요한 스트리밍같은 서비스를 사용할 때는 UDP를 사용합니다. 

59. 3way handshake에 대해서 설명해주세요. 
TCP 3way handshake는 가상회션 연결이 수립되는 단계입니다. 서버는 클라이언트에게 데이터를 전송할 수 있는지, 클라이언트는 서버에게 데이터를 전송 받을 수 있는지 여부를 확인하기 위한 절차입니다. 서버와 클라이언트는 서로 SYN, ACK 패킷을 주고받으며 연결을 수립합니다. SYN 패킷은 난수로 되어있으며 ACK 패킷은 이 난수에 1을 붙인 패킷입니다. 따라서 순서는 SYN / SYN + ACK / ACK 이렇게 세단계로 분류됩니다. 

60. HTTPS의 특징에 대해서 설명해주세요. 
HTTPS는 제3자 인증, 공개키 암호화, 비밀키 암호화의 특징을 가지고 있습니다. 제3자 인증은 등록된 인증기관만 신뢰하겠다는 것이고 공개키 암호화는 비밀키를 암호화하는데 사용되고 비밀키 암호화는 통신에 사용될 데이터를 암호화하는데 사용됩니다. 

61. SSL handshake에 대해서 설명해주세요. (요거는 그림을 그리라고 말할 수도 있습니다.)
먼저 사이트는 인증기관에 사이트의 정보와 사이트의 공개키를 전송합니다. 그럼 인증기관은 인증기관의 개인키로 사이트의 정보와 공개키를 암호화해서 인증서형태로 사이트에 전송합니다. 클라이언트는 사이트에 ClientHello를 보냅니다. 그럼 사이트는 클라이언트의 CipherSuite중 하나를 선택하고 SSL 프로토콜을 선택한 뒤 이 인증서를 클라이언트에게 보냅니다. 클라이언트는 웹 브라우저에 내장된 인증기관의 공개키로 인증서를 복호화하여 사이트의 정보와 공개키를 얻습니다. 이 때 인증서에 공개키가 포함되지 않았다면 Server Key Exchange가 발생합니다. 만약 포함되어있다면 이 단계는 생략됩니다. 클라이언트는 사이트의 공개키로 클라이언트의 대칭키를 암호화하여 사이트에 보냅니다. 사이트는 본인의 개인키로 이 대칭키를 복호화하여 이후 데이터 통신에 사용합니다. 

62. 동기 프로그래밍, 비동기 프로그래밍에 대해서 설명해주세요. 
동기 프로그래밍은 Blocking Architecture, 싱글스레드로 대표되고 하나의 스레드에 request와 response를 모두 담은 프로그래밍입니다. 비동기 프로그래밍은 Non Blocking Architecture, 멀티 스레드로 대표되고 request와 response를 각각 다른 스레드에 나눠 할당합니다. 동기 프로그래밍은 싱글 스레드이기 때문에 속도가 느리고 확장성이 낮은 반면 단순하고 오버헤드가 적으며 메모리를 적게 먹는다는 장점이 있습니다. 비동기 프로그래밍은 멀티스레드이기 때문에 속도가 빠르고 수율이 좋지만 오버헤드가 생기고 메모리를 많이 잡아먹으며 구현하기 까다롭다는 단점이 있습니다. 

63. 공개키 암호화에 대해서 설명해주세요. 
기존 대칭키 암호화에서는 공격자가 둘 중 하나의 키만 얻게되면 암호화된 데이터를 복호화할 수 있습니다. 때문에 이런 방식을 보완하기 위해 암호화와 복호화에 서로 다른 키를 사용하여 데이터의 안전성을 더 높은 암호화 방식이라고 설명할 수 있습니다. 공개키 암호화의 경우에는 어떤 키로 암호화를 하느냐에 따라서 사용되는 분야가 다릅니다. 개인키로 데이터를 암호화하는 경우는 개인인증에 신경쓴 것이고, 공개키로 데이터를 암호화하는 경우는 데이터의 보안을 위한 목적으로 사용된 것입니다. 

64. 로드 밸런싱에 대해서 설명해주세요. 
로드 밸런싱은 트래픽을 여러 서버에 각각 나눠주어 서버의 부하를 줄이는 시스템적인 해결방식이고 로드밸런싱에는 정적 로드밸런싱, 동적 로드밸런싱이 있습니다. 정적 로드밸런싱은 특정 순서에 맞춰서 트래픽을 서버에 분배하는 것이고 이에 해당하는 알고리즘은 Round Robin, Weighted Round Robin, IP Hash 이렇게 세가지입니다. 정적 로드밸런싱은 구현하기가 쉬운대신 비효율적이라는 단점이 있습니다. 동적 로드밸런싱은 서버의 상태에 따라 트래픽을 맞춰 분배하는 것이고 이에 해당하는 알고리즘은 Least Connection, Weighted Least Connection, Weighted Response Time, Resource Based이렇게 네가지가 있습니다. 동적 로드밸런싱은 효율적이긴 하지만 구현하는데 까다롭고 로드밸런서가 오버헤드가 생긴다는 단점이 있습니다. 

65. 만약 본인이 로드밸런싱을 담당한다면 어떤 로드 밸런싱을 선택할 것인가요?
저였다면 Weighted Response Time 알고리즘을 선택했을 것 같습니다. 왜냐하면 정적 로드밸런싱은 어떤 서버에 문제가 생기더라도 순서에 맞춰서 트래픽을 분배하는 것이기 때문에 문제가 생긴 서버로 간 클라이언트는 오랜 시간을 기다려야 할 것입니다. 이는 부정적인 고객경험으로 이어지기 때문에 지양해야 한다고 생각했습니다. 그래서 선택을 한다면 동적 로드밸런싱을 선택할텐데 그 중에서 가장 고객경험이 긍정적인 응답시간을 바탕으로 가중치를 둔 Weighted Response Time을 선택해야겠다고 생각했습니다. 

66. Stateful, Stateless에 대해서 설명해주세요. 
Stateful은 하나의 세션에서 다음 트랜잭션에 필요한 정보를 서버가 모두 가지고 있는 경우를 말합니다. 이 경우 전송할 데이터는 적지만 서버가 가지고 있어야 할 데이터가 많다는 특징이 있습니다. Stateless는 하나의 세션에서 다음 트랜잭션에 필요한 정보를 서버가 가지고 있지 않은 경우를 말합니다. 이 경우 전송할 데이터가 많고 서버는 데이터를 적게 갖고 있어도 된다는 특징이 있습니다. 

67. www.google.com을 검색했을 때 무슨 일이 발생하나요? OSI 7계층, TCP 4계층과 엮어서 설명해주세요. 
google.com을 검색하면 브라우저는 TCP 4계층인 애플리케이션 계층의 DNS 캐시 레코드에서 URL과 상응하는 IP 주소를 찾습니다. 만약 요청된 URL이 캐시에 없으면 ISP의 DNS서버는 google.com을 호스팅하고 있는 서버의 IP 주소를 찾기위한 DNS쿼리를 날립니다. 그리고 그 후 브라우저는 TCP 3계층인 전송계층의 TCP 연결을 시작합니다. 연결이 끝난 후 브라우저는 HTTP 요청을 보내고 서버는 요청과 돌아오는 응답을 핸들링합니다. 웹 서버는 HTTP응답을 보내고 브라우저는 HTML문서 결과를 보여줍니다. 

68. HTTP Method에 대해서 설명해주세요. 
주로 사용되는 HTTP Method에는 GET, POST, PUT, PATCH, DELETE가 있습니다. GET은 서버에 존재하는 데이터를 요청하는 것입니다. POST는 서버에 데이터를 생성하는 것을 요청하는 것입니다. PUT은 서버에 존재하는 데이터를 수정하거나 존재하지 않으면 생성합니다. PATCH는 서버에 존재하는 데이터를 일부 수정하는 특징을 가지고 있습니다. DELETE는 서버에 데이터를 제거할 것을 요청하는 메서드입니다. 

69. RESTful에 대해서 설명해주세요. 
RESTful은 Resource Oriented Architecture (ROA) 를 목적으로 리소스를 중점으로 HTTP Method를 이용하여 자원에 대한 처리를 표현합니다. 사람이 읽을 수 있는 API라는 것이 특징입니다. HTTP를 사용하기 때문에 HTTP의 특성을 그대로 반영합니다. 또한 별도의 인프라 구축이 필요없습니다. 단점으로는 명확한 표준이 존재하지 않는다는점, RESTful을 완전히 만족하는 API를 만들기 매우 까다롭다는 점, REST API는 멱등성을 보장하기 힘들기 때문에 분산환경에 적합하지 않다는 점, endpoint마다 API를 생성해야 하기 때문에 유연하지 않다는 점이 있습니다.