상세 컨텐츠

본문 제목

[nestJS] ORM Repository에서 create와 save는 뭘까

카테고리 없음

by esoesmio 2024. 5. 10. 14:36

본문

`create`와 `save`는 TypeORM 라이브러리에서 제공하는 두 가지 중요한 메소드입니다. 이들은 데이터베이스와 상호작용할 때 엔티티를 생성하고 저장하는 과정을 간소화해 줍니다. 아래에서 각 메소드의 역할과 작동 방식에 대해 자세히 설명하겠습니다.

### `create` 메소드

`create` 메소드는 새로운 엔티티 인스턴스를 생성합니다. 이 메소드는 단순히 새로운 엔티티 객체를 만들고, 제공된 객체 리터럴을 기반으로 엔티티의 프로퍼티를 초기화합니다. `create`는 데이터베이스에 새로운 데이터를 삽입하지 않습니다. 대신, 메모리상에서 엔티티 객체를 구성하고, 이 객체는 나중에 데이터베이스에 저장될 수 있습니다.

```typescript

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

```
여기서 `user`는 `User` 엔티티의 새 인스턴스이며, `username`과 `password` 필드가 초기화된 상태입니다.

### `save` 메소드

`save` 메소드는 `create`로 생성된 엔티티 인스턴스를 데이터베이스에 저장합니다. 이 메소드는 엔티티가 데이터베이스에 아직 존재하지 않으면 삽입(`INSERT`)을, 이미 존재하는 경우는 업데이트(`UPDATE`)를 수행합니다. 이 메소드는 비동기적으로 작동하며, 완료되면 저장된 엔티티를 반환합니다.

```typescript

try {
  await this.save(user);
} catch (error) {
  // 에러 처리 로직
}


```
여기서 `save(user)`는 `user` 엔티티를 데이터베이스에 저장하려 시도합니다. 저장 과정에서 오류가 발생하면, 예외 처리 구문에서 이를 적절히 처리합니다.

### 에러 처리

- **ConflictException**: 이 예외는 일반적으로 중복된 데이터가 삽입되려 할 때 발생합니다. 여기서는 사용자 이름이 이미 존재하는 경우에 이 예외가 발생하며, `23505` 에러 코드(대부분의 SQL 데이터베이스에서 유니크 제약 조건 위배시 발생하는 코드)를 확인하여 `ConflictException`을 발생시킵니다.
- **InternalServerErrorException**: 이 예외는 그 외 다른 모든 유형의 데이터베이스 오류가 발생했을 때 기본적으로 발생하며, 서버 내부 오류를 나타냅니다.

이렇게 `create`와 `save`를 사용하여 TypeORM에서 데이터를 효율적으로 관리할 수 있습니다. 이 메소드들은 코드를 간결하게 유지하면서 데이터베이스 작업을 쉽게 할 수 있도록 도와줍니다.

댓글 영역