Post

직무고사 오답노트

하반기 동안, 시스템 엔지니어링 혹은 DevOps 엔지니어 쪽에서 직무 관련 테스트를 봤을 때 몰랐던 부분을 정리했다.

총평

대부분이 리눅스 혹은 네트워크와 관련된 부분에서 문제가 나왔다. 각 회사마다 특이한? 문제들도 많이 나왔다. 프로그래밍 언어 관련 문제라던가, 윈도우 관련 설정 문제라던가 (윈도우만 쓸 회사는 아니었는데, 리눅스도 아니고, 참 신기했다.)

IP 종류

  • Public IP(전세계 공통 IP)
  • Private IP(하나의 네트워크 내부 IP)
    • 클래스 A: 10.0.0.0~10.255.255.255(24)
    • 클래스 B: 172.16.0.0~172.31.255.255(20)
    • 클래스 C: 192.168.0.0~192.168.255.255(16)
  • Loopback ip(127.0.0.1) / localhost

언어

해당 언어를 만든 조직은?

  • rust(rust 재단)
  • go(구글)
  • typescript(ms)
  • python(python 재단)

리눅스 커널 튜닝

리눅스 커널 튜닝할 때, 메모리를 많이 사용하면 문제가 되는 튜닝은?

  • vm.swappiness : 가상메모리 공간을 확보
  • file.max: 시스템에서 열 수 있는 파일의 최대 수
  • vm.dirty_ratio : 전체 메모리의 몇 퍼센트를 더티 페이지로 채울지(더티 = 아직 디스크에 기록되지 않은 메모리의 데이터)
  • net.ipv4.tcp_max_syn_backlog: tcp syn 대기열의 크기를 짖어

프로세스 명령어

isof 명령어의 역할은?

  • 열려진 파일을 보는 유틸이다, 시스템에서 구동되고 있는 프로세스에 의해 열려진 파일을 확인할 수 있다.
    • isof <filename>: 해당 파일을 액세스하는 프로세서를 확인한다.

가상화

가상과 관련해서 docker 관련된 내용도 많이 나왔지만, 이 부분은 정리를 해놨다보니 잘 해결할 수 있었다. 하지만, VM과 관련된 부분은 많이 틀렸다.

  • 제 1 하이퍼바이저의 종류는? (Type 1 Hypervisor)
    • VMware ESXi
    • Microsoft Hyper-V
    • Xen
    • KVM (Kernel-based Virtual Machine)
    • Oracle VM Server for SPARC/x86

프로세스

  • PID

PID는 프로세스 ID를 의미한다. 네임스페이스를 이용하여, 프로세스 그룹별로 나눌 수 있다. 리눅스에서는 systemd가 주로 PID1로 실행되는 서비스 관리 & init 프로세스이다.

  • fork

리눅스에서는 fork()를 통해서 자식 프로세스를 생성할 수 있다. 부모 프로세스가 fork()하여 자식프로세스를 생성하고, Join하지 않은 뒤 종료되었다. 부모프로세스가 종료되고 자식프로세스에 어떠한 시그널도 보내지 않았다면 자식프로세스의 상태는 좀비 상태가 된다. 자식 프로세스가 실행을 완료했지만, 프로세스 테이블에서 완전히 제거되지 않는 상태이다. 즉, 좀비 상태이다.

네트워크

클래스 관련된 IPv4 방식을 잊어서 틀렸다. 주로 (10.1.1.1)과 같은 IP 주소를 주고, 어떤 클래스인지 묻는 문제들이다.

앞에 1~3개의 비트를 통해 IP가 어떤 클래스인지 파악한다.

  • A클래스는 0(1)/network(7)/Host(24)
  • B클래스는 10(2)/network(10)/Host(20)
  • C클래스 대역은? 100(3)/network(13)/Host(16)

부족한 Ipv4의 개수에서 이렇게 클래스별로 분리를 하니, 더욱 IP는 부족했다. 이 문제를 해결하기 위해 서브넷팅과 CIDR이 나오게된다.

  • UDP를 사용하는 프로토콜은?
    • DNS
    • DHCP
    • SNMP(simple network management protocol)

커널과 네트워크

리눅스 커널에서는 네트워크 관련 처리를 할 수 있다. 쿠버네티스의 네트워크 모델을 생각하면, netfilter(iptables)을 활용하여, 서비스로 향하는 패킷을 확인하여, 파드의 IP로 패킷의 목적지를 변경한다.

  • 네트워크 관리 도구는?
    • systemd-networkd
    • NetworkManager

파일 스크립터

File Descriptor는 Linux or Unix 쪽의 시스템에서 Process -> File을 핸들링 시 사용하는 개념으로, Process -> File에 접근 시 사용하는 추상적인 값을 의미한다.

    • 0 표준 입력(stdin)
    • 1 표준출력은(stdout)
    • 2 표준 오류는(stderr)

디스크 관련 명령어

  • df: disk free의 약자로, 현재 디스크의 남은 양을 보여준다.기본단위(KB)

    1
    2
    3
    4
    
      df
      Filesystem     512-blocks      Used Available Capacity iused      ifree %iused  Mounted on
      /dev/disk3s1s1  965595304  19459944 559553368     4%  356050 2797766840    0%   /
      devfs                 397       397         0   100%     690          0  100%   /dev
    
  • du: disk usage의 약자로 디스크 사용량을 보여준다. 주로 디렉터리 별로 확인한다. 기본단위(KB)

    1
    2
    3
    4
    5
    6
    
      du
      16	./notion-sdk-js/test
      496	./notion-sdk-js/examples/web-form-with-express/public/assets
      520	./notion-sdk-js/examples/web-form-with-express/public
      8	./notion-sdk-js/examples/web-form-with-express/views
      568	./notion-sdk-js/examples/web-form-with-express
    
  • fdisk: 하드 디스크 파티션을 관리한다.
  • lsblk: 블록 장치 목록을 보여준다.

리소스 확인 명령어

  • top: 실시간으로 시스템 리소스 사용량을 보여준다.
  • htop: top의 고급 버전으로, 더 많은 정보와 사용자 친화적 인터페이스를 제공한다.
  • free: 메모리 사용량을 보여준다.
  • vmstat: 시스템 리소스, 프로세스 상태, 디스크 I/O 등을 보여준다.

재해 방지 시스템

DR(Disaster Recovery) 재해복구의 중요성은 필요하다.

그중 DNS처럼 동작하는 DR로 GSLB가 있다. GSLB는 Global Service Load Balancing의 약자로, 특정 지역에 트래픽이 증가하는 경우, DNS 기반으로 인접 지역으로 트래픽을 분산한다. 즉, 글로벌 로드밸런싱 역할을 수행했다.

구체적인 로드밸런싱 방법에 대해 알아보면, GSLB는 DNS와 서버 사이에 위치하여 연결된 리소스의 장애가 나면 DNS에 해당 리소스 IP를 제거한 뒤 다른 리소스로 변경한다. 이를 위해 리소스와 주기적으로 Health Check를 진행한다. 이외에도 리소스 및 포트 정보를 등록하거나, 분산 알고리즘을 구현할 수 있다.

참고자료: https://www.samsungsds.com/kr/network-gslb/gslb.html

This post is licensed under CC BY 4.0 by the author.