자바썸
자바랑 썸타는중
자바썸

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
자바썸

자바랑 썸타는중

웹 기본 지식
Web

웹 기본 지식

2022. 5. 17. 13:47

프로그래밍에 공부를 하기 전에는 웹사이트가 내가 요청한 페이지를 어떻게 응답해주는지 관심조차 없었다.

하지만 웹 개발에 대한 목표가 생기고 공부를 하면서 알아가는 것이 생겼고 웹을 사용하면서 이전에는 보이지 않는 것들이 조금씩 보이고 있다. 그럼에도 비전공자이기 때문에 들어 보았지만 남에게 뭐라고 설명하기 어려웠던 부분들에 대해 포스팅을 하려고 한다. (인프런에서 김영한 님의 강의를 듣고 공부한 내용을 정리한 글입니다.) 


IP(Internet Protocol)

 

'인터넷에 서로 다른 두 개의 컴퓨터가 있고 이 둘이 어떻게 통신을 하지?'라는 의문을 가지는 사람이 분명 있을 것이다. 컴퓨터가 세상에 두 개만 있다고 생각하면 사실 별로 어려운 질문은 아니라고 생각한다. 하지만 이 세상에 컴퓨터가 두 개만 있는 것도 아닌데 어떻게 통신을 하고 내가 원하는 서비스를 제공하는지 우리가 흔히 알고 있는 IP가 이 역할을 해준다. 

 

아래의 그림처럼 각각의 컴퓨터는 IP를 할당받고 그 IP로 요청을 하고 응답을 받는 구조로 되어있다. 

이때 요청을 할 때 패킷(Packet)이라는 통신 단위로 데이터가 전달되는데 패킷에는 출발지 IP와 도착지 IP , 기타....로 구성되어있다.

 

이런 IP 프로토콜에는 비연결성, 비신뢰성, 프로그램 구분이라는 한계를 가진다. 

 

비연결성은 패킷을 받을 대상이 없는데 무작정 패킷을 전송하고 본다. 그러면 요청은 했는데 응답은 없는, 소위 벽을 보고 말하는 상황이 된다. 

비신뢰성은 중간에 패킷이 소실되거나 패킷을 보낸 순서대로 가지 않는 것을 의미한다.

프로그램 구분은 '같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면?'이라는 의문을 가지게 하는 부분이다.(이 부분은 밑에서 PORT에서 설명한다.)

 

설명을 이어 가기 전에 패킷이 전달되기 위해 어떤 과정을 거치는지 먼저 보고 가도록 하자. 

 

인터넷 프로토콜 스택의 4계층에는 애플리케이션 계층, 전송 계층, 인터넷 계층 , 네트워크 인터페이스 계층이 있다.

 

애플리케이션 계층에서 프로그램이 메시지를 생성한다. 그리고 애플리케이션에 있는 SOCKET 라이브러리를 통해 전송 계층으로 보내진다. 

 

전송계층으로 온 메시지를 TCP 프로토콜이 PORT를 포함한 여러 정보들과 함께 포장한다. 다시 IP 프로토콜이 IP와 기타를 포함한 정보를 감싸서 IP 패킷을 생성한다. 그렇게 생성된 패킷은 네트워크 인터페이스 계층으로 보내지고 Ethenet frame으로 한 번 더 감싸 져서 서버에 보내진다. 

 

이렇게 보내진 패킷은 포장한 순서를 역순으로 하나씩 까 보면서 정보를 확인하고 그 내용을 응답으로 다시 포장해서 보내준다. 

 

그러면 어느 정도 큰 틀은 잡혔다.  그림으로 보면 아래와 같은 모습을 보인다. 

여기서 아까 설명하지 못한 부분을 설명하려고 한다. IP 프로토콜의 한계에서 '같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 두 개라면 어떻게 되지?'라는 의문이 생겼는데 전송계층에서 TCP 프로토콜이 PORT라는 것을 이용해서 해결해준다. 

 

PORT와 IP를 사전적인 의미보다는 비유적으로 표현해보면 IP는 아파트 동이라고 볼 수 있다. 그리고 PORT는 호수를 의미한다. 우리가 저녁에 치킨을 시킬 때 아파트 동만 적으면 어느 집으로 배달을 해야 할지 난감해진다. 하지만 호수를 같이 기입하기 때문에 우리가 시킨 치킨이 안전하게 내 손으로 올 수 있다. 

 

웹 요청도 마찬가지다. 나의 요청이 나한테 와야 함은 물론이고 사용하는 애플리케이션으로 제대로 찾아서 나에게 도달되어야 한다. 

그래서 통신하는 애플리케이션이 여러 개가 있더라도 응답받을 PORT를 같이 포장해서 보내줘서 그 PORT로 잘 들어올 수 있게 해주는 것이다. 

 

그러면 여기서 TCP에 대해 궁금해진다. TCP는 전송 제어 프로토콜이다. TCP는 연결 지향적이고 데이터의 전달뿐 아니라 순서도 보장해준다. 그래서 신뢰할 수 있는 프로토콜이고 현재 대부분 TCP를 사용한다. 

 

반면에 UDP도 존재한다. UDP는 사용자 데이터그램 프로토콜이다. 하얀 도화지에 비유가 가능하다. 그만큼 기능이 거의 없다. TCP가 가지는 장점을 다 가지지 못한다. 하지만 단순하고 빠르다는 특징이 있고 최근에는 TCP의 시간이 걸린다는 단점을 보완할 수 있어 각광받고 있다고 한다. 

 


DNS(Domain Name Service)

 

IP는 기억하기가 어렵고, 변경될 수 있다. 그래서 DNS라는 시스템이 있다. DNS는 도메인 네임 시스템이고 비유하자면 전화번호 책이라고 볼 수 있다. 

 

도메인 명을 Key로 하고 IP 값을 value로 해서 저장해놓는다. DNS 서버로 클라이언트의 요청이 들어오면 도메인 명에 따라 IP 값을 응답해준다. 그러면 IP 값이 바뀌더라도 도메인 명이 바뀌지 않는 이상 클라이언트는 요청을 하는 데에 있어서 문제가 발생하지 않는다. 

 


URI(Uniform Resource Identifier)

 

URI는 리소스를 식별하는 통일된 방식이다. URI는 URL과 URN으로 구성되어 있다. URL은 리소스의 위치를 나타내고 URN은 리소스의 이름을 나타난다. 보통 URL은 변할 수 있지만 URN은 변하지 않는다. 또한 URN 이름만으로 실제 리소스를 찾는 방법이 보편화되어 있지 않다. (앞으로 URI와 URL을 같은 의미로 보자.) 

URL의 구조를 보면 위 그림과 같다. 각 속성에 대한 것은 간략하게 설명해놓았다. 


 웹 브라우저 요청 흐름 

 

위에서 설명한 내용을 간략하게 요약해서 보면 아래와 같은 그림으로 설명할 수 있다. 

 

'Web' 카테고리의 다른 글

토큰이란 ? (토큰 기반 인증 VS 서버 기반 인증)  (0) 2022.06.15
REST란? REST API 와 RESTful API  (0) 2022.06.13
캐시(Cache)  (0) 2022.05.23
쿠키와 세션  (0) 2022.05.19
HTTP  (0) 2022.05.18
    'Web' 카테고리의 다른 글
    • REST란? REST API 와 RESTful API
    • 캐시(Cache)
    • 쿠키와 세션
    • HTTP
    자바썸
    자바썸

    티스토리툴바