여러 테이블에 하나의 API로 INSERT 하기

송철진·2022년 12월 4일
0

2nd Project

목록 보기
2/4

Blocker

다음과 같이 Products 테이블과 Product_images테이블이 있다
두 테이블은 Products.id를 Product_images.product_id가 참조하는 관계다

이미지url이 포함된 상품 정보 등록(POST) 요청이 왔을 때
한번에 등록하는 방법이 고민이었다.

처음에는 두 테이블을 join해서 서브쿼리로 생성한 테이블에 데이터를 INSERT하는 방법을 떠올렸지만 JOIN 조건인 products.id가 아직 생성되지 않은 시점이므로 불가능했다.

다음에는 products테이블에 이미지url을 제외한 나머지 데이터를 먼저 INSERT하고 가장 최근에 등록된 products.id를 SELECT로 가져와서 product_images테이블에 INSERT하는 방법을 떠올렸다. 근데 만약에 서로 다른 두 컴퓨터A,B에 동일한 ID로 로그인해서 동일한 시간에 상품정보를 POST한다면 어느 것이 A의 이미지이고 B의 이미지인지 어떻게 구분할 수 있겠는가? 이것도 불가능했다.

Solution

호준 멘토님으로부터 방법을 찾았다.
상품 등록 시, products테이블에 INSERT하고 결과(result)를 콘솔을 찍으면 products.id가 나온다. 그걸 가져다가 product_images테이블에 product_id 할당해서 이미지 url 추가해주면 될 것!

const result = await appDataSource.query( `INSERT ...`);
console.log(result);

👉 insertId라는 키로 접근하면 됨!

그리고 여러 장의 이미지를 등록해야할 때,
INSERT문을 여러번 쓰는게 아니라 벌크로 보내는 방법:

insert into table_name (id, name) values (1, "가"), (2, "나"), (3, "다")

INSERT bulk 참조 링크:
https://dev.dwer.kr/2020/04/mysql-bulk-inserting.html

profile
검색하고 기록하며 학습하는 백엔드 개발자

0개의 댓글