[Web] 인증과 인가 - 분산 서버에서의 세션 인증
2023. 3. 2. 10:08
반응형
쿠키 & 세션 방식의 한계
- 웹 Application 서버측에 저장한다는 것은 서버 메모리에 인증 정보를 저장한다는 것.
- 세션은 사용자의 인증 정보를 서버에 저장한다. 서버의 과부하 유발.
- 특히 동시 사용자가 많아질수록 서버의 메모리를 비례하여 사용하게 된다.
그렇다면 쿠키와 세션 사용 방식을 보완해보도록 하자.
1. 인증 서버의 메모리 증설 (Scale Up)
- 가장 단순하고도 확실한 방법이다. 메모리가 부족하면 메모리를 늘리면 된다.
- 물리적으로 서버 컴퓨터의 RAM을 업그레이드 시켜서 해결
- 그렇지만 물리적으로 성능을 높이는 데에는 한계가 있고, 사용자가 더 많아질수록 한계가 명확하다.
- 이러한 방법을 Scale-Up, 수직 스케일 방식이라고 부른다.
2. 인증 서버의 수 증가 (Scale Out)
- 인증 서버를 분산시켜 여러대를 사용하는 방식이다. 즉 분산 서버를 운영하는 것이다.
- 하나의 서버를 노드(Node)라고 부르며, 어떤 노드에서 장애가 발생하더라도 다른 노드에서 서비스 제공이 가능하다.
- 사용자의 수에 따라서 서버를 증설하거나 감소시키는 확장에 유연하다.
- 이러한 방법을 Scale-Out, 수평 스케일 방식이라고 부른다.
2-1. 어디 서버를 이용해야 하는가? : 로드 밸런싱
- 클라이언트들이 서버가 여러대일 때 어떤 서버에 요청해야 하는지를 결정하는 방법이 필요하다.
- 분산 서버 환경에서는 요청을 분산시켜주는 중개 매체인 로드 밸런서를 이용한 로드 밸런싱이 이루어진다.
- 로드 밸런서는 클라이언트와 서버 사이에 위치하며, 각각의 서버 상태에 맞추어 부하를 분산시키고 트래픽을 관리한다.
- 클라이언트는 로드 밸런서가 정해준 서버로 요청하게 된다.
2-2. 분산 서버 환경에서의 인증 정보의 공유
- 위의 그림처럼 분산 서버 환경에서의 세션이 공유되지 않는 Stateful한 상태가 발생한다는 문제점이 있다.
- 위의 그림과 같이 1번 서버에서 인증을 받았을 때, 1번 서버에서는 인가에 성공하였으나, 2번 서버에서는 인증 정보 세션이 존재하지 않아 인가에 실패하였다.
- 그래서 나온 아이디어가 서버 각각의 세션에서 관리하던 인증 정보를 데이터베이스에서 관리해보자 이다.
- 서버는 이제 인증여부를 API 서버가 아닌 데이터베이스에 저장해 둔다.
- 위의 그림과 같이 다른 서버에서도 데이터베이스를 공유하므로 인증 정보를 공유할 수 있다.
- 그렇지만 서버의 부하는 막을 수 있지만 데이터베이스의 부하를 고려해야 한다.
2-3. 데이터베이스 분산
- 이번에는 데이터베이스 서버도 여러대로 늘렸다.
- 그런데 해당 클라이언트 인증 정보가 어느 데이터베이스에 담겨있는지 알 수가 없다.
- 이를 위해서 데이터베이스 샤딩이라는 개념을 도입한다.
- 클라이언트 ID별로 여러개의 데이터베이스에 분할해서 인증 정보를 저장하는 것이다.
- 위 그림에서는 ID 1~는 1번 데이터베이스, 100~은 3번 DB, 200~은 2번 DB 이런 방식으로 데이터베이스들이 분산되었다.
- 클라이언트 요청에 담긴 유저ID에 따라서 서버는 어떤 데이터베이스에 인증정보를 저장하고 조회할 지를 판단하면 된다.
- 140번 유저는 그림처럼 항상 두번째 데이터베이스에서 인증 정보를 사용하게 된다.
2-4. 메모리 기반 데이터베이스 사용
데이터베이스를 분산시켜 과부화를 줄였지만 관계형 데이터베이스 사용에는 다음 사항들을 고려해야 한다.
- RDBMS를 사용하는 것은 비용이 크다.
- 인증 정보는 만료가 되어야하는데 만료에 대한 데이터 처리를 별도로 해주어야 한다.
따라서 인증 데이터의 저장은 Redis와 같은 메모리 기반 데이터베이스의 사용을 고려할 수 있다.
- 보조기억장치를 사용하지 않고 메모리를 사용하므로 속도가 매우 빠르며 만료 기간을 설정할 수 있다.
- 인증 데이터는 일회성 데이터이고, 데이터의 변동이 거의 없기에 메모리 기반 데이터베이스를 사용하기 유리하다.
- 즉, 인증 과정 시 필요한 정보는 RDBMS와 같은 데이터베이스를 사용하며, 인증 후 요청시마다 인가 과정은 메모리 기반 데이터베이스를 사용하면 성능 향상에 도움이 된다.
지금까지 세션 인증 방식의 성능을 향상시키는 방법에 대해 알아보았다.
그렇지만 서버에서 사용자의 State를 유지하는 방식은 방식은 성능을 고려해야 하며, 확장하기에 많은 자원이 소모된다.
다음 포스팅에는 이러한 단점과 대비되는 장점을 가지고 있는 (물론 단점도 있다) 클라이언트 쪽에 인증 정보를 소유하는 방식인 Token 인증방식에 대해서 작성해보겠다.
반응형
'WEB > CS' 카테고리의 다른 글
[Web] 인증과 인가 - JWT Auth (1) | 2023.03.02 |
---|---|
[Web] 인증과 인가 - 쿠키와 세션 (0) | 2023.03.02 |
[WEB] CORS(Cross-Origin Resource Sharing) (0) | 2023.01.18 |