이미지 출처 : 심재철 tistory_웹 어플리케이션 구조
nginx 공부하다보니 웹 서버 구조를 잘 모르겠어서 다시 정리하기..😨
클라이언트란 서비스를 이용하기 위해
네트워크
를 통해 요청을 보내는 주체를 말하며, 서버의 서비스를 받아 사용하는 장치, 프로그램을 의미한다.
클라이언트는 크게 장치 또는 프로그램이 될 수 있는데, 클라이언트 장치
는 최종 사용자가 웹에 접속하는데 사용하는 시스템으로 데스크톱, 노트북, 스마트폰, 태블릿
등을 예로 들 수 있다.
클라이언트 프로그램
은 사용자가 웹을 통해 요청할 수 있게 해주는 프로그램으로 웹 브라우저
를 예로 들 수 있다.
예를 들어, 인터넷에서 웹 페이지를 보기 위해 웹 브라우저를 실행한다면 웹 브라우저가 클라이언트가 된다.
웹 서버란 클라이언트의 요청에 따라 HTML, CSS, JS, 이미지 파일과 같은 정적 파일을 응답하여 제공하는 소프트웨어를 말한다.
웹 서버는 일반적으로 클라이언트의 요청에 대해 응답을 해 주는 시스템으로, 우리가 일반적으로 웹 브라우저를 통해 정보를 보는 행위는 웹 서버로부터 정보를 받아보는 것 이라고 생각하면 된다.
예시로, 웹 브라우저에 www.google.co.kr이라는 URL을 입력하면, 해당 URL에 해당하는 웹 서버로 요청
이 갈 것이고 해당 웹 서버는 요청을 확인한 뒤 응답을 보내준다.
추가로 웹 서버는 HTTP 프로토콜
을 사용하여 클라이언트
와 통신한다. 대표적인 웹 서버로는 Nginx, Apache 등이 있고, 그 외에도 Microsoft IIS, Lighttpd 등 다양한 웹 서버가 존재한다.
WAS는 클라이언트 요청에 대한 동적인 처리를 담당하는 영역으로, 웹 서버와 달리 애플리케이션 로직을 실행 할 수 있도록 구성되어있다.
예를들어 회원가입이나 로그인 등의 로직으로 처리하는 영역이 WAS 이며, 데이터베이스 연동/트랜잭션 관리/보안/로깅 등의 기능도 제공한다.
이를 통해 웹 애플리케이션의 안정성과 성능을 향상 될 수 있다. 대표적인 WAS로는 Tomcat, JBoss, WebLogic, WebSphere 등이 있다.
웹 서버와 WAS는 역할의 차이가 있지만 현업에서는 웹 서버
로 통틀어 얘기한다고 한다. 참고로 Node.js
는 웹서버 또는 WAS로도 사용 가능하다.
DB는 조직이나 개인이 필요한 정보를 체계적으로 저장, 관리하고 검색 할 수 있는 시스템이다.
DB는 일반적으로 다수의 사용자가 공유 할 수 있으며, 대규모의 데이터 저장과 검색을 처리 할 수 있다.
가장 많이 사용되는 DB유형으로는 관계형(RDBS), NoSQL 등이 있다.
관계형은 데이터를 테이블로 구성하고, 테이블 간 관계를 정의하여 데이터를 저장하는 방식이며 SQL 같은 쿼리 언어를 사용하여 데이터를 관리한다.
NOSQL은 관계형 데이터베이스의 한계를 극복하기 위해 만들어진 데이터베이스로 자유로운 스키마 구조로 데이터를 저장하며, 분산 처리 및 고성능 처리를 위해 설계 되었다.
보통 웹 서비스는
클라이언트 -> 웹 서버 -> WAS -> DB
순으로 요청
되며, 그 반대의 순서로 응답
이 돌아온다.
WAS의 부담을 줄이기 위해
사용된다. WAS는 동적 작업을 처리하는 것 만으로도 작업량이 많기 때문에, 정적인 파일을 전달하는 역할을 웹 서버
에게 위임함으로써 WAS의 작업 부담을 줄인다.
보안 기능을 제공하기 위해
사용된다. 웹 서버는 보안 기능을 제공해 웹 페이지에 대한 접근을 제어 할 수 있다. 예를들어 웹 서버는 SSL/TLS 프로토콜을 사용해 데이터를 암호화
하고, 엑세스 제어, 웹 방화벽
등의 보안 기능을 제공해 웹 사이트를 보호 할 수 있다.
높은 성능을 제공하기 위해
사용된다. 웹 서버는 대부분 비동기 처리 방식
을 사용해 높은 성능을 제공한다. 예를 들어 Nginx, Apache등의 웹 서버는 이벤트 기반, 멀티 프로세싱, 스레드 풀 등의 기술을 사용해 수천대의 클라이언트 요청을 동시에 처리 할 수 있다.