목록Tech/Spring (18)
우당탕탕

[동시성 제어 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장점- 생산성 극대화 : 반복적인..

JPA 영속성 컨텍스트 쉽게 알아보기 이번 포스팅에서는 JPA를 처음 접하는 분들도 쉽게 이해할 수 있도록, 영속성 컨텍스트(Persistence Context)가 뭔지 알아보도록 하겠습니다.영속성 컨텍스트란?영속성 컨텍스트는 말 그대로 "엔티티(객체)를 영구적으로 저장하고 관리하는 공간"입니다.조금 더 쉽게 말하면,JPA가 엔티티를 직접 데이터베이스(DB)에 바로 저장하지 않고, 중간에 잠깐 보관하고 관리하는 "임시 창고"라고 생각하시면 됩니다.왜 이런 창고가 필요할까?JPA는 단순히 DB에 바로 데이터를 넣고 빼는 게 아니라, "엔티티 매니저 (EntityManager)"라는 친구를 통해 이 창고(영속성 컨텍스트)에 먼저 엔티티를 넣고 관리합니다.이렇게 하는 이유는 1. 성능을 높이고 ( 캐시 효과 ..