inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드캠프] 부트캠프에서 만든 고농축 백엔드 코스

10-06 1:1 관계 등록 API

DB에 데이터 넣는 중간에 에러나면 되돌리는 장치같은건 없나요??

해결된 질문

230

춘몽

작성한 질문수 15

0

 안녕하세요.

 

async create({
    createProductInput,
  }: IProductsServiceCreate): Promise<Product> {
   
    const { productSaleslocation, ...product } = createProductInput;

    const result = await this.productsSaleslocationsService.create({
      productSaleslocation,
    }); 

    const result2 = this.productsRepository.save({
      ...product,
      productSaleslocation: result, 
    });

    return result2;
  }

이번 강의를 보면 2개의 연관된 테이블에 데이터를 넣기 위해서 각각의 테이블에 데이터를 각각 넣어주는 2단계 구조라고 이해했습니다.

 

saleslocation 테이블에 location 데이터 넣고 (1단계),

받아온 데이터(result)를 product 테이블에 product 데이터와 함께 넣는 (2단계),

이런 2단계의 구조로 이루어진것 같은데,

만약에 2단계에서 에러가 나게 되면 1단계에 넣었던 데이터를 삭제하거나 되돌리는 안전장치 같은건 없나요??

 

nestjs db

답변 2

1

노원두

안녕하세요! 춘몽님!

정말 열심히 공부하시는 것 같네요!^^
해당 내용과 관련하여 트랜잭션이라는 주제로 결제파트에서 곧 배우게 됩니다!^^

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

네, 춘몽님 질문하신 내용에 대해 답변드리겠습니다. 데이터베이스 작업 중 에러가 발생하여 이전 상태로 되돌리는 기능을 제공하는 장치로는 “트랜잭션”이 있습니다. 트랜잭션은 데이터베이스의 상태를 변화시키기 위한 하나의 단위로, 여러 작업을 묶어서 모든 작업이 성공적으로 진행되면 최종적으로 변화를 확정(Commit)하고, 하나라도 실패하면 모든 작업을 취소(Rollback)하여 원래 상태로 되돌리는 기능을 합니다.

님께서 제시한 코드에서는 각 단계마다 데이터를 데이터베이스에 저장하고 계신데, 이러한 작업들을 트랜잭션을 이용하여 묶으면, 첫 번째 단계에서의 데이터 삽입 후 두 번째 단계에서 에러가 발생했을 경우 첫 번째 단계에서의 삽입했던 데이터를 자동으로 롤백할 수 있게 됩니다.

트랜잭션을 사용하는 방법은 사용하고 계신 데이터베이스 관리 시스템(DBMS)에 따라 다를 수 있습니다. 대부분의 ORM(객체 관계 매핑) 라이브러리나 프레임워크는 트랜잭션을 지원하므로, 사용하고 계신 기술 스택에 맞는 문서를 참조하여 트랜잭션을 적용해 보시길 바랍니다.

예를 들어 Node.js 환경에서 TypeORM을 사용한다면, 트랜잭션을 사용하여 위에서 언급한 문제를 해결할 수 있습니다.

이 내용이 도움이 되셨길 바라며, 더 궁금하신 사항이 있다면 언제든지 질문해주세요.

그래프 ql 문서 사용할때 느낌표 남는거 어떻게 없애나요?

0

83

2

강의 전체 소스 코드를 받고싶습니다.

0

76

2

fontawesome 사용 문의

0

77

2

소스 코드 부탁드립니다~

0

85

2

깃 레포지터리 소스

0

82

2

커리큘럼12.css 정렬 에 나오는 과제 정답알고싶어요

0

73

2

10-01 Entity TypeOrmModule.forRoot 에 entities

0

85

3

강의 버전관련 문의입니다

0

102

2

Ubuntu 설치 관련

0

61

1

schema.gql 질문 드립니다.

0

51

1

서버 재실행시 Many to Many

0

101

3

input 관련 문의

0

90

2

Rest API 보다는 graphql이 주된 내용인데

0

130

2

강의 전체 소스코드 받을수있을까요?

0

155

1

도커볼륨 마운트 관련

0

127

2

findOne 타입스크립트오류

0

109

1

http => htrtps 호출 인증서 신뢰 오류

0

350

1

self-signed certificate in certificate chain 에러 발생

0

413

1

mongoose 설치 오류

0

142

1

특정 API, 특정 IP 허용 (단일경로에 CORS 활성화)

0

281

2

08-06

0

178

3

구조랑 패턴 관련해서 질문

0

125

2

mydocker

0

128

2

coolsms statuscode 2000 인데 전송안돼는 경우 확인.

0

156

1