개발일기

웹 서버, 웹 애플리케이션 서버 본문

Spring/(김영한님)스프링 MVC 1편 - 백엔드 웹 개발 핵심기술

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

한둥둥 2023. 5. 4. 11:09

웹 - HTTP 기반 

웹이라는 것은  다 HTTP를 기반으로 통신을  한다.

웹 브라우저에서 URL을  치면 인터넷을 통해서 서버를  접근하고 서버에서는 HTML을  만들어서 클라이언트에 내려준다. 

그러면 웹브라우저가 받은 HTML을  가지고 우리들의 눈 앞에 내려줌. 

 

클라이언트에서 서버로 데이터를 전송할 때, 서버에서 클라이언트로 응답할  때, 이때 HTTP라는 프로토콜을 기반으로 동작을 한다. 

 

모든 것이 다 웹 세상에서는 HTTP를  기반으로 데이터를 주고 받는다. 

 

모든 것이 HTTP (HTTP메시지에 모든 것을 전송)

- HTML, TEXT

- IMAGE, 음성,  영상, 파일 

- JSON,  XML(API)

- 거의 모든 형태의 데이터 전송 가능 

- 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용

- 지금은 HTTP 시대!

 

웹 서버(Web Server)

- HTTP 기반으로 동작 

- 정적 리소스 제공, 기타 부가기능 

- 정적(파일) HTML,  CSS, JS,이미지 , 영상 

- 예) NGINX, APACHE 

 

                                    1. HTTP 요청 ===========>

화면(브라우저) =============================================> 웹서버 

                                                                                <==========HTTP응답   index.html 

 

웹서버는 HTTP를 기반으로 동작하는 서버이다. 

정적리소스라는 것은 특정 폴더에다가 HTML, CSS, JS, 이미지 , 영상 같은 파일들을  두면 파일들을 server해준다. 

위에 예시로 들었을 때, HTTP로 특정 html을 주세요라고 웹서버에 요청. 웹 서버가 예를 들어서 이게 index.html이면 

이거를 HTTP Protocol로 응답을 준다. 

 

HTTP protocol로 서로 데이터를 주고 받을 수 있는  것이다.  정적 데이터를 제공하는 것을  이것을 웹서버라고 한다.  

 

웹 애플리케이션 서버(WAS - Web Application Server) 

  • HTTP 기반으로 동작
  • 웹 서버 기능 포함 + (정적 리소스 제공 가능)
  • 프로그램 코드를 실행해서 애플리케이션 로직 수행
    • 동적 HTML, HTTP  API(JSON)
    • 서블릿, JSP, 스프링 MVC
  • 예) 톰캣(Tomcat) Jetty, Undertow 

                                           1. HTTP 요청 ====>

웹 브라우저(클라이언트) ======================================>       WAS (Hello.calss)

                                                                                       <==== 2. HTTP 응답 

 

웹 서버는 특정 사용자마다 코드를 실행할 수 없기 때문에 다르게 보여줄 수 없지만 WAS는 사용자에 따라서 그 사용자의  이름 , html 화면을 다르게 보여줄 수  있다. 왜냐하면 애플리케이션 로직을 수행할 수 있기 때문이다. (프로그래밍을 할 수 있음)

 

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

  • 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 
  • 사실은 둘의 용어도 경계도 모호하다. 
    • 웹 서버도 프로그램을  실행하는 기능을  포함하기도 한다. 
    • 웹 애플리케이션 서버도 웹 서버의 기능을 제공함
  • 자바는 서블릿 컨테이너 기능을 제공하면 WAS
    • 서블릿 없이 자바코드를 실행하는 서버 프레임워크도 있음. 
  • WAS는 애플리케이션 코드를 실행하는데 더 특화되어 있음. 

 

웹 시스템 구성 - WAS, DB 

- WAS, DB 만으로 시스템 구성 가능 

- WAS는 정적 리소스, 애플리케이션 로직 모두 제공 가능 

 

                                                              애플리케이션 로직

클라이언트 ==================>              WAS              ===============> DB

                                                               HTML, CSS, JS 

                                                                         이미지 

 

웹브라우저가 요청을  하면 애플리케이션 로직도 실행가능하고, CSS , JS ,이미지들도 다 제공할 수 있다. 

애플리케이션에서 데이터베이스를 조회해서 필요한 데이터를 동적으로 조회도 할 수 있다. 

 

웹 시스템 구성 - WAS, DB

- WAS가  너무 많은 역할을 담당, 서버 과부하 우려 

- 가장  비싼 애플리케이션 로직이 정적 리소스 때문에 수행이 어려울 수 있음

- WAS 장애시 오류 화면도 노출 불가능 

 

 

                                                              애플리케이션 로직

클라이언트 ==================>              WAS              ===============> DB

                                                               HTML, CSS, JS 

                                                                         이미지 

 

애플리케이션 로직은  상당히 비쌈 , HTML, CSS, JS에서 사용하는 정적 리소스들은 상대적으로 값을 잘 가공하여 제공하기만 하면 됨. 하지만 애플리케이션 로직 같은 경우는 주문,  작업 배정 등 중요한 로직일 가능성이 있음. 

애플리케이션의 로직은  데이터베이스 불러와야하고 필요하다면 다른 서버도 호출해야함. 비지니스 로직이 들어가서 상당히 중요함. 

 

WAS는 상당히 잘 죽음 (개발자가 개발하면서 문제가 생기거나 그래서 죽을 수 있음)

웹브라우저가 WAS에 접근해야하는데 WAS문제가 생기면 접근조차 되지 않음  

오류 화면 조차도 노출 불가능하다. 

 

웹 시스템 구성 - WEB ,  WAS ,DB 

- 정적 리소스는 웹 서버가 처리 

- 웹 서버는 애플리케이션 로직같은 동적인 처리가 필요하면 WAS에 요청을 위임

- WAS는 중요한 애플리케이션 로직 처리 전담 

 

 

클라이언트 =======>  WEB Server =========> WAS =========>  DB

                                  HTML, CSS, JS                 애플리케이션 로직

                                       이미지

 

앞에서 웹서버를 두고 여기서 정적 리소스를  다처리 그러다가 동적인 로직이 필요한 경우, 뒤로 넘겨서 WAS로 넘긴다. 

그러면 WAS가 동적인 데이터를 처리 즉, DB를  뒤져서 내려줌.

WAS는 굉장히 중요한 애플리케이션 로직에만 전담할 수 있음.  업무 분담을 할 수 있음. 

 

 

웹 시스템 구성 - WEB, WAS, DB 

 

  • 효율적인 리소스 관리
    • 정적 리소스가 많이 사용되면 Web 서버 증설 
    • 애플리케이션 리소스가 많이 사용되면 WAS 증설 

                                             X 4                                       X 8

클라이언트 ========> Web Server ===========>  WAS =======> DB

 

웹 시스템 구성 - WEB, WAS, DB 

  • 정적 리소스만 제공하는 웹 서버는 잘 죽지 않음 
  • 애플리케이션 로직이 동작하는 WAS 서버는 잘 죽음 
  • WAS, DB 장애시 WEB 서버가 오류 화면 제공 가능 

클라이언트 ========> Web Server ===========>  WAS ===============> DB

                                      오류화면 HTML                    애플리케이션 로직 

 

Web Server는 서버가 잘 죽지 않는다.  단순한 파일에 있는 걸 읽어다가 클라이언트에게 제공만 하면 된다. 

폴더에 파일을 놓고 앞으로 이  url로 오면 이폴더를 제공할께요라고 설정만해서 쓰면 됨. 

웹 서버는 뭔가 계산하고 이런게 거의 없음. 

애플리케이션이 실제로 들어있는 로직은 굉장히 잘죽음 (개발자의 실수나 DB의  커넥션오류때문에)

 

웹서버는 WAS가 제대로 응답을 못하면 Web Server 화면의 HTML 에서 오류화면을 내려줄 수 있음. 

 위에를 기반으로 점점 더 발전한다. 

API로 데이터만 제공하면 굳이 WebServer가 굳이 필요없고 WAS만 있어도 괜찮음.