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를 다른 일을 하도록 할 수 있게 돕는다.
'프레임워크 > Nest.js' 카테고리의 다른 글
Promise 객체란? (0) | 2025.01.23 |
---|