본문 바로가기
공습경보/공습경보 개발일지

[공습경보 개발일지] 5. 스크래핑 코드 제작 완료, 그리고 생각

by 몬스터벨 2024. 2. 3.

시간이 많이 지체된 것 같아 초조하다.

 

오늘 한 일

개발 쪽

커뮤니티에서 댓글 조작 유도 글을 스크래핑을 해와서 링크 목록을 완전히 만들 수 있게 되었다. 특히 링크에 링크를 타고 유도하는 것도 스크래핑이 가능하도록 만들어놨다.

 

링크는 예시로 임의로 넣었음을 알림

 

예를 들어 해당 사이트에서 1과 같이 댓글 여론 조작을 좌표들이 모아져 있는 다른 커뮤니티의 글을 올려둘 수 도 있고, 2와 같이 단축 링크를 올려둘 경우도 있다. 우선 2와 같은 단축 링크는 어떤 링크였는지 원본을 확인하게 해놓았고, 1번과 같은 경우는

 

 

원본 글로 들어가 다시 한번 스크래핑을 해 링크 목록을 처음 글에 추가하도록 해놨다. 위 예시처럼 링크를 타고 간 커뮤니티 글 속에 또 커뮤니티 링크를 넣어놓은 경우도 문제 없이 스크래핑 하도록 해놨다.

 

 

스크래핑 예시. 이제 특정 시간마다 자동으로 스크래핑 하도록 해놓고, 이걸 DB에 넣도록 만들어주면 끝이다.

 

 

생각 쪽

법률 관련

우선 법에 대해서는 잘 모르지만, 크롤링이 법적인 측면에서 고려해봤을 때 문제가 있는지 한번 검색해 봤다. 결론적으로는 큰 문제가 없어 보였다.

 

관련 법률은 크게 3가지인거 같다. 정보통신망법 위반죄, 저작권법 위반죄, 업무방해죄

 

첫 번째는 정보통신망법 위반죄로, 48조 1항에  "누구든지 정당한 접근권한 없이 또는 허용된 접근권한을 넘어 정보통신망에 침입하여서는 아니 된다."라고 적혀있다. 하지만 일반적인 크롤링의 경우에는 누구나 인터넷 접속을 해서 볼 수 있는 내용을 가져오는 것이므로 이에 해당하지 않는다. 심지어 REST API를 이용하는 경우에도 패킷을 보면 쉽게 api url 주소 등을 알 수 있고 별도로 막아놓지 않았다면 접근 권한을 제한한다고 보지 않는다고 한다.

 

두 번째는 저작권법 위반죄로, 정확히 말하면 데이터베이스 제작자의 권리에 관한 법이다. DB의 상당한 부분을 복제할 때 침해되었다 보는거 같은데, 애초에 일부분만 복제하고 체계?를 가져오는게 아니라 내 경우에는 해당하지 않을꺼 같다.

 

마지막은 업무방해죄로, 크롤링을 해서 정보처리에 장애를 일으킬 때 해당된다. 하지만 내가 하는 크롤링은 몇 분에 한 번 씩 게시판에서 글을 클릭해서 보는 정도라 장애를 일으킬 정도가 아니다. 그리고 최대한 서버에 무리가 되지 않게 만들 것이다.

 

여하튼 셋 다 문제가 전혀 되지 않아보였다.

 

(참고 자료 : # #)

 

방향성 관련

과연 이걸 원하는 사람이 있을까?를 수시로 피드백하면서 확인해봤어야 되지 않나 싶었다. 비록 반쯤은 공부 목적이었다고 해도, 열심히 만든게 아무도 쓰지 않고 버려진다면 안타까울거 같기 때문이다. 요즘 유행하는 에자일 방식에서도 빠르게 만들고 빠르게 반응을 확인하는게 중요하다고 하기도 하고. 무언가 집중할 때 잠수타버리는 내 습관은 별로 좋지 않은 습관일까 싶다.

 

해당 크롬 익스텐션의 예상 사용자는 댓글 여론 조작을 싫어하는 사람, 왜곡된 여론을 보고 싶어하지 않는 사람으로 상정하고 있다. 더 넓게는 좀 더 생산적인 정치적 토론을 원하는 사람, 중도를 원하는 사람들까지. 난 분명 이런 사람들이 많을 것이라고 믿는다. 다만 이런 사람들을 어디서 찾아야 되는지는 잘 모르겠다...

 

배운 점

  • 재귀 함수와 Promise.all을 본격적으로 사용해봤다.
  • 중복 제거 알고리즘은 전체 목록을 한번 반복하며 해쉬 테이블에 없다면 넣고, 있다면 넣지 않고 넘어가는 방식이 가장 좋은 알고리즘이란걸 알았다. 막연하게 모를 때는 정렬 후 연속되게 반복되는게 있는걸 없애는게 낫지 않나 생각했지만, 해당 방식은 정렬하는게 시간복잡도가 O(nlogn), 한 번 반복하는게 O(n)이라 전체 시간 복잡도가 O(nlogn)이었다. 반면, 해쉬 테이블을 이용한 방법은 O(1) * O (n)으로 O(n)이라 더 간단했다. 자바스크립트에는 해쉬테이블을 기본으로 쓸 수 있는 Set이라는 자료구조가 있으므로 이것을 이용했다. 사실 링크 목록이 그리 길진 않아서 뭐로 해도 성능에 큰 상관은 없긴 하다.
  • Object.keys, Object.assign, Array.concat 등등 여러 메서드들. 

 

해야할 점

  • 우선 빠르면 다음주 목요일까지 이 작업을 마치고 싶다. 등록 후 검수까지 3영업일 정도 걸린다 하니, 시간을 맞추기 위해선 월요일 날에 바로 크롬 웹스토어에 등록을 해야한다. 그러면 일단 백엔드보다는 프론트엔드를 더 만져야겠다.
  • 홍보수단 강구하기.