웹 기본

KIM JEONG DONG·2024년 8월 2일
post-thumbnail

웹 및 통신의 기본

  • 웹과 통신에 관련된 기본 지식 설명을 기재한다.



HTTP

  • 웹에서 클라이언트 - 서버와의 데이터를 주고받은 모델 프로토콜이다.

  • 웹 브라우저에서 통신에 적용되는 규칙이다.

  • TCP/IP 계층 위에서 작동한다.


TCP/IP란?

  • TCP/IP란 컴퓨터와 네트워크가 통신하기 위한 기본 통신 방식이자 규칙이다.
    • 서로 어떻게 찾고, 어떤 언어로 소통하며, 어떻게 대화를 종료하는 지 등 규칙이 필요하다.

  • 위 사진 처럼 프로토콜 관련 된 모든 합집합을 일컬어 TCP/IP로 정의한다.

  • TCP/IP 계층은 4계층으로 (layer) 로 구성되어 있다.

  • 위 처럼 계층을 나누면, 인터넷 사양 변경 및 프로토콜 변경 시 전체를 수정하지 않아도 될 뿐더러, 각각의 계층은 각자의 위치에서 전달하고자 하는 메시지와 데이터를 전송하기 수월하기 때문이다.


애플리케이션 계층

  • 유저에게 제공 되는 App에서 사용하는 통신의 움직을 결정한다.

트랜스포트 계층

  • 애플리케이션 계층에 접속 되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공한다.

  • 즉, 서로 상호간의 통신 및 데이터를 주고 받을 때의 흐름을 결정한다.

    • TCP, UDP 프로토콜

      TCP의 바이트 스트림

      • 용량이 큰 데이터를 보낼 때 TCP 세그먼트를 통해 작은 단위로 분해하여 관리하고,
        신뢰성이 높은 서비스이다.

      • 즉, 대용량이 데이터를 쉽고 작게 분해하여, 상대방에게 정확하고 안전하게 도착했는지 확인하는 역할을 담당한다.


네트워크 계층

  • 네트워크 상의 패킷의 이동을 다룬다.

    • 패킷이란 전송 되는 데이터의 최소 단위를 패킷이라 정의한다.
  • 어떤 경로를 거쳐 상대 컴퓨터까지 패킷을 어떻게 보낼지 결정한다.

    • 만약, 인터넷이라면 상대 컴퓨터에 도달하기 위해 거치고 배송되는 길을 결정하는 계층이다.

링크 계층

  • 하드웨어적인 측면을 다루는 계층이다.



HTTP의 특성

  • HTTP의 특성을 살펴보면서 Session, Cookie, JWT에 대해 알아보자.

Stateless (무상태성)

  • 쉽게 말해 서버는 클라이언트의 정보를 저장하지 않는다.

  • 즉, 서버는 이전의 요청이 어떤 요청인지 알 수가 없다.


Connectionless (비연결성)

  • 클라이언트와 서버의 서버 연결을 1회로 처리한다.

  • 즉, N회 요청 시 N회 응답하고 난 뒤 즉시 서로 간의 연결을 끊어버린다.

    • 지속적으로 연결을 유지하면 서버 자원이 지속적으로 소모 되기 때문이다.

    • 뿐만 아니라 이를 통해 자원을 효율적으로 관리할 수 있다.

  • 만약, 실시간이 필요하면 Web Socket을 사용하거나 한다.


웹 애플리케이션 인증 및 인가 처리

  • 위 처럼 무상태성, 비연결성 특성 때문에 클라이언트 - 서버와의 통신을 위해 아래 3가지 방법들을 적용할 수 있으며, 문제를 해결 할 수 있다.

  • 클라이언트에서 웹 브라우저에 접속 시 서버는 사용자 정보가 담긴 Cookie 값을 전달하고, 이를 받은 클라이언트는 웹에 저장한다.

  • Key, Value쌍으로 전달되며, 유효기간이 존재하고 용량 제한이 존재한다.


Session

  • 서버측에서 저장하는 사용자 정보이며, 세션 Id를 통해 관리한다.

  • 클라이언트에서 로그인을 할 때 Id, pwd 등을 담아서 서버에 보내면, 서버는 사용자를 확인하고, 세션 저장소를 통해 세션을 생성한다.

  • 생성된 세션 Id를 Cookie에 담아 클라이언트에 전달하고, 클라이언트는 이를 (세션 쿠키) 저장한다.

  • 이후 요청이 들어오면 세션 Id를 통해 사용자를 검증하고 응답을 준다.

    • 세션이 갱신 될 때 마다 유효 시간이 추가 되므로 동적이다.


JWT

  • 문자열로 구성되어있고, (헤더, 페이로드, 시그니처) 3가지 항목을 통해 생성하여 토큰으로 유저를 검증하는 방식이다.

  • 유저의 고유 정보를 해쉬화하여 JWT Token을 만들고 JWt Auth Guard를 통해 유저를 검증한다.

    • 시그니처 디코딩 등
  • Expire가 지정 되어 있고, 정적이기 때문에 Refresh Token을 통해 갱신해줘야 한다.




Web Server, Web Application Server

  • 웹 서버와 웹 애플리케이션 서버에 대해 설명한다.

Web Server

  • HTTP 요청을 받아 정적인 content를 제공하는 프로그램이다.

    • file, image, css, javascript ...
  • WAS를 거치지 않고 자원을 바로 클라이언트에게 제공한다.

    • 또는 Request를 WAS 전달하여 결과를 받아 제공한다.
  • 웹 서버로는 Apache Server, Nginx 등이 존재한다.


Web Application Server

  • DB 조회 및 다양한 로직을 처리하기 위한 요구를 위해 동적인 컨텐츠를 만들어진 서버이다.

  • html을 변경해서 실시간으로 제공하거나 DB 결과를 응답하고자 할 때

  • 웹 컨테이너라고도 불리며 JSP, Servlet을 실행 시킬 수 있는 환경을 제공한다.

  • Web Server + Web Container 형태로 존재한다.

    • 정적이면서 동적인 content를 처리하고, DB 접속 및 트랜잭션 처리, 비즈니스 로직 등을 수행한다.
  • WAS로는 Tomcat, JBoss 등이 존재한다.


WS와 WAS의 공존 이유

  • 정적인 파일과 동적인 파일을 모두 WAS 처리하면, 과부하가 걸릴 수 있다.

    • 때문에 각각 역할을 분리하여 자원 과부하를 방지한다.
  • 여러 대의 WAS 구성을 통해 하나의 WAS에 오류가 발생해도 재시작을 통해 오류를 보다 빠르게 해결할 수 있다.

    • 뿐만 아니라 여러대의 DBMS에서 세션 저장소를 운용할 때 WS에서 처리하면 효율적이다.
  • 즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 을 위해 Web Server와 WAS를 분리하는 것이다.




참고 1

참고 2

참고 3

참고 4

0개의 댓글