전체 글34 동시성의 이름으로 날 용서하지 않겠다 - Distributed Lock 편 📌 분산락도 락이다분산락은 다중 서버 환경에서 공유 자원에 대한 동시 접근을 제어하는 메커니즘이다. 데이터베이스 락은 단일 데이터베이스 내에서만 동작하지만, 분산락은 시스템 전체에서 동작한다. 트랜잭션과 연계되는 데이터베이스 락과 달리 별도의 시스템으로 관리가 가능해 보다 유연하다. 분산락은 다음과 같은 특징이 있다:시스템 전체에서 글로벌 락을 보장한다.네트워크 장애나 서버 다운으로 인한 영구 점유 방지를 위해 일반적으로 TTL을 지원한다.데이터베이스 락보다 가볍게 동작한다.📌 Redisson과 LettuceRedisson과 Lettuce는 둘 다 Redis 클라이언트 라이브러리로, Redis와 애플리케이션 간의 통신을 돕는 역할을 한다. Redisson은 Redis를 기반으로 분산 객체와 분산 .. 2024. 12. 3. 동시성의 이름으로 날 용서하지 않겠다 - Optimistic Lock 편 이 시리즈는 글을 쓸 때마다 큰 용기가 필요하네요 👽📌 긍정적인 아이 부정적인 아이 비관락과 낙관락은 데이터베이스에서 동시성 제어를 관리하는 두 가지 접근 방식으로 서로 다른 장단점을 가진다.비관락(Pessimistic Lock)이름 그대로 트랜잭션 시작 시 충돌이 일어날 것이라고 비관적으로 가정하고, 이를 피하기 위해 미리 잠금을 거는 방식이다. 장점데이터 충돌이 아예 발생하지 않으므로, 동시성 문제가 완전히 제거된다.충돌이 자주 발생하거나 트랜잭션이 길어도 안정적으로 작동한다.단점잠금이 걸린 동안 다른 트랜잭션은 대기해야 하므로 성능이 저하된다.교착 상태가 발생할 수 있다.데이터 잠금에 따른 오버헤드가 발생한다.낙관락(Optimistic Lock)비관락과 반대로 데이터 충돌 가능성을 허용하고, .. 2024. 12. 2. 동시성의 이름으로 날 용서하지 않겠다 - Pessimistic Lock 편 📌 데이터베이스 락이 필요한 이유1. 분산 환경에서의 동시성 제어synchronized 편에서 언급했 듯, synchronized는 단일 JVM 내에서만 작동한다.여러 서버에서 동일한 데이터에 접근하는 분산 환경에서는 동작하지 않으므로, 데이터를 공유하는 모든 서버에서 동기화가 이루어지지 않는다.데이터베이스 락은 데이터베이스 자체에서 적용되므로, 분산 시스템에서도 동시성 문제를 해결할 수 있다.2. 데이터 무결성 보장synchronized는 메모리 수준에서 동기화를 제공하기 때문에, 트랜잭션 제어가 별도로 필요하다.데이터베이스 락은 트랜잭션 수준에서 동시성을 제어하여 데이터의 정확성과 일관성을 보장한다.3. 스케일링과 성능 문제분산 환경에서 데이터를 보호하기 위해 synchronized를 사용할 경우.. 2024. 11. 19. 동시성의 이름으로 날 용서하지 않겠다 - synchronized 편 글 너무 오랜만에 써서 어떻게 시작해야 될지 모르겠네요... 제목 이렇게 짓는 거 맞나 Q. 감자에게 동시성 문제란?A. 에...가위바위보 같은 존재죠. 저 가위만 내서 맨날 지니까 누가 가위바위보 하자고 하면 냅다 도망부터 갑니다. 피할 수 없다면 더 열심히 피해라? 뭐 그런 말 있잖아요 📌 도망은 재능의 영역입니다TMI - 감자는 달리기가 매우매우 느리다. 아무튼 도망 실패로 얼결에 동시성 문제를 해결하게 되었다. 에혀@Service@Transactional(readOnly = true)@RequiredArgsConstructorpublic class MemberTicketService { private final MemberRepository memberRepository; priv.. 2024. 11. 18. 동시성 확장하기 껌이네 (부제 - Runtime Data Area) 라고 JVM 메모리 구성도 모르는 감자가 말했다. 📌 OS 레벨에서의 프로세스와 스레드프로세스보조기억 장치에 저장된 프로그램이 메모리에 적재되어 실행되는 것으로, OS에서 자원을 할당받아 독립적으로 실행되는 단위이다. 각 프로세스는 독립적인 메모리 공간을 가지며, 다른 프로세스와 메모리 영역을 공유하지 않는다.스레드프로세스 내에서 작업을 수행하는 단위로, 프로세스의 메모리 공간을 공유하면서 실행된다. 하나의 프로세스에는 여러 스레드가 존재할 수 있다. 프로세스 메모리 영역코드 영역 (Code Segment / Text Segment)코드 영역은 프로그램의 실행 명령어가 저장되는 메모리 영역으로, 주로 실행할 바이너리 코드와 함수의 기계어 명령이 저장된다. 프로그램의 무결성과 안정성 보장을 위해 읽기 전.. 2024. 9. 22. What's in my b̶a̶g̶ Browser 📌 웹 사이트가 빨라야 하는 이유는 굳이 구구절절 말로 설명할 필요가 없을 정도로 명확하다. 화면에 로딩 아이콘이 빙글빙글 회전하는 것을 구경하는 취미가 있는 사람은 아마 없을 것이다. 때문에 웹 개발자들은 사용자 경험 개선과 전환율 증가를 위해 성능 향상에 많은 노력을 기울인다. 📌 HTTP Caching캐시(not 현금)란캐시는 프랑스어 단어 "Cacher"에서 유래되었다. "Cacher"는 감추다 또는 숨기다라는 의미를 가진다. 캐시는 데이터를 일시적으로 숨기거나 보관하는 개념에서 유래하여, 데이터를 빠르게 접근할 수 있도록 숨겨놓은 임시 저장소를 가리키는 용어로 사용되고 있다. 캐시는 자주 사용되는 데이터나 자원을 임시로 저장해 두어, 동일한 데이터나 자원에 대한 요청이 있을 때 바르게 응답.. 2024. 9. 8. 이전 1 2 3 4 ··· 6 다음