Backend Roadmap - 1. 인터넷

Neva·2021년 10월 13일
0

Backend Roadmap

목록 보기
2/2

1. 인터넷

1.1 인터넷의 작동 원리

인터넷은 둘 이상의 사람이 정보를 서로 교환하기 위해 등장했다. 주고 받고자 하는 정보를 데이터라 표현하고 이를 전달하는 매개체로 긴 줄을 준비해 전기 신호를 흘려보내어 정보를 전달하는 것이 인터넷이다.

사고를 확장하여 단순한 전기 신호로 어떠한 말을 하고 싶다면, 약속을 정하면 된다. 전기 신호를 어떻게 깜박이느냐에 각각 의미를 정해놓고 서로 주고 받으면 약속해놓은 말에 한해서는 서로 이야기할 수 있을 것이다. 이때의 약속을 프로토콜이라고 칭하며, 다양한 약속들로 간단하게는 A부터 Z, 복잡하게는 이미지나 영상의 데이터 값들까지도 모두 주고 받을 수 있다.

더 사고를 확장해보자. 만약 정보를 주고받고자하는 대상이 둘 보다 많으면 어떨까. 우선 전기가 흐르는 줄을 더 이어야할 것이다. 1대1로 모두 연결하려면 3이라고 한다면 아마 3개의 줄로 삼각형 모양으로 이으면 될 것이고 이러한 네트워크 구성 방식을 토폴로지라 부른다. 그런데 만약 100명이면 어떨까. 모두 이으면 힘들테니 가까운 애들끼리만 연결되어 있고 서로서로 전달해주어볼까? 마치 수업 중인 교실에서 쪽지 돌리기처럼 말이다. 그럼 모두가 1대1로 연결되지 않고도 충분히 정보를 주고 받을 수 있을 것이다. 이처럼 중간에 위치해 전달해주는 역할을 라우터나 다양한 기기들이 수행하고 있다.

하지만 위처럼 전달해주면 내 쪽지를 다른 친구가 볼 수도 있다. 그래서 친구와 나는 A는 B로 B는 C로 표현하기로 약속하여 쪽지를 주고 받을 수 있다. 이렇듯 중간자들의 감청을 피하기 위해 암호화 기법이 인터넷 상에서 발전했다.

위의 내용 외에도 Ip/Mac/Subnet, Port, Protocol 등등 많은 기술들이 있지만 인터넷의 작동 원리라 함은 기본적인 내용을 이야기해야할 것 같기에 이만 글을 줄인다.

1.2 HTTP란?

HTTP는 HyperText Transfer Protocol이라고 하는 프로토콜, 즉 약속인데 http:// 에서 아마 본 적 있을 것이다. 그냥 내가 하고 싶은 말만을 전달하는 것이 아니라 웹을 주고 받을 때 사용하는 프로토콜이다. 웹은 소위 인터넷이라 불리는 인터넷 서핑을 수행할 때 보여지는 화면을 일컬으며 간단히 네이버에 접속했을 때에 뜨는 페이지 모습을 웹이라 말할 수 있다. HTTP의 여러 약속으로 정해진 양식에 맞춰 내용과 디자인의 정보를 담아 전달하면 이를 브라우저라는 프로그램이 이쁘게 우리에게 꾸며 보여준다. 브라우저는 대표적으로 Internet Explorer, Chrome, Firefox, Safari 등이 있다.

그렇다면 HTTP라는 약속은 어떻게 이루어져 있을까. 기본적으로 약속은 어느 곳에 어떤 데이터를 넣을 것인지에 대한 구조적인 약속과 어떤 값을 어떤 의미로 해석할 것인지에 대한 약속 등으로 이루어져 있다.

HTTP 요청 메서드

HTTP로 연락을 보낼 경우에, 어떤 동작을 수행하는 지에 대한 정보를 담는 필드가 있다. 이를 HTTP 요청 메서드라고 부르며 GET, POST, PUT, DELETE 등이 있다.

HTTP 상태 코드

HTTP를 사용하여 데이터를 보내면 상대는 이에 응답하여 데이터를 보내준다. 웹의 경우에는 요청하는 클라이언트(유저)과 이에 응답하여 웹의 모습을 응답해주는 서버(ex. 네이버)로 주고 받는 형태다. 이때 서버가 응답하는 HTTP 데이터에는 유저의 요청에 서버가 어떻게 처리를 했는지, 성공했는지 문제가 발생했는지를 의미하는 상태 코드를 담는 필드가 있다. 대표적으로 성공의 200, 클라이언트 에러의 404, 서버 에러의 503 등이 있다.

1.3 브라우저와 그 작동 원리

앞서 언급했듯 HTTP로 주고 받은 데이터들을 브라우저는 적힌대로 가공하여 뿌려준다. 그럼 어떤 정보를 어떻게 담아 전달하여 이를 가공해줄까. 우선 가장 간단한 형태의 기초만을 설명하겠다.

웹은 기본적으로 HTML 이라는 파일과 CSS 라는 파일이 있다. HTML은 본체이고, CSS는 본체가 걸치고 있는 옷에 대한 상세한 설명을 적은 파일이다. 그렇기에 HTML에는 이 녀석의 이름이나 참고해야하는 정보들을 담은 head 부분과 실제로 보여지는 body 부분을 가지고 있다. body에는 텍스트나 버튼, 이미지 등 다양한 부품들이 담긴다. 그렇다면 CSS 파일에는 이러한 각각의 부품들이 어떻게 생겨 먹었는지 상세하게 적어줄 수 있는 파일이다. 이 버튼은 크기는, 색은, 테두리는, 위치는 어떤지 모두 적어줄 수 있다.

브라우저는 이러한 파일들을 읽어보며 약속들에 맞춰 어떻게 사용자에게 보여주면되는지 해석하여 가공해, 보여주도록 작동한다.

1.4 DNS와 그 작동 원리 1.5 도메인 이름이란?

기본적으로 인터넷을 통해 데이터를 주고 받을 때에 주소지로 IP 라는 것을 이용한다. 하지만 네이버에 접속하기 위해 125.209.222.14 라는 숫자 집합을 외우는 것은 유저 입장에서 너무나도 불편하다. 그렇기에 도메인이라는 개념이 등장했는데 125.209.222.14 라는 IP와 naver.com 이라는 이름을 매핑하는 것이다. 그럼 사용자는 비교적 간단한 문자열만 외우면 된다.

그렇다면 어떤 도메인이 어떤 IP인지 컴퓨터가 알아서 처리를 해주어야한다. 이러한 일을 수행해주는 것이 DNS, Domain Name System 이다. 처리되는 과정을 이해하기 위해서는 우선 도메인의 형태를 이해해야한다.

도메인의 구조

도메인은 서브 도메인, 도메인, 차상위 도메인, 최상위 도메인명으로 이루어져있다.

  1. 최상위 도메인 (TLD, Top-Level Domain)
    도메인의 목적, 종류, 국가를 나타낸다. (ex. kr, com, net)
  2. 차상위 도메인 (SLD, Second-Level Domain)
    최상위 도메인(TLD) 바로 앞에 위치한 도메인으로 없을 수도 있다. 도메인 등록자의 아이덴티티를 구체화 시켜주는 역할이다. (ex. co, go, or)
  3. 도메인 이름 (Domain Name)
    임의로 지정할 수 있는 사이트의 이름이다. 보통 서비스명으로 도메인명을 지정해 사용한다. (ex. naver, google)
  4. 서브 도메인 (Sub Domain)
    도메인의 일부로 보통 한 서비스에서 여러 하위 서비스를 제공하려 할 때에 이를 구분하기 위한 도메인명으로 사용하며, 서브 도메인을 포함하지 않는 도메인 네임은 루트 도메인으로 부른다. (ex. www, m, cafe, blog)

도메인 조회 과정

  1. 사용자가 브라우저에 'www.naver.com'을 입력하면, 쿼리가 인터넷을 통해 DNS Resolver로 가게 된다.
  2. 이어서 DNS Root Server에 쿼리를 보낸다.
  3. 최상위 도메인이 .com 인 것을 확인하고, .com 이 등록된 TLD Server 주소를 전달한다.
  4. Resolver는 전달받은 .com TLD에 요청을 보낸다.
  5. 이어서 TLD 서버가 Domain Name Server의 IP 주소로 응답한다.
  6. Resolver는 전달받은 naver.com DNS에 요청을 보낸다.
  7. 이어서 www.naver.com의 주소가 반환되어 온다.
  8. DNS Resolver가 알아낸 IP 주소로 웹 브라우저에 응답한다.

이처럼 전달 전달하여 최종적으로 IP 주소를 아는 사람에게 물어가는 과정을 수행하게 되고, 이 과정에서 최근 접속한 곳들은 저장해놓아 속도를 빠르게 하는 등의 기술이 함께 내재되어 있다.

1.6 호스팅이란?

호스팅이란 어떤 서비스를 빌려 사용하는 것을 의미한다. 웹, 서버, 클라우드 등이 있다. 상세한 내용은 다음의 이미지들을 통해 확인하자.

Reference

https://developer.mozilla.org/en-US/docs/Glossary/Second-level_Domain
https://library.gabia.com/contents/domain/716/
https://en.wikipedia.org/wiki/Subdomain
https://it-mesung.tistory.com/180
https://www.cloudflare.com/ko-kr/learning/dns/what-is-dns/
https://velog.io/@dreamjh/%ED%98%B8%EC%8A%A4%ED%8C%85%EC%9D%B4%EB%9E%80

profile
Creators

0개의 댓글