728x90

DB 7

[Gin] GORM + Redis 캐싱 전략 - DB 부하 줄이는 실전 캐싱

DB 부하를 Redis로 덜어주는 실전 패턴 ✅ 왜 캐싱이 중요한가?- 자주 조회되는 데이터를 매번 DB에서 가져오면 성능에 큰 부담 - GORM만 사용하면 매 요청마다 쿼리 발생 - Redis를 캐시로 두면 응답 속도 향상 + DB 부하 감소 🧱 기본 구조 Client → Gin → Service ├── Redis 캐시 hit → 바로 응답 └── miss → GORM → DB → 캐시 저장 → 응답 🧪 실습 전제 - Gin + GORM + Redis 사용 - User 모델 조회 예시 - Redis는 go-redis 사용 1. Redis 설정import ( "github.com/redis/go-redis/v9" "..

개발/Go 2025.06.16

NoSQL DB 종류 알아보기

NoSQL 데이터베이스의 종류에 대해서 알아보자! 1. 개념NoSQL은 "Not Only SQL"의 약자로, 전통적인 관계형 데이터베이스(RDBMS)와 달리 정해진 스키마 없이 유연한 데이터 저장 방식을 지원하는 데이터베이스 유형이다. NoSQL은 일반적으로 대규모 분산 시스템, 빅데이터, 실시간 웹앱 등에 사용된다. 2. 종류- 문서형(Document-based) 대표 DB: MongoDB, CouchDB, Amazon DocumentDB 데이터 형식: JSON, BSON, XML 형태의 "문서" 특징: > 각 문서는 유연한 구조를 가짐 > 컬렉션 단위로 문서 관리 > RDB의 테이블+레코드 개념과 유사하지만 문서 간 구조가 달라도 됨 사용 예: 블로그 글, 사용자 프로필, 전자상거..

개발/ETC 2025.05.18

DB 동시성 제어하는 방법 알아보기

DB 시스템에서 동시성을 제어하는 방법에 대해서 알아보자 !!!   대표적인 동시성 제어 방식은 MVCC(Multi Version Concurrency Control)Lock-Based Concurrency Control이 있다.  1. MVCCMVCC는 데이터의 여러 버전을 유지하여 트랜잭션이 동시에 데이터를 읽고 쓸 수 있도록 하는 방식이다.각 트랜잭션은 자신만의 일관된 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항에 영향을 받지 않는다. 데이터의 각 버전을 유지하여 읽기 작업이 쓰기 작업과 독립적으로 이루어질 수 있다.트랜잭션은 시작 시점의 스냅샷을 기반으로 데이터를 읽어, 다른 트랜잭션의 변경 사항을 보지 못한다. 읽기 작업 시 잠금을 사용하지 안항 높은 동시성을 제공한다.읽기 작업..

개발/ETC 2025.01.06

공유 락, 배타 락 차이

공유 락 배타 락을 알아보자!!  1. 개념유 락과 배타 락은 비관적 락(Pessimistic Lock)의 데이터 일관성과 무결성을 위해 사용하는 락 유형이다. - 공유 락공유 락은 읽기 락(Read Lock)이라고 부르며, 공유 락이 걸린 데이터는 읽기(SELECT)연산만 가능하며, 쓰기(UPDATE, DELETE)는 불가능하다.공유 락이 걸린 데이터에 대해서 다른 트랜잭션에서도 공유 락을 획득할 수 있지만, 배타 락은 획득할 수 없다.즉, 공유 락을 사용하면 트랜잭션 내에서 조회한 데이터가 변경되지 않는다는 것을 보장한다. SELECT * FROM table_name WHERE id = 1 FOR SHARE;  - 배타 락배타 락은 쓰기 락(Write Lock)이라고 부르며, 배타 락을 획득한 트랜잭..

개발/ETC 2024.12.24

데이터베이스 인덱스 알아보기

DB의 인덱스에 대해서 알아보자  1. 인덱스란인덱스는 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료구조로 백과사전의 색인과 같다.저장되는 컬럼의 값을 사용하여 항상 정렬된 상태를 유지하는 것이 특징.이러한 특징으로 인해 인덱스는 INSERT, UPDATE, DELETE의 성능이 희생된다는 것이 단점.    2. 인덱스의 자료 구조MySQL InnoDB를 기준으로 설명드리자면, B+Tree와 같은 변형 B-Tree 자료구조를 이용해서 인덱스를 구현한다.기본 토대는 B-Tree 인덱스이기 때문에 이를 기준으로 설명한다.B-Tree 인덱스는 컬럼의 값을 변형하지 않고 인덱스 구조체 내에서 항상 정렬된 상태로 유지한다. B-Tree(Balanced-Tree)에서는 크게 3가지 노드가 존재한다.최상위에..

개발/ETC 2024.12.07

Index가 적용되지 않는 경우 정리

1. 인덱스에 들어있는 컬럼을 수정하면 인덱스가 적용되지 않는다. num이라는 컬럼이 인덱스에 들어 있을 때, SELECT * FROM table WHERE num + 10 = 30 // Index 적용 안됨 SELECT * FROM table WHERE num = 20 + 10 // Index 적용 됨 2. Null을 조건에서 사용한 경우 인덱스가 적용되지 않는다. SELECT * FROM users WHERE num IS NULL // Index 적용 안됨 SELECT * FROM users WHERE num IS NOT NULL // Index 적용 안됨 SELECT * FROM users WHERE num > 0 // Index 적용 됨 SELECT * FROM users WHERE num > '..

개발/ETC 2023.05.11

[Spring] 동시성 이슈 해결 방법 (3)

지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/109 [Spring] 동시성 이슈 해결 방법 (2) 지난번 포스팅과 코드를 이어간다. https://devhooney.tistory.com/108 [Spring] 동시성 이슈 해결 방법 (1) 간단한 재고 시스템으로 알아보는 동시성 이슈 Stock @Entity public class Stock { @Id @GeneratedVal.. devhooney.tistory.com DB를 활용하여 데이터 정합성을 맞추는 여러가지 방법을 알아보려한다. Mysql(mariaDB)를 활용한 방법은 3가지가 있다. Pessimistic Lock (exclusive lock) Optimistic Lock Named Lock - Pes..

728x90