목록Tech/Spring (25)
우당탕탕
Redis + Lua Script를 활용한 분산락안녕하세요!이번 글에서는 대규모 분산 환경에서 안전하게 “한 번에 한 명만” 작업이 이루어지게 하는 Redis + Lua Script 기반 분산 락을 알아보고 예시코드를 통해 개발하는 방법을 알아보도록 하겠습니다. 이전 글 보러가기[동시성 제어 1편] 동시성 제어란? - 데이터가 꼬이지 않는 백엔드의 첫걸음[동시성 제어 2편] 비관적 락(Pessimistic Lock) - JPA 스프링으로 경험해보는 실전 가이드[동시성 제어 3편] 낙관적 락(Optimistic Lock) - @Version 어노테이션을 활용한 락1. 분산락이란? 왜 Redis에서 구현할까• 서버가 2대 이상(마이크로서비스, 스케일아웃 인프라 등)인 환경 → DB 락/코드 수준 락으로는 “..
[동시성 제어 3편] 낙관적 락(Optimistic Lock)안녕하세요!지난 글에서는 비관적 락(Pessimistic Lock)에 대해 알아보았습니다. 오늘은 그 반대 성격의 낙관적 락(Optimistic Lock)을 실전 코드 중심으로 정리해 보려고 합니다.이전 편 보러 가기[동시성] 동시성 제어란? - 1편 (데이터가 꼬이지 않는 백엔드의 첫걸음)[동시성 2편] 비관적 락(Pessimistic Lock) - JPA 스프링으로 경험해 보는 실전 가이드1. 낙관적 락(Optimistic Lock)이란?이름 그대로 "충돌이 자주 일어나지 않을 것"이라는 낙관적 가정!여러 트랜잭션이 동시에 데이터를 읽고, 수정 시점에만 충돌이 있는지 검사▶️ 행(row)을 잠그지 않고, 데이터를 자유롭게 읽게 한 뒤, 커밋..
[동시성 2편] 비관적 락(Pessimistic Lock) 안녕하세요!이전 편에서는 "동시성 제어란?" 이란 내용으로 동시성이 무엇인지 알아보았습니다. 이제 본격적으로 첫 번째 실전 대책, 비관적 락(Pessimistic Lock)에 대해 알아보도록 하겠습니다.이전 편 보러 가기[동시성] 동시성 제어란? - 1편 (데이터가 꼬이지 않는 백엔드의 첫걸음)1. 비관적 락이란? 말 그대로 "충돌이 난다고 미리 가정"하고, 데이터를 사용하는 동안 다른 트랜잭션의 접근 자체를 막는 방식입니다.트랜잭션이 데이터를 읽거나 변경하는 동안 DB가 자동으로 행(row) 또는 테이블 전체에 락을 건다 → 데이터 일관성 100% 보장(속도보다 ‘정확’ 우선) → 다른 트랜잭션은 내 작업이 끝날 때까지 ‘대기’..
동시성 제어란? - 데이터가 꼬이지 않는 백엔드의 첫걸음 안녕하세요!오늘은 백엔드 실무에서 꼭 한 번은 마주치는 동시성 제어에 대해서 작성해 보려고 합니다. 회사에서 과제형식으로도 많이 나오는 문제이고 현금지급, 쿠폰 이벤트등과 같은 서비스를 만들 때 꼭 적용되어야 하는 부분이라 정독해 보시는 것을 추천드립니다. 1편에서는 기본적인 내용 설명을 진행하며 2~4편은 해결방법 설명과 예시코드를 작성해 보려고 합니다.1. 동시성이란 무엇인가?동시성(concurrency)이란, 여러 사용자가 ‘동시에’ 데이터나 시스템 자원(예: DB, 메모리 등)에 접근/변경을 시도하는 상황을 의미합니다.예시: 쇼핑몰 재고 감소• 유저A, B가 동시에 “마지막 1개 남은 상품”을 장바구니에 담고 동시에 주문을 진행 • 둘 다 ..
1JPA로 게시글 CRUD 만들기 – 10분 만에 따라 하기 안녕하세요 오늘은 백엔드를 처음 시작하는 분들도 무리 없이 따라 할 수 있도록, Spring Data JPA를 활용한 게시글 CRUD(Create, Read, Update, Delete) 예제를 준비했습니다. 해당 프로젝트를 시작하기 앞서 아래 링크에서 프로젝트 구성을 먼저 진행해 주세요! (프로젝트 구성이 되어있다면 스킵하셔도 됩니다) 프로젝트 구성은 해당 링크에서 구성하실 수 있습니다! -> https://mozzi-devlog.tistory.com/461. CRUD가 뭐예요?• C(Create): 데이터 생성 → 블로그 게시글을 새로 작성하는 것처럼 DB에 새로운 데이터를 넣는 작업을 의미해요.• R(Read): 데이터 읽기(조회) → ..
QueryDSL vs MyBatis vs JPA 실무에서 언제 쓰는 게 좋을까? 스프링 백엔드 개발을 하다 보면, JPA, MyBatis, QueryDSL 중 어떤 기술을 선택할지 고민하게 됩니다. 각각의 특징과 장단점을 한번 살펴보면서 어떤 상황일 때 어떤 기술이 적합한지 한번 찾아보도록 하겠습니다.1. JPA 특징- 객체와 테이블을 매핑하여 SQL 없이 CRUD 작업 가능- 영속성 컨텍스트로 변경 감지 (Dirty Checking), 지연 로딩 (Lazy Loading) 지원 - Spring Data JPA로 기본 CRUD 메서드 자동 생성 ( findAll(), save() 등 )영속성 컨텍스트란? -> https://mozzi-devlog.tistory.com/66장점- 생산성 극대화 : 반복적인..