백엔드 웹개발 (Java/Spring) 초격차 - 4

김재현·2022년 10월 7일
0

FastCampus

목록 보기
4/9

Web Application의 이해

  • 계산기 프로그램 웹 애플리케이션으로 만들기
  • step 1 : 사용자 요청을 메인 Thread가 처리하도록 함
    step 2 : 사용자 요청이 들어올때마다 Thread를 새로 생성, 사용자 요청을 처리.
    step 3 : Thread Pool을 적용, 안정적 서비스가 가능하도록 함.

개념부터

HTTP

  • 서버와 클라이언트가 웹에서 데이터를 주고받기 위한 프로토콜(규약)
    서버-클라이언트가 데이터를 주고받기 위해서는 이 규약을 준수해야한다.
  • 참고
    • HTTP/1.1, HTTP/2는 TCP 기반 위에서 동작
      3wayhandshake 위에서 연관을 맺음.
    • HTTP/3은 UDP 기반 위에서 동작
      3wayhandshake로 연결을 맺을 필요가 없음.
  • 요청/응답 메시지 구조

특징

  • 클라이언트-서버 모델
    • 클라이언트 → 요청 → 서버. 서버 → 응답 → 클라이언트.
  • 무상태 프로토콜(Stateless)
    • 서버가 클라이언트 상태를 유지하지 않음.
    • 왼쪽이 무상태 프로토콜. 클라이언트가 서버에 요청을 보내면, 서버는 클라이언트에게 응답을 주고 연결을 끊어버림. 다음에 클라이언트가 서버에 요청을 보내려면 다시 한 번 연결을 맺고 응답을 받아야함.
    • 예시) TCP 기반 위에서 동작한다면, 클라이언트가 서버에 요청을 보낼때마다 3wayhandshake를 통해 연결을 맺은 뒤 데이터를 주고 받는 과정을 거쳐야 함.
    • 이 과정을 매 요청마다 수행하는 것이 비효율적이라고 생각했기 때문에, 해결책 Keep-Alive 속성을 사용.
    • 일정 기간동안은 해당 연결을 끊지 않고 클라이언트와 서버가 데이터를 주고받을 수 있게 한다. 특정 기간동안 클라이언트-서버가 연결을 유지하며 데이터를 주고받을 수 있게 됨.
    • 잘못 사용하면 성능하락의 주범이 되기도 한다.
      이 기능을 사용한 채로 클라이언트의 요청이 많아지면 유지되는 커넥션이 증가하고, 자연스럽게 신규 사용자가 들어오지 못할수도 있다.
      웹 서버 스레드가 부족해지는 것.

  • 비 연결성(Connectionless)
    • 서버가 클라이언트 요청에 대해 응답을 마치면 맺었던 연결을 끊어버리는 것
    • 해결책 : 쿠키(클라이언트에 정보 저장), 세션(서버에 정보 저장), JWT
  • HTTP는 왜 이렇게 설계됐을까? 연결을 바로 끊는 이유?
    • 기본적으로 웹 상에서 불특정 다수와 통신하도록 설계된 프로토콜
    • 서버가 다수의 클라이언트들과 연결을 유자해야한다면 리소스 낭비가 굉장히 심해지게 된다.
    • 연결을 유지하지 않는 대신, 더 많은 연결을 할 수 있도록 설계한 것.
  • HTTP 요청 메서드
    • GET, POST, PUT, DELETE
  • HTTP 응답 코드
    • 2xx(성공), 3xx(리다이랙션), 4xx(클라이언트 에러), 5xx(서버 에러) 등
    • 응답코드를 보고 결과가 어떤지 파악할 수 있어야 한다.
  • HTTP 헤더
    • Content-type, Accept, Cookie, Set-Cookie, Authorization 등

0개의 댓글