네이버 부스트 코스 웹 백엔드 과정을 공부하고 정리한 내용입니다.
0. 웹 브라우저에 화면이 띄워지기까지
우리가 웹 브라우저를 실행한 후, 원하는 URL 주소를 입력하면 그 URL 주소에 해당하는 페이지가 웹 브라우저에 보인다.
그 과정을 풀어보면,
웹 브라우저는 URL 주소에 해당하는 웹 서버에 연결하게 되고, 화면에 필요한 HTML 문서나 각종 자원을 요청하게 된다.
정적인 콘텐츠는 웹 서버를 통해, 동적인 콘텐츠는 WAS를 통해 요청받은 자원을 전달하고
웹 브라우저는 해당 자원들을 읽고 해석, 렌더링 하여 화면에 띄워주게 된다.
1. Web Server란?
- 소프트웨어적 정의는 웹 브라우저로부터 HTTP 요청을 받아 정적인 콘텐츠(html, css, 이미지 등)를 제공하는 컴퓨터 프로그램
- 하드웨어적 정의는 위의 웹 서버 프로그램이 설치된 컴퓨터를 말한다.
- 클라이언트의 요청이 오면 WAS보다 앞에서 요청을 처리한다.
- 요청이 들어오면
1) 정적인 콘텐츠는 웹 서버 자체에서 처리 후 응답
2) 동적인 콘텐츠는 제공을 위해 WAS로 요청, WAS 처리 결과를 받아 응답
- Apache나 Nginx, Microsoft IIS 등이 있다.
2. WAS란?
- WAS란 일종의 미들웨어로 웹 클라이언트(웹 브라우저)의 요청 중 보통 웹 애플리케이션이 동작하도록 지원하는 목적
- 웹 서버에서 처리하지 못하는 동적인 콘텐츠(DB 조회나 로직에 의해 데이터를 가공해서 보여주는)를 제공
- 웹 서버 + 웹 컨테이너로 구성되어 있고, 컨테이너(JSP, Servlet을 구동시킬 수 있는 소프트웨어) 안에는 JSP + Servlet이 구동되는 환경이 조성된다.
- Tomcat, JBoss, Web Sphere 등이 있다.
+ DBMS와 미들 웨어
- DBMS는 데이터를 접근할 수 있도록 해주는 소프트웨어로, 예전에는 클라이언트가 직접 DBMS에 접속해서 클라이언트단의 코드에 데이터 로직이 포함되어 있었다. 클라이언트의 역할이 커져서 부담이 되고, 데이터를 처리하는 로직이 포함되어 있어 보안에도 문제가 되고, 로직이 달라지는 매번 클라이언트에게 수정된 내용을 포함해서 배포를 해야 하는 어려움이 있었다.
- 따라서 클라이언트는 요청, 응답만 하고 데이터를 처리해야 하는 로직을 클라이언트 <-> DBMS 사이에 미들 웨어 서버를 두어서 역할을 분리했다. 미들웨어 서버에서 DBMS에 접근해서 데이터를 처리하고, 결과를 클라이언트에게 보내줌으로써 클라이언트는 요청을 하거나, 결과를 받아서 화면에 보여주는 역할만 하게 되었다.
3. 정적 웹 vs 동적 웹이란?
- 정적 웹이란 접속할 때마다 서버에서 가공해서 제공해주는 것이 아닌, 이미 저장된 HTML 문서를 띄워주는 웹사이트
ex) 어떤 회사의 소개 사이트, 자신의 포트폴리오, 댓글 기능이 없는 블로그 페이지
-> 이미 저장되어 있는 HTML을 보여주기만 하면 된다.
- 동적 웹이란 데이터베이스 조회 등 서버에서 요청된 정보를 처리 후 사용자의 요청마다 다른 결과를 보여주는 웹사이트
ex) SNS, 댓글 기능이 있는 블로그, 사용자들이 글을 올리는 게시판
-> 서버가 그때그때 가공, 처리해야 한다.
- 글 10개가 있는 게시판이 HTML로 만들어져 있는 경우, 다른 사람이 글을 하나 더 쓰면 글 11개가 있는 게시판을 HTML로 매번 만들어서 저장해놓을 수 없기에 동적 웹으로 구성된다.
4. Web Server가 앞에 있고 WAS가 뒤에 있다.
<방문자들을 웹서버가 응접실에서 접대하고 있고, 그 뒤에서 WAS 등 전문 요리사가 요리(가공)를 하고 있다>
- 보통 웹 브라우저로부터 요청이 들어오고, 브라우저는 HTML 문서를 먼저 받아온다.
- 이후 HTML 문서를 해석해서 웹 서버에게 다시 css나 이미지 등 필요한 리소스를 다시 요청한다.
- HTML 문서 + 받은 리소스를 렌더링 하여 보여준다.
-> 따라서 동적인 처리가 필요하지 않은 정적인 요청은 WAS까지 가지 않고 앞단에서 처리가 가능해진다.
-> 이후 동적인 처리가 포함된 요청일 경우, 앞 단에서 정적인 처리 + WAS로 동적인 처리를 요청 후, 받아서 처리한다.
5. 왜 was가 web server의 역할까지 할 수 있는데 따로 둘까?
<WAS 같은 전문 요리사도 직접 요리(동적 웹)해서 가져다줄 수 있고 진열돼있는 리소스(정적 웹)도 가져다줄 수 있다>
- 보통 WAS는 웹 서버 + 웹 컨테이너로 이루어져 있고, 웹 서버의 역할도 수행이 가능하다.
- 예전에는 WAS가 정적인 콘텐츠를 처리하는 성능이 좋지 않았다고 하지만, Tomcat 5.5 버전 이후부터는 그렇지도 않다.
1. 리버스 프록시 기능 - 보안 측면의 이유
- 서버의 관리자는 보안상 서버 내부의 구조를 숨길 필요가 있다.
(서버 내부적으로 파일들이 어느 폴더에 있는지, 서비스가 몇 번 포트로 돌고 있는지 등을 감추고 Apache나 Nginx와 같은 웹서버가 대신 앞단에서 처리한다)
2. 로드 밸런싱(하나의 WAS에 일이 과부하되는 걸 방지)
- 요청이 많이 들어올 때, 웹 서버가 분산해서 WAS에게 나눠서 처리한다.
- 보통 하나의 서비스를 돌릴 때, 여러 개의 WAS를 돌리는데 지속성을 위함이다.
새 기능이 추가되었을 경우 돌고 있는 서비스를 종료 후 업데이트해주고 다시 실행을 해줘야 한다. 이 짧은 순간 사용자가 접근할 경우 오류가 뜨게 되므로 이것들을 순서대로 차례차례 업데이트를 해서 하나의 WAS가 재부팅되는 동안 웹 서버는 나머지 WAS에게 요청을 분산해서 서비스를 끊김 없이 유지할 수 있다.
웹서버 - 보안, 운영에 집중 / 뒤에서 WAS는 동적인 요소를 만들어내는 데 집중한다.
출처 :
https://www.boostcourse.org/web326/joinLectures/28762
https://www.yalco.kr/09_static_dynamic_web/
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
'개발 공부 > 웹' 카테고리의 다른 글
Servlet이란? (0) | 2021.08.10 |
---|---|
웹의 동작과 이해(HTTP 프로토콜, URL) (0) | 2021.08.03 |
'node'은(는) 내부 또는 외부 명령 실행할 수 있는 프로그램 또는 배치 파일이 아닙니다. cmd창, vscode 터미널 오류 (0) | 2021.02.03 |
2. VSCode와 Node.js를 통한 환경 설정 (0) | 2021.02.03 |
1. 자바스크립트에 대해서 (0) | 2021.02.03 |