반응형
선착순 쿠폰 이벤트 개발을 위해서 NoSQL 중 일종인 Redis를 사용해야 하는가?? 아니면 MySQL로 JPA에서 지원하는 LOCK을 사용해야 하는가?? LOCK을 사용한다면 비관적 락 (Pessimistic Lock) vs 낙관적 락 (Optimistic Lock) 어떤걸 사용해야 하는가?
비관적 락(Pessimistic Lock)
- 비관적 = 앞으로의 일이 잘 안될 것이라고 보는 것.
- 트랜잭션 충돌이 발생한다는 가정하에 우선 락을 걸고 보는 방식
- 데이터베이스에서 사용하는 락 사용 (PESSIMISTIC_FORCE_INCREMENT 모드가 아니라면, 버전 정보 사용안함)
- SELECT ~ FOR UPDATE 구문 사용
낙관적 락 (Optimistic Lock)
- 낙관적 = 앞으로의 일 따위가 잘되어 갈 것으로 여기는 것.
- 트랜잭션 충돌이 발생하지 않는다는 가정하에 진행
- JPA가 제공하는 버전관리 기능을 사용
- 트랜잭션 최종 커밋 전까지는 충돌을 알 수 없음 (최종 커밋하면서 버전을 비교하기 때문??)
- 성능이 비관적 락보다 좋음
MySQL
- 관계형 데이터베이스 관리 시스템(RDBMS)
- 테이블 형식으로 데이터 저장
- 고정된 스키마(structure) 필요
- SQL (Structured Query Language) 사용
NoSQL
- 비관계형 데이터베이스
- 다양한 데이터 모델 지원 (문서, 키-값, 열, 그래프 등)
- 유연한 스키마
- 다양한 쿼리 언어 사용 (SQL 유사 언어, JSON 기반 쿼리 등)
- SQL은 데이터의 일관성과 안정성을 보장, 정확성이 중요한 데이터에 사용하면 좋을 듯 합니다
- NoSQL은 메모리에 데이터를 캐시하여 빠른 읽기와 쓰기를 지원하므로, 실시간 처리가 필요한 애플리케이션에서는 NoSQL 사용을 권장하고 있습니다(gpt 및 구글링)
- 실제 현업에서도 두 데이터베이스를 적절히 조합해서 사용한다고 합니다
반응형
'Spring boot' 카테고리의 다른 글
Spring Boot 끄적끄적(4) (0) | 2024.07.18 |
---|---|
Spring boot 끄적끄적(3) (0) | 2024.07.16 |
Spring boot 끄적 끄적(2) (1) | 2024.07.09 |
왜 HTTP Status Code를 사용해야하는가?? (0) | 2024.07.08 |
Spring boot 생성자 주입 vs 필드 주입 (0) | 2024.06.28 |