*이 글은 이전된 글입니다. 왜냐면 이건 원래 원앙과의 지식 공유를 위해 나의 언어로 작성된 것이기 때문임 ㅎㅎ
보호보호야 오늘은 웹 서버와 WAS에 대해 알려주도록 하겠다.
예…
호호 보호보호야 아주 태도가 좋구나 역시 우등생다워 웹 서버와 WAS에 대해 알아보기 전에 먼저 알아야할 것이 있다. 바로 ‘정적 페이지(static page)‘와 ‘동적 페이지(dynamic page)‘란다.
정적 페이지의 대표적인 친구들로는 HTML, CSS, JS가 있다. 이들은 보호보호 너가 웹에 접속했을 때 서버에 저장된 파일을 그대로 보여주는 것이지.
위와 같은 코드가 있다고 생각해보거라. 이렇게 작성된 HTML, CSS, JS는 너가 어떤 사람이든 내용이 변하진 않는단다.
이렇게 아주 정직하게 동작하지. 내용물이 변화하지않기 때문에 ‘정적인 페이지’라는거란다.
그럼 동적인 페이지에는 무엇이 있느냐?
대표적으로 이런 애들이 있단다. 이외에도 여러 서버사이드 템플릿 엔진들이 예시가 된단다.
서버사이드 템플릿 엔진이 뭐냐구?! 그건 지금은 몰라도 된단다…
동적인 페이지는 한 마디로 쉽게 정의하면 ‘내용물이 변화하는 페이지’라고 이해하면 된단다.
위와 같은 html 코드가 있단다. “th:text” 이런 부분은 템플릿 엔진 문법이니 지금은 신경쓰지말거라.
보면 h1 태그가 2개 있지만, 내용물은 아무것도 없는 것을 알 수 있단다.
이 태그 안에 위치하는 내용들은 서버에서 정의해준 “NAME”과 “AGE”라는 값에 의해 결정된단다.
이렇게 말이지. (Model 같은건 신경쓰지말도록 하거라) 주소값에 따라 NAME과 AGE를 다르게 정의해주고 있는 것 같지?
그럼 직접 확인해보도록 할까?
/ 로 접속시
/bohoboho 로 접속시
어떠니 보호보호야. 이제 정적 페이지와 동적 페이지가 무엇인지 알겠니?
흠…그런데 제가 javascript를 배울때는 화면을 동적으로 바꿔줄 수 있다고 했는데
왜 자바스크립트는 정적 페이지에 속하는 언어로 들어가나요?
호호. 좋은 질문이란다. 너 이제 스스로 질문도 하는구나?
(아래 내용은 불로그 쥔장이 스스로 정의한 것입니다. 저는 학위가 없습니다.)
정적 페이지와 동적 페이지를 가름 짓는 것은 바로 페이지의 생성 주체와 시점에 있다고 생각하면 편하단다.
HTML, CSS, JS로 작성된 코드(+태그 구조)들은 이미 서버PC에 저장되어있는 파일일뿐 내용이 변하진 않지?
JS에는 화면을 동적으로 ‘변화시키는 기능’이 정의된 것이지, 코드나 태그구조 내용이 바뀌진 않으니 말이다.
반면에 내가 보여준 동적 페이지의 예시를 보면 알 수 있듯 JSP, Thymeleaf와 같은 템플릿 엔진들은 사용자의 요청이 들어왔을 때 서버에서 화면에 보여줄 페이지를 만들어 던지는거란다.
정리하면, 정적 페이지는 그저 PC에 이미 ‘저장된 파일’ 그 자체를 보여주는 것이고 동적 페이지는 요청이 들어왔을 때
그에 알맞는 응답값을 가진 화면을 ‘서버에서 만들어서’ 돌려주는 것이란다.
(잘못된 정의라면 제보해주거라)
자, 이제 본격적으로 웹 서버와 WAS에 대해 알아보도록 하자꾸나.
?
우선 쉽게 각자의 역할을 설명해주도록 하마. 웹 서버는 ‘정적 컨텐츠’를 반환해주는 역할을 (주로) 수행하게 된단다.
대표적인 것으로 Apache와 nginx가 있지. WAS는 Web Application Server로 DB 조회나 변동적인 로직을 처리하여
‘동적 컨텐츠’를 만들어주기 위한 녀석이란다.
우리에게 익숙한 Tomcat, Undertow 등이 이곳에 속한단다.
오호! 여기 웹 서버와 WAS의 관계를 잘 설명해준 구성도가 있구나.
보이는 바와 같이 WAS는 기본적으로 웹 서버의 기능 또한 모두 수행 할 수 있도록 되어있지.
그럼 WAS만 쓰면 되지않느냐? 라는 질문이 자연스럽게 따라오게 될텐데…
보호보호야. 너는 밥도 먹을 수 있고, 책도 읽을 수 있지? 그치만 밥먹으면서 책을 읽으면 어떨 것 같니?
마음도 배도 부릅니다.
그래. 보호보호야.
너 말대로 어느 하나 제대로 수행하는 것이 부담될 거다.
중요한 로직을 처리해야하는 WAS의 부담을 낮춰주어야 웹 사이트가 원활하게 구동되겠지?
또 뭐든 분리하는 것이 보안상에 좋은 법이란다.
WAS만을 사용해 모든걸 처리하게 된다면, WAS가 공격당할 경우 너무나도 피해가 크지않겠니? 핫핫핫
또 이런 경우가 있다고 생각해보자꾸나.
이용자가 아주아주 많고 복잡한 로직을 처리하는 웹 서비스를 보호보호 너가 구현했다.
그렇다면 로직을 여러명이 처리할 수 있다면, 사용자들에게 조금 더 좋은 사용경험을 줄 수 있지않겠니?
이럴땐 한 개의 웹 서버에 복수의 WAS를 부착할 수 있단다.
작업이 몰리는 WAS가 있는 경우엔 두번째 WAS로, 그것도 부하가 걸린다면 세번째 WAS로 요청을 해주는 것이지.
이를 이용하면 여러 백엔드 언어를 동시에 적용한 웹 페이지가 존재하게 될 수도 있겠지?
로직을 업데이트 할 때 WAS가 2개 있다면, 한 곳 한 곳 나눠서 작업한다면 사용자에게 끊김없는 서비스를 제공할 수도 있단다.
반대로 한 개의 WAS에 여러 개의 웹 서버를 부착하는 경우도 있단다.
OpenAPI에서 보내주는 데이터를 사용하고 있는 웹 서버가 있다면 적절한 예시가 되지않을까?
(실제로 OpenAPI들이 모두 단일 WAS를 사용하고 있다는 건 아닙니다람쥐)
하나의 WAS에 여러 웹 서버에서 요청을 보내고 있으니 말이다.
이렇게 WAS는 웹 서버의 역할을 모두 수행 할 수 있지만, 대부분 안정성과 부하 방지, 보안강화, 더 나은 사용자 경험 등을 위해
많은 서비스에서 웹 서버와 WAS를 구분하여 구축하고 있단다.
자. 보호보호야.
오늘은 수업이 좀 길었지만, 한번 잘 읽고 모르는게 있으면 박사님에게 질문해보아라! 껄껄껄. 오늘도 잘 들어주어 ㄷ고무바구나!
…
'원앙둥지' 카테고리의 다른 글
도와줘요! 박사님! - 클라이언트와 웹 서버 (0) | 2022.02.07 |
---|---|
윤선이와 블로그 만들기_5. 글 조회와 되돌아오기 처리 (0) | 2021.02.02 |
윤선이와 블로그 만들기_4. 글 목록 만들기 (0) | 2021.02.01 |
LUVLOG_S1 (0) | 2020.12.27 |
윤선이와 블로그 만들기_3. 에디터(Toast UI Editor) 붙이기 (2) | 2020.11.21 |