본 글은 UMC EWHA에서 활동하며 공부하는 워크북을 토대로 정리된 글입니다.
Web Server와 Web application Server가 따로 존재한다.
초기 인터넷에서는 Web application Server가 필요 없었다.사용자가 10명이라면 html 페이지를 10개 만들면 되었던..
미리 정해진(정적인) 콘텐츠를 준비해두고 요청이 오면 응답으로 주는 것이 아닌,요청이 올 때마다 해당 요청에 적절한 콘텐츠를 만들 수 있게(동적인) 필요한 것이
Web application Server
: 클라이언트의 요청에 대해 적절한 데이터를 만들어주는 서버
: 우리 주변의 Web application Server는 Node.js , SpringBoot가 있다.
Web Server 정적 콘텐츠 호스팅
NGINX가 요청에 대해 정적 콘텐츠(미리 정해진 html)를 준 것.
NGINX에서는 설정 파일이 있고, 웹 서버가 실행 될 때 이 설정 파일을 읽으면서 실행이 된다.
*ubuntu 기준, /etc/nginx/sites-available 디렉토리에서 default가 nginx의 설정 파일
설정 파일 중 server block
server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Note: You should disable gzip for SSL traffic.
# See: https://bugs.debian.org/773332
#
# Read up on ssl_ciphers to ensure a secure configuration.
# See: https://bugs.debian.org/765782
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html; <- 중요
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass PHP scripts to FastCGI server
#
#location ~ \.php$ {
# include snippets/fastcgi-php.conf;
#
# # With php-fpm (or other unix sockets):
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# # With php-cgi (or other tcp sockets):
# fastcgi_pass 127.0.0.1:9000;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
root는 정적 콘텐츠를 찾는 시작 디렉토리를 의미한다.
index는 기본적인 요청에 대해 index 뒤의 파일들을 찾아서 웹 상으로 보여준다는 것
root/var/www/html 을 통해 정적 콘텐츠를 찾아낼 시작 디렉토리를 설정하고
index를 통해 기본 요청이 온 경우 어떤 파일을 줄 지 설정하여,
/ 요청에 대해
/var/www/html/index.nginx-debian.thml 을 응답으로 준 것
location /y{
root /x
}
이 설정은 /y 로 요청이 오면 /x/y에서 파일을 찾아라 라는 뜻
Web Server VS Web Application Server(WAS)
WAS는 어떻게 Web Server와 함께 동작이 될까 ?
Node.js, Spring Boot 모두 WAS이며 동작을 시키면 WAS가 동작이 된다.
네이버가 WAS 하나만 뒀을 경우 www.naver.com:8080 으로 접속해야만 한다.
우리는 실제로 www.naver.com 이렇게만 접속-> DNS 를 통해 아이피 주소로 변환이 되기 때문 -> 따라서 <네이버 서버 컴퓨터 아이피주소:웹 서버의 프로세스가 부여 받은 포트번호> 이렇게 요청을 보내게 됨
Reverse Proxy
클라이언트와 서버 간의 통신을 중계하고 보안, 성능 개선 등의 목적을 위해 중간에 위치하는 서버프록시 서버 자체는 대리자로써 우선 클라이언트의 요청을 받고 본 서버로 보내준다.
서버로써 요청을 받기만 하지 않는다.서버 프로세스가 내부적으로 connect() 시스템 콜과 같은 요청을 보내는 시스템 콜을 통해다른 서버 프로세스에게 다시 요청을 보낼 수 있다.
포워드 프록시 vs 리버스 프록시포워드 프록시는 또 다른 외부 (다른 컴퓨터) 서버로 요청을 보내주고,리버스 프록시는 내부 (같은 컴퓨터)의 다른 서버로 요청을 보내준다.
Web Sever
- 웹 서버는 인터넷을 통해 웹 페이지, 이미지, 동영상 등의 콘텐츠를 사용자에게 제공하는 소프트웨어이다.
- 웹 서버는 클라이언트의 요청을 받아들이고, 요청된 콘텐츠를 전송하여 사용자가 웹 페이지를 볼 수 있도록 한다.
- 웹 서버의 주요 기능
- HTTP 요청 처리 : 클라이언트로부터 HTTP 요청을 받아들인다. 이 요청은 주로 웹 브라우저를 통해 이루어지며, 클라이언트가 원하는 웹 페이지의 URL과 함께 전달된다.
- 정적 콘텐츠 제공 : 웹 서버는 정적인 콘텐츠를 제공한다. 이는 주로 html 파일, 이미지, 스타일 시트, 자바스크립트 파일 등을 포함한다. 이러한 콘텐츠는 웹 서버의 파일 시스템에 저장되어 있다.
- 동적 콘텐츠 생성 : 일부 웹 서버는 동적인 콘텐츠를 생성할 수도 있다. 이를 위해 웹 서버는 요청된 정보를 처리하여 새로운 html 페이지를 생성하거나, 데이터베이스에서 정보를 추출하여 사용자에게 동적으로 제공한다.
- 세션 관리 : 웹 서버는 클라이언트와의 상호 작용을 기록하고 관리하는 데 사용되는 세션 관리를 제공한다. 사용자 인증, 쿠키 생성 및 관리 등을 수행할 수 있다.
- 보안 기능 : 웹 서버는 보안 기능을 제공하여 악의적인 요청으로부터 웹 애플리케이션을 보호한다. 이를 통해 DDoS 공격 방어, SSL/TLS 암호화, 웹 방화벽 등을 구현할 수 있다.
- 로깅 및 모니터링 : 웹 서버는 클라이언트 요청과 서버의 응답을 기록하여 로그 파일에 저장한다. 웹 사이트의 성능을 모니터링하고 문제를 해결할 수 있다.
- Apache, Nginx, Microsoft llS 등이 있다. 웹 서버들은 개별적으로 또는 프록시, 로드 밸런싱 등과 함께 사용되어 대규모 웹 애플리케이션을 운영하는 데 활용된다.
Web Application Server
- 동적인 웹 애플리케이션을 실행하기 위한 소프트웨어이다.
- 클라이언트의 요청을 받아들이고, 해당 요청을 처리하여 동적으로 생성된 콘텐츠를 클라이언트에게 제공한다.
- 정적인 콘텐츠뿐만 아니라 데이터베이스나 다른 외부 시스템과의 상호작용을 통해 동적인 콘텐츠를 생성하고 전달한다.
- 주요 기능
- 웹 애플리케이션 실행 환경 제공 : 일반적으로 서블릿 컨테이너 CGI(Common Gateway Interface) 인터페이스, 또는 특정 프로그래밍 언어의 실행 환경을 포함한다.
- 동적 콘텐츠 생성 : 웹 애플리케이션 서버는 웹 애플리케이션의 로직을 실행하고, 데이터베이스나 외부 API와의 상호작용을 통해 필요한 데이터를 처리한다.
- 스레드 관리 및 자원 할당 : 다중 사용자 요청을 동시에 처리하기 위해 스레드 풀이나 프로세스 풀 등의 매커니즘을 사용하여 스레드 관리를 수행한다. 서버 자원을 효율적으로 할당하여 성능을 최적화한다.
- 세션 관리 : 클라이언트와의 세션을 관리하고 상태를 유지한다. 이를 통해 사용자 인증, 상태 관리, 쇼핑 카트 등의 기능을 구현할 수 있다.
- 보안 기능 : 보안을 강화하기 위한 다양한 기능을 제공한다. 인증, 권한 부여, 입력 유효성 검사, 암호화 등을 포함할 수 있다.
- 로깅 및 모니터링 : 클라이언트 요청과 서버의 응답을 기록하여 로그 파일에 저장하고, 서버의 상태를 모니터링한다.
- Apache Tomcat, Jetty, IBM WebSphere, Red Hat JBoss 등이 있고, 이러한 서버들은 Java EE와 같은 특정 플랫폼의 웹 어플리케이션을 실행하는 데 사용된다.
Reverse Proxy
- 클라이언트 요청을 받아들여 이를 서버로 전달하고, 서버로부터 받은 응답을 클라이언트에게 반환하는 중간 서버
- 클라이언트와 서버 간의 통신을 중재하며 여러 가지 목적으로 사용된다.
- 주요 기능
- 로드 밸런싱 : 여러 대의 백엔드 서버로 들어오는 요청을 분산하여 부하를 균형있게 분산시킨다. 단일 서버에 발생하는 과부하를 방지하고 서비스의 가용성과 성능을 향상시킨다.
- 보안 : 클라이언트와 서버 사이에 위치하여 보안을 강화할 수 있다. 리버스 프록시는 클라이언트에게 직접적인 서버 정보를 노출하지 않고 서버의 익명화를 제공할 수 있으며, 보안 정책을 적용하여 악의적은 트래픽을 필터링하거나 방화벽 역할을 수행할 수 있다.
- 캐싱 : 서버로부터 받은 응답을 캐시하여 동일한 요청이 반복될 때 서버에게 다시 요청하는 대신 캐시된 응답을 바로 제공할 수 있다. 이를 통해 네트워크 대역폭을 절약하고 응답 시간을 단축하여 전반적인 성능을 향상시킬 수 있다.
- SSL 오프로딩 : 클라이언트와 서버간의 SSL 연결을 처리하여 서버의 부하를 줄이고 SSL 인증서를 중앙 집중식으로 관리 할 수 있다.
- 애플리케이션 관리 및 모니터링 : 리버스 프록시는 애플리케이션의 트래픽을 모니터링하고 관리할 수 있는 기능을 제공한다. 트래픽 패턴을 분석하고 성능 문제를 식별하여 대응할 수 있다.
- Nginx, Apache HTTP Server의 모듈인 mod_proxy, HAProxy, Envoy 등이 있다. 웹 서버와 함께 사용되어 다양한 웹 애플리케이션 아키텍처를 구현하는 데 활용된다.
'Node.js' 카테고리의 다른 글
API URL의 설계 & 프로젝트 세팅 (0) | 2024.05.15 |
---|---|
실전 SQL - 어떤 Query를 작성해야 할까? (1) | 2024.05.08 |
DATABASE 설계 & AWS RDS 설정 (0) | 2024.05.01 |
Server / 보안그룹, EC2 생성 & 탄력적 IP 설정하기 (0) | 2024.04.11 |
Server / VPC를 이용한 EC2 구축 실습 (0) | 2024.04.11 |