안녕세계
이전 포스팅에서 Redisson을 사용하여 Redis 분산 락을 손 쉽게 구현할 수 있는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 분산 분산 락을 거는 위치에 따라 발생할 수 있는 문제에 대해 알아보고 권장하는 분산 락 위치에 대해 알아봅니다. 트랜잭션 이후 분산 락 분산 락을 건다는 의미는 결국 동일 자원에 대해 동시 작업하는 것을 제어하기 위함입니다. 그렇다면 우리는 분산 락을 건 상태에서 데이터베이스 트랜잭션과 관련된 작업을 시작해야합니다. 그런데 만약 데이터베이스 트랜잭션을 먼저 시작하고 분산 락을 걸게되면 어떻게 될까요? 종종 데이터베이스 트랜잭션이 먼저 시작된 이후 분산 락을 걸어도 별 다른 문제가 발생하지 않는고 생각할 수도 있습니다. 다음 그림을 살펴보겠습니다. 위 그림에서 처럼 트..
이전 포스팅에서는 Redisson을 사용하여 Redis 분산 락을 손 쉽게 구현할 수 있는 방법에 대해서 알아보았습니다. 이번 포스팅에서는 특정 요구 사항을 분산 락과 상태 키를 사용하여 동시성 이슈를 제어하며 동시에 작업을 처리할 수 있는 방법에 대해 알아보겠습니다. 일반적인 분산 락 사용 분산 락을 활용하는 일반적인 방식은 먼저 락을 획득한 다음, 특정 작업(여기서는 compute 메서드)을 실행하고 나서 락을 해제하는 순서로 진행됩니다. 동시성 문제가 발생할 수 있는 작업에 분산 락을 적용하면, 동시 작업시 발생할 수 있는 문제들을 안정적으로 작업을 처리할 수 있습니다. 아래 코드는 lockKey에 대해 락을 확득하고, 로직을 실행한 뒤 락을 해제하는 분산 락 사용의 일반적인 예시입니다. class..
분산 락이란? 분산 락(Distributed Lock)은 다수의 서버(또는 프로세스)가 동시에 같은 자원에 접근할 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용되는 동기화 메커니즘입니다. 분산 락의 핵심은 "하나의 자원에 대해 한 번에 하나의 서버만 작업을 수행할 수 있다"는 것입니다. 이를 통해 데이터의 동시 변경을 막고, 시스템 전체의 데이터 일관성을 보장합니다. 분산 락에 대해 이해하기 위해서 먼저 락(Lock)의 기본 개념과 분산 시스템(Distributed System)의 특성을 알아보겠습니다. 락이란? 락은 한 번에 하나의 프로세스만 특정 자원을 사용할 수 있도록 보장하는 메커니즘입니다. 대표적인 예로 데이터베이스 레코드 락이 있습니다. 데이터베이스 레코드 락은 프로세스1이 데이터A를 ..
안녕하세요. 이번 포스팅에서는 MacOS에 Oracle(오라클)을 설치하는 방법에 대해 알아봅니다. MacOS에서 Oracle DB를 사용하기 위해서 Docker를 이용합니다. 그리고 테스트시 사용할 scott 계정 활성화 방법에 대해서도 설명합니다. Oracle 11g 설치 # 이미지 다운로드 $ docker pull deepdiver/docker-oracle-xe-11g # oracle11g 컨테이너 실행 $ docker run --name oracle11g -d -p 8080:8080 -p 1521:1521 deepdiver/docker-oracle-xe-11g # sqlplus로 oracle11g 컨테이너 접속 $ docker exec -it oracle11g sqlplus Enter user-n..
MySQL 8.x 버전을 사용할 때면 항상 고통 받습니다.. 오랜만에 MySQL 관련한 오류 해결방법에 대해 포스팅하네요. 본 포스팅에서는 DBeaver에서 MySQL DB를 연결하려고 할 때 발생한 에러와 해결방법을 알아봅니다. 발생한 MySQL 8.x 에러 😢 해결 방법 다양한 해결 방법이 있지만 가장 쉽게 해결할 수 있는방법은 Driver properties 설정을 바꾸는 것입니다. Driver properties > serverTimezone > UTC로 변경합니다. 이제 다시 Test Connection을 하면 정상적으로 접속되는 것을 확인할 수 있습니다. 단, 한 가지 단점은 새로운 DB 연결 설정시마다 같은 작업을 해줘야합니다. 위 작업을 반복하지 않기 위해서는 MySQL Timezone d..
이번 포스팅에서는 MacOS에서 H2 데이터베이스를 설치하고, H2 데이터베이스에서 에러 없이 실행하는 방법에 대해 알아보겠습니다! 🧐 H2 데이터베이스는 brew를 통해 쉽게 설치할 수 있습니다. (설치 끝!! 😊) $ brew install h2 h2 명령어로 데이터베이스를 실행할 수 있습니다. $ h2 h2 명령어를 실행하면 자동으로 브라우저에 :8082로 접속됩니다. 로딩만 되고 접속이 안되는 경우 localhost:8082로 접속하면 정상적으로 접속되는 것을 확인할 수 있습니다. jsessionid 파라미터는 유지해주세요! 여기서 연결 또는 연결 시험 버튼을 누르면 다음과 같은 에러가 발생할 수 있습니다. Database "~/test" not found, either pre-create it ..
MySQL encoding 변경 (utf8, utf8mb4)MySQL 기본 패키지는 character set 이 latin1 로 설정되어있습니다. character set 을 utf8 로 설정하여 한글 및 다른 언어가 께지는 것을 처리해야합니다. 때로는 utf8mb4 로 설정하는 경우도 있는데 utf8mb4는 emoji를 데이터베이스에 저장할 수 있습니다. emoji는 4byte 문자이기 때문에 utf8 의 상위 호환인 utf8mb4를 사용해야 저장할 수 있습니다.NOTE: character set 이 utf8 인 상태에서 emoji를 데이터베이스 저장하려면 error 가 발생합니다.character set 확인방법 (1)mysql> SHOW VARIABLES WHERE Variable_name LIKE..
Mac에서 MySQL 삭제MySQL v5.7.21 기준 정상적으로 삭제되는 것을 확인하였습니다. 아래 명령어를 터미널에서 한줄씩 실행하세요.homebrew 로 MySQL을 설치한 경우# ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) # 위 에러가 발생할 경우, 다음 파일을 제거하지 않은 상태로 재설치했을 경우 발생한 가능성이 높다. $ sudo rm -rf /usr/local/var/mysql $ sudo rm -rf /usr/local/bin/mysql* $ sudo rm -rf /usr/local/Cellar/mysql $ sudo rm -rf /usr/local/etc/my.cnf..