온라인카지노 카지노 게임 크롤링 삽질기
오랜만에 온라인카지노에 글을 올린다. 완료한 프로젝트를 비롯해서 쓰고 싶은 소재는 노트에 쌓여 가는데, 퇴근하고 바카라상 앞에 앉으면 글 한 편 완성할 기력이 남아있질 않더라.
정확히는 쓰기 싫은 게 아니라, 쓰는 행위 자체가 귀찮았다. 프로젝트 하면서 겪은 일들과 AI 전공 수업이 머릿속에 그대로 쌓여 있는데, 그걸 문장으로 옮기는 그 과정이 매번 발목을 잡았다.
해서, 엔지니어답게(?) 게으른 결론에 도달했다. 글 쓰는 게 힘들면, 글 써주는 놈을 만들면 되잖아?
이름은 글곰. 글 쓰는 곰이다. 필자의 온라인카지노 글 스타일을 학습해서, 프로젝트 메모만 던지면 초안을 뽑아주는 에이전트를 만들기로 했다. 그리고 그 과정에서 꽤나 고생을 했다. 오늘은 그 삽질기를 정리해 볼까 한다.
발단 - 백화점 안내방송 같은 글
요즘 AI에게 글을 시켜본 분들은 알 게다. 시키면 쓰긴 쓴다. 그런데 그 글이 어딘가 백화점 안내방송 같다.
"~하는 것을 추천드립니다. 도움이 되셨기를 바랍니다."
아니, 내가 언제 이렇게 상냥했다고 -_ -
내 이름 달고 나갈 글이라면 내 문체여야 한다. 다행히 필자에게는 온라인카지노에 쌓아둔 수년 치 글이 있다. 이 글들을 AI에게 입력해서 문체를 분석시키고, 그 분석 결과를 바탕으로 새 글을 쓰게 하면 되겠다는 계산이 섰다.
얼핏 보면 너무나 쉽고 간단할 것 같은 계획이었다. 그런데 말입니다...
1차 시도 - 그냥 받아오면 되겠지
문체를 학습시키려면 먼저 내가 쓴 글들부터 모아야 했다. 그런데 온라인카지노는 글 목록을 뽑아주는 공식 API가 없다. 내가 쓴 내 글인데, 내가 기계적으로 가져올 방법이 없는 게다.
그러면 어떻게 가져올 수 있을까? 답은 크롤링이다. 가장 먼저 진행한 건, 카지노 게임 페이지 주소를 그대로 받아와서 파싱하는 거였다. HTML 받아서 글 링크 목록 뽑고, 하나씩 본문을 긁으면 끝날 줄 알았다.
받아온 HTML을 열어봤다. 글 링크가 하나도 없다.
목록 자체가 서버가 그려서 주는 게 아니라, 브라우저에서 자바스크립트가 실행되고 나서야 채워지는 구조였다. 이걸 확인하는 데도 한참 걸렸다. 몇 번이나 다시 받아보고, 셀렉터를 몇 번이나 바꿔보고 나서야 자바스크립트 렌더링이라는 걸 깨달았다.
크롤링을 한두번 하는것도 아니고;;; 이걸 모를 줄이야... -0-;
2차 시도 - RSS로 우회
내부 브라우저 엔진으로 크롤링하는 방법도 잠깐 고민했지만, 더 가벼운 길이 있을 것 같았다. 온라인카지노 작가마다 RSS 피드를 제공하길래 이걸로 글 목록을 받아봤다.
되는 것 같았다. 잘 도네, 하면서 잠깐 좋아했다.
그런데 RSS는 최신 글 몇 개만 노출하는 구조였다. 카지노 게임 전체 글을 모으려는 목적에는 맞지 않았다. 필자가 지금까지 쓴 글이 한두 편이 아닌데, 최근 것만 긁어서는 문체 학습용 샘플로 턱없이 부족했다.
불길하다;;;
3차 시도 - 개발자 도구가 답이었다
결국 브라우저를 열고 카지노 게임 페이지에서 F12를 눌러 네트워크 탭을 뒤졌다. 페이지가 로드될 때 실제로 어떤 요청이 오가는지 직접 눈으로 확인해보기로 했다.
api.fishingproductfr.com/v2/magazine/{카지노 게임 번호}/articles 라는 API를 카지노 게임 페이지가 내부적으로 호출하고 있었다. 카지노 게임 번호는 페이지 HTML의 data-tiara-id 속성에서 뽑아낼 수 있었고, 이 API는 nextUrl 값으로 페이지네이션이 되는 구조였다. 이걸 따라가기만 하면 카지노 게임에 있는 글을 전부 모을 수 있는 게다.
마지막 함정 두 개
여기서 끝났으면 좋았을 텐데, 함정이 두 개 더 있었다.
첫째, nextUrl 값을 그대로 따라가면 404가 났다. 받아온 nextUrl에 /v2 접두사가 빠진 채로 오는 게 원인이었다. API를 처음 호출할 때는 /v2/magazine/...으로 불렀는데, 응답에 담긴 nextUrl은 그 접두사 없이 왔다. 그대로 다음 페이지를 요청하니 당연히 없는 경로였다. 접두사 하나 빠진 걸 몰라서 한참을 헤맸다. /v2를 직접 붙여줘야 했다.
둘째, 쿠키 없이 카지노 게임 페이지를 요청하면 카지노 로그인 리다이렉트가 걸렸다. 로그인도 안 하는 공개 페이지인데 왜 로그인을 요구하나 싶었다. 홈페이지를 먼저 한 번 방문해서 세션 쿠키를 받아온 다음 요청하니 문제없이 통과했다.
이 두 개를 잡느라 반나절 넘게 썼다 -_ -;;
본문 수집은 오히려 별다른 고생이 없었다. 글 페이지 자체는 서버 렌더링이라, wrap_body 안의 p 태그만 모으면 끝이었다. 카지노 게임 목록 찾느라 고생한 걸 생각하면, 복수 카지노 게임의 본문은 너무 순순히 내줘서 오히려 허무할 정도였다.
AI가 나를 분석하다
무튼, 이렇게 모은 글을 AI에게 넘기고 문체를 분석시켰다. 문장 종결 습관, 자주 쓰는 표현, 문단 리듬 같은 걸 뽑아서 하나의 가이드 문서로 정리하게 했다. 그리고 잠시 후 받아 든 분석 보고서를 읽는데, 이게 꽤나 민망한 경험이더라.
"이 작가는 자기 비하 유머로 권위를 상쇄한다", "말줄임표를 남용한다"
20년 넘게 나도 몰랐던 내 글쓰기 습관을 AI가 30초 만에 정리하는 걸 보고 있자니 기분이 묘했다.
건강검진 결과지를 받아 든 기분이랄까?
초안을 받아 들고
분석이 끝난 후, 필자의 개발 프로젝트 메모를 던져주고 이 스타일로 글을 써보라고 시켰다. 표지 그림까지 골라 붙여서 폴더에 차곡차곡 담아주는 것까지 완성.
결과물은 솔직히 말하면 소름 돋게 그럴싸했다. 첫 문단만 읽으면 내가 쓴 글이라고 해도 믿을 정도.
다만 끝까지 읽어보면 미묘하게 어색한 구석이 남는다. 비유가 반 박자 얕고, 고생담에 진짜 땀 냄새가 안 난다고 해야 하나. 하긴, 삽질은 내가 했는데 걔가 그 억울함까지 알 리가 있나 ㅎㅎ
그리고 문체 학습은 지시문보다 실제 글 예시가 훨씬 힘이 세다. 백 마디 설명보다 진짜 글 몇 편이 낫더라.
그런데 말입니다. 여기까지 읽으신 독자분들, 문득 궁금하지 않으신가? 지금 이 글은 과연 누가 썼을까...?
글곰이 초안의 뼈대를 잡았고, 삽질의 억울함과 밤샘의 눈물은 필자가 직접 채워 넣었다. 앞으로 밀린 글감들이 이 녀석 덕(?)분에 하나씩 세상에 나올 예정이다.