몇년만에 글을 쓰는지 모르겠다.

 

도커 컨테이너를 사용하여 스크래핑과 사이트 두개의 컨테이너를 올리는데, 스크래핑 컨테이너가 중간에 잘못 종료되는경우 DB에 문제가 생긴다. 이건 생각보다 꽤 큰 문제점이다.

 

이 문제는 DB스위칭을 하기 때문이며, DB 스위칭을 테이블 이름 변경으로 스위칭 하기 때문이다.

현재 아래와 같이 2개의 테이블이 있다.

원래 이 DB는 아래와 같은 코드로 스위칭된다.

 

# 1. bg_product_data 에서 크롤링 완료 (유저가 접속하는것은 실제로 product_data 이다.)
# 2. product_data를 dummy_product_data로 이름변경 (dummy에는 옛날 데이터가 있다.)
# 3. bg_product_data를 product_data로 이름변경 (product_data에는 최신 데이터가 있다.)
# 4. dummy_product_data를 bg_product_data로 이름변경 (옛날 데이터가 있는 dummy가 bg로 변경된다. 어차피 또 스크래핑 하면, 데이터는 싹 다 날라간다.)
# 5. bg_product_data 에서 크롤링 완료... 이하반복

originalToDummy = "ALTER TABLE product_data RENAME dummy_product_data;"
bgToOriginal = "ALTER TABLE bg_product_data RENAME product_data;"
dummyToBg = "ALTER TABLE dummy_product_data RENAME bg_product_data;"

 

근데 중간에 잘못되어 저 3개의 RENAME 작업이 모두 하나의 트랜잭션으로써 완료되지 않으면 위와같이 bg_product_data, product_data 두개로 남아야 되는데 그게 안되고 dummy_product_data, bg_product_data 이런식으로 남게 되는 것이다. 이러면 크롤링할 데이터를 넣고 DB 이름변경으로 스위칭하는데 문제가 생긴다.

 

아무튼, 괜히 문제없는 크롤링 코드를 건드리려고 했다가 DB를 보고 문제를 바로 파악해서 다행이다.

 

+ Recent posts