TIL

TIL 241030

muerha 2024. 10. 30. 21:27

 

 

Spring 입문 1주차

 


 

 

 

HTTP (HyperText Transfer Protocol)

 

TEXT, IMAGE, FILE, HTML, JSON 등 다양한 형태의 데이터가 HTTP를 통해 전송

HTTP에도 버전이 존재하는데, 그중 대부분 HTTP/1.1 (TCP)을 사용한다.

 

 

특징

  • 클라이언트와 서버는 각각 독립적이다.
  • 무상태 (Stateless)
    • 각 요청 사이에 서버는 클라이언트의 상태를 저장하지 않는다.
    • 그럼 로그인은? Cookie, Session, Token 등을 활용
  • 비연결 (Connectionless)
    • 클라이언트가 서버에 요청을 보내면 서버는 요청을 처리하고 응답을 보낸 뒤 연결을 즉시 종료한다.
    • 웹 사이트의 HTML, CSS, JS, 이미지 등의 정적 자원 모두를 다시 다운로드 하는 단점 → 캐시, 브라우저 캐싱으로 해결한다. 쉽게 말해 임시저장 

 

 

HTTP Message 구조

요청 메세지, 응답 메세지 두 가지 종류가 있고 구조가 각각 다르다.

 

 

요청 메세지

  1. Start Line
    • HTTP Method
      • GET
      • 요청의 의도를 가진 GET, POST, PUT, PATCH, DELETE 등이 있다.
        • Create - POST
        • Read - GET
        • Update - PUT(전체), PATCH(일부)
        • Delete - DELETE
        • Request Target
    • path
      • /event
      • HTTP Request가 전송되는 대상, 절대 경로(”/”로 시작하는 경로)
      • Query String(= Query Parameter) 에 해당하는 값도 포함한다.
        ex) /search?keyword=sparta
       
    • HTTP Version
      • 1.1
      • HTTP Version을 나타낸다.
  2. Header
    • Host: spartacodingclub.kr
    • field-name: OWS field-value OWS (OWS : 띄어쓰기 허용) 구조를 가진다.
    • field-name은 대소문자 구분을 하지 않는다.
    • 임의의 Header를 추가할 수 있다. (단, 서버가 값을 알고 있어야 함)
    • 요청의 추가 정보들을 가지고 있다.
      ex) Message Body 내용, 크기, 인증, 브라우저 정보, 서버 정보 등
  3. Empty Line
    • 공백 한 줄
    • 필수 값
  4. Message Body
    • 실제 전송하는 데이터가 담겨 있는 부분
      • HTML, 이미지, JSON 등 byte로 표현되는 모든 데이터 전송 가능.
    • 요청 시 GET의 경우 Message Body가 지원되지 않는 경우가 많아 권장하지 않는다.

 

 

응답 메세지

  1. Start Line
    • HTTP Version
    • Status Code
      • 요청이 성공했는지, 실패했는지 나타내는 코드
    • Status Text
      • 코드와 함께 전달될 메세지
  2. Header
    • Response에서만 사용되는 Header 값들이 따로 존재한다.
  3. Empty Line
    • 공백 한줄, 필수값
  4. Message Body
    • 실제 전송하는 데이터가 담겨 있는 부분
    • 만약 전송할 데이터가 없다면, Body가 공백으로 존재한다.

 

 

 

주요 Method

 

 

POST

  • 리소스 생성
  • 주로 HTML FORM(회원가입, 게시글 작성 등)에 사용
  • Message Body를 통해 요청 데이터를 전달한다.

 

GET

  • 리소스 조회

 

PUT

  • 리소스 덮어쓰기
  • POST와는 다르게 클라이언트 측에서 리소스를 식별하여 URI를 지정한다

 

PATCH

  • 리소스 부분 수정

 

DELETE

  • 리소스 삭제

 

 

 

HTTP Method 속성

 

  • 안전성(Safe)
  • 멱등성(Idempotent) - 한번을 호출하거나 수천번을 호출하거나 항상 결과는 같다.
    • GET → 같은 결과가 계속 조회된다.
    • PUT → 수정해서 대체된 후의 결과는 계속 같다.
    • DELETE → 같은 요청을 여러번해도 삭제된 결과는 같다.
    • POST → 멱등성을 보장하지 않는다.
      ex) 계좌 송금을 두번한다면?, 게시판 글쓰기, 회원가입
  • 캐시가능성(Cacheable) - 재사용을 위해 요청에 대한 응답을 저장할 수 있는가

 

캐시(Cache)

클라이언트가 서버에 한번 요청했던 데이터에 대해서 매번 요청할 때 마다 다시 전송할 필요가 없도록 웹 브라우저가 임시적으로 데이터를 보관하고 있는 장소

 

 

 

HTTP 상태 코드

 

1xx (정보)

2xx (성공)

3xx (리다이렉션)

4xx (클라이언트 에러)

5xx (서버 에러)

 

응답 코드를 상황에 맞게 잘 작성 해야 한다!

 

 

 

 

HTTP API 설계 (항상 리소스 식별을 기준으로!)

예) 게시글을 관리하는 HTTP API 설계

 

  • 게시글 생성
    • POST
    • /boards
    • 성공시 상태코드 2xx
    • 실패시 4xx (클라이언트 문제) OR 5xx (서버 문제)
  • 게시글 1개 조회
    • GET
    • /boards/{id}
    • 성공시 상태코드 2xx
    • 실패시 4xx (클라이언트 문제) OR 5xx (서버 문제)
  • 게시글 목록 조회
    • GET
    • /boards
    • 성공시 상태코드 2xx
    • 실패시 4xx (클라이언트 문제) OR 5xx (서버 문제)
  • 게시글 수정
    • PUT or PATCH
    • /boards/{id}
    • 성공시 상태코드 2xx
    • 실패시 4xx (클라이언트 문제) OR 5xx (서버 문제)
  • 게시글 삭제
    • DELETE
    • /boards/{id}
    • 성공시 상태코드 2xx
    • 실패시 4xx (클라이언트 문제) OR 5xx (서버 문제)

 

 

Restful API

REST 기반으로 서비스 API를 구현한 것

 

 

Maturity Model (성숙도 모델)

REST의 제약 조건에 따라 API를 등급화하는 방법

최소한 성숙도 모델 Level2로는 사용하여야 한다.

 

 

Web Server

HTTP 기반으로 동작하며 정적 리소스(HTML, CSS, JS, 이미지 등)를 제공한다.

예) NGINX, Apache

 

 

WAS (Web Application Server)

HTTP 기반으로 동작하며 웹 서버의 기능을 포함한다. 추가적으로 코드를 실행해서 Application 로직을 수행하고 DB와 상호작용하여 동적 컨텐츠를 생성한다.

예) Tomcat - Spring Boot에 내장, Jetty

 

 

Servlet

HTTP 프로토콜 기반 요청(Request) 및 응답(Response)을 처리하는데 사용

 

 

Servlet Container

Servlet을 지원하는 WAS 내부에는 서블릿 컨테이너가 있다. 

  1. 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행한다.
    • Servlet 객체를 싱글톤으로 관리한다.
  2. 동시 요청에 대한 처리를 위해 Multi Thread를 지원한다.

 

싱글톤이란?

객체를 하나만 생성하여 생성된 인스턴스를 공유하여 사용하는 것. 공유 변수 사용을 주의해야 한다.

 

 

Thread

애플리케이션 코드를 하나하나 순차적으로 실행하는 것

 

 

SSR(Server Side Rendering)

서버에서 동적으로 HTML을 만들어 클라이언트에게 제공하는 기술로 백엔드 개발자 영역에 속한다.

Java에서는 JSP, Thymeleaf가 대표적으로 사용됨

 

 

CSR(Client Side Rendering)

웹 브라우저에서 자바스크립트를 사용해 동적으로 HTML을 생성해서 적용하는 기술로 웹을 모바일 앱 처럼 부분 부분 변경할 수 있게 해준다. 프론트엔드 개발자 영역에 속하는 React, Vue가 대표적으로 사용됨

 

 

 

 

 

 

 

 

 

'TIL' 카테고리의 다른 글

TIL 241101  (0) 2024.11.01
TIL 241031  (0) 2024.10.31
TIL 241029  (0) 2024.10.29
TIL 241028  (0) 2024.10.28
TIL 241025  (0) 2024.10.25