[Infra] 대용량 트래픽 대응 - 3. 세션 저장소로 어떤 것을 사용할 것인가
2022. 8. 12. 16:35ㆍ토이프로젝트/팁 모음집
- 앞서 Scale out을 서버 성능 향상 기법으로 선택했을 때 생기는 문제점인 데이터 불일치 문제에 대해서 세 가지의 기법을 알아보았고, 그 중 세션 저장소 분리 방법을 적용하기로 하였다.
- 그렇다면 세션을 따로 저장할 저장소가 있어야 한다는 것인데, 이 저장소는 어떤 것을 선택해야 할까?
- 선택지는 두 가지, On-disk Database와 In-memory Database 가 있다.
① On-disk Database(디스크 기반 데이터베이스)
- 디스크 기반 데이터베이스는 데이터를 디스크에 저장하고 관리하게 된다. 디스크에 저장된 데이터는 안정성과 지속성을 보장할 수 있고, 메모리에 비해 가격이 저렴해 쉽게 확장이 가능하여 대용량 데이터를 처리하는데 용이하다.
- 하지만 단점을 꼽자면 접근 속도에서 메모리에 비해 한계가 있을 수밖에 없다.
- 이러한 단점을 해결하기 위해 디스크 기반 데이터베이스는 메모리에 임시 저장소(버퍼)를 두어 데이터를 관리한다. 디스크에 가기 전에 이 버퍼를 경유하여 읽고자 하는 데이터를 먼저 버퍼에서 찾고, 찾지 못할 경우 데이터베이스에서 찾는다. 이 버퍼에 저장되는 데이터는 자주 사용되는 데이터가 해당된다.
- 하지만, 처리 능력을 강화함에도 불구하고 DB 연산 처리시간 이외에 디스크에서 데이터를 찾을 때 생기는 대기 시간과 디스크에서 버퍼로의 데이터 전송 시간 등이 발생하기 때문에 방대한 I/O 작업의 경우 병목 현상이 발생할 수밖에 없다.
- MySQL, Oracle 등이 여기에 속한다.
② In Memory Database(인메모리 데이터베이스)
- 인메모리 데이터베이스는 디스크가 아닌 메모리에 모든 데이터를 저장하고 관리한다.
- 모든 작업이 메모리에서 이루어지므로 디스크 I/O가 발생하지 않아 데이터 접근 속도가 굉장히 빨라진다.
- 단점이라고 한다면 데이터베이스의 주 저장소인 메모리가 휘발성이라는 것에 있는데, 서버에 장애가 발생하거나 아니면 운영자 자의로 서버를 종료할 경우 메모리에 저장되었던 데이터는 모조리 소실된다.
- 따라서, 인메모리 데이터베이스는 데이터를 안전하게 유지하고 오류 발생 시 데이터를 복구하는데에 초점을 맞춘다. 보조 저장소로 디스크를 사용하고, 정해진 시간에 메모리에 저장된 데이터를 디스크에 저장하거나 데이터 변경 작업의 명령을 로그 파일로 작성하는 등의 백업 과정을 요한다.
- 위의 두 데이터베이스 중 세션 저장소로 더 적합한 것은 어느쪽일까? 서비스를 수많은 사용자가 이용하고 있는 시점에 세션이 만일 디스크 기반 데이터베이스에 저장된다면 응답 시간에 있어서 차이가 날 수밖에 없다.
- 그리고, 세션의 경우 서버 리소스를 차지하고 보안상 위험이 있다는 이유로 영구적으로 저장하지 않는다. 만일, 인메모리 데이터베이스에 세션이 저장되어 있다고 가정하면, 서버에 장애가 생겨 그 세션 데이터가 모두 날아간다고 하더라도 사용자 입장에서는 로그인만 한 번 더 하면될 뿐 큰 불편이 생기는 사항은 아닐 것이다.
'토이프로젝트 > 팁 모음집' 카테고리의 다른 글
[Infra] 대용량 트래픽 대응 - 2. 세션 불일치의 문제 및 해결방안 (0) | 2022.08.11 |
---|---|
[Infra] 대용량 트래픽 대응 - 1. 스케일 업(scale-up) vs 스케일 아웃(scale-out) (0) | 2022.08.11 |
@Transactional 어노테이션에 대한 이해 (0) | 2022.06.07 |
MVC 구조에서 service와 serviceImpl (0) | 2022.05.28 |