전체 글
-
Nestjs Lifecycle 과 Event hooksNode 2024. 11. 19. 22:52
1. 라이프사이클NestJS는 애플리케이션 시작과 종료 시 다양한 이벤트를 발생시킨다. 이를 통해 초기화 작업, 리소스 설정, 클린업(종료 작업) 등을 수행할 수 있다.전체 수명 주기를 초기화, 실행 및 종료의 세 단계로 나눌 수 있다.2. 라이프사이클 이벤트NestJS 의 Lifecycle Events 는 애플리케이션 또는 특정 구성 요소(module, provider, controller)의 수명 주기 동안 특정 시점에 실행되는 메서드이다. 명시적으로 각 훅의 인터페이스를 implements 해야 훅이 정상적으로 트리거된다. 2.1. 애플리케이션 초기화 관련 이벤트이벤트대상설명OnModuleInit모듈, 프로바이더모듈이나 프로바이더가 생성되고 의존성이 주입된 후 호출된다.OnApplicationBo..
-
분산 락(Distributed lock)기타 2024. 11. 17. 20:19
1. 분산 락의 상세 개념정의: 분산 시스템에서 공유 자원에 대한 동시 접근을 제어하는 동기화 메커니즘입니다.작동 방식:모든 서버/프로세스가 접근할 수 있는 공유 저장소(Redis, ZooKeeper 등)에 락을 저장락을 획득하려는 프로세스는 원자적 연산으로 락 생성을 시도락을 획득한 프로세스만 공유 자원에 접근 가능작업 완료 후 락을 해제하여 다른 프로세스가 사용할 수 있게 함2. 분산 락의 핵심 요구사항상호 배제(Mutual Exclusion): 특정 시점에 하나의 프로세스만 락을 보유할 수 있음데드락 방지(Deadlock Prevention):락 획득 실패 시 적절한 타임아웃 설정락 보유자가 비정상 종료된 경우를 대비한 자동 해제 메커니즘고가용성(High Availability):락 서비스 자체의 ..
-
낙관적 락(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다른 트랜잭..