네크워크(TCP/IP, PORT) + DNS/URL+ JSON

ssongyi·2025년 3월 18일
1

Java/Spring TIL

목록 보기
1/11

Spring 입문 1주차
예외처리 (1)

네트워크

네트워크 지식이 필요한 이유

인터넷 브라우저(클라이언트) 와 서버가 데이터를 주고받는 통신 방법인 HTTP(HyperText Transfer Protocol) 는 결국,
Web 기반에서 동작하기 때문에 네트워크에 대한 지식이 필수

프로토콜 (Protocol) ?

복잡한 인터넷 세상에서 컴퓨터와 컴퓨터끼리 데이터를 주고받기 위하여 정한 통신 규약

인터넷 (Internet) ?

  • 인터넷 프로토콜 스위트(TCP/IP) 를 기반으로 하여 전 세계적으로 연결되어 있는 컴퓨터 네트워크 통신망
  • 유/무선 방식(해저 광케이블, 인공위성) 으로 이름에 걸맞은 World Wide Web(WWW) 가 구축됨

IP 주소 ?

  • 각 기기 간의 통신을 식별할 수 있도록 도와주는 식별자
  • 인터넷 통신 시, 지정한 IP 주소에 데이터를 Packet 이라는 단위로 전달함

Packet ?

  • 소스 IP(출발지), 대상 IP(도착지) 를 포함하고 있어서 어떤 컴퓨터에 데이터를 전송할지 판별 가능
  • 크게 헤더, 페이로드, 트레일러(수신여부 포함)로 구분됨
  • 데이터를 주기만 하는 것이 받고 응답한다!

IP 방식의 문제점

  1. 애플리케이션 구분
  • 대상 컴퓨터의 어떤 프로그램에 사용된 데이터인지 구분 X
  1. 비연결성
  • 수신 대상의 현재 상태에 상관없이 데이터를 전송
  1. 비신뢰성
  • 패킷이 소실되는 경우 발생
  • 패킷의 손상여부를 송신, 수신 측 모두 알 수 X
  • 패킷의 순서가 뒤죽박죽이 되어 섞여서 들어오는 경우 발생
    - 용랑이 큰 데이터의 경우 패킷이 여러 개로 나뉘어져 전송됨
  • 패킷이 손실되거나, 오류가 발생하여도 데이터의 재전송을 진행하지 X

--> 위와 같은 IP 방식의 문제점들을 해결해주는 것 : TCP 프로토콜


TCP (Transmission Control Protocol) ?

  • 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
  • 신뢰성이 있지만 연결하는 과정, 데이터 전송에 시간이 많이 소요됨
  • TCP 는 현재 단계 이상의 최적화를 하기 힘듦(최소한의 논리적인 연결이 필요하기 때문)
  • 3 Way HandShake 과정을 거치는 만큼 속도도 느림

3 Way HandShake

  1. SYN 접속 요청
  2. ACK 요청 수락 --> ACK가 없다면 연결 실패
  3. ACK --> ACK 함께 데이터 전송 가능

SYN (Synchronize)

  • 클라이언트가 서버에게 연결을 요청하는 첫 번째 단계
  • 클라이언트는 서버에게 "연결을 시작하고 싶다" 는 의사를 나타내기 위해 SYN 플래그가 설정된 패킷을 전송
  • 패킷에는 시퀀스 번호도 포함되어 있고, 데이터 전송 순서를 관리할 준비를 함

ACK(Acknowledge)

  • 서버가 클라이언트의 SYN 패킷을 받고, 이를 확인했다는 신호를 보내는 단계
  • 서버는 클라이언트의 SYN 요청을 수락하며, 자신도 연결을 시작하고 싶다는 뜻을 담아 SYN 플래그와 함께 ACK 플래그가 설정된 패킷을 클라이언트에게 전송
  • 이때, 서버는 클라이언트의 시퀀스 번호에 1을 더한 값을 ACK 로 응답

UDP (User Datagram Protocol) ?

  • 비연결형, 신뢰성이 없는 전송 프로토콜
  • 빠른 전송이 중요했기에 개발됨
  • 현대에서는 UDP 를 많이 사용하는 추세 (ex. 온라인 게임, 인터넷 전화, 실시간 스트리밍 서비스)
  • HTTP3 에서 채택한 방식, HTTP에도 버전이 있음
  • 실시간성 보장 중요

UDP 의 특징

  1. IP 방식과 거의 유사
  • 3 Way HandShake 하지 X
  • 데이터 전송, 응답, 순서를 보장하지 X (비신뢰성)
  1. IP 와 차이점으로 PORT 가 존재
  • TCP 에도 PORT 는 존재
  1. 추가적인 기능이 거의 X
  • 기능이 없고 연결을 하지 않는 대신 속도가 빠름
  1. 데이터 무결성 검사 --> 체크섬(Checksum) 을 포함하고 있음
  • 잘못된 데이터가 전송되지 않도록 만들어줌

PORT ?

같은 IP 내에서 프로세스 구분을 위해 사용
ex ) 같은 IP 에서 동시에 여러가지 프로그램이 실행되고 있다면 IP 주소가 같으니, 패킷의 도착지를 식별하기 위해


Web 기초

DNS (Domain Name System) ?

  • 도메인 이름과 IP 주소를 서로 변환하는 역할 수행
    - 즉, 사람이 읽을 수 있는 도메인 이름을 컴퓨터가 읽을 수 있는 IP 주소로 변환

DNS 가 나오게 된 이유

  1. 컴퓨터 간의 통신을 위해선 IP 주소가 필요
  • IP 주소는 사이트마다 특징 X + 외우기 어려움
  1. IP 는 변경되는 주소
  • 일반적으로 가정집에서 사용되는 IP 는 유동 IP
  • IP 주소가 변경된다면 새로운 IP 에 접근할 수 X

DNS 동작 순서

  1. 원하는 이름의 도메인을 구매 후, DNS 서버에 등록
  2. 도메인 명을 입력하면 DNS 서버는 IP 주소를 반환
  3. IP 가 변경되면 DNS 서버에 등록된 IP 주소만 바꾸면 됨
  4. 우리는 IP 주소 형태가 아닌 도메인 이름 형태로 웹에 접속(ex. URL)

URI (Uniform Resource Idetifier) ?

인터넷 자원(Resource) 을 나타내는 고유 식별자(Identifier)

  • Locator, Name 혹은 둘 다 추가로 분류될 수 있음
  • 현재 대부분은 대중화된 URL을 사용하여, URI를 URL과 같은 의미로 사용한다.
  • Uniform: 자원(Resource) 을 식별하는 통일된 방식을 의미
  • Resource: 자원(페이지, 텍스트, 이미지, 동영상, 파일 등) 을 의미
  • Idetifier: 식별자를 의미

URN (Uniform Resource Name)

  • 자원(Resource)의 이름(Name)을 의미한다. ex) 튜터
  • 리소스의 위치가 변경되어도 이름으로 리소스를 찾기 때문에 잘 동작한다.
  • 프로토콜을 포함하지 않는다.
  • URN으로 실제 리소스에 접근하는 방법은 대중화 되어있지 않다.

URL(Uniform Resource Locator) ?

프로토콜을 포함한, 자원(Resource)의 위치를 나타냄

URL 구조

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]
https://www.google.com:443/search?q=스파르타+코딩클럽

  • scheme
    • 주로 프로토콜을 사용한다. 웹에서는 http, https, ftp를 주로 사용한다.
    • 참고 : http**s**http에 보안(Secure)을 추가한 것.
  • user[:password]
    • 사용자 정보
    • URL은 보안에 취약하여 사용하지 않는다.
  • host[:port]
    • 호스트명 : 도메인 명(www.google.com) 또는 IP 주소를 직접 사용한다.
    • http : 80, https : 443 포트 사용
    • 포트는 일반적으로 생략한다.
  • [/path]
    • 리소스의 경로

    • 계층 구조로 구성되어있다.

      ex) 프로토콜://쇼핑몰주소/products/macbookPro

      ex) https://nbcamp.spartacodingclub.kr/backend

  • [?query]
    • key=value 형태로 구성된다.

    • Query Parameter, Query String 이라고도 한다.

      • 두 가지 모두 같은 말입니다. 자주 혼용되는 단어이니 잘 기억해주세요.
    • ?로 시작되고 &으로 구분된다.

      ex) ?key1=value1**&**key2=value2**&**key3=value

  • [#fragment]
    • html 내부 북마크 등에 사용한다.
      - 전달받은 URL로 접속 시 특정 위치(fragment)로 이동할 수 있음

      ex) http://www.google.com/index.html#image

URL 방식의 한계

  • 자원(Resource)의 위치를 변경하면 기존 URL은 사용할 수 없다.
  • 브라우저 검색창에 스파르타 코딩클럽 홈페이지를 검색하면https://spartacodingclub.kr/ 사이트가 노출된다.
  • 만약 이 주소를 https://spartacodingclub2.kr/ 로 바꾼다면 기존 경로를 아는 사람들은 검색 페이지의 URL이 업데이트되지 않으면 페이지를 찾을 수 없다.
  • 이러한 한계를 극복하기 위해서 URN이 등장하게 되었다. (잘 사용하지 X)

JSON (JavaScript Object Notoation)

클라이언트와 서버가 통신할 때 사용하는 데이터 양식
클라이언트와 서버가 사용하는 언어에 관계 없이 통일된 데이터를 주고받을 수 있도록 만들어줌

  • 클라이언트 to 서버 통신
  • 서버 to 서버의 통신

XML

  • 과거 웹 초기 시절부터 사용됨
  • 헤더와 태그 등의 여러 요소로 가독성이 떨어지고, 불필요한 용량을 잡아먹는다는 단점
    이에 대응해 간결하고 통일된 양식으로 각광을 받고 있는 것이 JSON

MSA(MicroService Architecture)

아주 작은 단위로 서비스를 잘게 나누어 운영하는 아키텍처

해당 아키텍처를 가지게 되면 구성된 Application마다 어떠한 언어를 사용하는지에 상관없이 서로 통신을 할 수 있는데,
이것이 가능한 이유는 JSON 형태로 데이터 통신을 하기 때문

JSON 구조

{
  "user": [
    {
      "first_name": "wonuk",
      "last_name": "Hwang",
      "age": 100,
      "phone_agree": false,
      "hobby": ["Java", "Spring"]
    },
    {
      "firstName": "sparta",
      "lastName": "Team",
      "age": 200,
      "phone_agree": true,
      "hobby": ["React", "Spring", "Node"]
    },
  ]
}
  • snake_case, camelCase 모두 사용이 가능하다.
    • 우리가 만드는 Application 내에서 변환해주는 무엇인가가 있다.
  • key-value 형태로 구성되어 있다.
  • null, number, string, array, object, boolean 형태의 데이터를 사용할 수 있다.

Scale Up, Scale Out

Scale Up

  • 수직적 확장
  • 단일 서버의 하드웨어의 사용을 높인다. (CPU, Memory 등의 스펙을 높인다)
  • 요청에 대한 처리를 더욱 빠르게 할 수 있도록 만든다.

Scale Out

  • 수평적 확장
  • 같은 사양의 서버(인스턴스)를 여러 대 배치한다.
  • 동시에 더 많은 사용자 요청을 처리할 수 있도록 만든다.

0개의 댓글