상세 컨텐츠

본문 제목

[BACKEND] 백엔드 개발 기술면접 준비(6) 운영체제&네트워크

취준/1. 기술면접

by ranlan 2022. 2. 3. 00:01

본문

728x90

Q. IP와 도메인(Domain)

A. IP는 인터넷에 연결되어있는 모든 장치를 식별할 수 있도록 부여되는 고유의 주소이며 이에 문자로 주소를 부여해 이름을 단 것을 도메인이라한다.

* DNS(Domain Name System)이란 아이피 주소와 도메인 사이 변환을 담당하는 시스템

 

Q. IP / MAC

A. ARP 프로토콜을 통해 IP → MAC, RARP 프로토콜을 통해 IP → MAC 주소 변환한다.

  • IP 네트워크에 연결에 할당된 주소
  • MAC 통신기기 하드웨어 자체에 부여된 고유한 식별번호, 컴퓨터의 물리적 주소

IP는 수신, 발신의 경로를 찾기 위한 네트워크 주소, MAC 주소는 해당 기기의 물리적인(하드웨어) 주소이다. IP 주소는 통신 과정에서 결국 MAC 주소로 변경된다.

 

Q. 이더넷

A. 인터넷에서 근거리 통신망 또는 LAN에서 컴퓨터를 연결하는 방식, 네트워크를 구성하는 방식 중 하나며 각 기기들의 고유한 주소(MAC 주소)를 가지고 호스트간의 데이터를 주고 받는 방식이다.

 

Q. 네트워크 7계층(OSI 7계층)

A.

  1. 물리 계층
    기계적 특성을 이용해 데이터를 전송하며 비트를 이용한다.
    데이터 전송 단위 - 비트
  2. 데이터 링크 계층
    물리 계층에서 송수신되는 정보의 오류와 흐름을 관리하여 안전한 정보 전달을 수행할 수 있도록 한다.
    네트워크 기기들 사이 데이터를 전송하는 역할을 한다.
    데이터 전송 단위 - 프레임
  3. 네트워크 계층
    IP를 부여하고 경로를 선택해 경로에 따라 패킷을 전달한다.
    데이터 전송 단위 - 패킷
  4. 전송 계층
    양 끝단의 사용자들이 신뢰성있는 데이터를 주고받을 수 있도록 한다.
    오류 검출 및 복구, 흐름 제어와 중복 검사 등을 수행한다.
    데이터 전송 단위 - 세그먼트
  5. 세션 계층
    포트 번호를 기반으로 TCP/IP 세션을 만들고 없애는 책임을 진다.
  6. 표현 계층
    사용자의 명령어를 완성하여 결과를 표현하고 압축, 암호화한다.
  7. 응용 계층
    UI를 제공한다.

 

Q. TCP/IP 4계층

A.

  1. 네트워크 인터페이스 계층
    (1) 물리 계층 - (2) 데이터 링크 계층
    물리적인 MAC 주소를 이용하고 물리적으로 데이터가 네트워크를 통해 어떻게 전송되는지 정의한다.
  2. 인터넷 계층
    (3) 네트워크 계층
    통신 노드 간 IP패킷 전송과 라우팅을 담당한다.
  3. 전송 계층
    (4) 전송 계층
    통신간 노드 연결을 제어하고 신뢰성있는 데이터 전송을 담당한다.
  4. 응용계층
    (5) 세션 계층 - (6) 표현 계층 - (7) 응용 계층
    사용자와 가장 가까운 계층으로 애플리케이션과 인터페이스할 수 있도록 해준다. 사용자 UI를 담당한다.

 

Q. TCP / UDP 차이점

A.

* 패킷이란?

인터넷 내에서 데이터를 보내기 위한 라우팅을 효율적으로 하기 위해 데이터를 여러 개의 조각으로 나누어 전송한다.

  • TCP(Transmission Control Protocol)
    연결 지향적 프로토콜로 클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 프로토콜이다.
    호스트간 신뢰성 있는 데이터 전달과 흐름을 제어하며 인터넷상에서 데이터를 메시지 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다. 일반적으로 TCP와 IP를 함께 사용하는데 IP가 데이터의 운송을 처리한다면 TCP는 패킷을 추적하고 관리한다.

    • 연결형 서비스로 가상 회선 방식을 제공한다.
      (발신지와 수신지를 1:1 연결하여 패킷을 전송하기 위해 논리적 경로를 배정한다)
      3-way handshaking을 통해 연결을 설정하고, 4-way handshaking을 통해 연결을 해제한다.
    • 데이터의 경계를 구분하지 않는다.
    • 스트림 전송으로 전송 데이터의 크기가 무제한이다.
    • 데이터의 전송 순서를 보장한다. 패킷에 순서를 부여하여 재조립한다.
    • 신뢰성있는 데이터를 전송한다.
    • 데이터 흐름제어나 혼잡 제어 기능도 제공하여 UDP보다 속도가 느리다.

      * 3-way handshaking

      클라이언트/서버간 연결을 위해 3번의 요청과 응답을 거친다.
      1) 클라이언트에서 서버로 연결 요청을 하기 위해 SYN 데이터를 보낸다.
      2) 서버에서 해당 포트는 SYN 데이터를 받고 LISTEN -> SYN_RCV 상태로 변경된다.
      3) 요청을 정상적으로 받았다는 대답 ACK와 클라이언트에게도 연결 요청 SYN을 같이 보낸다.
      4) 클라이언트는 이를 받아 ESTABLISHED로 상태를 변경하고 서버에 ACK을 전송한다.
      5) 서버도 ESTABLISHED로 변경된다

  • UDP(User Datagram Protocol)
    비연결형 서비스를 지원하는 전송계층 프로토콜로 인터넷에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. 데이터를 데이터그램 단위로 처리한다.(* 데이터그램은 독립적인 관계를 지니는 패킷이라는 뜻이다.)
    • 비연결 서비스로 데이터그램 방식을 제공한다. 각각의 패킷은 서로 다른 경로로 전송되고 독립적인 관계를 지니게 된다.
      연결이 없기 때문에 연결을 설정하고 해제하는 과정이 존재하지 않는다.
    • 데이터를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
    • 신뢰성 없는 데이터를 전송한다.
    • 데이터의 경계를 구분한다. 
    • TCP보다 전송속도가 빠르다.
    • 소켓 대신 IP 기반으로 데이터를 전송한다.
    • 서버와 클라이언트는 1:1, 1:N, N:M 등으로 연결될 수 있다.
    • 흐름 제어가 없어 패킷이 제대로 전송되었는지나 오류를 확인할 수 없다. 중간에 패킷이 유실이나 변조가 되어도 재전송을 하지 않는다.

* 흐름제어

데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것이다.

* 혼잡제어

네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것이다. 정보의 소통량이 과다한 경우 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다.

 

[차이점] TCP는 속도 성능보다 신뢰성이 중요할 때 사용되는 프로토콜이며 UDP는 TCP에 비해 속도가 빠르고 네트워크 부하가 적다는 장점이 있는 반면 데이터의 신뢰성과 전송 순서를 보장하지 않는다.

따라서 UDP는 신뢰성보다 연속성이 중요한 실시간 서비스(스트리밍)에 자주 사용된다.

 

Q. 로드밸런싱(Load Balancing, 부하분산)

A. 서버에 가해지는 부하를 분산하는 장치 또는 기술이다. 클라이언트와 서버 풀(분산 네트워크를 구성하는 서버들의 그룹) 사이 위치하며 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 보일 수 있도록 한다.

로드밸런싱은 여러 대의 서버를 두고 서비스를 제공할 때 분산 처리 시스템에 필요한 기술이다.

사업 규모가 작고 클라이언트의 요청 수가 적다면 서버 한 대로 요청 처리가 가능하나 트래픽이 증가하면 서버를 증설해야한다.

 

트래픽에 대처할 수 있는 방안은 크게 두 가지 이다.

  • scale-up
    서버 자체의 성능을 확장하는 것이다.
  • scale-out
    기존 서버와 동일하거나 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것이다.
    이 경우 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 필요하다.

다양한 로드밸런싱 알고리즘이 있다.

예) 라운드로빈 방식, 가중 라운드로빈 방식, IP 해시 방식, 최소 연결 방식, 최소 응답시간 방식 등

 

Q. 멀티플렉싱

A. 하나의 통신 채널을 통해 둘 이상의 데이터(시그널)를 전송하는데 사용되는 기술이다. 즉 하나의 서버에 둘 이상의 클라이언트를 처리하는 것이다.

 

각각의 스레드나 프로세스를 생성하는 것이 아니라 하나의 스레드에서 다수 클라이언트에 연결된 소켓을 관리하고 이벤트를 처리한다. 시그널을 통해 3개의 클라이언트와 모두 데이터를 주고 받는다.

 

* 멀티 프로세스 서버의 경우 클라이언트마다 자식 프로세스를 생성하여 요청 처리를 담당한다.

 

Q. 교착상태(데드락, Deadlock)이란 

A. 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고있어 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다. 둘 이상의 프로세스가 각각 자원을 점유한 상태에서 서로 상대방의 자원을 대기하고 있어 아무것도 완료되지 못하고 계속 기다리게 된다.

교착상태가 발생하기 위해서는 다음 네 조건이 모두 충족되어야 한다.

  • 상호배제
    자원은 한번에 한 프로세스만이 사용할 수 있어야 한다.
  • 점유대기
    최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
  • 비선점
    다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
  • 순환대기(환형대기)
    공유자원과 공유자원을 사용하기위해 대기하는 프로세스들이 원형으로 구성되어 있다. 자신에게 할당된 자원을 점유하면서 앞이나 뒤의 프로세스의 자원을 요구해야 한다. 

 

Q. 데드락을 발견하는 방법과 발생하지 않도록 하는 코딩 방법

A. 데드락 해결 방법은 크게 3가지로 분류할 수 있다.

  • 예방
    데드락 발생 조건 중 하나라도 제거함으로써 데드락을 예방한다.
    • 상호배제 부정: 한 번에 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
    • 점유대기 부정: 프로세스가 실행되기 전 필요한 모든 자원을 할당해 대기를 없애거나 자원이 점유되지 않은 상태에서만 자원을 요구하도록 한다.
    • 비선점 부정: 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고 요구한 자원을 사용하기 위해 기다리게 한다.
    • 순환대기 부정: 자원에 고유한 번호를 할당하고 번호 순서대로 자원을 요구하도록 한다.
  • 회피
  • 탐지
  • 회복

 

Q. 메모리 단편화

A. RAM에서 메모리 공간이 작은 조각으로 나뉘어져 사용 가능한 메모리가 충분히 존재하지만 할당(사용)이 불가능한 상태를 의미한다.

  • 내부 단편화
    메모리 할당 시 프로세스가 필요한 양보다 더 큰 메모리가 할당되어 프로세스에서 사용하는 메모리 공간이 낭비되는 상황이다.
  • 외부 단편화
    메모리가 할당되고 해제되는 작업이 반복될 때 작은 메모리 조각이 중간중간 존재하게 된다. 이렇게 생긴 메모리가 많이 존재해서 총 메모리 공간은 작업 수행에 충분하지만 실제로 할당할 수 없는 상태이다.

 

Q. 메모리 단편화 해결 방법

A. 

  • 페이징(Paging) 기법

  • 세그멘테이션(Segmentation) 기법

  • 메모리 풀(Memory Pool)

(참고)

https://junghyun100.github.io/%EB%A9%94%EB%AA%A8%EB%A6%AC%EB%8B%A8%ED%8E%B8%ED%99%94/

 

Q. 프록시 서버와 방화벽

A. 프록시 서버서버와 클라이언트 사이 클라이언트를 대신하여 서버에 요청과 응답을 전달하는 서버이다.

* 애플리케이션 계층에서 동작(7)한다.

 

방화벽네트워크를 오가는 패킷을 검사하고 규칙에 따라 연결 요청을 받아들이거나 거부하는 역할을 한다. 필터링은 기본적으로 네트워크 주소와 포트를 기반으로 한다. 내부에서 외부로 나가는 검사하지 않고 외부에서 내부로 들어오는 패킷만을 검사한다.

* 전송 계층(4)이나 네트워크 계층(3)에서 동작한다.

 

VPN(Virtual Private Network)는 가상 사설 망으로 컴퓨터나 호스트간 공용 인터넷을 통해 터널을 만든다(사설망과 공용 네트워크 사이 암호화된 연결). 이 터널은 임의의 암호화 프로토콜에 의한 패킷의 캡슐화에 의해 형성된다. 

 

프록시는 중간의 다른 서버가 요청과 응답을 대신 주고받아 IP 주소를 숨길 수 있으나 데이터 암호화는 수행하지 않는다. VPN은 이와 다르게 데이터 암호화를 수행하여 다른 사용자가 그 내용을 보아도 읽을 수 없다.

 

Q. 프로그램 메모리 구조

A. 

  • 텍스트(코드) 영역
    코드를 실행하기 위해 저장되어있는 공간이다.
  • 데이터 영역
    전역변수와 정적 변수 저장가 저장되는 공간으로 프로그램 실행 전 선언되어 프로그램 종료 시 해제된다.
    초기화된 변수 영역과 초기화되지 않은 변수 영역으로 나뉜다.
  • 힙 영역
    사용자에 의해 관리되는 영역으로 동적으로 할당 된(런타임 시 크기가 결정되는) 변수들이 저장된다.
    new 키워드로 생성된 변수들, 참조 변수들이 저장된다.
    * 낮은 주소에서 높은 주소로 적재
  • 스택 영역
    함수 호출 시 지역변수, 매개변수들이 저장되는 공간으로 함수 종료 시 해제된다(pop).
    재귀 호출 시 정보 저장, 잘못된 재귀 호출 -> Stack Overflow
    * 높은 주소에서 낮은 주소로 적재

 

Q. 웹 동작 방식

A.

  1. 사용자가 브라우저에 URL 입력한다
  2. DNS 이용하여 도메인에 해당하는 실제 IP 주소를 찾는다.
  3. HTTP 프로토콜을 이용하여 HTTP 요청을 생성한다.
  4. TCP/IP 연결을 통해 서버에게 요청을 전달한다.
  5. 서버는 HTTP 프로토콜을 이용해 HTTP 응답을 생성한다.
  6. TCP/IP 연결을 통해 다시 브라우저에 전달한다.
  7. HTTP 응답 메시지를 사용자에게 보여준다.

 

Q. 컴파일러와 디버깅

A.

  • 컴파일이란 프로그래밍 언어로 작성된 코드를 기계어로 번역하는 것이다(자바의 컴파일러는 javac). 이렇게 만들어지는 파일이 Object이다.
  • 컴파일 후 오브젝트나 다른 파일들을 연결해주는 작업을 링킹이라고 한다.
  • 빌드코드를 컴파일하여 링킹 후 실행 파일로 만들어 실행하는 과정을 의미한다.
  • 디버깅이란 프로그램에서 오류를 찾아 문제의 원인을 해결하는 과정이다. 

 

 

728x90

관련글 더보기

댓글 영역