본문 바로가기

서버

서버 이론 뿌시기 - 웹 통신이란?

최근에 서버(스프링 부트) 공부를 시작했는데

블로그로 작성하면 더 기억에 남을 것 같아서 한번 써볼까 한다.

 

웹 공부를 하면서 가장 많이 들었던 의문점이 있었다.

웹은 어떤 방식으로 서버와 소통하고 유지되는가?

 

이런 의문점을 해결하기 위해서는 먼저 웹 통신에 관해 알아야 한다.

 

웹 통신이란?

웹 생태계는 크게 보면 클라이언트와 서버 이렇게 2가지로 나뉠 수 있다.

 

여기에서 클라이언트는 정보를 요청하는 사람

서버는 정보를 보내주는 사람이라고 생각하면 된다.

 

단순하게 생각하면 이렇듯 쉽게 보이지만

사실은 클라이언트와 서버 사이에는 무수히 많은 웹 생태계가 존재한다.

 

이러한 웹 생태계를 지금부터 한번 파해쳐 보자.

 

정보 전달은 택배를 보내는 것과 동일하게 생각할 수 있다.

 

택배에 가장 먼저 필요한 것에는 무엇이 있을까?

 

바로 집 주소이다.

이러한 집 주소의 역할을 하는 것을 IP(internet protocol)이라고 한다.

 

IP(Internet Protocol)란?

요청할 정보를 포장하고 IP를 붙여서 전송을 하는 것을 인터넷 통신이라고 한다.

 

그런데 정보를 전달할때 IP주소만 있어도 괜찮을까?

당연하게 생각되듯 전혀 그렇지 않다.

 

IP(Internet Protocol)의 한계점

IP의 한계는 분명하게 존재한다.

1. 비연결성

  • 패킷을 받을 대상이 없어도 패킷을 전송한다.

2. 비신뢰성

  • 중간에 패킷이 사라지면?
  • 패킷이 순서대로 안오면?

3. 프로그램 구분

  • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면?

 

이렇듯 IP에는 위 3가지 한계가 존재한다.

 

위 3가지 문제를 해결해야 정보 전달이 원활히 이루어 지지 않을까?

그럼 위 한계들을 한개씩 해결해 보자

 

1. 비연결성

먼저 비연결성이다.

택배를 보냈는데 목적지가 존재하지 않는다면?

택배는 그냥 사라지게 된다. 응답자도 요청자도 둘다 어리둥절한 상황이 되는 것이다.

 

이때 데이터의 연결성을 보장하기 위해서 3 way handshake라는 과정을 거치게 된다.

[STEP 1]A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다.

[STEP 2]B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 

[STEP 3]A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다.

 

 

쉽게 표현해 보자면

수신자: 패킷 보낼게~

송신자:ㅇㅋ 보내셈~

이렇게 생각 하면 된다.

 

자 이렇게 연결성은 보장 됐다.

 

2. 비신뢰성

다음으로는 비신뢰성을 해결해 보자.

중간에 택배가 사라지면?

이런 이슈를 막고자 데이터 전달 보증을 하게 된다.

클라이언트가 요청하면 서버는 데이터가 잘 받아졌다고 응답을해서 신뢰성을 보장할 수 있게 된다.

 

만약 응답이 돌아오지 않았다면?

재요청을 통해 신뢰성을 보장할 수 있게 된다.

 

그런데 데이터가 순서대로 안오면 발생하는 문제는 무엇이 있을까?

택배로 예시를 들기에는 이해가 잘 안갈 수도 있으니

카카오톡 메세지를 생각해보자

 

"4시반에 영화 보러 가자~"

"아 시간 헷갈림 다른 시간 되는때 있음?"

 

이렇게 보낼려고 했다고 생각해보자

 

그런데 순서가 바뀌어서

 

"아 시간 헷갈림 다른 시간 되는 때 있음?"

"4시반에 영화보러 가자~"

 

이렇게 보내졌다고 치자

그렇다면 4시 반 말고 다른 시간에 보자고 했던 내용이

4시반에 보러가자는 내용으로 바뀌게 되는 문제가 발생한다.

 

이런 문제를 해결하기 위해서

데이터 앞에 순서를 나타내는 헤더를 달아서 데이터 전송 순서를 결정해 준다.

 

위 사진이 나타내듯이

송신자측 데이터에 헤더를 달아서 전송해서 수신자 측에서 순서를 정렬할 수 있다.

 

이렇게 두가지 문제를 해결했다.

 

위 두가지 문제(비연결성, 비신뢰성)를 해결해주는 데이터 전송 규약을

TCP(Transmission Control Protocol)라고 한다.

 

TCP(Transmission Control Protocol)란?

TCP는 다음과 같은 구성을 하고 있고

TCP의 특징으로는

  • 연결지향 - 3 hand shake
  • 데이터 전달 보증
  • 순서 보장

이런 점이 있다.

 

신뢰할 수 있는 프로토콜이라 금융권 데이터 같은 대외비 파일을 전송할 때 주로 사용됐고

지금은 대부분 TCP를 사용한다.

 

TCP와 다르게 UDP(User Datagram Protocol)도 존재하는데

연결지향과 데이터 전달 보증, 순서 보장을 하나도 하지 않는다.

 

대신 속도에서 장점이 있어서 게임과 같이

프레임이 지속적으로 변해야하는 프로그램에 많이 사용됐던 통신 규약이다.

 

3. 프로그램 구분

그럼 마지막으로 해결해야 하는 문제가 있다.

같은 IP를 사용하는 서버와 통신하는 어플리케이션이 둘 이상이라면 어떡할까?

 

보통 한개의 어플리케이션만 띄워서 사용하는 경우는 없다.

노래도 틀어야되고, 중간중간 카톡도 확인해야한다.

 

IP에 패킷이 도착했는데 어떤 어플리케이션을 사용할지를 모르면

굉장한 이슈라고 할 수 있다.

 

이때 해결 방법이 PORT를 활용하는 것이다.

PORT를 통해 어떤 어플리케이션을 활용할지 알 수 있다.

PORT는 TCP던 UDP던 어떤 통신규약이던지 다 사용한다고 생각하면 된다.

 

DNS(Domain Name System)이란?

자 그럼 모든 문제를 해결했다.

그런데 사실 한가지 문제가 하나 더 있다.

IP를 통해 서버와 통신을 한다고 하자

그런데 만약 IP주소가 바뀐다면 어떡할까?

 

이런 문제를 해결하기 위해 나온게

DNS(Domain Name System)이다.

특정 아이피에 도메인 명을 달아서 서버의 아이피가 바뀌더라도

해당 어플리케이션을 사용할 수 있게 한다.

'서버' 카테고리의 다른 글

서버 이론 뿌시기 - HTTP API  (0) 2024.07.23
서버 이론 뿌시기 - URI와 웹브라우저 요청 흐름  (0) 2024.07.22