웹 기초

byeol·2022년 12월 12일
0

스프링 웹 MVC 1

목록 보기
1/6

일단 내가 JSP랑 Servlet을 공부하면서 배웠던 부분인데
다시 한번 복습하는 의미에서 이번 강의를 듣게 될 거 같다.

김영한님의 스프링mvc1을 듣고...

HTTP

7계층의 HTTP
네트워크 기초에서 배웠지만 인터넷을 통해서 통신할 때 우리는 HTTP라는 프로토콜을 이용해서 서로 정보를 주고 받는다

클라이언트가 HTTP를 통해서 무언가 요청하는 프로토콜을 보내면
서버는 그 HTTP를 해석해서 요청하는 정보를 HTTP에 올려놓고 이걸 클라이언트 브라우저에 뿌린다.

올려놓은 데이터는 HTML의 형식이거나 TEXT, 이미지, 음성 등 다양하며
현재는 JSON의 형식을 띤 데이터를 올려놓는다.

  • 웹 서버(WEB SERVER) : HTTP 요청이 오면 그냥 서버에 있는 HTML,CSS,JS 등 정적인 파일을 찾아서 HTTP 응답에 실어 놓는다.
  • 웹 애플리케이션 서버 (WEB APPLICATION SERVER) : 정적인 파일을 HTTP응답에 실어 놓기도 하지만 동적인 HTML, JSP와 같이 프로그램 코드를 실행해서 애플리케이션 로직을 수행하여 동적인 파일을 HTTP응답에 실어 놓는다.
    우리가 잘 알고 있는 tomcat이 웹 애플리케이션 서버이다!
  • 웹 시스템의 구성
    1단계 : 클라이언트 - WAS - DB
    WAS가 정적인 것과 동적인 애플리케이션 로직까지 제공-> 너무 많은 역할을 하는 WAS
    -> 서버 과부하, 정적인 리소스로 인해서 중요도가 높은 애플리케이션 로직이 실행되지 못할 수도 있음
    -> WAS는 장애가 발생했을 때 오류 화면에 대한 노출이 불가능하다
    2단계 : 클라이언트 - Web Server - WAS - DB
    정적인 리소스를 분리하여 웹 서버가 커버한다.
    또한 오류가 발생했을 때 웹 서버가 오류 화면을 제공한다.

서블릿

서블릿이란 Dynamic Web Page를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술이다. let 즉 조각이다. 우리가 프로그램을 만들 때는 여러개의 조각난 클래스들로 만들것이다.

서블릿은 자바 클래스로 웹 애플리케이션을 작성한 뒤 이후 웹 서버 안에 있는 웹 컨테이너에서 이것을 실행하고, 웹 컨테이너에서는 서블릿 인스턴스를 생성 후 서버에서 실행되다가 웹 브라우저에서 서버에 요청(Request)을 하면 요청에 맞는 동작을 수행하고 웹 브라우저에 HTTP형식으로 응답(Response)한다.

서블릿 컨테이너 = 톰캣처럼 서블릿을 지원하는 WAS
서블릿 컨테이너에 있는 서블릿 객체들은 싱글톤으로 관리
따라서 공유 변수 사용하지 않기

동시 요청 - 멀티 쓰레드

서버에 요청이 들어올 때 누가 서블릿 컨테이너에 있는 서블릿을 호출하는가?
쓰레드가 호출한다.
쓰레드는 애플리케이션에 있는 자바 코드를 하나하나 한줄씩 수행

따라서 이 쓰레드가 몇 개인가?를 결정하는 것이 중요

  • 단일 쓰레드
    요청 1이 들어오면 서블릿을 호출해서 수행

    그러나 요청 2가 들어왔다고 생각해보자
    만약에 서블릿에 문제가 생겨서 요청 1에 지연이 발생하고 있다면
    요청 2는 계속 대기해야 한다
    따라서 우리는 요청이 들어올 때마다 쓰레드를 더 만들고자 한다.

  • 요청 마다 쓰레드 생성
    동시 요청 처리/ 리소스 허용할 때까지 처리/ 하나의 쓰레드가 지연되어도 나머지는 정상
    단, 쓰레드는 생성 비용이 비쌈, 컨텍스트 스위칭 비용 : CPU가 품을 수 있는 쓰레드의 개수가 정해지기 때문에 여러개의 쓰레드를 번갈아가면서 품는데 그 때 쓰레드를 바꿀 때 드는 비용/ 서버가 죽을 수도 있음

  • 따라서 등장한 것이 쓰레드 풀! 🏊‍
    쓰레드 풀에는 정해진 개수의 쓰레드가 존재하며 요청이 들어오면 쓰레드 풀에게 쓰레드를 요청한다.
    다 사용하면 쓰레드를 다시 반납하기 때문에 죽이고 다시 생성하지 않는다.
    하지만 정해진 개수의 쓰레드를 사용중일 때는 대기하거나 쓰레드 사용을 거절당할 수 있다.

    쓰레드 풀에 정해진 개수는 생성한 가능한 최대치로 결정된다.
    톰캣은 최대 200이 기본 설정이다.
    톰캣은 쓰레드 풀을 만들 때 최대 200개를 기본으로 만들어 놓는다.

  • 따라서 개발자는 이 쓰레드 풀의 쓰래드 수를 얼마나 설정한 것인가를 생각해야 한다.
    너무 작으면? 클라이언트가 고생
    너무 크면? 서버가 다운-> 개발자 망신
    적정 숫자? 애플리케이션 로직의 복잡도, CPU,메로리, IO 리소스 상황에 따라 모두 다름
    따라서 성능 테스를 실제 서비스와 유사하게 / 툴 : 아파치ab, 제이미터, nGrinder

  • WAS 멀티 쓰레드 지원
    개발자가 멀티 쓰레드 관련 코드를 신경쓰지 않아도 된다.
    개발자는 싱글 쓰레드 프로그래밍 하듯 편리하게 소스 개발
    -> 단 서블릿 객체가 싱글톤으로 관리되기 때문에 변수선언할 때 조심하자

HTTP Response

정적 리소스

정적이다. 가만히 있는다. 잘 바뀌지 않는다.
회사 인사, 회사 대표자 인사
고정된 HTML 파일, CSS 등 그냥 서버에 있는 파일 찾아서 돌려줌

HTML 페이지

동적이다. 바뀐다.
오늘의 날씨, 오늘의 급식
이는 업데이트 되는 데이터를 끌어다가 보여줘야 한다.
JSP, 동적 HTML, 타임리프

HTTP API

HTML이 아닌 데이터 자체를 전달
JSON 형식 사용

데이터만 주고 받음
그러면 UI는? 이는 이제 클라이언트가 별로도 처리한다.
즉 이제 HTML페이지가 아닌 그냥 데이터만 준다.

자바 백엔드 웹 기술 역사

1 서블릿 - 자바 코드 안에 HTML 넣어버리기
2 JSP - HTML코드에 자바 코드 넣어버리기
3 서블릿 JSP -> MVC
4 스프링 MVC

profile
꾸준하게 Ready, Set, Go!

0개의 댓글