기술면접 관련 및 참고하기

웹 애플리케이션의 이해

지팡구 2022. 12. 8. 19:56
웹서버? 웹 애플리케이션 서버?

was 한 개만으로 운영을 하다보면 서버의 과부하의 우려 그래서 오류 발생 시 오류 화면도 노출이 불가능하다.

(오류에 대한 부담이 커진다 )

 

출처 : 인프런 김영한 스프링 MVC 1편

 

그래서 정적 리소스는 웹 서버가 처리해버리고, 애플리케이션 로직같은 동적 처리가 필요하면 was에 요청

(이로 인해서 효율적인 리소스 관리가 가능)

 

출처 : 인프런 김영한 스프링 MVC 1편

 

공통점 : HTTP를 기반으로 동작한다는 점

차이점: 웹 서버 -> 정적 리소스 제공, 그래서 특정 사용자에게 다르게 보여주는 방식이 불가. (파일 - 정적 리소스)

WAS는 웹 서버의 기능을 포함하며, 프로그램 코드를 실행해서 애플리케이션 로직을 수행 가능 (애플리케이션 로직 수행)


서블릿(Servlet)

 

출처 : 인프런 김영한 스프링 MVC 1편

 

전체적인 흐름 : 사용자가 url에 요청을 함  -> was 서버에서 요청 메시지를 기반으로 객체를 생성하고 (항상 생성), 그 객체를 서블릿 컨테이너에 전달 (싱글톤 -> 하나만 생성)-> 그에 맞게 원하는 정보를 전달함. 

 

서블릿 객체는 싱글톤으로 관리 (하나의 객체만 생성해서 공유함)

 

was의 가장 큰 특징 -> 동시 요청을 위한 멀티 쓰레드 처리 지원 ( 그 이유는 멀티 쓰레드 )


멀티 스레드( multi thread )

 

스레드 -> 애플리케이션 코드를 순차적으로 실행 ex) 자바의 메인 메서드 실행하면 main 이라는 이름의 스레드가 실행, 하나의 코드 라인만 수행, 만약 동시 처리가 필요하면? 스레드를 추가로 생성함

 

그럼 과연 요청이 올 때마다 스레드를 생성하면 좋을까?

 

1. 자원이 과하게 사용된다 -> 속도 저하의 원인이 될 수 있음. 

2. 전환시 추가적인 비용이 발생한다. 

3. 생성에 제한이 없다 -> 많은 스레드를 생성하면 이에 자원을 할당해야해서 이로 인해서 서버가 죽을 수 있음.

 

    (스레드 풀) -> 정해진 자원에서만 해결하고, 만약에 그를 넘어서 요청하게 되면 대기, 거절

 

필요한 스레드를 스레드 풀에 보관하고 관리하며, 생성 가능한 스레드 최대치를 관리 -> tomcat에서는 최대 200개 기본설정

 

필요한 스레드? -> 풀에서 꺼내서 사용함. -> 사용 종료 후 스레드 풀에 반납 

장점 : 스레드 생성, 종료에 필요한 자원 절약, 응답 시간 빠름, 안정성 증가

 

결국 스레드 풀을 설정할 때  적절하게 설정해야함 (너무 적거나, 너무 많거나 하면 안 좋음)

(당연히 적으면 리소스는 여유롭지만, 클라단에서는 금방 응답이 지연 될 것)

(너무 많으면? 당연히 자원이 오버될테니까 서버가 다운)

 

was -> 멀티 쓰레드 처리 알아서 해줌.  

 

SSR -> 서버 사이드 렌더링(server side rendering)

서버에서 최종 html을 생성해서 클라에 전달, 주로 정적인 화면에 사용 (백엔드 영역)

 

 

CSR -> Client side rendering

html 결과를 javascript를 이용해 웹 브라우저에서 동적으로 생성해서 적용, 주로 동적인 화면에 사용, 웹 환경을 마치 앱처럼 필요한 부분부분 변경할 수 있음.(프론트 영역)