본문 바로가기
취준

CS 면접 스터디 - 네트워크, 알고리즘 편

by 뿔난 도비 2025. 5. 11.
반응형

이번 주차는 네트워크와 알고리즘에 대해서 각자 공부하고 질문하는 시간을 가졌다.

 

CS 면접 스터디 - 네트워크, 알고리즘 편

 

 

핵심 개념

 

1. OSI 7계층

1) 물리 계층 (리피터, 허브 등)

- 데이터를 전기적인 신호로 변환해서 주고 받는 기능을 수행함.

- Only 데이터 전송, 데이터가 무엇인지? 에러가 있는지? 신경쓰지 않음

 

2) 데이터 링크 계층 (브릿지, 스위치)

- 물리 계층으로 송수신되는 정보를 관리하여 안전하게 전달되도록 도와줌.

- 프레임 단위로 데이터를 전송.

- MAC 주소를 통해 통신

- 에러 검출, 재전송, 흐름 제어를 진행

 

3) 네트워크 계층 (라우터, IP)

- 데이터를 목적지까지 가장 안전하고 빠르게 전달하는 기능을 담당

- 라우팅, 흐름 제어, 오류 제어, 세그먼테이션 등을 수행

 

4) 전송 계층 (TCP, UDP)

- TCP, UDP 프로토콜을 통해 통신

- 포트를 열어두고 프로그램들이 데이터를 전송 가능

- TCP: 신뢰성, 연결지향적

- UDP: 비신뢰성, 비연결성, 실시간

 

5) 세션 계층 (API, Socket)

- 말그대로 세션을 관리

- 세션 설정, 유지, 종료, 전송, 중단 시 복구 등이 있음

 

6) 표현 계층 (JPEG, MPEG)

- 데이터 암호화, 파일 인코딩, 압축을 담당

- 번역이라고 생각하면 됨

 

7) 응용 계층  (HTTP, FTP, DNS 등)

- 최종 목적지, 응용프로그램이 아니라 프로토콜임을 기억할 것

 

2. 3-way handshake, 4-way handshake

1) 3-way handshake

- TCP 프로토콜에서 연결을 수립하는 과정

- 클라어인트가 SYN을 보냄 (연결 요청을 보냄)

- 서버가 SYN을 받고, ACK를 클라이언트에게 보냄. 그리고 서버도 클라이언트에게 SYN을 보냄 (같이 보냄)

- 클라이언트가 서버로부터 온 SYN을 받아 ACK를 서버에게 보냄

 

2) 4-way handshake

- TCP 프로토콜에서 연결을 끊는 과정

- 클라이언트가 FIN 플래그를 서버로 보냄

- 서버는 FIN을 받고 ACK를 보냄

- 서버는 클라이언트에게 보낼 데이터를 전부 보내고 FIN을 클라이언트로 보냄

- 클라이언트는 FIN을 받고 잠깐 대기 (데이터 유실을 방지하기 위함), 이후 ACK를 서버로 보냄

 

3. UDP

- 데이터그램 단위로 전송

- IP의 역할은 Host to Host만을 지원

- 하나의 장비 안에서 수많은 프로그램이 통신하는 경우에는 한계가 있음 --> Port 등장

- IP 오류의 경우 대처 불가 --> TCP or UDP 등장

- TCP보다 신속하기 때문에 실시간 방송이나 온라인 게임에서 사용

- 헤더가 단순해 용량이 가볍고 송신 속도가 빠름

- 하지만 확인 응답을 못하기 때문에 신뢰도는 낮음

- DNS 프로토콜은 UDP를 사용

- 3-way handshake에서 발생하는 오버헤드가 너무 크고, DNS Query의 사이즈가 작기 때문에 UDP가 적합

- 데이터가 커지면 TCP를 쓰기도 함

 

4. 대칭키와 공개키

1) 대칭키

- 암호화와 복호화에 동일키 사용

- 대칭키 전달 과정에서 노출 위험이 존재

- 이를 해결하기 위해 공개키 방식을 사용 (비대칭키)

 

2) 비대칭키

- A는 B의 공개키를 이용해서 데이터를 암호화해 B에게 보냄

- B는 자신의 비밀키로 데이터를 복호화하고, A의 공개키를 이용해서 응답을 암호화해 A에게 보냄

- A는 자신의 비밀키로 받은 응답을 복호화

 

- 이렇게 통신하는 경우 기밀 유지는 잘 되지만, 진실성 또는 확실성은 보장 불가 --> MAC, 전자 서명 등을 이용해서 해결

- 또, 암호화와 복호화가 복잡

- 하이브리드 방식을 사용하게 됨 --> SSL의 시초가 됨

 

3) 하이브리드 방식

- A가 대칭키를 만들어서 B의 공개키로 암호화 한 뒤, B에게 전송

- B는 자신의 비밀키로 이 대칭키를 복호화

- B는 받은 대칭키를 이용해서 응답을 암호화 후 A에게 보냄

- A는 대칭키로 응답을 암호화

- 이 대칭키를 이용해서 암호화된 통신을 계속 이어나감

 

5. HTTP와 HTTPS

- HTTP는 텍스트 교환이라 보안 이슈가 있음 --> HTTPS의 등장

- 평문 전송 --> 도청 가능

- 통신 상태 확인 없음 --> 위장 가능

- 완전성 보장 안됨 --> 변조 가능

 

- HTTPS 통신 과정

- A는 공개키와 개인키를 생성

- CA 기업에게 공개키 관리를 맡김

- CA 기업은 A기업 정보를 담은 인증서 생성 --> CA의 개인키로 암호화. 이후 A 기업에게 제공

- 누군가 A 서버에 접속하면 A 서버의 인증서를 받게 됨

- CA 기업의 공개키를 이용해서 인증서를 복호화

- 인증서에 등록된 서명 (A 서버 공개키 해시 값을 CA 비밀키로 암호화 해둠)과 지문 (A 서버의 공개키 해시값)을 대조 후 인증서 유효성 판단

- 유효하다면 A 서버의 공개키 추출

- 대칭키를 만들고 A 서버의 공개키로 암호화 후 A 서버에 전송

- 이 대칭키를 이용해서 통신을 하게 됨

 

- 관련 내용은 내 블로그에 정리된 다른 게시글에서 확인 가능하다.

https://se-dobby.tistory.com/77

 

Web 관련 면접 질문 준비

작년 그리고 올해초 펄어비스와 에이블리 코딩 테스트를 겪으면서, 웹 쪽 지식에 대한 부족함을 느껴서 이번에는 Web 쪽과 관련한 공부를 진행했다.  Web 관련 면접 질문 준비  목차  1. 면접

se-dobby.tistory.com

 

6. 로드 밸런싱

- 요청을 분배하는 것, 세 가지 방식이 존재함

- 라운드 로빈: 순서대로 분배

- Least Connection: 연결 개수가 가장 적은 서버로 분배

- Source: 사용자 IP와 Port를 해싱하여 분배 (특정 사용자는 최초에 접속한 서버로 고정됨)

- 로드 밸런서도 장애에 대비해 이중화함

 

7. Blocking, Non-Blocking & Synchronous, Asynchronous

- 너무 어려운 개념인데, 단순히 정리했음

 

1) Blocking

- 내가 특정 작업을 위해 다른 녀석을 호출한 경우, 그 녀석의 작업이 끝날 때까지 대기.

- 나는 그 동안 다른 일을 할 수 없음

 

2) Non-Blocking

- 내가 특정 작업을 위해 다른 녀석을 호출한 경우, 그 녀석의 작업이 끝나든 말든 신경쓰지 않음

- 나는 그 동안 다른 일을 수행함

 

- Blocking과 Non-Blocking의 개념은 병렬처리와 관련있음

 

3) Synchronous

- 내가 호출한 함수가 특정 작업이 완료되어야 다음 작업을 처리함.

- 호출한 순서대로 작업이 완료됨, 즉 순서가 보장됨

 

4) Asynchronous

- 내가 호출한 함수가 호출이 되는 대로 작업이 시작되어 버림

- 호출한 순서대로 작업이 완료되는 것이 아니기 때문에 호출은 늦게 되었는데 작업 속도가 빠르다면 이전에 호출된 작업보다 빨리 작업이 완료됨

 

- Synchronous와 Asynchronous는 동시성을 얘기함

- 이렇게만 이해하고 있어도 충분하다고 생각한다.

 

8. TCP 흐름 제어 / 혼잡 제어

- 네트워크 과목을 듣지 않은 나로써는 굉장히 어려웠다.

 

1) 흐름제어

- 송신측과 수신측의 데이터 처리 속도 차이 해결을 위한 기법, 수신자가 패킷을 지나치게 많이 받지 않도록 조절하는 것

- 수신 측에 따라 속도 조절 필요

- 매번 전송 패킷마다 응답을 받아야만 다음 패킷을 전송하는 Stop and wait 기법이 있음

- 수신자가 설정한 window에 맞춰서 데이터를 쪼개서 보내는 Sliding window 기법이 있음

 

2) 혼잡 제어

- 송신 측의 데이터 전달과 네트워크 데이터 처리 속도 차이 해결

- AIMD, Slow Start, Fast Retransmit, Fast Recovery 기법이 있음

 

- AIMD

- 처음에 패킷을 하나씩 보내고, 문제없이 도착하면 window 크기를 1씩 증가

- 패킷 전송에 실패하면 패킷 전송 속도를 절반 늦춤

- 네트워크가 이미 혼잡해진 이후에 반응함

 

- Slow Start

- AIMD 방식에서 전송 속도가 느리게 증가하는 문제를 해결

- 지수 함수 꼴로 전송 속도를 증가시킴

- 혼잡 현상 발생시 window 사이즈를 1로 줄임

 

- Fast Retransmit (빠른 재전송)

- 패킷을 받는 쪽에서 순서대로 잘 도착한 마지막 패킷의 다음 순서를 ACK로 전송

- 중간에 패킷이 손상되서 순서가 틀어지면, 동일한 순번의 ACK를 중복으로 받게 됨

- 3번의 중복 패킷 수신시 문제를 인식하고 해당 순번부터 다시 전송

 

- Fast Recovery (빠른 회복)

- 네트워크 혼잡 상태라면 window 사이즈를 1로 줄이는 것이 아니라 반으로 줄임

- 그러고 나서 다시 window 사이즈를 선형적으로 증가시킴

주고 받은 질문들

 

1) TCP/IP 4계층은? 왜 이런 개념이 등장했지?

- 인터넷에서 사용되는 프로토콜로 OSI 7 계층에 비해 조금 더 단순화된 모델

 

- 네트워크 엑세스 계층: OSI 7계층에서 물리 계층과 데이터 링크 계층에 해당. MAC 주소를 통해 통신.

- 인터넷 계층: OSI 7계층에서 네트워크 계층에 해당. IP를 통해 통신.

- 전송 계층: OSI 7계층에서 전송 계층에 해당. TCP나 UDP 프로토콜을 사용.

- 응용 계층: OSI 7계층에서 세션 계층, 표현 계층, 그리고 응용 계층에 해당. HTTP, FTP와 같이 응용 프로그램들이 사용하는 프로토콜을 사용.

 

2) 서브넷 마스크 목적

 

3) 멀티플렉싱과 서버 푸시

 

4) DHCP 방식

 

5) LAN 내부에서 통신 방법

- 애니 캐스트

- 브로드 캐스트

- 멀티 캐스트

 

6) 허브와 스위치 차이

 

7) 퀵소트와 병합정렬의 차이

- 둘 다 분할 정복 방식임

- Top-Down과 Bottom-Up 어프로치의 차이와 같음

- 퀵소트의 경우, 피봇을 기준으로 정렬 후, 분할 과정을 반복

- 병합 정렬의 경우, 배열을 최소 단위로 나눈후, 병합하면서 정렬하게 됨

- 조금 더 깊게 들어가면 퀵소트의 경우 최악의 경우 O(n^2)이 될 수도 있고, 병합 정렬과 달리 추가적인 메모리 공간이 필요없음.

 

8) 다익스트라 설명하기

 

9) DFS와 BFS 설명해보기

- DFS와 BFS 모두 그래프를 탐색하기 위한 기법

- DFS의 경우 루트 노드에서 시작해 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방식을 말함

- 시간 복잡도는 O(V^2)이며, 인접 리스트를 사용하면 O(V+E)가 됨.

- A에서 B까지 가는 모든 경로를 탐색할 때 적합

- 또, 경로의 특징을 기억해야 할 때 사용

 

- BFS의 경우 루트 노드에서부터 인접한 노드를 먼저 탐색하는 방식

- 시작 정점으로부터 가까운 정점을 먼저 방문하게 되고, 멀리 떨어져 있을 수록 나중에 방문하게 됨

- 시간 복잡도는 O(V^2)이며, 인접 리스트를 사용하면 O(V+E)가 됨

- A에서 B까지 최단 거리를 구할 때 적합

 

10) DP 설명해보기

- 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법

- 같은 연산을 반복적으로 수행할 필요를 줄여 효율성을 높임

- 그러다보니 이전의 계산된 결과를 이용해 다음 것을 계산할 때 비교적 수월하게 결과를 얻을 수 있음

 

내 질문에 대해서는 잘 준비해갔는데 스터디 원들이 준비해온 질문에는 거의 대답하지 못했다. 확실히 CS 지식이 많이 부족한 것 같다...

 

추천글

https://github.com/devSquad-study/2023-CS-Study

 

GitHub - devSquad-study/2023-CS-Study: 신입 개발자 면접 대비 CS 스터디 👨🏻‍💻👩🏻‍💻 🔥

신입 개발자 면접 대비 CS 스터디 👨🏻‍💻👩🏻‍💻 🔥. Contribute to devSquad-study/2023-CS-Study development by creating an account on GitHub.

github.com

https://github.com/gyoogle/tech-interview-for-developer

 

GitHub - gyoogle/tech-interview-for-developer: 👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖

👶🏻 신입 개발자 전공 지식 & 기술 면접 백과사전 📖. Contribute to gyoogle/tech-interview-for-developer development by creating an account on GitHub.

github.com

 

반응형