본문 바로가기

Spring boot

NoSQL vs SQL

반응형

선착순 쿠폰 이벤트 개발을 위해서 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 기반 쿼리 등)

NoSQL, SQL 언제 사용할 것인가?

  • 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