[내배캠/20일차] TIL - Spring 입문 주차 시작, 네트워크/WEB/HTTP

euphony·2025년 1월 21일
0

내일배움캠프

목록 보기
35/66

✅오늘의 한 일

  • 기초 Spring 1-1 ~ 1-11
  • 스프링 입문 강의 섹션2
  • 자바 중급 2편 섹션8-2

💻오늘의 학습

기초 Spring 강의 1주차

네트워크

초기에는 컴퓨터와 컴퓨터가 통신을 하려면 물리적으로 연결되어 있어야 했다. 하지만 지금은 인터넷 통신을 통해 멀리 있는 컴퓨터끼리도 데이터 통신을 할 수 있게 되었다.

  • 인터넷(Internet) : 인터넷 프로토콜 스위트(TCP/IP)를 기반으로 하여 전 세계적으로 연결되어있는 컴퓨터 네트워크 통신망.
  • 인터넷 프로토콜 (Internet Protocol) : 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약.

우리는 IP주소를 통해 인터넷에서 데이터를 전달하는데, 지정한 IP 주소에 데이터를 패킷(Packet)이라는 단위로 전달한다.

  • 패킷(Packet)
    • 소스 IP, 대상 IP를 포함하고 있어서 어떤 컴퓨터에 데이터를 전송할지 판별할 수 있다.
    • 헤더, 페이로드, 트레일러(수신여부 포함)로 구분된다.
    • 데이터를 주기만 하는 것이 아닌 받고 응답한다.

IP는 다음과 같은 문제점이 있다.

  • 애플리케이션 구분 : 어떤 프로그램에 사용할 데이터인지 구분할 수 없다.
  • 비연결성 : 수신 대상의 상태에 상관없이 데이터를 전송한다.(수신 대상 컴퓨터가 꺼져있어도 데이터를 전송하기 때문에 데이터를 정상적으로 수신하지 못할 수 있다.)
  • 비신뢰성 : 패킷이 손실되거나, 오류가 발생하여도 데이터의 재전송을 진행하지 않는다.

이러한 문제점은 TCP 프로토콜로 해결할 수 있다.

  • TCP(Transmission Control Protocol) : 서버와 클라이언트 간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜로, 순서를 보장한다.

✔️ TCP의 특징

  • 3 Way HandShake
  • 데이터 전송 시 응답 반환
  • 패킷의 순서 보장
  • 연결하는 과정, 데이터 전송에 많은 시간 소요
  • 3 way handshake 과정을 거치는 만큼 느린 속도

TCP의 단점을 보완하는 UDP 방식도 있다. TCP와 자주 비교되기 때문에 예전에 정리했던 TCP와 UDP 비교 링크도 가져와 봤다.

  • UDP(User Datagram Protocol) : 비연결형, 신뢰성이 없는 전송 프로토콜로, 빠른 전송이 가능해 실시간 통신이나 스트리밍 애플리케이션에서 사용된다.

✔️ UDP의 특징

  • IP 방식과 거의 비슷하며, 데이터 전송, 응답, 순서를 보장하지 않는다.
  • TCP와 같이 PORT(같은 IP 내에서 프로세스 구분을 하기 위해서 사용하는 것)가 존재한다.
  • 3 way handshake를 하지 않아 속도가 빠르다.
  • 데이터 무결성 검사를 위해 체크섬(Checksum)을 포함한다.

HTTP

  • HTTP(HyperText Transfer Protocol) : 웹에서 클라이언트와 서버 간에 정보를 주고받는 데 사용되는 프로토콜로, 인터넷의 핵심적인 요소 중 하나이다. 대부분 HTTP/1.1 (TCP)이 사용되지만 HTTP/2와 HTTP/3의 사용 비율도 꾸준히 증가하고 있다.

HTTP 동작 순서를 그림으로 간단히 보자면 다음과 같다. 클라이언트는 Request(요청)을 보내고, 응답을 기다린다. 서버는 요청에 대한 처리를 수행 후 결과를 Response(응답)한다.

✔️ HTTP의 특징

  • 클라이언트와 서버 구조
  • 무상태 (Stateless) : 서버는 클라이언트의 상태를 보존하지 않는다. 즉, 각 요청은 독립적으로 처리되며 이전 요청과 연결되지 않는다. 상태 유지를 위해 Cookie, Session, Token 등이 사용된다.
  • 비연결 (Connectionless) : 연결을 유지하지 않아 서버 자원을 효율적으로 사용할 수 있지만, 요청이 추가적으로 오게되면 연결(3 way handshake)을 새로 해야한다. 이런 문제는 캐시, 브러우저 캐싱과 같이 임시 저장을 해서 해결한다. 현재는 HTTP 지속연결(Persistent Connections)로 문제를 해결한다.

✔️ HTTP Message 구조

1. 요청(Request) : 클라이언트가 서버로 보내는 메시지

  • Start Line
    • HTTP Method : GET, POST, PUT, PATCH, DELETE 등
    • path : HTTP Request가 전송되는 대상, 절대 경로
    • HTTP Version
  • 헤더(Header): 추가 정보(ex. Message Body 내용, 크기, 인증, 브라우저 정보, 서버 정보 등)
  • Empty Line : 공백 한 줄(필수 값)
  • 본문(Message Body): 실제 전송하는 데이터가 담겨 있는 부분(대부분 POST나 PUT 요청 시)

2. 응답(Response) : 서버가 클라이언트로 보내는 메시지

  • Start Line
    • HTTP Version
    • 상태 코드(Status Code): 요청 처리 결과 (예: 200 OK, 404 Not Found)
  • 헤더(Header): 응답 관련 정보
  • Empty Line : 공백 한 줄(필수 값)
  • 본문(Body): 요청한 데이터(HTML, JSON 등)가 담겨잇는 부분. 만약 전송할 데이터가 없다면, Body가 공백으로 존재

✔️ HTTP Method 속성
다음은 wikipedia 에서 가져온 HTTP Method별 속성표이다. 각 메서드 별 속성이 잘 나타나 있다.

  • 안전성(Safe) : 요청이 서버의 데이터를 변경하지 않으면 안전한 메서드로 간주된다.
  • 멱등성(Idempotent) : 동일한 요청을 여러 번 보내더라도 서버의 상태가 처음 요청 후와 동일하게 유지되면 멱등한 메서드이다.
  • 캐시가능성(Cacheable) : 요청 결과를 캐시에 저장해 재사용할 수 있는지 여부를 나타낸다. 일반적으로 GET, HEAD 정도만 캐시로 사용한다.

✔️ HTTP 상태 코드

  • 1xx : 정보
  • 2xx : 성공
  • 3xx : 리다이렉션
  • 4xx : 클라이언트 에러
  • 5xx : 서버 에러

📝오늘의 회고

Spring 입문 주차가 시작되었다. Spring은 처음 공부하는거라 잘 따라가지 못할까봐 걱정이 되긴 한다. 기초 Spring 강의를 들으면서 전에 사둔 인프런 강의도 병행해봐야겠다.

📌내일의 할 일

  • 기초 Spring 1주차 완료
  • 기초 Spring 2주차 완료
  • 자바 중급 2편 섹션8 완료
  • 스프링 입문 섹션3 완료

0개의 댓글

관련 채용 정보