웹 애플리케이션 이해

김용빈·2022년 7월 10일
0

모든 데이터는 HTTP를 사용하여 전송

  • 웹서버: HTTP를 기반으로 동작(정적)
  • 웹애플리케이션 서버(WAS):HTTP 기반으로 동작, 웹서버 기능 포함
    프로그램 코드를 실행해서 애플리케이션 동작가능(동적) = 사용자에 따라 다르게 보여줄 수 있음 (Tomcat)

###이 둘의 차이는 무엇일까 ?
정적,동적인 운영의 차이
WAS는 애플리케이션 코드를 실행하는데 더 특화

실무에서의 용도는 어떻게 될까?
웹시스템 구성 - WAS,DB

  • 클라이언트(요청) -> WAS(전달 및 응답) -> DB
    상단의 구조처럼 웹시스템을 구성하면 WAS에게 부담이 가중됨 전달하고 응답하느라

그래서 현재는

  • 클라이언트(요청) -> Web Server -> WAS -> DB
    (HTML,CSS,JS) (애플리케이션로직)
  • 동적인게 필요하면 WAS로 넘김,
    이렇게했을떄 좋은점은 WAS가 중요한것만 처리할 수 있고
    웹시스템을 효율적으로 구성할 수 있다.

웹 애플리케이션의 시작이었던 서블릿

서블릿이 생긴이유는 : 과거에는 HTTP 요청이 왔을떄 서버 대기 부터, HTTP 요청 메세지를 파싱해서 읽고 비즈니스 로직 실행에서 데이터베이스에 요청을 하고 마무리로
HTTP 응답메세지를 생성해 보내주며 소켓을 종료시키는 이러한 일련의 과정을 전부 다했다. 이러한 비효율적인 작업을 줄이기 위해 서블릿이 생겼고 서블릿은 '비즈니스 로직을 실행'만 개발자가 하게하고 나머지는 다 서블릿이 지원해 효율성을 높이기 위해 생겼다

개발자는 HTTP스펙을 매우 편하게 사용할 수 있게되었다.

  • HTTP 요청시

  • WAS는 Request,Response객체를 새로 만들어서 서블릿 객체 호출

  • 개발자는 Request 객체에서 HTTP요청 정보를 편리하게 꺼내서 사용

  • 개발자는 Response 객체에 HTTP 응답정보를 편리하게 입력

  • WAS는 Response 객체에 담겨있는 내용으로 HTTP 응답 정보 생성

    서블릿 특징

  • 서블릿 컨테이너는 서블릿 객체를 생성,초기화,호출,종료하는 생명주기 관리

  • 싱글톤으로 관리

  • 공유 변수 사용 주의

  • 동시 요청을 위한 멀티 쓰레드처리 지원
    (10000명정도 한번에 요청와도 자동으로 해결 할 수 있다)


동시요청 -멀티 쓰레드란?

클라이언트가 요청이 들어오면 해결을 위해 써블릿을 호출하는데 도대체 누가
' 써블릿 ' 을 호출할까?
답은 바로 => 쓰레드

쓰레드

  • 애플리케이션 코드를 하나하나 순차적으로 실행하는 것을 말함
  • 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행
  • 쓰레드가 없다면 자바 애플리케이션 실행 불가능
  • 쓰레드는 한번에 하나의 코드라인만 수행
  • 동시처리가 필요하면 쓰레드를 추가로 생성
  • 요청마다 쓰레드 생성

요청마다 쓰레드 생성하면 장점과 단점이 존재
장점: 동시요청 가능,하나의 스레드가 지연되어도 나머지 쓰레드 정상 동작
단점: 쓰레드 생성 비용 비쌈, 고객 요청올떄마다 쓰레드 생성하면 응답속도 늦어짐
쓰레드 생성에 제한이 없기에 고객 요청이 너무많이오면 CPU메모리 임계점 넘어 서버죽음

이것을 해결하기 위해 WAS는 쓰레드 풀을 만들어 그안에 쓰레드 사용하고 반납할 수 있게 함 즉, 미리 만들어 놓고 빌려쓰고 가져다 쓰게 만듦
최대 쓰레드가 모두 사용중이거나 쓰레드 풀에 없으면 쓰레드를 대기하고 거절할 수 있게함


HTML, HTTP API , CSR , SSR

  • 정적 리소스를 제공 : 고정된 HTML파일, CSS 이미지 제공

  • 동적인 HTML 페이지의 제공: 동적으로 필요한 HTML파일을 생성햇 ㅓ전달
    웹 브라우저 (요청) -> WAS가 -> DB(주문정보조회)를 한다음에 -> WAS에서 (동적으로 HTML 생성,타임리프) 통해 HTML 생성-> 웹브라우저에게 전달

  • HTTP API : HTML이 아니라 데이터를 전달, 주로 JSON 형식 사용
    (예를 들면, 주문내역 보여주세요 라는 요청이오면 WAS가 주문정보를 조회하고
    JSON형식으로 {"주문번호":100,"금액":5000}이렇게 데이터 정보를 내려줌
    다양한 시스템에서 사용되는데 이럴떄 HTTP API가 사용된다

  • 데이터만 주고받을떄, 만약 UI화면이 필요하면, 클라이언트가 별도 처리

  • 앱, 웹 클라이어언트, 서버TO서버

서버개발자는 3가지를 고려해서 개발하면된다!
정적페이지 어떻게 제공할것인가, 동적HTML 어떻게 할것인가, HTTP API 어떻게 제공할까 이 3가지를 고려해서 개발해야한다.

SSR: 서버 사이드 렌더링
서버에서 최종 HTML생성해서 클라이언트에 전달

CSR: HTML결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용

profile
안녕하세요!

0개의 댓글