@Soo
RDBMS, NoSQL, 분산 처리에 관심이 많은 백엔드 엔지니어입니다.

Java의 동시성 프로그래밍 - Lock

September 19, 2023

ReentrantLock 고유락(intrinsic locking, synchronized lock. monitor lock)과 달리 ReentrantLock은 폴링, 타임아웃, 인터럽트 가능한 잠금 획득을 선택할 수 있으며, 모든 잠금 및 해제 연산이 명시적이다. 아래 Lock 인터페이스는 추상적인 잠금 연산을 정의한다. ReentrantLock은 Loc…


Java의 동시성 프로그래밍 - Deadlock

September 18, 2023

DeadLock 스레드 A각 잠금 L을 점유하고 있고 잠금 M을 획득하려고 시도하는 동시에 스레드 B가 잠금 M을 보유하고 있고 잠금 L을 획득하려고 시도하면 두 스레드는 영원히 대기하게 된다. 이러한 상황을 데드락이라고 한다. lock-ordering deadlocks 아래 코드는 leftRight(), rightLeft 메서드가 left, right …


Java의 동시성 프로그래밍 - Executor

September 17, 2023

Executor Task는 논리적인 작업 단위이며, 스레드는 Task를 비동기적으로 실행할 수 있는 기술이다. Java에서는 Task 실행을 추상화하여 Executor 라는 인터페이스를 제공한다. Executor는 다양한 Task 실행 정책을 지원하는 비동기 프레임워크에 기반이 된다. Executor 구현은 통계 수집, 애플리케이션 관리 및 모니터링을 추…


웹 서버를 위한 동시성 프로그래밍 모델

September 07, 2023

동시성 프로그래밍 모델 동시성은 여러 태스크가 동시에 실행된다는 시스템 속성이다. 또한 태스크들 사이에서 상호 작용을 수행할 수 있다. 이러한 동시성은 단일 코어 프로세서부터 멀티 코어 프로세서, 다중 프로세서, 그리고 분산 시스템까지 다양한 컴퓨팅 환경에서 구현될 수 있다. 주 목적은 사용자의 응답성을 향상시키고 처리량을 증가시키는 것이다. 동시성은 주…


Java의 동시성 프로그래밍 - overview

August 14, 2023

synchronized 락의 단점 락이 걸린 객체에서 일어나는 동기화 작업은 모두 균등하게 취급된다. 락 획득/해제는 반드시 메서드 수준이나 메서드 내부의 동기화 블록 안에서 이루어져야 한다. 락을 얻지 못한 스레드는 블로킹된다. 락을 얻지 못할 경우, 락을 얻어 처리를 계속하려고 시도하는 것조차 불가능하다. 락이 걸린 데이터에 모든 연산이 동등하게 취급…


고성능을 위한 MySQL Primary Key 설계 전략

August 06, 2023

Primary Key 설계의 중요성 InnoDB 기준으로 MySQL은 Primary Key를 기준으로 데이터를 클러스터링한다. 클러스터링이라는 용어는 인접한 키 값이 있는 레코드가 물리적으로도 인접하게 저장된다는 것을 말한다. 즉, 논리적인 PK 값에 의해 레코드의 물리적인 위치가 결정된다. PK값이 변경된다면 해당 레코드의 물리적인 위치도 변경된다는 …


Ehcache3 캐시 라이브러리 소개 (with Spring Boot)

July 24, 2023

Spring Boot2 + Ehcache3 Spring Cache Abstract 와 Ehcache3 모듈 설정 방법을 알아본다. Gradle Dependency 설정 캐시 구성 Ehcache3 버전부터는 JSR-107을 자바 표준 인터페이스를 구현하였다. 캐시에 대한 자바 표준 인터페이스를 JCache 라고 한다. JPA 구현체에 Hibernate 와 …


JPA가 느릴 수 밖에 없는 원초적인 이유

July 21, 2023

N+1 쿼리는 무엇을 의마하나? JPA의 한계를 설명하기 위해서는 N+1 쿼리가 발생하는 원초적인 원인에 대해 이해하는 것이 필요하다. JPA를 사용하다보면 N+1 쿼리를 경험할 수 있는데, 기술적인 방법으로 N+1 쿼리를 해결하는 게시물은 많지만, 왜 이러한 쿼리가 발생하는지에 대해 정확히 설명하는 블로그는 찾기 어렵다. 본 포스팅에서는 N+1 쿼리가 …


Redis Keyspace Notifications에 대해 알아보자

July 19, 2023

Redis Keyspace Notifications Redis에는 키 및 값의 변경 사항을 실시간으로 수신할 수 있는 Pub/Sub 기능을 제공한다. Notifications 유형 Redis 데이터 공간에 영향을 미치는 모든 작업에 대해 다음 두 가지 유형의 이벤트가 발생된다. 예를 들어 키를 삭제하는 명령인 이 실행되면 Redis는 다음 두 가지 명령…


Spring Cache 로 캐시 계층 구조 사용하기

July 16, 2023

메모리 계층 구조 메모리를 필요에 따라 여러 가지 종류로 나누어 둠을 의미한다. 이떄 필요한 대부분의 경우는 CPU가 메모리에 더 빨리 접근하기 위함이다. 자주 쓰는 데이터는 계속 자주 쓰인다. 자주 쓰이는 데이터는 계속 자주 쓰이고, 자주 쓰이지 않는 데이터는 계속 자주 쓰이지 않는다. 자주 쓰이으는 데이터는 전체 데이터 양에 비해 작은 양이기 때문에,…