[Java] 동시요청에 대한 무결한 처리를 보장하는 방법 9(H2/Redis의 차이점 및 Redis의 한계점 등 추가개선사항 알아보기)

Hyo Kyun Lee·2025년 2월 20일
0

Java

목록 보기
89/91

1. 개요

일전 주문관리에서 동시 사용자의 동일 주문건 수정 시 데이터 정합성 확보를 위해 redis를 활용하였는데, 동시성 제어에서 redis가 절대적인 해결방안은 아닌 것을 알게되었다. 이에 대해 공부한 기록을 남긴다.

2. Redis 기본 원리

redis는 멀티스레드 환경에서 각 스레드들이 key-value로 이루어진 lock을 저장하여 자원점유권을 획득하고, 다시 삭제하여 자원점유권을 제거하여 이루어진다.

redis 자체는 자바스크립트처럼 싱글스레드 원리로 볼 수 있고, 각 스레드의 고유인자를 key값으로 설정하여 스레드별 트랜잭션 원자성을 보증할 수 있는 장치를 마련해주어야 한다.

3. redis의 한계와 인메모리 사용의 고려

redis는 동시성 제어의 절대적인 해결책이 아니다. 2000~5000개의 스레드가 동시에 접근할때 redis를 활용해도 중복 예약 및 데이터 정합성 저해가 발생할 수 있으며, synchronized 키워드를 사용해야 멀티스레드 환경에서 올바른 동시성 제어를 기대할 수 있다.

그러나 synchronized 키워드 사용 시 성능은 그만큼 안좋아진다. 이럴 경우 H2 인메모리를 사용하는 것이 더 효과적일 수 있다.

하지만 인메모리를 사용할 경우 중간에 장애가 발생하거나 사용자가 프로그램 실행을 종료할 경우, 인메모리 DB의 데이터는 모두 휘발(제거)되어 데이터 정합성 저해가 발생할 수 있다.

부하의 정도나 성능을 고려하면서 동시성 제어를 위한 장치를 어떻게 사용할 것인지 잘 채용해야 할 것이다.

4. H2(인메모리)와 redis의 차이점

  • In-memory Database
    인메모리 데이터베이스는 디스크가 아닌 메모리에 데이터들을 저장한다.
    메모리 레벨에서 데이터를 처리하므로 DB, I/O 접근이 필요하지 않아 성능 향상을 기대할 수 있다.
    메모리에 데이터를 저장하므로 휘발성이 강하여 장애 발생 및 시스템 종료 시 DB데이터가 모두 제거된다.
    DB의 원칙 중 하나인 지속성(Durability)을 지키기 위해서 모든 작업을 로그 파일에 기록하여 디스크에 저장해두고, 시스템을 구동할 때 로그에 기반하여 데이터를 다시 메모리에 올리는 방식을 사용한다.

  • Redis의 특징
    list, array 형식(key-value 및 비정형화 데이터) 처리 혹은 별도의 스키마가 없는 데이터 처리에 특화되어 있다.
    RDBMS보다 10배 정도 빠른 성능을 보이며, atomic하게 데이터 부정합 방지 처리가 가능하다.
    여러 대의 서버 구성이 가능하며, 분산 캐시 서버를 구축할 수 있다.
    싱글 스레드를 사용 환경이며, synchronized 키워드 사용 시 성능 저하가 올 수 있다.

5. 참고자료

redis의 한계 - https://velog.io/@joonoo3/%EC%A4%91%EB%B3%B5-%EC%98%88%EC%95%BD-%EC%83%81%ED%99%A9%EC%97%90%EC%84%9C%EC%9D%98-%EB%8F%99%EC%8B%9C%EC%84%B1-%EB%B9%84%EA%B5%90-RedisCache-vs-H2Disk

H2/Redis 차이 - https://chickenpaella.tistory.com/m/77

Redission 분산락 - https://velog.io/@hgs-study/redisson-distributed-lock

Redission tryLock - https://incheol-jung.gitbook.io/docs/q-and-a/spring/redisson-trylock

redis 동시성 제어 - https://s-core.co.kr/insight/view/redis%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EC%95%88%EC%A0%84%ED%95%98%EA%B2%8C-%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%9D%B4%EC%8A%88-%EC%A0%9C%EC%96%B4%ED%95%98%EA%B8%B0/

0개의 댓글

관련 채용 정보