수평적 확장은 서버의 하드웨어를 업그레이드 하지 않고 더 많은 서버를 추가해 확장하는 형태다.
서버가 많아서 서버 장애가 발생해도 타격이 크지 않다.
사용자 수에 맞춰 서버를 늘리거나 줄이기도 쉬워서 매우 효율적이다.
수평적 확장을 사용하려면 로드밸런스 서비스가 필요하다.
로드밸런스 서비스는 사용자가 웹 페이지에 접속했을 때 부하가 가장 적은 웹 서버로 연결해주고 동작하지 않는 서버를 발견하면 서버 목록에서 자동으로 제외된다.
하지만 사용자가 웹 페이지를 요청할 때마다 현재 접속된 서버가 바뀌게 되면 쿠키나 세션 정보가 사라질 수 있다. 왜냐하면 이전 요청에 대한 쿠키를 저장한 서버와 새로 접속한 서버가 다르기 때문이다.
쇼핑몰을 이용중인 사용자가 로드밸런스 서비스때문에 다른 서버로 요청이 넘어가면, 사용자는 갑자기 로그아웃 되거나 장바구니가 초기화 되는 상황이 나올 수 있다. 그렇다고 웹 서버 전체가 쓰는 데이터를 동기화하면 과부하가 걸릴 수 있다.
스티키 세션(sticky session)은 하나의 브라우저가 하나의 웹 서버에만 연결하게 한다.
스티키 세션의 로드밸런스는 새 요청, 즉 쿠키가 없는 요청이 들어올 때 쿠키를 등록하고 웹 서버를 지정한다. 그래서 이후 요청이 올 때 세션 값을 기준으로 다시 연결할 웹 서버를 구분한다.
스티키 세션은 세션 유지 기간도 함께 설정된다. 스티키 세션의 유지 기간은 쿠키 만료 시간보다 길게 설정해서, 웹 서버에 쿠키가 남아 있음에도 스티키 세션 기간이 끝나 다른 웹 서버로 넘어가는 일을 방지해야 한다.
다른 출처(Origin) 간에 자원을 공유하는 것을 설정하기 위한 옵션
주로 fetch로 요청을 보내게 될 사이트와 현재 접속 사이트가 다르다면 요청이 실패하면서 CORS 에러가 뜬다.
클라이언트, 서버간의 도메인이 다르고 외부 API를 사용해서 자원을 요청하는 경우도 에러가 뜬다.
교차 출처 리소스 공유(cross-origin resourse sharing)은 HTTP 서버의 웹 페이지나 파일들을 특정 호스트로 접속한 웹 브라우저만 사용할 수 있게 하는 것이다.
네이버와 같이 하나의 웹이 네이버 블로그나 카페처럼 여러 개의 웹 페이지를 가지고 있을 때 각각 section.blog.naver.com, section.cafe.naver.com으로 도메인을 나눈다.
하지만 이런 방식은 동일 출처 정책으로 인해 네이버 블로그는 자기 자신을 제외한 다른 서브 도메인인 네이버 카페로 HTTP 요청을 할 수 없다.
동일 출처 정책은 사전에 지정하지 않은 다른 곳에서 웹 페이지, API와 같은 리소스 요청을 차단하는 방어 장치다.
해커들은 해커 본인들이 만든 웹사이트에서 다른 웹사이트의 유저 정보에 접근을 막기 위해 만들어졌다.
동일 출처 정책은 다른 웹 사이트에서 이미지, 동영상, 파일 같은 리소스를 무단으로 가져가는 상황을 막는다. 하지만 이는 서로 다른 서브 도메인간 리소스 공유를 어렵게 한다.
CORS 단순 요청은 요청 정보가 간단해 별다른 보안 검증이 필요하지 않은 교차 출처 리소스 공유를 말한다. 그래서 네이버 블로그와 네이버 카페가 장애물 없이 리소스 요청을 할 수 있다.
GET, HEAD, POST 메서드를 사용하면 단순 요청으로 리소스를 요청할 수 있다.
const cors = require("cors");
const app = express();
app.use(cors());
출처 : 학교에서 배우는 17가지 실무 개발 기술