이번에는 트랜잭션 격리 수준(Isolation Level)에 대해 알아보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성하였으며, 모든 내용은 InnoDB를 기준으로 설명합니다. 해당 내용을 완벽하기 이해하기 위해서는 MySQL이 제공하는 스토리지 엔진 수준의 락에 대해 알고 있어야 합니다. 혹시 모르면 관련 포스팅을 참고해주세요. 1. 트랜잭션의 격리 수준(Transaction Isolation Level)트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것이다. 트랜잭션의 격리 수준은 격리(고립) 수준이 높은 순서..
이번에는 스토리지 엔진 수준의 락의 종류에 대해 알아보도록 하겠습니다. 아래의 내용은 RealMySQL과 MySQL 공식 문서 등을 참고하여 작성하였으며, 모든 내용은 InnoDB를 기준으로 설명합니다. 1. 스토리지 엔진 수준의 락의 종류 MySQL에서 사용되는 락은 크게 스토리지 엔진 레벨과 MySQL 엔진 레벨로 나눌 수 있다. 스토리지 엔진 레벨의 잠금은 테이블의 데이터를 다루기 위한 락이며, MySQL 엔진 레벨의 잠금은 테이블이나 데이터베이스 등과 같은 부분을 위한 락에 해당한다. 그리고 이번에 살펴볼 잠금은 스토리지 엔진 레벨의 잠금이다. 레코드 락(Record Lock) 갭 락(Gap Lock) 넥스트 키 락(Next Key Lock) 자동 증가 락(Auto Increment Lock) [..
이번에는 자바를 컨테이너 환경에서 사용할 때 필요한 XX:+UseContainerSupport 옵션에 대해 알아보도록 하겠습니다. 1. 자바의 컨테이너 환경을 위한 XX:+UseContainerSupport 옵션 [ 자바를 컨테이너 환경에서 구동하는 경우의 문제점 ] 자바는 기본적으로 JVM이라는 가상 머신 위에서 동작을 하게 된다. 그렇기 때문에 자바 애플리케이션을 컨테이너 환경에서 구성한다고 하면, 호스트 OS 위에 컨테이너 위에 JVM이 올라가게 된다. 이러한 구조 때문에 자바는 기본적으로 컨테이너 환경을 제대로 이해하지 못한다. 자바는 기본적으로 GC 쓰레드 수 및 기본 메모리 제한과 같은 런타임 기본값을 설정하기 위해 운영 체제를 쿼리(cgroup)한다. 하지만 문제는 결과가 호스트 머신에 대한..
이번에는 Gradle(그레이들)이 제공하는 Java 플러그인과 implementation와 api의 차이에 대해 알아보도록 하겠습니다. 1. Gradle Java 플러그인, Java-Library 플러그인 [ Java 플러그인이란? ] Gradle(그레이들)에서 Java 프로젝트를 빌드하려면 기본적으로 java 플러그인이 필요하다. java 플러그인을 통해 컴파일, 테스트, jar 파일 생성 등의 작업들(tasks)이 수행 가능하다. plugins { id 'java' } Java 플러그인이 제공하는 작업들은 아래의 그림에 나와있다. 자세한 내용은 공식 문서를 참고하도록 하자. 자바로 작성된 프로그램은 먼저 Java 파일들을 컴파일하여 바이트 코드(.class)로 만들어내고, 이를 JVM이 읽어들인다. ..
이벤트(Event)는 매우 유용하지만 상당히 간과되는 기능 중 하나입니다. 작년에 아마존 CTO는 이벤트 드리븐 아키텍처로 가야 한다고 기조 연설을 하기도 했는데, 이번에는 스프링 프레임워크에서 이벤트(Event)를 사용하는 방법에 대해 알아보겠습니다. 1. 스프링에서 이벤트 사용법 및 주의사항[ 스프링에서 이벤트의 발행과 구독 ]스프링은 이벤트를 발행하고 구독하는 기능을 제공하고 있는데, 해당 기능은 아래와 같은 기본적인 가이드를 따라야 한다.스프링 부트 1.3(엄밀히는 스프링 4.2) 이전 버전이라면 이벤트 클래스가 ApplicationEvent를 상속해야 함이벤트 발행을 위해서는 ApplicationEventPublisher를 주입받아 사용해야 함이벤트 구독을 위해서는 ApplicationLi..