아.. 잘 진행하다가, 아주 난감한 결함을 발견했다. 한번 테스트 해볼려고 AWS에 올린 리눅스 서버에서 스크래핑을 하는데, 거의 10분 가까이 걸리는 것이다. 겁나 느리다. 이 때 아차 싶던게.. 스크래핑 하고 있을 때 데이터 수집하고 삭제하고 난리인데 실제 사이트에서 10분동안 그런게 보인다는 것이다.;;;;;; 아....이런...

 

어떻게 할까 머리를 쥐어짜다가, 이거 꽤.. 괜찮은데? 라는 아이디어가 생겼다.

 

어차피 여기 데이터베이스는 300~400건도 안되고, 계속 삭제되니 중요한 데이터도 아니다. 그러니까, 동일한 DB를 두개 만들고, 하나는 스크래핑용, 하나는 실제로 HTML에서 출력하는 용으로 사용하는 것이다.

 

그리고, 스크래핑이 완료되면 스크래핑이 완료된 DB를 HTML에서 출력하는 용도의 DB로 이름을 바꿔버리는 것이다... ㅋㅋㅋㅋㅋㅋ..ㅋㅋㅋㅋ

 

 

정리해보자.

 

- 동일한 형태의 데이터베이스를 총 2개 만든다. 그 이유는, 스크래핑 돌리는 동안, 서버에 붙으면 데이터가 이상하다. 스크래핑 도중이라서 그렇고, 스크래핑이 오래 걸린다.

- 즉 사용중인 데이터베이스는 그대로 두고, 스크래핑시 데이터 저장하는 데이터베이스를 따로 만들어 두고 이름을 서로 바꾸는 방식으로 한다.

- 데이터를 복사하지 않고 이름을 바꾸는 이유는 복사보다 이름 변경이 훨씬! 빠르기 때문이다. 사용자가 중간에 이상한 데이터를 볼 가능성을 최대한 낮추기 위함이다.

- 즉 이름을 서로 바꾸므로 총 2개의 테이블이 있어야 한다. 이름은 다음과 같다.
product_data : 메인 테이블  /  bg_product_data : 스크래핑용 테이블

 

 

전체적인 순서는 다음과 같다.

 

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

---이하 반복---

 

 

구문은 다음과 같다.

conn = pymysql.connect(host="XXXXXXXXXXX", port=XXXXX, user="root", password="root", db="XXXXXe", charset="utf8")
curs = conn.cursor()

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;"

curs.execute(originalToDummy)
curs.execute(bgToOriginal)
curs.execute(dummyToBg)

conn.commit()
conn.close()

 

이제 스크래핑을 돌리고, 내 사이트에서 F5를 계속 치면서 보고 있었는데, 스크래핑 끝나자마자 값이 딱 바뀌고 전혀 문제가 없었다. 

 

개발이라는 것은 참... 진짜 어떻게는 꾸역꾸역 해 내는게 참 신기하기도 하고 재밌기도 하다. 근데 더 이상 이런 결함은 없었으면..ㅜㅜ

+ Recent posts