Server

클라이언트와 서버는 고정적인 개념이 아닌, 역할의 개념이며 상황에 따라 바뀔 수 있다.
네이버는 사용자한테는 서버
네이버는 기상청한테는 클라이언트
Web Server
웹 서버는 웹 리소스를 요청받고 응답하는 역할을 합니다.
이때 응답과 요청은 HTTP를 통해 이루어집니다.
*식당에서 음식을 주문할 때, 정해진 방법으로 주문을 해야 함

네트워크 통신에서도 약속된 통신으로 소통하게 된다.
웹 서버와 클라이언트는 HTTP 프로토콜로 통신하게 된다.
웹 서버는 모든 콘텐츠를 응답하진 않고, 정적 콘텐츠(HTML, JS, CSS)만 응답함.
= 정적 콘텐츠를 서버 내부에 저장하고, 파일 경로를 요청하면 해당 경로에 있는 파일을 반환

어떤 사람이 보든 똑같은 위치에 똑같은 기사를 본다.
대표적인 웹서버: Nginx, APACHE

해당 내용은 대충 이해했을 때 다시 까먹기 때문에 예시를 보아야 가장 이해가 잘 된다.
필자도 1~2년 백엔드 개발을 했지만, 이해하지 못했다.
웹 서버로 구축한 뉴스 플랫폼
- 별도의 로직과 데이터베이스 필요 없음.
- 뉴스 디렉토리를 단순히 웹 서버로 만들어서 특정 디렉토리에 저장하고 해당 파일을 URL 요청에 따라서 클라이언트에게 전달한다.

단점
- 원하는 뉴스를 직접 지면을 뒤져야 함, 모든 기사가 HTML업데이트 어려움
확장성 있는 플랫폼을 만들기 위한 전략
사용자별 개인화 경험으로 관심사에 맞는 뉴스 제공
- 원하는 뉴스 검색 기능
- 실시간 뉴스 업데이트
- 콘텐츠 유효기관 관리
동적 컨텐츠: 서버에 저장된 HTML 파일 그대로 제공이 아닌, 동적으로 만들어지는 콘텐츠
사용자의 상호작용이나 동적으로 생성되는 HTML 파일
하지만 웹서버는 동적콘텐츠가 아니라 정적콘텐츠만 응답할 수 있음

WAS(Web Application Server)
- 사용자에 입력에 기반한 결과 생성
- 사용자 조회, 인증 등 비즈니스 로직, 따라서 DB 사용

WAS의 요청 처리 과정
웹서버와 동일하게 HTTP 기반으로 동작함.
요청을 처리하고 응답해 줄 내용을 생성해야 함.(이 과정을 서블릿(Servlet) 이 수행함.)

*Servlet: Java 웹 애플리케이션 개발환경에서 클라이언트 요청을 받아 처리하고 HTML, JSON과 같은 형식으로 데이터를 구성하고 동적페이지를 만들어서 응답하는 역할을 수행함.
그런데 우리가 왜 이렇게 헷갈려할까요?
사실은, 대부분의 WAS는 (웹 서버 + 서블릿 컨테이너) 결합한 형태로 내부의 웹서버를 포함하기 때문에 웹서버에 역할도 수행할 수 있음!! 🚨🚨
ex) Tomcat
Spring Boot: 웹서버와 서블릿 컨테이너를 모두 포함한 톰캣이 내장되어 있어서 톰캣+DB만으로 시스템 구성이 가능하다.
하지만 서비스 규모가 커진다면,
아파치, 엔진엑스와 같이 웹서버를 별도로 두는 게 유리하다.
웹서버를 따로 두는 게 왜 유리할까요?
Web Server가 필요한 이유
사용자의 이탈률을 감소시키기 위한 전략으로, 추천 기사 영역도 제공

WAS가 (정적 콘텐츠, 동적 콘텐츠)로 부담 증가는, 성능 문제 사용자 경험 문제 생김

1) 로딩 지연으로 느려짐
2) 서버 장애 시, 오류페이지도 누출 못하여 화면 노출 불가
따라서 목적에 따른 역할 분리 추천

장점 1: WAS 문제 생겨도 웹서버에서 에러페이지를 노출 가능

장점 2: 서버증설 시에도, 리소스 많이 소모되는 쪽에만 서버 증설하면 됨.

장점 3: 웹 서버가 지속적인 헬스체크로 살아있는지 판단도 가능(로드밸런싱 기능)

장점 4: 웹서버의 프록시 캐싱 기능(성능향상), WAS의 IP주소 가려줌(+ 웹서버 추가 설정을 통해서 WAS의 민감정보도 제거 가능), 클라이언트 URL을 다른 URL로 변경도 가능
질문타임
Q: 그러면 AWS 서비스의 S3는 뭐라고 설명하면 될까요?
A: 웹 서버의 일부 역할만 수행합니다.
S3는 "웹 서버"에서 정적 콘텐츠만 서빙하는 역할을 하는 스토리지입니다.
하지만 웹 서버의 추가 역할인
- 캐싱
- 로드 밸런싱
- Health Check
- 리버스 프록시
를 하지 못합니다.
Q: 그러면 우리는 클라이언트 사이드 랜더링(CSR)으로 개발하는데 리액트와 같은 프레임워크는 어디 부분에 해당해요?
A: "React"는 프론트엔드 애플리케이션입니다.
브라우저에 동적으로 HTML을 그려주는 프레임워크입니다.
*자바스크립트는 웹브라우저에서 실행 가능하다, 웹 브라우저에는 ECMAScript를 준수하여 구현된 자바스크립트 엔진이 내장되어 있기 때문이다.
ECMAScript
자바스크립트 표준 명세인 ECMA-262를 말한다.
타입, 값, 객체와 프로퍼티, 빌트인 객체 등 자바스크립트 표준 문법이다.
결론적으로 리액트는 Node.js에서 빌드되어 정적 파일(HTML, CSS, JS)가 되고, 웹 서버에 올라간다.
그리고 웹 서버가 브라우저와 통신을 하는 것이다.
정리
리액트는 Node.js로 빌드되어 정적 파일로 웹 서버에 올라간다. ‼️