✅오늘의 한 일
- 기초 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 완료