인터넷 기본

Joshua Song / 송성현·2020년 4월 10일
1

Zero to B+

목록 보기
1/2

Introduction

회사에 일한지 일주일이 되어간다. 회사에서 개발자들끼리 이론을 숙달하고 개념을 복습하기 위해 각자 정보를 정리하고 공부해 기록을 남기기로 했다. 이번 포스팅을 시작으로 이론을 유닛별로 정리할 것 같다.

인터넷이란?

  • 인터넷이란 말의 유래는 여러 통신망을 하나로 연결한다는 의미의 '인터 네트워크' (inter-network)라는 말에서 시작되었고, 이제는 전 세계 컴퓨터들을 하나로 연결하는 거대한 컴퓨터 통신망을 의미한다. 클라이언트와 서버로 이루어져있는 인터넷은 TCP/IP 프로토콜을 기반으로 한 전 세계의 컴퓨터와 네트워크들이 연결된 광범위한 컴퓨터 통신망이다. 수많은 클라이언트와 서버 컴퓨터로 이루어진 네트워크들의 집합체라고도 볼 수 있다.

특징

  • 유닉스 운영체제를 기반으로 한다.
  • 동시에 참여할 수 있는 쌍방향 통신을 제공한다: 통신망과 컴퓨터만 있다면 시간과 장소를 떠나 정보를 교환할 수 있다.
  • 인터넷에 연결된 모든 컴퓨터는 고유한 IP를 가지고 있다.
  • 연결을 위해서는 브리지, 라우터, 게이트웨이가 사용된다.

서비스

  • WWW (World Wide Web): 텍스트, 그림, 동영상과 음성 같은 다양한 정보를 제공하는 종합 정보서비스이면 HTTP 프로토콜을 사용하는 하이퍼텍스트 기반으로 되어 있다. WWW의 효과적인 검색을 도와주는 프로그램을 웹 브라우저라고 한다.
  • 전자우편(E-Mail): 인터넷을 통해 다른 사람과 다양한 형식의 데이터를 주고 받을 수 있게 해주는 서비스로 SMTP, POP3, MIME 프로토콜을 사용한다.
  • 텔넷(Telnet): 멀리 떨어져 있는 컴퓨터에 접속하여 자신의 컴퓨터처럼 사용할 수 있도록 해주는 서비스. 시스템 관리 작업을 가능케 하는 가상의 터미널 기능을 수행한다.
  • HTTP(Hyper Text Transfer Protocol): 하이퍼 텍스트 문서 전송을 위한 프로토콜.
  • FTP(File Transfer Protocol): 파일 전송 프로토콜은 말 그래도 컴퓨터와 컴퓨터, 컴퓨터와 인터넷 사이에서 파일을 주고 받을 수 있도록 해주는 원격 파일 전송 프로토콜 이다.
  • 아키(Archie): 익명의 FTP 사이트에 있는 FTP 서버와 그 안의 파일 정보를 데이터베이스에 저장해 두었다가 FTP 서버의 리스트와 파일을 제공해 정보를 쉽게 검색할 수 있도록 하는 서비스이다.
  • 고퍼(Gopher): 메뉴 방식을 이용해 정보 검색을 할 수 있게 해주는 서비스
  • 유즈넷(USENET): 분야별로 분리되어 있는 네트워크. 유저 네트워크의 준말이다.

Conclusion

  • 1960년대 알파넷 (ARPANET)에서 시작된 인터넷은 현재 사람들에게 없어서는 안될 네트워크 집합체로 서로 정보를 교환하고 정보 획득을 가능케하는 역할을 한다. 데이터의 전송 속도는 더욱 빨라지고 안정적으로 발전되고 있다. 이러한 인터넷이 서로를 연결시켜주고 온라인 서비스를 가능케 하기에 삶이 더욱 편안해졌다고 할 수 있다. 접하는 정보의 양과 질이 더욱 향상되었다.

출처

HTTP

Introduction

  • Hyper Text Transfer Protocol, 즉 HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토 콜로, 웹에서 이루어지는 모든 데이터 교환의 기초이며 클라이언트와 서버 사이의 프로토콜이기도 하다. 프로토콜은 두 컴퓨터 간의 통신을 위한 규칙의 집합이고, HTTP는 문자로 된 독립적인 프로토콜이다.

특징

  • Textual: 모든 명령어들은 기본 문자이며 사람들이 읽을 수 있다.
  • Stateless: 서버 혹은 클라이언트는 이전의 통신을 기억하지 않는다. 그래서 HTTP만 사용하면 서버는 전에 입력한 비밀번호 나 어디까지 처리했는지 기억하지 못한다. 그런일을 위해선 애플리케이션 서버가 필요하다.
  • 클라이언트만이 HTTP 요청을 만들어 서버에게 보낼 수 있고, 서버는 오직 클라이언트의 요청에만 응답이 가능하다.
  • HTTP를 통해 파일을 요청할 때 클라이언트는 반드시 URL 파일을 제공해야 한다.
  • 웹 서버는 최소한 에러 메시지를 포함해 모든 HTTP 요청에 응답해야 한다.
    - 클라이언트의 요청 => HTTP 서버가 요청받은 URL이 있는 파일과 매칭이 되는지 확인 => 매칭되면 브라우저에 리턴, 아니면 애플리케이션 파일은 필요한 파일을 구축 => 만약 불가능할 경우, 에러메시지 반환 ("404 Not Found")

HTTP Request

  • HTTP요청 메서드는 여러가지 메소드가 있지만, 주요 사용하는 메소드에는 GET, POST, PUT, DELETE 요청이 있다.
    - Get은 존재하는 자원에 대한 요청을 보낼 때,
    - POST는 새로운 자원을 생성하는 요청을 보낼 때,
    - PUT은 존재하는 자원에 대한 변경 요청을 보낼 때,
    - DELETE는 존재하는 자원에 대한 석제 요청을 보낼 때 사용합니다.때에 따라 POST메서드로 PUT, DELETE의 동작을 수행하기도 한다.

HTTP Process

브라우저에 URL을 입력하고 요청한 페이지까지 무슨일이 일어날까? 간략하게 정리해보았다. (요약한 부분들이 있다...!)

  1. 먼저, 웹 브라우저가 URL을 문법에 따라 해석한다.

  2. 만약 이 URL이 문법에 맞지 않는다면, 입력을 웹 브라우저의 기본 검색 엔진으로 검색 요청을 한다.

  3. URL문법이 맞다면, Punycode (퓨니코드)(유니코드 문자열을 호스트 이름에서 허용된 문자만 인코딩 하는 방법)endoding을 url의 host부분에 적용한다.

  4. HSTS(HTTP Strict Transport Security)목록을 로드해서 확인한다.

  • HSTS목록에 있으면 첫 요청을 HTTPS로 보내고, 아닌경우 HTTP로 보낸다.
    (HTTP Strict Traspost Security? HTTP대신 HTTPS만을 사용하여 통신해야 한다고 웹 사이트가 웹 브라우저에 알리는 보안기능)
  1. DNS(Domain Name Server) 조회한다.
    1) 도메인이 cache 이 있는지, 없으면 로컬에 있는지도 확인.
    2) 실패 시 Network stack에 구성 돼 있는 DNS로 요청을 보낸다. (DNS는 일반적으로 Local router, ISP의 캐싱 DNS)

  2. ARP(Address Resolution Protocol)로 대상의 IP와 MAC address를 알아낸다.

  3. 대상과 TCP 통신을 통해 Socket을 연다.

  • 브라우저가 서버의 IP 를 받으면 포트를 가져와서 TCP 소켓 스트림 요청. 소켓 내에서 통신이 이루어짐. 
  1. HTTPS 인 경우 TLS(Transport layer Security) Handshake 가 추가된다.
  • TLS 는 SSL(Secure Sockets Layer)의 표준화 된 이름이다. 
  • TCP 소켓 통신에 추가
  1. HTTP 라면 HTTP 프로토콜로 요청한다. 7번 직후. HTTPS 라면 8번의 소켓 통신 이후이다.

  2. HTTP 서버가 응답한다. (HTTP daemon)

  • HTTPD 서버가 요청 / 응답을 처리한다. (Linux는 Apache 아니면 Nginx, Windows의 경우 IIS)
  1. 제공받은 데이터로 웹 브라우저가 렌더된다.

HTTP Request and Header

HTTP 요청 그 자체에 대한 정보를 담고 있다. key:value로 이루어져있다. (서버 응답의 경우 Server-Header)

  • Host : 요청이 전송되는 target의 호스트 URL주소
  • User-Agent : 요청을 보내는 클라이언트 정보
  • Accept : 해당 요청이 받을 수 있는 응답, body데이터 타입의 정보(모든 타입을 허용하는 경우 '/ '로 지정
    (MIME type) Multipurpost Internet Mail Extensions (ex. application/json)
  • Connection
    • 해당 요청이 끝난 후에 클라이언트와 서버 간의 연결을 계속 유지할 것인지 알려주는 헤더
    • HTTP 요청마다 네트워크 연결을 새로 만드는 건 번거롭기 때문에 요청이 계속되는 한 처음 연결을 재사용 하는 것이 바람직하다.
    • keep - alive : 네트워크 연결을 유지해라
    • close : 더이상 요청을 보내지 않으니 연결을 닫아라
  • Content - type
    • HTTP요청이 보내는 메세지 body타입을 알려준다.
    • MIME type
  • Content-Length : 요청이 보내는 메시지 body의 총 사이즈 정보

HTTP vs HTTPS

  • 텍스트 기반의 정보통신을 하는 HTTP의 보안의 취약성을 보완하기 위한것이 HTTPS이다. S는 Secure Socket을 의미하며, 데이터를 주고 받는 과정에서 보안 요소가 추가된다. 클라이언트와 서버키가 각각 공개키와 비밀키(개인키)를 갖고 함호화를 한 정보를 전송하기 때문에 키의 사용자만 이 정보를 볼 수 있다.
  • 보안 요소가 추가되기 때문에 HTTP의 보안 취약점을 보완해주지만, 웹 서버에 접속하는 사용자마다 다른 암호를 제공해야 하기에 쉽지 않고 비싸다.

Why HTTPS?

  • HTTPS는 보안 기능이 추가되어 처리 속도가 더 느리고 관련 웹서버의 사양도 중요한 부분이다.
  • 가벼운 웹서핑 같이 가벼운 데이터만 처리한다면 HTTP를 사용할 수 있겠지만 자료를 주고 받고 중요한 정보를 처리한다면 정보 유출을 막기 위해 HTTPS 사용이 필수이다.
  • 사용자가 키워드 검색 시 상위 노츨되는 기준 중 하나가 보안 요소이기에 HTTPS 사이트가 HTTP 사이트보다 우선 검색될 수 있고, 또 보안이 보장 되어 있다는 장점이 있기에 더 많은 사용자를 유혹할 수 있다.

HTTP Response Code

  • HTTP응답 코드는 5개의 클래로 분류되는데, 상태 코드의 첫번째 숫자는 응답클래스를 정의한다. 대표적으로 많이 사용하는 응답코드로는 200번대 성공 응답코드와, 400번대 클라이언트 오류, 500번대 서버오류를 뽑을 수 있다.

Conclusion

  • HTTP에 관해 간략히 알아보았는데, 어느정도 이론을 갖추고 개발을 하면 도움이 되는 것 같다. 실제로 더 심화된 개발로 넘어가기 시작하면 면접에서도 물어보고 고려해야 할 부분들이 있기에 알아두는 것이 좋다.

출처

profile
Grow Joshua, Grow!

0개의 댓글