UMC 1기 Server Session 2주차 워크북

redjen·2021년 10월 7일
0
post-thumbnail

목차

  1. 2주차 수업 후기
  2. 과제
  3. 실습
  4. 핵심 키워드
  5. 논의해보면 좋은 것들

1. 2주차 수업 후기

막연히 알고 있었던 네트워크 개념들을 제대로 짚고 넘어갈 수 있어 많은 부분에서 도움이 될 것 같았습니다.
특히 프론트 프록시 / 리버스 프록시는 정확히는 모르던 개념인데 업무 중 문득문득 나오길래 반드시 제대로 공부가 필요하다고 생각했었기 때문에 이번 기회로 확실히 공부하게 된 것 같습니다.

2. 과제

  1. 포트포워딩을 통해, 로컬 컴퓨터 외부 접속하기 : 다음 포스트에서 정리해 보았습니다.
  2. 내 컴퓨터로 외부 접속할 때, 기기(핸드폰, 컴퓨터, 공유기)에서 무슨 일이 일어나는지 순차적으로 꼼꼼하게 정리하기!!
    (프로토콜, 패킷, 외부/내부 IP, Port 단어 필수 포함)
    - 모바일 기기(외부 접속 기기) : 외부 IP와 포트를 통해 접속하여 서비스를 요청할 곳을 일단 찾아갑니다. 백신을 맞기 위해 일단 병원의 프런트 데스크를 찾아가는 것에 비유할 수 있을 것 같습니다.
    - 공유기 : 프런트 데스크에서 필요 서류를 제출한 뒤에는 '2번 방'으로 들어가라고 안내해주는 것입니다. 외부 IP:포트는 미리 공유기의 포트포워딩 설정을 통해 공유기를 통해 구성되는 내부 네트워크의 자세한 목적지(최종적으로 도달하고자 하는 목적지)를 안내하게 됩니다.
    - 서버 컴퓨터 : '2번 방'에 들어와서 백신을 접종 받습니다. 사용자가 원하는 서비스를 제공하는 주체이며 공유기 내부 네트워크의 구성원으로, 공유기의 포트포워딩으로 내부IP 및 포트로 외부 접속 기기에서 요청한 패킷을 받습니다. 어떤 패킷을 언제 줄 것인지 같은 약속을 미리 지정해 놓는 것이 프로토콜입니다. 프로토콜은 언제, 어떤 병원에서 어떤 종류의 백신을 맞을 지 미리 정해 놓는 것에 비유할 수 있겠습니다.

4. 개념 키워드

핵심 개념 키워드

  • 클라이언트-서버 통신
    • 프로토콜
      • HTTP : HyperText Transfer Protocol입니다. 프로토콜은 약속입니다. 곧 Http는 HyperText를 어떻게 Transfer할 것인지에 대한 약속입니다. 그렇다면 HyperText가 무엇일까요? 하이퍼 텍스트는 하이퍼링크를 통해 다른 문서로 이동할 수 있게 해주는 텍스트라고 합니다. HyperText Markup Language(HTML)은 이런 하이퍼 텍스트를 마크업하여 설명하기 위한 도구입니다. 그렇기 때문에 보통 Http 프로토콜을 사용한다고 함은 HTML과 그를 구성하기 위한 CSS 및 JavaScript을 전송한다는 의미이기도 합니다. HTTP는 Request/Response로 크게 이분화 되고, Connection과 State가 없다는 독특한 특징이 있습니다.
      • HTTPS : HTTP의 취약한 보안성을 보완하기 위해 등장한 프로토콜(HTTP Secure)입니다. SSL 인증서를 통해 암호화가 보장된 HTML 문서를 전송 및 수신합니다. SSL 인증서는 비대칭키 (공개 키)를 통해 암호화를 진행하기 때문에 리만 가설이 증명되지 않는 이상은 안전함이 보장되는 것이 특징입니다.
      • FTP : File Transfer Protocol입니다. 파일 전송 및 수신에 특화되어 간편하고 빠르게 파일을 주고 받을 수 있다는 것이 특징입니다. 두 개의 포트를 사용합니다. 21번 포트는 데이터 전송을 위한 연결을 설정하기 위해 사용되고 20번 포트는 실제 데이터 전송에 사용됩니다.
      • SFTP : Secure File Transfer Protocol입니다. HTTP - HTTPS와 비슷하게 보안에 취약한 FTP 프로토콜에 보안성을 추가한 규약입니다. FTP는 TCP/IP 프로토콜 기반인 반면 SFTP는 SSH 프로토콜 기반입니다. 따라서 SFTP는 FTP와 달리 초기 연결 설정을 위한 포트가 SSH 기본 포트인 22번입니다.
      • MYSQL : MySQL에도 독자 규격 프로토콜을 사용한다는 사실을 처음 알았습니다. MySQL을 프로토콜 구조는 다음 공식 문서에서 확인할 수 있었습니다. 압축구조를 사용하고, SSL 연결을 지원한다고 합니다.
      • SSH : SSH는 Secure Shell Protocol입니다. 서버에 서버 프로그램과 서비스를 올려 구축할 때 주로 사용하는 프로토콜입니다. 원격 컴퓨터인 서버를 마치 로컬에 설치되어 있는 리눅스를 다루는 것처럼 사용할 수 있습니다. HTTPS처럼 공개 키 알고리즘을 사용한 암호화를 하기 때문에 보안성이 뛰어나다는 특징이 있습니다.

  • 네트워크 계층

    • OSI 7 계층 : 통신이 일어나는 과정을 단계별로 파악하기 위해 네트워크 계층을 분리해 국제 표준 규약으로 정해놓은 것입니다. 계층마다 역할을 다르게 분배하게 되어 각 계층에 해당하는 장비도 표준화하기 쉬워졌고, 이상이 생겼을 경우 해당 단계에서 살펴봐 훨씬 빠른 대처가 가능하기 때문입니다. 여담이지만 TCP/IP 프로토콜이 등장한 뒤에 OSI 7계층이 생겼기 때문에 TCP/IP 프로토콜을 OSI 7계층 중 각각 정확한 하나에 대입하기는 힘들다고 운영체제 시간에 배웠었습니다. 각종 시험에 단골로 출제되기 때문에 '피다넷세파'로 외웠었습니다. Phy-Da-Ne-T-Se-P-A. Physical - Data Link - Network - Transport - Session - Application의 앞글자를 따서.. 다음 포스트에 잘 정리되어 있었습니다. OSI 7계층 정리
    • TCP/IP
      • TCP : Transmission Control Protocol입니다. OSI 7계층 중 Transport Layer에 해당합니다. SYN, SYN-ACK, ACK 패킷을 주고 받는 3-Way HandShake를 통해 연결을 설정하고 통신을 시작합니다.

        3-Way Handshake가 일어나는 과정입니다. 서버는 LISTEN 중이다가, 클라이언트가 SYN 패킷을 보내면 SYN-RECEIVED 상태로 전환되며 클라이언트에게 SYN-ACK 패킷을 보냅니다. SYN-ACK 패킷을 받기를 기다리던 클라이언트는 계속 SYN-SENT 상태에 있다가 해당 패킷을 받는 순간 Established 상태로 전환됩니다. 그 후 다시 서버에게 ACK 패킷을 보내 서버에게도 연결이 수립되었음을 전달해줍니다. 서버가 ACK 패킷을 받는 순간 클라이언트와 서버는 진짜 데이터 송수신을 시작합니다.

        TCP 연결이 종료될 때는 4-Way Handshake라는 방법을 통해 종료가 이루어집니다.

        3-Way Handshake와 비슷하지만 약간 다릅니다. 클라이언트가 서버에게 연결 종료를 위해 FIN 패킷을 보내면 서버가 ACK 패킷을 보내고, 다시 FIN 패킷을 보냄으로써 연결이 확실하게 종료되었음을 보장할 수 있게 이루어집니다. 서버가 클라이언트로부터 ACK 패킷을 받으면 TCP 연결이 종료되는 방식으로 이루어집니다.

      • IP : Internet Protocol입니다. 데이터 패킷들이 네트워크를 여행을 해서 정확한 목적지에 도달할 수 있게 하기 위한 규약입니다.

        우리가 차를 타고 어딘가의 목적지로 의뢰 받은 물건을 전달하고자 하면 무엇이 가장 필요한가요? 정확한 목적지와, 목적지까지 도달하는 방법이 필요합니다. IP는 그 과정에서 비신뢰성과 비연결성이라는 특징을 가지고 있습니다. 전달 의뢰를 받은 물건 안에 무엇이 들어있는지 묻지 않고 (상태를 보장하지 않음 - Unreliablity) 목적지의 누구에게 전달하는지도 중요하지 않습니다. 그냥 문 앞에 놓고 오는 것입니다. (연결을 보장하지 않음 - Connectionless) 의뢰 받은 물건이 김아무개씨에게 제대로 전달했는지를 확인하려면, 앞서 서술한 TCP의 도움이 필요합니다.

  • IP

    • Packet

      • Header : OSI 7계층 중 3계층은 Network Layer입니다. IP가 OSI 계층 중 매핑 되는 곳이기도 하며, 라우터라는 장비가 대표적으로 3계층의 영역을 담당합니다. 그런데 이 라우터라는 장비가 어떤 일을 하는지 자세히 풀어보면, 패킷 단위로 전송되는 데이터를 해석해서 각각의 패킷에 담긴 목적지로 경로를 정해서 보내주는 (Routing) 역할을 합니다. 라우터가 패킷을 해석할 때, 헤더라는 패킷의 특정한 비트를 읽어서 어떤 프로토콜인지, 어디로 가야하는 지를 읽습니다. 즉 헤더는 택배의 '운송장' 역할을 한다고 이해하면 쉽습니다.

        우체국 택배 운송장과 IP 헤더의 모습입니다. 보내는 사람, 받는 사람의 주소, 내용물의 길이, 운송장이 올바르게 쓰여졌는지 표시하는 부분이 있습니다.

      • Body : 패킷이 담고 있는 데이터 영역입니다.

    • IPv4 : Internet Protocol version 4입니다. 패킷 교환 네트워크에서 데이터를 교환하기 위한 규약입니다. 3계층에 속하기 때문에 데이터가 올바르게 잘 전달되는지에 대한 약속은 보다 상위 계층에서 이루어집니다. 3자리의 수가 4부분으로 구성되어 총 12자리입니다. 각 부분은 0~255까지의 수로 표현됩니다.
      0.0.0.0~255.255.255.255까지 이론적으로 2^32개의 주소를 할당할 수 있습니다. 때문에 2011년부터는 IPv4 주소가 전부 소진되어 할당이 중지되었습니다. 특수 용도로 다음 몇 가지 주소는 미리 예약되어 있습니다. IPv4 Wiki

    • IPv6 : Internet Protocol version 6입니다. 주소가 다 소진된 IPv4의 대안으로써 적용되고 있습니다. IPv6는 16진수 4자리가 8부분으로 구성되어 이론적으로 2^(4x4x8) = 2^128개의 주소를 할당할 수 있습니다. 또 네트워크에 접속하는 순간 네트워크 주소를 할당 받고, 패킷 크기가 늘어났으며 인증 및 보안 기능이 향상되는 등 IPv4에 비해 여러 이점이 있기 때문에 향후 몇 십년 간은 IPv6을 대체할 인터넷 프로토콜은 등장하지 않을 것 같습니다. IPv6 Wiki

    • Domain : 인터넷을 할 때, 우리는 주소창에 IP주소와 포트의 조합으로 구성된 주소를 입력해서 이동할 수 있다는 것을 배웠지만 실제로는 어떻게 인터넷을 이용하고 있나요? 복잡한 숫자보단 naver.com이나 google.co.kr와 같은 외우기 쉬운 단어 조합을 주소창에 입력해서 사용하고 있습니다. 도메인이란 이런 단어 조합을 이야기 합니다. 우리가 만든 서비스를 도메인으로 사용하기 위해서는 상위 도메인의 레지스트리의 등록 위임을 받은 기관을 통해 구매하여 등록하여 사용합니다.

  • Port

    • 서버에서 포트란? : 앞선 예시에서 병원의 '2번 방'에 해당하는 개념입니다. 서버에서 포트는 네트워크 서비스를 식별하는 논리 단위이기도 합니다. 보통 포트 하나에 서비스 하나를 올려 구분하여 사용합니다. OSI의 4번째 계층인 Transport Layer에 속합니다.

    • 자주 쓰는 프로토콜별 포트 번호 정리

      포트 번호예약되어 있는 서비스
      20FTP (data)
      21FTP (control)
      22SSH, SFTP
      23Telnet
      80Http
      443Https
      3306MySQL
      8080Http Alternative

      https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers 에서 더 자세한 목록을 볼 수 있었습니다.

    • 포트리스닝 : TCP 연결에서 서버 역할을 하는 특정 프로세스는 할당된 포트에서 LISTENING 상태로 대기합니다. 클라이언트에게서 ACK 패킷을 받으면 ESTABLISHED 상태로 전환되어 연결 및 데이터 송수신을 시작합니다.

    • 인바운드 / 아웃바운드 : 주로 방화벽 정책을 설정할 때 많이 등장하는 용어이지만 방화벽 뿐만 아니라 많은 곳에서 '인바운드는 들어오는, 아웃바운드는 나가는' 것에 대한 이야기입니다. 찾아보니 마케팅 용어에도 인/아웃 바운드가 있네요. 마찬가지로 방화벽에서 인바운드 정책은 내 컴퓨터로 들어오는 트래픽에 대한 제어 정책이고, 아웃바운드 정책은 내 컴퓨터에서 나가는 트래픽에 대한 제어 정책입니다.

    • 데몬(Daemon) : 사용자의 제어를 떠나 백그라운드에서 여러 작업을 하는 프로그램을 말합니다. 리눅스에서는 프로세스 이름 뒤에 d를 붙여서 (sshd, httpd처럼) 표시합니다. 터미널에서 프로세스 실행 시 '&'를 끝에 붙여 백그라운드에서 실행하게 하여 사용자 프로그램을 daemonize 할 수 있습니다.

  • Port forwarding : 공인 중개사가 임대인과 임차인을 연결시켜주는 행위에 비유할 수 있겠습니다. 임차인 (서비스 요청자)는 특정 서비스를 필요로 하는데, 중개사가 임대인 (서비스 제공자)를 연결시켜 연결을 체결하고 데이터 교환(부동산 계약)이 이뤄지게 합니다. 공유기에 연결된 모든 기기는 전부 포트포워딩되어 인터넷을 사용한다고 할 수 있습니다. 포트 포워딩이란?

    • 공유기
      • WAN : Wide Area Network, 광역 통신망입니다. 서울에 사는 철수와 부산에 사는 영희가 서로 카카오톡으로 연락을 할 수 있는 것은 물리적으로 먼 거리에 있는 서로 다른 네트워크가 통신망으로 연결되어 있기 때문입니다. ISP에서 제공하는 거대한 기업 전용망의 말단에 라우터와 같은 장비로 근거리 통신망을 연결하여 광역 통신망에서 근거리 통신망 안의 철수를 찾을 수 있습니다.
      • LAN : Local Area Network, 근거리 통신망입니다. RJ45 케이블과 와이파이 등으로 이미 친숙한 이름입니다. 보통 물리적으로 한정된 지역에서 여러 대의 장치를 서로 연결하기 위해 최적화되어 있는 네트워크입니다.

  • 외부 IP (공인 IP) : ISP가 제공하는 IP 주소입니다. 전 세계에서 유일합니다.
  • 내부 IP (사설 IP) : 일반 가정이나 회사 내부의 네트워크에서 할당한 IP 주소입니다.
  • 외부 포트 : 공유기 외부에서 접근하기 위한 포트입니다. 외부 IP와 조합됩니다.
  • 내부 포트 : 공유기 내부에서 접근되기 위한 포트입니다. 내부 IP와 조합됩니다.
  • 게이트웨이 : 해외 여행을 할 때 공항이나 항구와 같은 역할을 합니다. 서로 종류가 다른 네트워크 간의 통신을 가능하게 해주는 개념입니다.
  • 방화벽 : 미리 정의한 보안 규칙들을 통해 네트워크 트래픽을 제어하는 보안 시스템입니다. 하드웨어, 소프트웨어 모두 존재하며 외부에서 내부로 인가되지 않은 접속을 막아주는 기본적이지만 매우 중요한 역할을 합니다. 반대로 80과 같은 포트가 아닌 특정 포트를 통해서 서비스를 할 때에는 외부 클라이언트들이 내부 서비스를 이용할 수 있도록 방화벽의 인바운드 정책을 설정해 줘야 합니다.
    방화벽 인바운드 / 아웃바운드

추가 개념 키워드

  • TCP vs UDP
    • UDP : 초등/중학생 시절 컴퓨터실에서 스타 좀 해본 사람들이라면 들어봤을 용어일 수도 있습니다. udp는 데이터 그램이라는 단위로 데이터를 받기 위해 IP를 사용합니다. TCP와 다른 점은 데이터를 나누고 재조립하지 않으며 받는 데이터들의 순서가 보장되지 않는다는 점입니다.
    • TCP 예시 : 데이터의 무결성이 중요한 거의 모든 서비스에서는 TCP를 사용합니다. 이메일이나 파일 전송 같이 데이터 하나가 누락되면 치명적인 서비스들이 TCP 연결을 사용하는 예시입니다.
    • UDP 예시 : 앞서 스타크래프트를 예시로 들었던 것처럼, TCP보다 빠른 응답속도가 보장되는 UDP는 스트리밍 서비스나 온라인 게임에서 사용하고 있습니다.
  • DNS 서버 (Domain Name System Server) : DNS는 전화번호부입니다. 김아무개에게 놀러가도 되냐고 연락을 하고 싶은데, 연락처가 기억나지 않습니다. 그 때 참조하는 것이 바로 DNS입니다. 보다 기억하기 쉬운 도메인 이름(휴대폰 단축키 1번 꾹)을 입력했을 때 실제로 어려운 IP주소 + 포트 번호(실제 전화번호)로 연결되는 것에 비유할 수 있겠습니다. 이러한 변환 시스템을 제공하는 서버가 DNS 네임 서버, 혹은 DNS 서버입니다.
  • Proxy프록시 서버 란? Proxy Server를 참고하였습니다.
    • Forward proxy : 기업 내부망과 같은 환경에서 인터넷에 연결하기 위해서 포워드 프록시를 사용합니다. 직접적으로 외부 서버에 데이터를 요청하는 것이 아닌, 포워드 프록시로부터 간접적으로 원하는 데이터를 가져오는 방식입니다.
    • Reverse proxy : 포워드 프록시와는 반대로 인터넷에서 들어오는 트래픽들이 내부망의 서비스에 들어오기 전에 리버스 프록시 서버를 거치는 방식입니다. 로드 밸런싱이나 보안 상의 이유 때문에 대부분의 서비스에서 사용하고 있습니다.
  • 네트워크 장비
    • 라우터 : 패킷의 헤더를 읽어 목적지에 대한 최적 경로를 설정해 데이터를 다음 장치로 보내는 장치
    • 허브 : 여러 대의 장비를 한 네트워크 및 그룹에 연결하는 장치
    • 스위치 : 엄청 큰 허브. 대규모의 패킷을 처리하는 데 있어서 허브보다 전송 속도 등에서 이점이 있습니다.
    • 공유기 : 집 또는 작은 회사에서 쓰는 작은 라우터. 포트포워딩을 사용해 여러 대의 기기가 인터넷에 연결할 수 있게 해줍니다.
  • 이더넷(Ethernet) : OSI의 첫번째 계층인 Physical Layer에서 MAC 패킷과 프로토콜 형식을 정의하는 기술 규격.
  • MAC 주소 : OSI의 두번째 계층인 Data Link Layer에서 네트워크 인터페이스에 할당된 고유 식별자. 하드웨어에 저장되어 영구적인 식별을 위해 고안되었지만 현대의 대부분의 하드웨어는 MAC주소를 변경할 수 있습니다.

5. 논의해보면 좋은 것들

  • 패킷에 IP와 Port가 들어가야하는 이유 : 패킷은 운송장! 인터넷은 너무 넓고 사람도 많아서 운송장에 IP와 Port, 받는 사람의 주소가 들어가지 않는다면 택배가 목표했던 목적지를 제대로 찾아갈 수 없기 때문입니다.
  • SSH의 원리
    • 공개키 : 개인이 가지고 있는, 모두에게 오픈되어 있는 키입니다.
    • 개인키 : 개인이 가지고 있으며 자신만 가지고 있는 키입니다.
    • 상대방의 공개키로 대칭키를 생성하여 암호화를 하게 되면 상대방의 개인키로만 복호화가 가능하기 때문에 보안성이 보장된 통신이 가능합니다.
  • SSH와 SFTP의 Port번호(22)는 왜 같은가? : SFTP가 SSH 연결을 기반으로 한 프로토콜이기 때문입니다.
  • 데몬
    • 데몬이란? : 사용자의 추가적인 제어 없이 백그라운드에서 묵묵히 할 일을 해주는 프로그램
    • 데몬이 하는 일 : 보통 자동화가 되야 하는 서비스들. 클라이언트의 요청 하나가 들어올 때마다 서버 프로그램에서 fork()로 새 프로세스를 생성해주는 행위와 같은 일들을 서버 관리자가 일일이 할 수 없기 때문에 데몬화된 프로세스를 통해 이를 자동화합니다.
  • 서버 보안을 위해서 어떤 부분을 신경써야할까?
    권한 및 정책 설정 및 유지가 제일 중요하다고 생각합니다. 세상에서 제일 안전한 서버는 모든 네트워크 포인트에서 모든 서비스 포트를 막아 놓아 외부에서 접근이 불가능한 서버라고 생각합니다. 정책 설정에 있어서는 최대한 보수적으로 임하고 필요 이상의 권한을 파일 및 폴더에 부여하지 않는 것이 보안의 시작이라고 생각합니다.
  • SSH의 중요성 : SSH는 공개키 알고리즘을 사용하여 보안성이 보장된 터미널 연결을 가능하게 해주는 프로토콜입니다. 서버에서 작업을 할 때는 GUI가 아닌 CLI 터미널 환경에서 이루어지기 때문에 대부분의 경우 SSH를 사용하는 것 같습니다.
  • NAVER 서버는 서버가 한 대 이상일 것임.
    서버가 여러대일 경우, 서버단의 통신이 어떻게 이루어질까? :
    • 제가 주소창에 naver.com을 치게 되어 이동하면 제일 먼저 제 컴퓨터의 dns 서버에서 이를 알맞은 외부 IP 및 포트로 변환하여 이동시켜 줄 것입니다. 그 다음엔 해당 요청이 담긴 패킷을 라우터와 같은 기기들이 최적의 경로로 해당 외부 IP가 할당 된 네트워크까지 도달하게 해줍니다. 네이버 서버의 네트워크의 최전면 부분에는 리버스 프록시 서버가 위치해 있을 것입니다. 그 리버스 프록시 서버는 다시 내부 알고리즘을 통해 내가 원하는 서비스가 있는 내부 네트워크의 서버로 안내를 해주어 우리가 보는 네이버 홈페이지가 나타나게 될 것이라고 생각합니다.


      그림 출처 : https://docs.oracle.com/cd/E19528-01/819-5493/adypr/index.html

profile
make maketh install

0개의 댓글