웹 애플리케이션

jooog·2022년 4월 2일
0

📌 HTTP 프로토콜

웹은 HTTP를 기반으로 하는데 HTML, TEXT, IMAGE, JSON 등 거의 모든 형태의 데이터를 HTTP 프로토콜로 주고받는다. 서버간에 데이터를 주고받을 때도 HTTP를 사용한다.

예시) HTTP POST 요청을 보내는경우

📌 웹 서버(Web Server)

웹 서버는 HTTP를 기반으로 동작하며 정적 리소스 제공부터 기타 부가기능까지 다양한 기능을 제공한다.

📌 웹 애플리케이션 서버(WAS)

HTTP 기반으로 동작하며 웹 서버의 기능을 포함하지만 애플리케이션 코드를 실행하는데 더 특화되어 있다. 프로그램 코드를 실행해서 애플리케이션 로직을 수행하며 사용자에 따라서 동적인 기능을 제공한다. 동적인 HTML, JSON, JSP, HTTP API 등이 있다.

📌 웹 시스템의 구성(WEB, WAS, DB)

정적 리소스(HTML, CSS, JS)는 웹 서버가 처리하고 동적인 처리가 필요한 로직은 WAS가 처리한다. 즉, 역할을 구분하여 WAS는 중요한 애플리케이션 로직을 처리하게 된다.

WAS에서 많은 역할을 담당하여 서버가 과부하되는 것을 방지할 수 있다.

📌 서블릿

UrlPatterns(/hello)로 요청이 들어오면 서블릿 코드가 실행된다. HTTP 요청 정보와 응답을 편리하게 사용할 수 있는 HttpServletRequest, HttpServletResponse 객체를 제공한다. 개발자는 편하게 HttpServletRequest 객체에서 요청 정보를 꺼내올 수 있으며 HttpServletResponse 객체로 응답 데이터를 전달해주면 된다.

서블릿 객체는 싱글톤으로 관리되어 최초 로딩 시점에 객체가 만들어지면 재활용된다. 따라서 모든 클라이언트의 요청은 동일한 서블릿 객체 인스턴스에 접근하게 된다. 따라서 공유변수 사용주의해야 한다.

📌 멀티 쓰레드

쓰레드는 애플리케이션 코드를 하나하나 순차적으로 실행하는데 쓰레드는 한번에 하나의 코드 라인만 수행할 수 있으며 동시 처리가 필요하면 쓰레드를 추가로 생성해야 한다. 만약 쓰레드가 없다면 자바 애플리케이션을 실행하는 것은 불가능하다.

하지만 요청이 올때마다 쓰레드를 생성한다면 다양한 문제가 발생한다. 먼저, 쓰레드 생성 비용은 매우 비싸기 때문에 비용 문제가 발생하고 고객의 요청이 올 때 마다 쓰레드를 생성하면 그만큼 응답 속도도 느려진다. 더구나 쓰레드는 생성에 제한이 없기 때문에 무제한으로 생성하게 된다면 CPU, 메모리 한도를 초과하여 서버가 다운될 수 있다.

예를 들어 주문이 몰리는 상황이나 대학교 수강신청날 같은 경우에는 요청이 매우 많기 때문에 쓰레드를 생성하는 비용, CPU, 메모리 한도문제로 서버가 감당하기 어렵다.

📌 쓰레드 풀

쓰레드 풀에 쓰레드를 미리 만들어놓고 요청이 들어오면 만들어둔 쓰레드 풀에서 쓰레드를 빌려쓰고 반납하는 방식으로 사용할 수 있다. 쓰레드 풀에 남아있는 쓰레드가 없는 경우에는 대기나 거절할 수 있다. 이렇게 쓰레드 풀 방식을 사용하면 요청이 올때 마다 쓰레드를 생성하는 단점을 보완할 수 있다.

쓰레드풀을 사용하면 매번 쓰레드를 생성하는 비용을 절약할 수 있으며 응답시간이 빠르다. 실무에서 WAS의 주요 튜닝 포인트는 최대 쓰레드 수다. 쓰레드 수를 너무 낮게 설정하면 동시 요청이 많을 경우 응답 지연 문제가 발생할 수 있고 쓰레드 수를 너무 높게 설정하면 CPU, 메모리 임계점 초과로 서버 다운 문제가 발생할 수 있기 때문이다. 따라서 적정한 수를 찾아 최적의 방안을 찾는 것이 중요하다.

📌 서버사이드 렌더링(SSR)

서버에서 최종적으로 HTML을 생성해서 클라이언트에 전달하는 것을 말한다. 관련 기술로는 JSP, 타임리프가 있다.

📌 클라이언트 사이드 렌더링(CSR)

HTML 결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성하는 것을 말한다. 주로 웹 프론트엔드 개발자의 역할이며 React, Vue.js같은 기술을 사용한다.

이 글은 김영한님의 스프링MVC 강의를 듣고 정리한 내용입니다.

0개의 댓글