상세 컨텐츠

본문 제목

[nestJS] repository // this.save , this.create에서 왜 await가 있고 없고?

카테고리 없음

by esoesmio 2024. 5. 10. 14:38

본문

 

 

 

 

여기서 `this.create()`와 `this.save()`의 사용법에 대한 차이는 메서드의 작업 특성과 관련이 있습니다.

### `this.create()`

`this.create()` 메서드는 단순히 새로운 엔티티 객체를 메모리에서 생성하고 초기화하는 작업을 수행합니다. 이 메서드는 데이터베이스와의 비동기 통신이나 복잡한 계산 과정을 포함하지 않으므로, 반환되는 값은 바로 사용 가능한 객체입니다. 따라서, `this.create()`는 동기적으로 실행되고 JavaScript 실행 환경 내에서 즉시 완료됩니다. 이러한 이유로 `await` 키워드가 필요하지 않습니다.

```typescript

const user = this.create({ username, password: hashedPassword });

```
이 코드는 `User` 엔티티의 인스턴스를 생성하고, 주어진 `username`과 `hashedPassword`로 초기화합니다. 이 과정은 데이터베이스 작업을 포함하지 않기 때문에 비동기 처리가 필요 없습니다.

### `this.save()`

반면, `this.save()` 메서드는 데이터베이스에 엔티티를 저장하는 작업을 포함합니다. 이 과정은 데이터베이스 서버와의 통신을 필요로 하며, 네트워크 지연이나 다양한 데이터베이스 처리 과정을 포함할 수 있습니다. 따라서 `this.save()`는 비동기적으로 실행되고, 작업의 완료를 기다려야 할 필요가 있습니다. 이 때문에 `await` 키워드를 사용하여 JavaScript가 해당 프로미스가 완료될 때까지 기다리게 할 수 있습니다.

```typescript

await this.save(user);

```
이 코드는 `user` 엔티티를 데이터베이스에 저장하고, 이 작업이 완료될 때까지 실행을 일시 정지합니다. 데이터베이스 작업이 성공적으로 완료되면 다음 코드로 진행하고, 오류가 발생하면 적절한 예외 처리가 가능합니다.

### 결론

이렇게 `this.create()`와 `this.save()`의 사용에서 `await`의 유무는 각 메서드의 실행 특성에 기반합니다. `create()`는 순수하게 메모리 상에서의 객체 생성을 담당하므로 동기적이며, `save()`는 데이터베이스와의 비동기 통신을 수반하므로 비동기적입니다. 이 구분은 네스트JS 및 TypeORM의 사용에서 매우 중요하며, 비동기 작업을 정확히 이해하고 관리하는 데 도움이 됩니다.

 

 

 
 
 
 

댓글 영역