💡 학습 목표
1. web server와 web application server의 차이를 이해한다.
2. Reverse Proxy를 이해하고 적용한다.
지금의 웹은 어떻게 작동할까?
미리 정해진 (정적인) 콘텐츠를 준비해두고 요청이 오면 응답으로 주는 것이 아닌, 요청이 올 때마다 해당 요청에 적절한 콘텐츠를 만들 수 있다면 (동적인) 것이 지금의 웹이다.
Web Server 정적 콘텐츠 호스팅
Port 번호를 통해 IP 주소를 통해 식별된 컴퓨터의 프로세스를 찾아 데이터를 송신한다고 했다
그래서 앞서 보안그룹에서 TCP 80번 포트를 열어준 이유가 EC2의 IP주소를 통해 EC2를 식별 후
80번 포트로 열린 (=Web Server인 NGINX)로 요청을 보내기 위함이다.
웹 브라우저에서 IP주소를 입력하면 자동으로 80번 포트가 붙어서 nginx에 요청이 간 후 응답이 온 것이다.
웹 브라우저는 43.201.245.2 -> 43.201.245.2:80으로 요청을 보낸다
어떻게 이런 상황일 때는 A를 주고 이런 상황일 때는 B를 주는 것을 판단할까?
NGINX에서의 정적콘텐츠 호스팅
nginx에서는 설정 파일이 있고, 웹 서버가 실행 될 때 이 설정 파일을 읽으면서 실행된다.
ubuntu 기준, /etc/nginx/sites-available 디렉토리에서 default가 nginx의 설정파일이다.
그리고 이 파일을 살펴보면 아래와 같다.
server {
listen 80 default_server;
listen [::]:80 default_server;
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;
}
}
server block을 봐보자
root는 정적 콘텐츠를 찾는 시작 디렉토리를 의미한다
index는 기본적인 요청에 대해 index 뒤의 파일들을 찾아서 웹 상으로 보여준다는 것이다.
즉, root /var/www/html을 통해 정적 콘텐츠를 찾아낼 시작 디렉토리를 설정하고
index를 통해 기본 요청이 온 경우 어떤 파일을 줄지 설정한다
/요청에 대해 /var/www/html/index.nginx-debin.thml을 을답으로 준 것을 확인할 수 있다.
nginx 설정파일에서의 location 블록
그렇다면 /etc/nginx/sites-available/default에서 location 블록에 직접 코드를 추가해볼 것이다.
location /temp{
root /var/www;
index temp.html
try_files $uri $uri/ =404;
}
그리고 나서 /var/www에 temp.html 문서를 만들어주고 /temp로 접속을 해보면?
이렇게 뜬다 .
nginx가 이렇게 정적 파일을 호스팅 하는 것이다.
Web Server VS Web Application Server(WAS)
위에서는 웹 서버가 어떻게 동작하고 왜 정적인(미리 준비 된) 콘텐츠를 응답 주는지 살펴보았다
그렇다면 WAS는 어떻게 Web Server와 함께 동작이 될까?
우리가 사용하는 Node.js, Spring Boot 모두 WAS이다.
스프링을 실행시키면 어떻게 되냐면 Web server가 없는 모습이 된다
우리가 원하는 모습은 아래와 같은데요,?!
웹 서버는 클라이언트(예: 웹 브라우저)의 요청을 받아 정적 콘텐츠(이미지, HTML 파일 등)를 제공하는 서버이다. 웹 애플리케이션 서버(WAS)는 동적 콘텐츠를 처리하기 위해 데이터베이스 조회, 로직 처리 등 복잡한 작업을 수행한다. 대부분의 웹 사이트는 웹 서버 앞단에서 요청을 받고, 필요에 따라 요청을 WAS로 전달하여 처리한 후 그 결과를 클라이언트에게 다시 전송하는 것이다.
예를 들어, 사용자가 웹 브라우저를 통해 www.naver.com 에 접속하면 DNS 조회를 통해 해당 도메인의 IP 주소를 알아낸 후, 이 IP 주소에 대한 웹 서버 표준 포트 (80 또는 443)로 요청을 보낸다.
사실 웹 서버로 요청을 보내는건데 왜 응답은 WAS에서 주는걸까?
그 로직을 알기위해 reverse proxy를 알아야한다!
간단요약!
만약 네이버에서 특정 포트(예: 8080)에서만 WAS를 운영한다면, 사용자는 웹 브라우저에 "www.naver.com:8080"을 직접 입력하지 않고도 접근할 수 있다. 이는 리버스 프록시가 외부에서 오는 요청을 받아 내부 네트워크의 특정 WAS로 전달하기 때문이다. 사용자는 단순히 "www.naver.com"을 통해 접속하며, 리버스 프록시가 내부적으로 올바른 포트로 요청을 라우팅한다.
Reverse Proxy
리버스 프록시는 컴퓨터 네트워크에서 사용되는 개념으로, 클라이언트와 서버 간의 통신을 중계하고 보안,
성능 개선 등의 목적을 위해 중간에 위치하는 서버를 말한다.
우선 프록시 서버 자체는 대리자로써 우선 클라이언트의 요청을 받고 본 서버로 보내준다
여기서 알아야 할 건, 한번 서버는 영원한 서버로써 요청을 받기만 하는 건 아니다. 서버 프로세스는 단순히 외부 요청을 수신하는 것에 그치지 않고, 필요에 따라 다른 서버 프로세스에게도 요청을 보낼 수 있다. 이 때 사용되는 주요 시스템 콜 중 하나는 connect()이다. connect() 시스템 콜은 서버가 클라이언트 역할을 하여 다른 서버에 연결을시도할 때 사용된다.
예를 들어, 서버 A가 데이터베이스 서버 B에 데이터를 요청하거나, API 서버 C로부터 정보를 가져올 때 connect()를 사용하여 해당 서버들과의 연결을 설정한다.
Forward Proxy
포워드 프록시는 클라이언트와 인터넷 사이에 연결하는 프록시 서버이다. 주요 목적은 클라이언트 요청을 대신하여 외부 서버에 전달하고 그 결과를 다시 클라이언트에게 반환하는 것이다.
간단히, 포워드 프록시는 또 다른 외부(다른 컴퓨터) 서버로 요청을 보내주고, 리버스 포록시는 내부(같은 컴퓨터)의 다른 서버로 요청을 보내주는 것이다.
따라서 아래와 같이 작동하는 것이다.
그렇다면 이번에도 nginx에서 리버스 프록시를 설정해보자
위의 설정을 보면 /요청에 대해 우선적으로 프록시로써 요청을 건네주도록 추가했다.
이때 localhost:3000, 즉 내부 컴퓨터의 3000번 포트의 프로세스로 요청을 보내도록 되어있기에 이는 리버스 프록시로 볼 수 있다.
간단 요약 (리버스 프록시 사용)
클라이언트는 naver에 접속요청을 보낸다 DNS 서버는 naver의 요청을 IP주소로 변환한다 요청이 리버스 프록시로 이동하며, 리버스 프록시는 요청을 8080포트의 WAS로 라우팅 한다 WAS는 요청을 처리한 후 응답을 리버스 프록시로 보내고, 리버스 프록시는 그 응답을 클라이언트에게 전송한다.
학습 후기
Web Server와 Web application Server가 따로 존재 한다는 걸 대충 nginx를 써보며 알았지만...
자세히 어떠한 차이가 있고 왜 쓰는지 알아보는 시간이 되었다😋
🔥미션
1. VPC 만들어 퍼블릭 서브넷을 구성하여 EC2를 해당 서브넷에 구성
2. /mission3에 접속 시 자신의 닉네임이 포함 된 HTML 문서가 응답으로 오게 구성
3. 오류,,
'IT 동아리 > UMC' 카테고리의 다른 글
[Chapter 7] JPA를 통한 엔티티 설계, 매핑 & 프로젝트 파일 구조 이해 (0) | 2024.05.24 |
---|---|
[Chapter 6] API URL의 설계, REST API, 프로젝트 세팅 (0) | 2024.05.17 |
[Chapter 5] 실전 SQL - Query를 작성하는 방법 (1) | 2024.05.10 |
[Chapter 2] AWS (VPC & Internet & Gateway & EC2) (2) | 2024.04.10 |
[Chapter 1] 서버란 무엇인가 (소켓 & 멀티 프로세스) (3) | 2024.04.07 |