Home [soldout] Session을 구성하기 위한 저장소 플랫폼 선정
Post
Cancel

[soldout] Session을 구성하기 위한 저장소 플랫폼 선정

# 문제점


쿠키 / 세션 인증 방식을 통해 로그인 기능을 구현하는 경우 세션이 처리할 요청은 읽기보단 쓰기에 대한 요청이 많을 것으로 예상할 수 있습니다. 하지만 트래픽이 증가해 로그인 요청에 대해서도 많은 사용자로부터 생성된다면 상대적으로 하나의 요청 처리 시간이 많이 소비되는 쓰기 요청을 보다 빠르게 처리하기 위한 방법을 구상해야 하는 요구사항이 도출되었습니다.

# 해결방안


Redis vs Memcached

위 요구사항 해결를 위해서 도입해볼만한 플랫폼으로는 Redis와 Memcached가 있습니다. 두 플랫폼 모두 키-값 형태의 저장소를 제공해주며 In-Memory 방식으로 저장되어 저장 및 조회 속도가 매우 빠른 특징이 있습니다. 그렇기 때문에 두 플랫폼 모두 간단한 로그인 사용자 정보를 저장하고 조회하기 위한 기능을 구현하는데 있어 매우 적합하다는 판단을 했고, 두 플랫폼의 트레이드 오프를 비교해 현재 프로젝트에 적합한 플랫폼을 결정해보기로 했습니다.

Memcached 장점

1) 멀티 쓰레드를 지원합니다.

멀티 쓰레드를 통해 몰리는 트래픽에 대해 처리하는 경우, 성능 저하를 방지하는 능력이 좋습니다.

2) 매우 빠른 검색속도를 자랑합니다.

Memcached는 해시 형태의 자료구조로 구성되어 있기 때문에 O(1)의 성능을 내어 검색 시간이 매우 짧습니다.

3) Redis에 비해 메타 데이터를 적게 사용하기 때문에 메모리 사용량이 상대적으로 낮습니다.

Memcached는 작고 변하지 않는 정적인 데이터를 캐싱할 때 내부 메모리 관리가 Redis 만큼 복잡하지 않습니다. 때문에 Redis에 비해 능률적으로 이루어져 메모리 사용량이 낮습니다.

Memcached 단점

1) Redis에 비해 제공되는 API가 적습니다.

제공되는 API가 적은만큼 Spring 환경에서 활용하기 제한되는 부분이 상대적으로 많습니다.

2) 데이터 변경이 잦은 경우엔 메모리 파편화가 발생하기 쉽습니다.

# Redis 장점

1) 다양한 자료구조를 제공합니다.

HashMap말고도 다양한 종류의 자료구조(String, List, Set, Sorted sets)를 제공해 구현하고자 하는 기능의 목적과 특징에 맞게 활용할 수 있습니다.

2) 디스크에 데이터가 저장되기 때문에 삭제된 데이터를 복구하기 용이합니다.

데이터 복구 방식으로는 RDB와 AOF가 있는데,RDB는 현재 메모리 상태의 snapshot을 만들어 사용하며 AOF는 로그에 남긴 Write/Update 이벤트를 기반으로 복구합니다.

3) Replication 기능을 제공해 높은 안정성을 제공합니다.

Relpication을 통해 서버 다운에 대한 위험을 줄이고 읽기 처리에 대한 트래픽을 분산처리해 서버가 다운될 가능성을 낮추고 오래동안 지속할 수 있습니다.

4) Spring에서 다양한 API를 제공합니다.

Spring에서도 Redis 관련된 여러 API를 제공해 조작성이 좋다고 볼 수 있습니다.

Redis 단점

1) 싱글 쓰레드로 동작하기 때문에 트래픽이 몰리면 성능 저하가 올 가능성이 높습니다.

2) Memcached에 비해 메모리를 많이 사용합니다.

선택한 플랫폼은?

두 플랫폼에 대한 비교후 제가 선택학 플랫폼은 Redis입니다.

두 플랫폼을 사용할 때 얻을 수 있는 이점에 대해 트레이드 오프를 고려해 본다면, Replication을 통해 읽기 처리에 대한 트래픽을 분산처리 할 수 있고 Snapshot을 통해 데이터 분실의 위험을 줄일 수 있는 Redis가 더 적합하다고 판단했습니다.

비록 Redis가 싱글쓰레드로 동작해 데이터 처리의 지연이 발생할 경우, 성능상 큰 저하를 가져올 수 있지만 Session 저장소로 활용되는 만큼 처리 지연이 발생할 만큼의 복잡한 로직을 Redis에 요구할 가능성은 적다고 생각했습니다.

# 마치며


백엔드 서버 개발자는 다양한 플랫폼을 접해보고 사용해 볼 수 있기 때문에 특정 기능을 구현하기 위해 활용해볼 플랫폼을 비교해보면서 더 적합하고 장점이 많은 플랫폼을 선정하는 것은 필수적이라고 생각됩니다. 그렇기에 이번 문제를 해결해보는 과정 속에서 트레이드 오프를 비교해보고 선정해보는 경험을 해볼 수 있었습니다.

# 참고자료


  • https://aws.amazon.com/ko/elasticache/redis-vs-memcached/
  • https://americanopeople.tistory.com/148
This post is licensed under CC BY 4.0 by the author.

[soldout] 서버 확장에 따른 session 구성 방법에 대한 고민

[soldout] Docker를 활용한 개발 환경 관리