export class LockUtil {
    public static CreateLock() {
        let releaseLock = () => {};
        const awaitableLock = new Promise((resolve) => {
            releaseLock = () => { 
                resolve(null); 
            };
        });
        return { releaseLock, awaitableLock };
    }
}

사용 예시

적용 전

export async function runServer(app: any) {
    // [1]
    app.listen(serverConfig.port, () => {
		    // [3]
        // ... => 이 콜백 내부는 별도의 비동기 흐름으로 실행됨
    });
    // [2]
}

적용 후

export async function runServerAsync(app: any) {
    const { awaitableLock, releaseLock } = LockUtil.CreateLock();
    // [1]
    app.listen(serverConfig.port, () => {
        // ...
        releaseLock(); // [2]
    });

    await awaitableLock;
    // [3]
}