분류 전체보기
-
낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock)DB 2024. 11. 14. 20:51
1. 낙관적 락(OPtimistic Lock)낙관적 락은 충돌이 잘 발생하지 않는다고 가정하고 자원을 제어하는 방식이다. 자원을 사용하는 동안 락을 거는 대신, 작업을 끝내기 직전에 충돌이 발생했는지 검사한다. 낙관적 락은 다음과 같은 과정으로 동작한다.자원을 사용할 때 락을 걸지 않고, 다른 프로세스도 동시에 접근할 수 있도록 허용한다.자원 사용이 완료되면, 그 동안 자원이 변경되지 않았는지 확인한다.만약 다른 프로세스가 자원을 변경한 것이 확인되면, 작업을 취소하고 다시 시도한다.이 방식은 자원을 사용하는 동안 락이 걸리지 않기 때문에 성능이 높으며, 충돌이 거의 발생하지 않는 환경에서 효과적이다. 하지만 충돌이 빈번하다면 작업을 반복해야 할 수 있어 비효율적이다. 2. 비관적 락 (Pessimist..
-
DB - 블로킹(Blocking)과 데드 락(Deadlock)DB 2024. 11. 11. 22:27
블로킹(Blocking)정의:한 트랜잭션이 자원(테이블, 행 등)을 Lock 하고 있을 때, 다른 트랜잭션이 해당 자원에 접근하지 못하고 기다리는 현상특징:일시적인 현상으로, Lock 이 해제되면 자연스럽게 해결됨정상적인 데이터베이스 동작의 일부데이터 일관성을 보장하기 위한 매커니즘예시 코드)-- 블로킹 예시-- 트랜잭션 1BEGIN;UPDATE accounts SET balance = balance - 100 WHERE id = 1;-- 여기서 잠시 멈춤 (아직 COMMIT하지 않음)-- 트랜잭션 2 (동시 실행)BEGIN;UPDATE accounts SET balance = balance + 50 WHERE id = 1; -- 트랜잭션 1이 COMMIT할 때까지 대기 (블로킹) 데드 락(Deadlo..
-
Airflow catch up 과 backfillAirflow 2024. 11. 10. 18:05
1. catch upcatch up 은 DAG 가 활성화된 시점과 현재 시점 사이의 누락된 모든 과거 일정을 자동으로 실행하는 기능이다.DAG의 start_date 부터 현재까지의 누락된 실행을 자동으로 처리한다.catchup=True 파라미터로 설정할 수 있다.예시:with DAG( 'example_dag', start_date=datetime(2024, 1, 1), schedule_interval='@daily', catchup=True) as dag: # tasks here2. backfillBackfill 수동으로 특정 기간의 DAG 실행을 처리하는 명령어시작 날짜와 종료 날짜를 지정하여 해당 기간의 테스크를 실행CLI 명령어를 통해 실행예시:from airflow im..
-
공유 락(Shared Lock, S-Lock)과 배타 락(Exclusive Lock, X-Lock)DB 2024. 11. 10. 01:53
1. 공유 락(Shared Lock, S-Lock)읽기 작업(SELECT)을 위한 잠금여러 트랜잭션이 동시에 같은 데이터에 대해 공유락을 획득할 수 있음데이터를 읽을 수는 있지만 수정은 불가능다른 트랜잭션의 공유락과 호환되지만, 배타락과는 호환되지 않음사용 예시SELECT * FROM employees WHERE id = 1 LOCK IN SHARE MODE;2. 배타 락(Exclusive Lock, X-Lock)쓰기 작업(INSERT, UPDATE, DELETE)을 위한 잠금하나의 트랜잭션만 획득 가능데이터 읽기와 수정 모두 가능다른 트랜잭션의 공유락, 배타락 모두와 호환되지 않음사용 예시SELECT * FROM employees WHERE id = 1 FOR UPDATE;락 호환성 매트릭스 공유 락배..
-
Isolation level - 트랜잭션 격리 수준DB 2024. 9. 22. 20:00
1. Isolation Level 이란트랜잭션의 격리 수준(Isolation Level)이란, 여러 트랜잭션이 동시에 데이터베이스에 접근할 떄, 각 트랜젝션이 다른 트랜잭션의 영향을 받지 않고 독립적으로 실행될 수 있도록 보장하는 수준을 의미한다. 다중 사용자 데이터베이서 환경에서 여러 트랜잭션이 동시에 실행될 때, 트랜잭션이 올바르게 실행되고 DB 의 무결성을 유지하기 위해 2. Isolation Level 의 단계Read Uncommitted가장 낮은 수준의 isolation level다른 트랜잭션에서 아직 커밋되지 않은 데이터도 읽을 수 있음장점: 최고의 성능단점: Dirty read, Non-repeatable read, Phantom read 발생 가능성 높음Read Comitted다른 트랜잭..
-
Github Pages node_modules 접근기타 2021. 7. 6. 14:38
새롭게 나의 개인 페이지 리뉴얼을 하며 Github Pages 기능을 활용하려 하던 중 문제가 발생했다. npm을 사용하여 install한 module들에 아무래도 접근이 안되었다. 이유를 찾아보니 Github는 Jekyll을 사용하는데 이 녀석이 default 값으로 node_modules 디렉토리를 ignore 한다. 여기서 찾음 따라서 이를 해결하기 위해서는 root directory에 .nojekyll이라는 빈 텍스트 파일을 생성해주면, jekyll을 사용하지 않을 수 있다. 세줄요약 Github가 사용하는 jekyll이 node_modules의 접근을 막는다 .nojekyll 이라는 이름을 가진 빈 텍스트 파일을 생성한다. jekyll을 사용하지 않기 때문에 node_modules의 접근을 막지..
-
Python selenium ubuntu에서 구동하기Linux 2021. 7. 6. 14:37
Selenium을 구동하는데 나의 경우는 서버에서 알아서 크롤링 하고 값을 리턴해줘야 하는 상황에 놓여있었다. 따라서 컨테이너를 구성할 때 마다 Selenium 라이브러리를 포함한 코드를 빌드하기 위해 약간의 수고스러움이 필요했고 따라서,, 그냥 자동화 하도록 shell script를 작성했다. 해당 script는 docker의 python 이미지를 기준으로 작성되었다. 해당 프로젝트 GitHub – https://github.com/O-Seonsik/O-s-selenium-builder wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - sh -c 'echo "deb [arch=amd64] http://dl..