스티키 세션, CORS

황희윤·2021년 11월 28일
0

스티키 세션

사용하는 이유

  • 수평적 확장은 서버의 하드웨어를 업그레이드 하지 않고 더 많은 서버를 추가해 확장하는 형태다.

  • 서버가 많아서 서버 장애가 발생해도 타격이 크지 않다.

  • 사용자 수에 맞춰 서버를 늘리거나 줄이기도 쉬워서 매우 효율적이다.

  • 수평적 확장을 사용하려면 로드밸런스 서비스가 필요하다.

  • 로드밸런스 서비스는 사용자가 웹 페이지에 접속했을 때 부하가 가장 적은 웹 서버로 연결해주고 동작하지 않는 서버를 발견하면 서버 목록에서 자동으로 제외된다.

  • 하지만 사용자가 웹 페이지를 요청할 때마다 현재 접속된 서버가 바뀌게 되면 쿠키나 세션 정보가 사라질 수 있다. 왜냐하면 이전 요청에 대한 쿠키를 저장한 서버와 새로 접속한 서버가 다르기 때문이다.

  • 쇼핑몰을 이용중인 사용자가 로드밸런스 서비스때문에 다른 서버로 요청이 넘어가면, 사용자는 갑자기 로그아웃 되거나 장바구니가 초기화 되는 상황이 나올 수 있다. 그렇다고 웹 서버 전체가 쓰는 데이터를 동기화하면 과부하가 걸릴 수 있다.

스티키 세션

  • 스티키 세션(sticky session)은 하나의 브라우저가 하나의 웹 서버에만 연결하게 한다.

  • 스티키 세션의 로드밸런스는 새 요청, 즉 쿠키가 없는 요청이 들어올 때 쿠키를 등록하고 웹 서버를 지정한다. 그래서 이후 요청이 올 때 세션 값을 기준으로 다시 연결할 웹 서버를 구분한다.

  • 스티키 세션은 세션 유지 기간도 함께 설정된다. 스티키 세션의 유지 기간은 쿠키 만료 시간보다 길게 설정해서, 웹 서버에 쿠키가 남아 있음에도 스티키 세션 기간이 끝나 다른 웹 서버로 넘어가는 일을 방지해야 한다.



CORS

다른 출처(Origin) 간에 자원을 공유하는 것을 설정하기 위한 옵션

  • 주로 fetch로 요청을 보내게 될 사이트와 현재 접속 사이트가 다르다면 요청이 실패하면서 CORS 에러가 뜬다.

  • 클라이언트, 서버간의 도메인이 다르고 외부 API를 사용해서 자원을 요청하는 경우도 에러가 뜬다.


사용하는 이유

  • 교차 출처 리소스 공유(cross-origin resourse sharing)은 HTTP 서버의 웹 페이지나 파일들을 특정 호스트로 접속한 웹 브라우저만 사용할 수 있게 하는 것이다.

  • 네이버와 같이 하나의 웹이 네이버 블로그나 카페처럼 여러 개의 웹 페이지를 가지고 있을 때 각각 section.blog.naver.com, section.cafe.naver.com으로 도메인을 나눈다.

  • 하지만 이런 방식은 동일 출처 정책으로 인해 네이버 블로그는 자기 자신을 제외한 다른 서브 도메인인 네이버 카페로 HTTP 요청을 할 수 없다.

  • 동일 출처 정책은 사전에 지정하지 않은 다른 곳에서 웹 페이지, API와 같은 리소스 요청을 차단하는 방어 장치다.

  • 해커들은 해커 본인들이 만든 웹사이트에서 다른 웹사이트의 유저 정보에 접근을 막기 위해 만들어졌다.

  • 동일 출처 정책은 다른 웹 사이트에서 이미지, 동영상, 파일 같은 리소스를 무단으로 가져가는 상황을 막는다. 하지만 이는 서로 다른 서브 도메인간 리소스 공유를 어렵게 한다.

CORS

  • CORS 단순 요청은 요청 정보가 간단해 별다른 보안 검증이 필요하지 않은 교차 출처 리소스 공유를 말한다. 그래서 네이버 블로그와 네이버 카페가 장애물 없이 리소스 요청을 할 수 있다.

  • GET, HEAD, POST 메서드를 사용하면 단순 요청으로 리소스를 요청할 수 있다.

CORS 에러 해결 방법

1. CORS 모듈 사용

const cors = require("cors");
const app = express();

app.use(cors());

2. 오류가 나는 특정 도메인 접근 허용

출처 : 학교에서 배우는 17가지 실무 개발 기술

profile
HeeYun's programming study

0개의 댓글