[MVC1] 웹 애플리케이션 이해

gayoung·2022년 4월 12일
0

스프링 완전 정복

목록 보기
30/33

1. 웹 서버, 웹 애플리케이션 서버

1-1. 웹

  • 웹은 http 기반으로 동작함
  • 클라이언트 -> 서버 요청
  • 서버 -> 클라이언트로 데이터를 전송하고 응답할 때 http 프로토콜 기반으로 작동

1-2. 웹 서버

  • http 기반으로 동작
  • 특정 디렉토리에 css, html, js, 이미지, 영상을 두는데 이때, 웹 서버가 http 응답을 함
  • http 프로토콜로 데이터를 주고 받음 + 정적 데이터 제공하는것을 웹서버라고 함

1-3. 웹 애플리케이션 서버

  • http 기반으로 동작
  • 웹 서버 기능 포함+ (정적 리소스 제공 가능)
  • 프로그램 코드를 실행해서 애플리케이션 로직 수행할 수 있다는게 웹 서버와 가장 큰 차이!!!
  • WAS는 애플리케이션 코드를 실행하는데 더 특화

1-4. 웹 시스템 구성_WAS, DB

  • 정적 리소스는 존재하는 것들 불러오면 됨
  • 어플리케이션 로직은 db갔다와야하고, 다른 api 호출해야하고 복잡함
  • WAS가 너무 많은 역할을 담당, 서버 과부하 우려
  • WAS장애나면 오류화면조차 보일 수 없음(은근 장애 잘 남)
  • 역할 분담
    • 정적 리소스: 웹 서버
    • 중요한 애플리케이션 로직 처리 전담: WAS
  • 정적 리소스가 많이 사용되면 web서버 증설, 어플리케이션 리소스가 많이 사용되면 WAS 증설
  • WAS, DB 장애시 WEB 서버가 오류 화면 제공 가능

2. 서블릿

1-1. 서블릿 코드

  • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
  • 개발자는 HTTP 스펙을 매우 편리하게 사용
  • 서버에서 처리해야하는 업무가 수십가지인데, 서블릿은 메인 로직 빼고 모든 일을 다 진행해줌

1-2. 서블릿 흐름

  1. localhost:8080/hello로 요청하면
  2. was서버에서 HTTP 요청 메시지를 기반으로 request response 객체 생성
  3. request response를 파라미터로 넘기면서 helloServlet 실행
  4. responser 객체 정보로 HTTP응답 생성
  5. 웹브라우저에 응답 메세지 전송됨

1-3. 서블릿 컨테이너

  • 서블릿 컨테이너: 톰캣처럼 서블릿을 지원하는 WAS
  • 서블릿 컨테이너는 서블릿 객체를 생성(자동으로 생성), 초기화, 호출, 종료하는 생명주기 관리(WAS가 내려갈 때 서블릿 동시 종료)
  • 서블릿 객체는 직접 생성하는게 아니라 코드만 만들면 됨
  • 서블릿 객체는 싱글톤으로 관리
    • request, respone 객체는 요청이 들어올 때마다 새로 만드는게 맞음
      -> why? 요청이 각각 다르기 때문 / username이 다르기 때문에 각각 달라야함
    • helloServlet은 새로 생성하면 비효율 -> 싱글톤으로 관리
    • 공유 변수 사용 주의
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

3. 동시 요청 - 멀티 쓰레드

1-1. 쓰레드

  • 서블릿 객체를 쓰레드가 호출
  • 연결 : TCP/IP로 연결
  • 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드
  • 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행
  • 쓰레드가 없다면 자바 애플리케이션 실행이 불가능
  • 쓰레드는 한번에 하나의 코드 라인만 수행
  • 동시 처리가 필요하면 쓰레드를 추가로 생성

1-2. 다중 쓰레드

  • 요청1번이 처리중인데 요청2번이 들어왔다면, 요청1번이 쓰레드를 버려야 요청2번이 사용할 수 있는데, 쓰레드가 하나밖에 없어서 요청1번도 지연되고 요청2번 대기 -> 둘다 죽음
  • 요청마다 쓰레드 생성하면 동시요청 처리 가능 but 단점도 있음
    • 장: 동시 처리 가능
    • 장: 하나의 쓰레드가 지연되어도, 나머지 쓰레드 정상 동작
    • 단: 생성비용 비쌈(요청 올때마다 쓰레드 생성하면 응답 속도 늦어짐)
    • 단: 컨텍스트 스위칭 비용(쓰레드가 바뀔때마다의 비용) 발생

1-3. 쓰레드 풀

  • 애플리케이션 로직의 복잡도, CPU, 메모리, IO 리소스 상황에 따라 모두 다르기 때문에 적정 갯수 찾아야함
  • 멀티 쓰레드에 대한 부분은 WAS가 처리
  • 개발자는 마치 싱글 쓰레드 프로그래밍을 하듯이 편리하게 소스 코드를 개발

4. 정적 리소스, HTML(동적), HTTP API

1-1. 정적 리소스

1-2. HTML(동적)

1-3. HTTP API

  • HTML이 아닌 데이터 전달 + 실제 프로세스로 호출
  • 보통 JSON 형식 사용
  • 서버 to 서버: 데이터만 주고받으면 됨 (html받을 필요없음)
    • http위에 json으로 데이터 만 주고받으면 됨
  • 웹브라우저에서 html랜더링을 위해 자바스크립트의 api를 통해 서버의 api호출 -> was서버가 데이터 준다 -> 그 데이터를 가지고 html 동적으로 만들어서 뿌린다

1-4. SSR - 서버 사이드 렌더링

  • 서버에서 최종 HTML을 생성해서 클라이언트에 전달(모든 동적html이 서버에서 생성이 된다는 의미)
  1. 웹브라우저에서 주문내역을 달라고 서버에 요청하면, 서버는 주문db조회해서 html화면을 동적으로 생성한 다음에 최종적으로 html을 서버에서 만듦
  2. html화면을 렌더링 해서 웹브라우저에 http응답에 html 코드를 다 실어서 응답을 보내면 웹브라우저는 그거를 받아서 html을 그대로 렌더링해서 클라이언트한테 보여줌
  • 화면이 정적이고, 복잡하지 않을 때 사용, 백앤드 개발자 필수

1-5. CSR - 클라이언트 사이드 렌더링

  • 복잡하고 동적인 UI 사용, 프론트앤드 개발자 필수

0개의 댓글