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

김현준·2023년 7월 11일

Gaounuri_Spring_Study

목록 보기
1/10

📌 목차

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

  2. 서블릿

  3. 쓰레드 , 멀티쓰레드 , 쓰레드 풀

  4. 서버사이드 렌더링 (SSR) , 클라이언트 사이드 렌더링 (CSR)

  5. JSP


  1. 웹서버와 웹애플리케이션 (WAS)

image

Web Server 는 항상 동일한 정적 컨텐츠를 반환한다.
Ex) image , html , css , javascript

Web Application Server동적 컨텐츠를 반환한다.

image

이와같이 분류하면 여러 장점이 있다.

Web Server 입장에서는 이미지같은 정적인 파일들을 WAS 까지 가지않아도 되므로 효율적이다.

WAS 입장에서는 JSP , Servlet , HTTP API 같은 동적 컨텐츠만 제공하면 되므로 정적컨텐츠에 신경쓸필요가없다.

만약 WAS 에게 HTML , CSS , JS , image 와 애플레케이션 로직 모두 담당하게 된다면 서버 부하가 크게 발생한다.

하지만 이렇게 Web ServerWAS 를 분류한다면 유지보수가 좋아진다.

사용자가 데이터베이스에 접근을 자주하면 WAS 서버를 늘리면되고 정적컨텐츠에 자주 접근하면 Web Server 서버를 늘리면되므로 상황에 따라 유연하게 대처가 가능하다.


  1. 서블릿 (Servlet)

서블릿이란 동적 웹 페이지를 만들 때 사용되는 자바기반의 웹 애플리케이션 기술이다.

예를들어 클라이언트에서 로그인을 할때 아이디와 비밀번호를 확인하고 결과를 응답하는 동적 웹 페이지가 그 예시이다.

image

실제로 http 요청 내용을 보면 대략적으로 위와 같다.
서버가 http 요청에 대해 응답하기 위해서는 TCP/IP 연결과 소켓 연결을 해주어야 하고 http 요청 메시지를 파싱해서 읽은 다음에 GET , POST 등과 같은 요청방식에 따라 비지니스 로직을 실행하고 http 응답메시지까지 복잡한 과정이 이루어진다.

하지만 Servlet 을 사용한다면 서버는 비지니스 로직만 구현하면 된다.

그 예시로 Tomcat 과 같은 것이 존재하며

아래와 같은 부가적인 기능이 존재한다.

  • 서블릿 컨테이너를 통해 서블릿 객체를 생성,초기화,호출,생명주기 관리

  • Singleton 으로 서블릿 객체를 관리

  • 동시 요청을 위한 멀티 쓰레드 지원

따라서 Servlet 을 사용하면 동적 웹 페이지를 만들 수 있다.

  1. 쓰레드 , 멀티쓰레드 , 쓰레드 풀

쓰레드란 프로세스 내에서 작업을 수행하는 주체를 의미한다.
이때 프로세스는 실행중인 프로그램을 의미한다.

또한, 두 개 이상의 쓰레드를 가지는 프로세스를 멀티쓰레드 프로세스라고 한다.

class ThreadWithClass extends Thread {
    public void run() {
        for (int i = 0; i < 5; i++) {
            System.out.println(getName()); // 현재 실행 중인 스레드의 이름을 반환함.
            try {
                Thread.sleep(10);          // 0.01초간 스레드를 멈춤.
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class ThreadWithRunnable implements Runnable {
    public void run() {
        for (int i = 0; i < 5; i++) {         
        	System.out.println(Thread.currentThread().getName()); // 현재 실행 중인 스레드의 이름을 반환함.
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
public class Thread01 {
    public static void main(String[] args){
        ThreadWithClass thread1 = new ThreadWithClass();       // Thread 클래스를 상속받는 방법
        Thread thread2 = new Thread(new ThreadWithRunnable()); // Runnable 인터페이스를 구현하는 방법
        thread1.start(); // 스레드의 실행
        thread2.start(); // 스레드의 실행
    }
}

자바에서는 Runnable 인터페이스를 구현하거나 Thread 클래스를 상속하여서 쓰레드를 생성할수 있다.

자바에서의 main 메서드 또한 main 이라는 이름의 쓰레드가 실행된다.

클라이언트에서 여러개의 요청이 있을때 쓰레드가 필요하게 되는데, 쓰레드가 부족할시 클라이언트는 응답 대기를 해야한다. 하지만 이를 해결하기 위해 쓰레드의 수를 늘리면 비용이 크게 증가한다.

image

이를 해결하기 위해 쓰레드 풀 이란 것을 사용하는데

필요할때마다 쓰레드 풀에서 쓰레드를 꺼내 쓰는 형식으로 응답이 빠르고 쓰레드가 미리 생성되어있으므로 생성과 종료하는 CPU 비용이 절감된다.

다음으로 쓰레드풀은 최대 제한치를 정함에 있어서 중요하다.
쓰레드풀을 너무 작게하면 CPU 사용이 더 가능함에도 불구하고 제한으로 인해 많은 처리를 하지못한다.

하지만 제한치를 너무 크게 잡으면 CPU 의 과부하가 발생하여 서버가 다운될수 있다.

따라서 쓰레드풀의 제한을 적절하게 유지하는것이 중요하다.
이는 앞서 설명한 WAS 의 멀티 쓰레드 지원을 통해 개발자는 멀티쓰레드에 관한 코드를 신경쓰지 않아도 된다.

  1. 서버사이드 렌더링 (SSR) , 클라이언트 사이드 렌더링 (CSR)

렌더링은 서버로부터 요청해서 받은 내용을 브라우저 화면에 표시해주는 것이다.

image

Server Side Rendering 은 클라이언트가 서버에 데이터를 요청하여 서버에서 처리하는 방식이다.

HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 적용하고 주로 정적인 화면에 사용한다. 백엔드에서는 JSP,Thymeleaf 같은 기술을 이용한다.

image

Client Side RenderingHTML 결과를 자바 스크립트를 사용해 웹 브라우저에서 동적으로 생성해 적용한다.

구글 지도를 사용할때 확대나 축소를 하는 과정에서 매번 서버에게 http 요청을 하지 않고 클라이언트에서 자바스크립트를 통해 동적으로 적용합니다. 프론트엔드에서는 React , Vue.js 같은 기술을 사용한다.

  1. JSP

SSR 에서는 HTML 최종결과를 서버에서 만든다고 했습니다. 어떻게 그것이 가능할까요?

바로 JavaServer Page 를 통해 가능합니다.

image

JSPHTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.

따라서 JSP 를 통해 서버에서 동적웹페이지를 Java 를 통해 만들 수 있다.

profile
울산대학교 IT융합학부

0개의 댓글