새로운 내용을 공부할 때
새로운 내용의 공부를 시작할 때 용어의 정의를 이해하지 못하거나 정확하게 알지 못한다면 그 용어가 포함된 문장을 이해하지 못합니다.
작은 단어 하나가 내용을 이해하지 못하게 하기 때문에 용어를 정확하게 이해하는 것이 중요합니다.

3 분 소요

목표 D-day : 41 일

오늘은 세션 불일치에 대해서 학습하려고 합니다.

세션 불일치(session inconsistency)

사용자가 유효한 세션 정보를 가지고 있습니다, 서버가 해당 세션을 찾지 못해 인증에 실패하는 현상을 말합니다.

주로 분산 서버 환경이나 서버 재시작시 발생합니다.

메모리 저장

기본적으로 세션은 서버 메모리에 저장됩니다. 메모리에 사용자 인증 정보를 저장하면 다음과 같은 장점이 있습니다.

  1. 네트워트 통신 과정이 필요없다.: 세션 데이터가 로컬 메모리에 저장되므로, 외부 스토리지 나 데이터베이스와의 네트워크 통신이 필요없이 지연 시간을 최소화할 수 있습니다.
  2. 매우 빠르다: 메모리 접근은 디스크나 네트워크보다 훨씬 빠릅니다
  3. 구현이 간단하다: 별도의 세션 스토리지나 복잡한 구성이 없어도 간단하게 세션 관리를 구현할 수 있습니다.

하지만 메모리에 저장하는 방식은 한계가 존재합니다.

서버 트래픽이 많아져서 서버를 scale out 방식으로 확장한다면 사용자 인증 상태가 서버마다 다르게 됩니다.

그리고 서버가 재시작을 하거나 장애 시 메모리에 저장된 저장된 정보는 모두 사라지게 됩니다.

메모리제 저장된 정보가 서버마다 달라도 문제가 없거나, 재시작이나 장애로 인해 메모리가 비워져도 애플리케이션의 동작에 큰 영향을 주지 않는 경우에는 메모리에 저장하는 방식이 간단하고 성능도 우수합니다.

다만, 사용자의 로그인 상태 정보와 같은 세션 정보는 지속성이 보장되어야합니다.

특정 리소스를 요청할 때마다 로그인을 새로 하거나, 일정 시간만 되면 로그아웃이 되어 매번 로그인을 한다면 이용자는 불편해서 다른 서비스를 이용할 수 있습니다.

이제 사용자가 많아져서 서버 부하를 줄이기 위해 방법을 선택해야합니다.

이미지나 정적 파일과 같은 경우는 CDN을 사용할 수 있으며, 자주 요청되는 계산이나 정보는 캐싱을 통해 서버 부하를 줄일 수 있습니다.

서버 부하를 줄이기 위해서 서버의 성능을 높이는 방식과 서버의 갯수를 늘리는 방식으로 해결할 수 있습니다.

Scale UP(성능 업)

기존 서버의 하드웨어 자원을 업그레이드하여 더 높은 성능을 제공함으로써 처리 용량을 확장하는 방식입니다.

단일 서버에 대한 수직적 확장을 통해 더 많은 요청을 처리할 수 있습니다.

기존 서버의 성능을 개선하는 방식입니다.

키워드

  • 수직 확장
  • 단일 서버
  • 하드웨어 업그레이드와 한계
  • 단순하다
  • 다운 타임(downTime)
  • Single Point Of Failure(단일 실패 지점)

장점

  • 단순하다: 서버 인프라 구조가 복잡하지 않고, 단일 서버에서 관리되므로 네트워크 설정이나 데이터 분할이 필요하지 않습니다.

  • 비용 효율성: 서버를 여러 대 분할 하는 것보다 운영 관리가 효율적입니다
  • 고성능 하드웨어: 자체 하드웨어 성능이 좋으므로 더 많은 서버에서 많은 요청을 할 수 있습니다.

단점

  • 하드웨어의 한계: 물리적 한계로 더 이상의 성능 확장이 불가능합니다.
  • 단일 실패 지점: 수직 확장은 단일 서버에 모든 처리를 집중하기에 해당 서버가 장애를 겪으면 전체 서비스가 다운될 수 있습니다.
  • 확장성 부족: 수직 확장은 한계가 명확하여 장기적인 우상향 트래픽에 적합하지 않을 수 있습니다. 수평 확장에 비해 탄력성이 떨어집니다.
  • 비용 증가: 고성능 하드웨어는 비용이 많이 들며, 특정 성능 이상으로 올라가면 비용 대비 성능이 효율적이지 않습니다.

스케일 아웃 선택 이유

서버의 성능 한계를 알고 있지만, 초기 트래픽이 적고 시스템을 간단하게 최소화로 개발하고 싶은 경우에 해당됩니다.

인프라 구조가 단순합니다. 유지보수 및 모니터링 측면에서 단일 서버로 관리하는 것이 더 쉽기 때문입니다.

성능 확장에서는 간단합니다.

Scale out

시스템의 처리 능력을 향상시키기 위해 서버나 노드를 추가하여 확장하는 방식입니다. 여러 대의 서버를 연결하여 병렬로 처리하는 수평적 확장을 의미합니다.

UP 과 OUT

수직 확장 방식은 단일 서버의 성능을 개선하는 방식이며, 스케일 아웃은 여러 서버를 추가하여 확장하는 방식입니다.

키워드

  • 수평 확장: 서버의 성능을 높이기 위해 여러 대의 서버를 추가하는 방식입니다.
  • 다중 서버: 단일 서버에 의존하지 않고, 여러 서버가 함께 동작하면서 처리하는 방식입니다.
  • 분산 시스템: 여러 서버가 하나의 시스템처럼 동작하여 데이터를 처리하는 것을 말합니다.
  • 부하 분산: 여러 서버로 트래픽을 나누어 처리하는 방식입니다.
  • 내결합성: 시스템 일부가 오류가 발생하여도 서비스를 지속할 수 있습니다
  • CAP: 분산 시스템에서 C,A,P 중에서 세 가지를 모두 만족할 수 없다는 이론입니다

장점

  1. 무한한 확장성 : 수직 확장과 다르게 새로운 서버를 추가하는 방식으로, 이론적으로 계속 추가하여 성능을 확장할 수 있습니다.
  2. 내결합성: 여러 서버에 분산 시스템을 운영하므로, 하나의 서버에 문제가 생겨도 다른 서버가 이를 보완합니다.

  3. 부하 분산: 로드 밸런서를 사용하여 트래픽을 여러 서버에게 고르게 분산시켜, 특정 서버만 과부하 걸리지 않도록 합니다.

단점

  1. 복잡하다 : 여러 개의 서버를 관리해야 합니다. 네트워크 구성, 부하 분산, 데이터 동기화 등 인프라가 복잡합니다. 단일 서버와 다르게 운영 및 모니터링에 어려움이 있습니다.

  2. 데이터 일관성 문제 : 여러 서버에 데이터를 분산시키면,데이터의 일관성을 유지하는 데 어려움이 있습니다.

    (CAP)중에서 두가지를 선택해야합니다.

  3. 네트워크 지연 발생: 단일 서버와 다르게 수평 확장은 기존 인프라에 관리를 위한 것도 추가되어 네트워크 지연이 발생할 수 있습니다

  4. 샤딩의 어려움: DB와 같이 여러 서버에 분할이 될 때, 데이터를 효율적으로 샤딩할지 설계하는 것이 까다롭습니다.

수평 확장을 선택한 이유

  1. 트래픽이 빠르게 폭증하는 경우 : 트래픽이 빠르게 증가하고, 단일 서버가 이를 처리하기 어려운 경우, 병렬 방식으로 설계됩니다.
  2. 서비스 가용성 보장: CAP로 데이터 일관성은 떨어지지만 중단 없이 고가용성을 유지할 수있습니다.
  3. 장기적인 확장이 가능 : 장기적인 트래픽과 데이터가 증가할 것으로 예상 된다면, 수평 확장은 유연하게 확장성을 제공합니다.

댓글남기기