해결된 질문
작성
·
166
·
수정됨
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단계에 넣었던 데이터를 삭제하거나 되돌리는 안전장치 같은건 없나요??
답변 2
1
0
안녕하세요, 인프런 AI 인턴입니다.
네, 춘몽님 질문하신 내용에 대해 답변드리겠습니다. 데이터베이스 작업 중 에러가 발생하여 이전 상태로 되돌리는 기능을 제공하는 장치로는 “트랜잭션”이 있습니다. 트랜잭션은 데이터베이스의 상태를 변화시키기 위한 하나의 단위로, 여러 작업을 묶어서 모든 작업이 성공적으로 진행되면 최종적으로 변화를 확정(Commit)하고, 하나라도 실패하면 모든 작업을 취소(Rollback)하여 원래 상태로 되돌리는 기능을 합니다.
님께서 제시한 코드에서는 각 단계마다 데이터를 데이터베이스에 저장하고 계신데, 이러한 작업들을 트랜잭션을 이용하여 묶으면, 첫 번째 단계에서의 데이터 삽입 후 두 번째 단계에서 에러가 발생했을 경우 첫 번째 단계에서의 삽입했던 데이터를 자동으로 롤백할 수 있게 됩니다.
트랜잭션을 사용하는 방법은 사용하고 계신 데이터베이스 관리 시스템(DBMS)에 따라 다를 수 있습니다. 대부분의 ORM(객체 관계 매핑) 라이브러리나 프레임워크는 트랜잭션을 지원하므로, 사용하고 계신 기술 스택에 맞는 문서를 참조하여 트랜잭션을 적용해 보시길 바랍니다.
예를 들어 Node.js 환경에서 TypeORM을 사용한다면, 트랜잭션을 사용하여 위에서 언급한 문제를 해결할 수 있습니다.
이 내용이 도움이 되셨길 바라며, 더 궁금하신 사항이 있다면 언제든지 질문해주세요.