loop-study
개발 공부할래?
loop-study
전체 방문자
오늘
어제
  • 분류 전체보기 (186)
    • 목표 및 회고 (25)
    • 세미나 & 워크샵 (1)
    • 교육 및 인강 (67)
      • TDD, Clean Code with Java (5)
      • ATDD, 클린 코드 with Spring (6)
      • DDD 세레나데 (3)
      • 인프라 공방 (6)
      • 이규원의 현실 세상의 TDD (19)
      • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
      • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
      • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
      • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
      • 스프링 시큐리티 완전정복 6.x (1)
    • 서적 (62)
      • 객체지향의 사실과 오해 (1)
      • 객체지향과 디자인패턴 (7)
      • 만들면서 배우는 클린 아키텍처 (3)
      • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
      • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
      • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
      • 토비의 스프링 (3)
      • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
      • 개발자의 글쓰기 (1)
      • 소프트웨어 장인 (17)
      • Real MySQL 8.0 (2)
    • 개발 & 방법론 (29)
      • Java (13)
      • TDD (5)
      • ATDD (3)
      • DDD (6)
      • 인프라 (2)
      • SQL (0)
    • 개인이야기 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • 백엔드 로드맵

인기 글

태그

  • 인프런
  • 넥스트스탭
  • fastcampus
  • 객체지향
  • TDD
  • 엔터프라이즈 애플리케이션 아키텍처 패턴
  • 현실세상의 TDD
  • 김영한
  • Patterns of Enterprise Application Architecture
  • Test Driven Development
  • nextstep
  • 인프라공방
  • ATDD
  • 테스트 주도 개발
  • 자바
  • 장인정신
  • 스프링
  • 모든 개발자를 위한 HTTP 웹 기본 지식
  • 추상화
  • 소프트웨어 장인
  • 백기선
  • study
  • DDD 세레나데
  • 오브젝트
  • JUnit
  • 이규원
  • 조영호
  • java
  • 스터디
  • 마틴 파울러

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
loop-study

개발 공부할래?

인터넷 네트워크
교육 및 인강/모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한

인터넷 네트워크

2021. 12. 8. 16:23

김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 HTTP 내용을 정리한다.

자세한 정보가 궁금하면 수강을 추천드립니다.

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com


인터넷 통신

클라이언트가 hello world를 보내면 서버에서는 ok 응답을 보내준다.

이 과정을 통해, 인터넷은 어떻게 통신을 할까?

서버가 하나만 있는 것도 아니고 많이 존재하는데 어떻게 찾아갈까?

어떻게 찾아갈까?


IP (인터넷 프로토콜)

클라이언트에서 서버로 찾아가는 방법은 IP를 이용하는 것이다.

 

인터넷 프로토콜의 역할 

- 인터넷 프로토콜은 지정한 IP 주소 (IP Adress)로 데이터를 전달한다.

IP로 서로 찾아간다.

- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

    - 출발 IP, 도착 IP, 전송 데이터로 구성된다. 

클라이언트에서 서버로 요청을 전달한다.
서버에서 클라이언트로 응답을 보내준다.

IP 프로토콜의 한계

위의 그림을 보면 통신을 하는 과정에서 많은 노드를 거치게 되는데, 클라이언트와 서버가 서로 연결 안된걸 볼 수 있다.

이 과정에서 문제가 생기기도 한다.

 

- 비연결성

    - 패킷을 받을 대상이 없거나 서비스 불능 대상이여도 패킷을 전송한다. (대상 서버가 패킷을 받을 수 있는지 알 수 없다)

- 비신뢰성

    - 노드를 거치다가 해당 노드에 문제가 생겨서 중간에 패킷이 사라지면? 

    - 패킷이 순서대로 안오면? 패킷이 정해진 노드대로 오지않고 중간에 경로가 바뀔 수도 있다. 

- 프로그램 구분

    - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 2개 이상이면?


TCP, UDP

이전에 언급된 IP 프로토콜의 한계를 해결해주는게 TCP와 UDP 이다. 

먼저 IP 계층을 알아보자.

- 애플리케이션 계층 : HTTP, FTP

- 전송 계층 : TCP, UDP 

- 인터넷 계층 : IP

- 네트워크 인터페이스 계층

 

TODO : OSI 7계층 간단히 알아보기. 

 

프로토콜 계층

컴퓨터를 바라보면 간단하게 애플리케이션, 운영체제, 네트워크 관련된 구조로 3가지로 나눠진다.

여기서 채팅 프로그램을 통해 해외에 있는 친구에게 메시지를 보낸다면 다음과 같은 그림을 볼 수 있다. 

순서대로 보면 HTTP -> TCP -> IP -> 이더넷프레임 차례대로 정보가 포함되어 서버로 전송이 된다.

 

IP 패킷 정보

 

 

IP 패킷 정보에는 출발지 IP, 목적지 IP 등를 포함한다.

* 패킷은 수하물을 뜻하는 패키지와 덩어리를 뜻하는 버킷의 합성어다. 

 

TCP/IP 패킷 정보

TCP/IP 패킷은 IP 패킷 정보에 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 담긴다.

 

TCP는 전송 제어 프로토콜(Transmission Control Protocol)로 다음과 같은 특징을 가진다. 

- 연결지향 - TCP 3 way handshake (가상 연결)

 

 

1. 클라이언트에서 서버로 SYN(접속 요청) 메시지를 보낸다.

2. 서버에서 클라이언트로 SYN+ACK 메시지를 보낸다.

3. 클라이언트에서 서버로 ACK 메시지와 데이터를 보낸다. 

1,2 과정을 통해 서로 응답을 확인하고 나서 3번 과정을 통해 데이터를 보낸다.

* 실제로 물리적으로 연결된 게 아니라 개념적으로 연결이 된거다. 

 

- 데이터 전달 보증

- 순서 보증

- 신뢰할 수 있는 프로토콜

- 현재 대부분 TCP 사용

 

UDP (User Datagram Protocol)

사용자 데이터그램 프로토콜로 다음과 같은 특징을 가진다.

- 하얀 도화지에 비유 (기능이 없다고 보면됨)

- 연결지향 - TCP 3 way handshake 없음 

- 데이터 전달 보증도 하지 않음

- 순서 보장도 없음

- 그냥 단순하고 빠르다. 

 

IP와 비교하자면

- PORT, 체크섬 정도만 추가된다.

- 애플리케이션에서 추가 작업이 필요하다.


PORT

지금까지 클라이언트와 서버로 1:1 통신을 기준으로 알아봤다.

그런데 보통 게임에서 팀으로 진행하면 게임 서버, 팀과 화상통화, 웹 브라우저로 게임 정보 검색 등 1:n 으로 통신하면 어떻게 해야할까?

동시에 여러 서버로 통신하면 어떻게 구분할까?

 

TCP/IP 정보를 다시 확인해보자.

IP만으로 구분하기 힘들기 때문에 출발지 PORT, 목적지 PORT가 존재한다.

정리하면 IP와 PORT 2가지로 구분하게 된다.   

- 출발지 IP, PORT

- 목적지 IP, PORT

 

PORT란?

같은 IP 내에서 프로세스를 구분하는 걸 PORT라고 한다.

IP, PORT로 구분

 

PORT의 범위

0 ~ 65535 까지 할당이 가능하다.

0 ~ 1023는 기본적으로 사용하고 있기 때문에, 건들지 않는 것이 좋다. 다음은 대표적으로 사용 중인 PORT 번호다

  • FTP - 20, 21
  • TELNET - 23
  • HTTP - 80
  • HTTPS - 443

DNS (Domain Name System)

지금까지 IP로 클라이언트와 서버가 서로 통신하는 걸 알 수 있었다.

하지만 일반적인 사용자의 입장에서 인터넷을 사용할 때 생각해보면 IP 100.100.100.1 같은 주소를 외우긴 힘들다. 

https://www.naver.com  같이 도메인 주소를 입력해서 인터넷을 사용하는 게 대부분이다. 

또한 IP 주소는 변경이 될 수 있다.  

IP를 외워서 사용하기엔 많은 불편함이 있다.

 

이런 문제를 쉽게 해결해주는 것이 도메인 네임 시스템이다.

 

DNS이란?

IP 계의 전화번호부 역할을 한다.

도메인 명을 IP 주소로 변환시켜준다.

도메인 -> IP로 변환

 

'교육 및 인강 > 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한' 카테고리의 다른 글

HTTP 상태코드  (0) 2021.12.10
HTTP 메서드 활용  (0) 2021.12.10
HTTP 메서드  (0) 2021.12.09
HTTP 기본  (0) 2021.12.09
URI와 웹 브라우저 요청 흐름  (0) 2021.12.08
    '교육 및 인강/모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한' 카테고리의 다른 글
    • HTTP 메서드 활용
    • HTTP 메서드
    • HTTP 기본
    • URI와 웹 브라우저 요청 흐름
    loop-study
    loop-study
    오늘도 공부하자

    티스토리툴바