웹서버? 웹 애플리케이션 서버?
was 한 개만으로 운영을 하다보면 서버의 과부하의 우려 그래서 오류 발생 시 오류 화면도 노출이 불가능하다.
(오류에 대한 부담이 커진다 )
그래서 정적 리소스는 웹 서버가 처리해버리고, 애플리케이션 로직같은 동적 처리가 필요하면 was에 요청
(이로 인해서 효율적인 리소스 관리가 가능)
공통점 : HTTP를 기반으로 동작한다는 점
차이점: 웹 서버 -> 정적 리소스 제공, 그래서 특정 사용자에게 다르게 보여주는 방식이 불가. (파일 - 정적 리소스)
WAS는 웹 서버의 기능을 포함하며, 프로그램 코드를 실행해서 애플리케이션 로직을 수행 가능 (애플리케이션 로직 수행)
서블릿(Servlet)
전체적인 흐름 : 사용자가 url에 요청을 함 -> was 서버에서 요청 메시지를 기반으로 객체를 생성하고 (항상 생성), 그 객체를 서블릿 컨테이너에 전달 (싱글톤 -> 하나만 생성)-> 그에 맞게 원하는 정보를 전달함.
서블릿 객체는 싱글톤으로 관리 (하나의 객체만 생성해서 공유함)
was의 가장 큰 특징 -> 동시 요청을 위한 멀티 쓰레드 처리 지원 ( 그 이유는 멀티 쓰레드 )
멀티 스레드( multi thread )
스레드 -> 애플리케이션 코드를 순차적으로 실행 ex) 자바의 메인 메서드 실행하면 main 이라는 이름의 스레드가 실행, 하나의 코드 라인만 수행, 만약 동시 처리가 필요하면? 스레드를 추가로 생성함
그럼 과연 요청이 올 때마다 스레드를 생성하면 좋을까?
1. 자원이 과하게 사용된다 -> 속도 저하의 원인이 될 수 있음.
2. 전환시 추가적인 비용이 발생한다.
3. 생성에 제한이 없다 -> 많은 스레드를 생성하면 이에 자원을 할당해야해서 이로 인해서 서버가 죽을 수 있음.
(스레드 풀) -> 정해진 자원에서만 해결하고, 만약에 그를 넘어서 요청하게 되면 대기, 거절
필요한 스레드를 스레드 풀에 보관하고 관리하며, 생성 가능한 스레드 최대치를 관리 -> tomcat에서는 최대 200개 기본설정
필요한 스레드? -> 풀에서 꺼내서 사용함. -> 사용 종료 후 스레드 풀에 반납
장점 : 스레드 생성, 종료에 필요한 자원 절약, 응답 시간 빠름, 안정성 증가
결국 스레드 풀을 설정할 때 적절하게 설정해야함 (너무 적거나, 너무 많거나 하면 안 좋음)
(당연히 적으면 리소스는 여유롭지만, 클라단에서는 금방 응답이 지연 될 것)
(너무 많으면? 당연히 자원이 오버될테니까 서버가 다운)
was -> 멀티 쓰레드 처리 알아서 해줌.
SSR -> 서버 사이드 렌더링(server side rendering)
서버에서 최종 html을 생성해서 클라에 전달, 주로 정적인 화면에 사용 (백엔드 영역)
CSR -> Client side rendering
html 결과를 javascript를 이용해 웹 브라우저에서 동적으로 생성해서 적용, 주로 동적인 화면에 사용, 웹 환경을 마치 앱처럼 필요한 부분부분 변경할 수 있음.(프론트 영역)
'기술면접 관련 및 참고하기' 카테고리의 다른 글
불변 객체(Immutable Object) 그리고 DTO(Data Transfer Object) (2) | 2022.12.22 |
---|---|
나의 고찰 1 - 백엔드 입장에서 보는 유의미한 데이터란?? (봉투패턴) (0) | 2022.12.16 |
왜 Git의 Commit message는 중요할까?, 좋은 커밋 메시지란? (0) | 2022.12.08 |
객체 지향의 SOLID 원칙 (1) | 2022.11.28 |
HTTP는 뭔데요? ( CS 특강 - HTTP/HTTPS/통신 흐름, TLS/SSL 등) - 작성 중 (0) | 2022.11.25 |