본문 바로가기

프레임워크/Nest.js

ASYNC와 AWAIT란?

async와 await

 

💡 파이썬에서 비동기 프로그래밍을 지원하는 문법 요소로, 특히 asyncio 라이브러리와 함께 많이 사용된다.

→ 이를 통해 여러 작업을 동시에 수행할 수 있다.

NestJS에서도 마찬가지로 비동기 프로그래밍을 지원하는 문법 요소로 사용된다.

 

NestJS 에서 

 팩토리 함수는 비동기적일 수 있으며 .을 통해 종속성을 주입할 수 있다.

 

async

✍️ 함수를 비동기적으로 정의하는데 사용

 

이 함수는 '코루틴(coroutine)' 이라고 불리며, 실행을 중단하고 다른 작업을 수행할 수 있게 만들어 준다.

 

 

await 

✍️ 다른 비동기 함수(코루틴)의 실행을 기다리는 데 사용

 

이 키워드를 사용하면 코드 실행이 해당 비동기 작업이 완료될 때까지 일시 중단된다.

 

 ✅비동기 프로그래밍을 통해 CPU 바운드 작업(계산 집약적 작업)이 아닌 I/O 바운드 작업(파일 읽기/쓰기, 네트워크 요청 등)에서 더욱 효율적으로 작업을 처리할 수 있다.

 


예시

- python 

async def my_async_function():  
    print("Start")  
    await some_other_async_function()  # 다른 비동기 함수를 기다립니다.  
    print("End")

 

- NestJS

서비스 메서드 : 데이터베이스에 접근하거나 외부 API를 호출하는 메서드에서 async와 await를 사용한 예시

import { Injectable } from '@nestjs/common';  
import { User } from './user.entity'; // User Entity  
import { UserRepository } from './user.repository'; // User Repository  

@Injectable()  
export class UserService {  
    constructor(private readonly userRepository: UserRepository) {}  

    async findUserById(id: number): Promise<User> {  
        // 비동기적으로 사용자 정보를 찾고, 결과를 반환  
        return await this.userRepository.findOne(id);  
    }  
}

 

 

- findUserById 메서드는 async로 정의되어 있어서, 내부에서 userRepository.findOne(id)를 호출할 때 await를 사용하여 결과가 올 때까지 대기합니다.

 


 

📌 정리 

async : "이 함수는 나중에 다시 호출할 수 있다"라고 선언하는 것과 같다. 즉, 이 함수는 다른 작업을 할 수 있도록 한정된 자원을 잠시 멈추고 기다려야 한다.

 

await : "이 작업이 끝날 때까지 기다려달라" 라고 프로그램에 요청하는 것이다. 이 작업은 대기 중인 다른 작업이 완료되기를 기다린다.

 

✅ 이러한 방식으로 프로그래밈 내에서 여러 작업을 동시에 실행할 수 있으며, 대기 시간 동안 CPU를 다른 일을 하도록 할 수 있게 돕는다.

 

 

 

 

728x90
SMALL

'프레임워크 > Nest.js' 카테고리의 다른 글

Promise 객체란?  (0) 2025.01.23