레디스 같은 저장소가 아닌 로컬에서 구현할 때 동시성 이슈를 막기 위해 lock을 구현해야할 때가 있다. 자바스크립트 패키지중 하나인 await-lock을 이용해 add나 update에 대해서 lock을 걸어 동시성이슈를 막을 수 있다.
https://www.npmjs.com/package/await-lock
import AwaitLock from 'await-lock';
export class LocalRepositoryService {
private _state = new Map<number, any>(); // 저장소
private _lock: AwaitLock;
constructor() {
this._lock = new AwaitLock(); // initialize 될 때 lock 생성
}
public async get(
id: number,
options: GetOptions = { lock: false },
): Promise<any> {
const user = this._state.get(id);
return user;
}
public async add(user: any) {
await this._lock.acquireAsync(); // lock 획득
try {
this._userState.set(user.id, user);
return true;
} catch (error) {
console.log(error);
return false;
} finally {
this._lock.release(); // 종료시 lock 반환
}
}
}
'Language > Javascript, typescript' 카테고리의 다른 글
[책 리뷰] 자바스크립트로 배우는 SICP 후기 (0) | 2023.02.26 |
---|---|
[Typescript] Typescript 기본 세팅 (0) | 2022.08.25 |
[Typescript] Object key 타입 정의 (0) | 2022.08.17 |
[typescript] class-transformer, Object를 클래스로 클래스를 Object로! [1] (0) | 2022.04.14 |
[javascript] 변수로 object 키 설정 (0) | 2022.03.20 |