본문 바로가기

전체 글

(24)
[Spring Boot]HikariCP 모니터링 이번글에서는 JMX MBean을 이용한 HikariCP의 모니터링 방법을 정리해보겠습니다. MBean(Managed Bean)이란, 디바이스, 어플리케이션 혹은 리소스의 상태를 모니터링 할 수 있는 Java Object입니다. HikariCP에서 제공하는 MBean을 통해서 우리는 다음과 같은 정보를 알 수 있습니다. Idle connections의 수 Active connections(현재 사용하고 있는)의 수 모든 connection의 수 connection을 기다리고 있는 thread의 수 Configuration MBean을 사용하기 위해선 application.properties에 다음과 같이 pool의 이름과 register-mbeans값을 설정해야합니다. spring.datasource.hi..
[MSSQL] Collation 충돌 해결하기 intro 이번 글에서 collation 충돌이 발생하는 원인과 해결 방법에 대해 다뤄보겠습니다. 이번 글에서는 collation에 대한 설명은 따로 하지 않겠습니다. collation에 대해 알고싶으신 분은 다음 링크를 참고해 주시기 바랍니다. 설명을 위해 다음과 같은 두 테이블을 정의하겠습니다. CREATE TABLE korean (id INT, name VARCHAR(100) COLLATE Korean_Wansung_CI_AS) CREATE TABLE american (id INT, name VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC) 하나의 테이블 collation 값은 Korean_Wansung_CI_AS(한국어 사전 기준)으로 또 다른 하나의 테이블..
[MSSQL] Collation 파헤치기 intro 이번 글에서는 문자 데이터 정렬, Collation에 대하여 살펴보겠습니다. collation은 데이터 정렬, 비교하는 방식을 지정하는 명령어로 collation 설정에 따라 작업 결과가 다르게 나타날 수 있습니다. 자세한 설명에 앞서, 다음 쿼리를 통해 우리가 사용하고 있는 collation 설정값을 확인해 보겠습니다. SELECT name, collation_name FROM sys.databases; 위 쿼리문을 실행하면 아래와 같은 ( 환경에 따라 값은 다르게 나옵니다. ) 결과를 확인할 수 있습니다. name collation_name 1 master Korean_Wansung_CI_AS 2 sample Korean_Wansung_CI_AS master와 sample은 데이터베이스의 ..
[Database]Isolation level 파헤치기 - 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까? 이전 글에서 Isolation level이란 무엇인지 간단하게 설명하였습니다. https://devonce.tistory.com/22 [Database]Transaction과 isolation level Transaction이란? Transaction이란 데이터베이스에서 실행하는 작업의 단위를 의미합니다. 이번 글에서는 송금하는 과정을 예제로 전체적인 개념들을 설명하고자 합니다. 또한 테스트를 위해 MySQL(InnoDB)을 활용.. devonce.tistory.com 하지만 해당 글의 예제에서는 transaction의 isolation level을 동일하게 설정하고 설명을 진행했습니다. '그렇다면 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까?' 라는 의문이 들..
[MySQL] Delimiter 란? 이번 글에서는 MySQL의 Delimiter 명령어에 대해 다뤄보겠습니다. 최근 Procedure를 정의하면서 다음과 같은 SQL문을 사용하였습니다. mysql> DELIMITER $$ mysql> CREATE PROCEDURE insert_test() -> BEGIN -> DECLARE i INT; -> SET i = 0; -> WHILE i INSERT INTO account(createDatetime) VALUES(now()); -> SET i = i + 1; -> END WHILE; -> END $$ mysql> DELIMITER ; 맨 처음과 끝에 Delimiter 명령어를 사용하였습니다. 본 글은 Delimiter에 관한 글이기 때문에 Procedure와 다른 명령어..
[Java]Immutable class와 thread-safe Immutable이란 '불변의'라는 뜻으로 Immutable class는 저장된 값을 변경할 수 없는 클래스를 의미합니다. Java에서는 대표적으로 String, Integer, Double 등이 이에 속합니다. public static void main(String[] args) { String str = "new String"; String cpy = str; str = "edited"; System.out.println(cpy); System.out.println(cpy == str); } 위 코드의 결과는 다음과 같습니다. new String false 같은 객체를 가르키기 때문에 cpy의 값도 변할 것 같지만 String은 Immutable 객체기 때문에 값이 변경되는게 아니라 새로운 객체가 생..
[Java]ThreadLocal이란? ThreadLocal은 이름에서 알 수 있듯이 각 thread 내부에서 사용되는 지역변수를 관리할 수 있는 클래스입니다. 설명을 돕기위해 간단한 코드를 가져와봤습니다. public class ThreadLocalTest { private static ThreadLocal local = ThreadLocal.withInitial(Math::random); public Double get(){ return local.get(); } } public class Execute { public static void main(String[] args) { new Thread(() -> { ThreadLocalTest t = new ThreadLocalTest(); System.out.println("first th..
[Database]Transaction과 isolation level Transaction이란? Transaction이란 데이터베이스에서 실행하는 작업의 단위를 의미합니다. 이번 글에서는 송금하는 과정을 예제로 전체적인 개념들을 설명하고자 합니다. 또한 테스트를 위해 MySQL(InnoDB)을 활용하였습니다. 예제는 다음과 같습니다. A라는 사람이 B라는 사람에게 송금을 하면, 아래와 같은 과정으로 이루어 진다고 가정하겠습니다. A 계좌에서 출금 B 계좌에 위에서 차감된 금액만큼 입금 송금은 2 단계로 나누어지지만 크게는 하나의 transaction(작업)이라고 할 수 있습니다. 하지만 데이터베이스 관련된 모든 작업을 transaction이라고 하지는 않습니다. Transaction은 다음과 같은 특징(ACID)을 가져야합니다. Atomic Atomic이란 '원자의'란 의..