오늘 경마장을 다녀왔다. 지금까지 개발한 내용을 띄워놓고 했는데 영상을 바로 볼 수 있는 기능은 쓸만했다. 그러나 딱히 말을 고르는 데 도움을 주지는 못한 것 같다.
경마장에서 아이디어가 떠올라서 곧바로 코딩을 했다.

현재 경주의 거리 성적 비교 ui를 만들어서 한눈에 보기 쉽게 했다.
추가로 지난 경주에 대해 배당 데이터가 있으면 좋겠다고 생각하여 작업한 내용에 대해 포스팅하겠다. 클로드 코드 사용에 있어서 조금은 익숙해진 것 같다.
배당판 ui를 만들기 위해서는 배당 데이터가 필요하다.
https://race.kra.co.kr/raceScore/ConditionScoreSearch.do?Act=04&Sub=2&meet=1

위 사이트에서 원하는 경주일자를 선택 후 일자별 검색을 눌러 찾게되면 아래와 같이 나오게된다. (찾는 방법은 스킵하겠다.)

이게 배당판인데 단승식, 연승식, 복승식에 대한 최종 배당이 나온 것이다.
이 데이터를 크롤링하여 db에 저장하는 것이 원하는 기능이다.
위 데이터는 비교적 간단한데, 아래 사진을 보자.

삼복승식의 데이터는 비교적 까다롭다. 말 3마리를 비교해야하는데 위에 라디오 버튼으로 기준말을 고를 수 있다. 저것까지 크롤링으로 가져와야 한다.
크롤링을 해보지 않았지만 우리에게는 클로드 코드가 있다. 역시나 markdown 파일을 작성하여 알려준다.
# 배당 가져오기
1. https://race.kra.co.kr/raceScore/ConditionScoreSearch.do?Act=04&Sub=2&meet=1 에 접속한다.
특정 날짜로 검색
Header
Request URL
https://race.kra.co.kr/raceScore/ConditionScoreList2_1.do
Request Method
POST
Status Code
200 OK
Remote Address
103.239.112.53:443
Referrer Policy
strict-origin-when-cross-origin
Payload
meet
1
sRaceStartDate
20260214
sRaceEndDate
20260214
sHrNm
*
sHrNo
sHrMeet
sOwNm
*
sOwNo
sJkName
sTrNm
sRcDist1
1000
sRcDist2
2300
sRcGrp1
(unable to decode value)
sRcGrp2
ȥOPEN
sBrdnWeight1
47
sBrdnWeight2
65
sWeather
sTrackStatus
sRHorseNum1
01
sRHorseNum2
16
sRaceType
sBudam
sOrder1
01
sOrder2
99
Act
04
Sub
2
code
0
실제 클릭을 하며 어떤 요청과 payload가 필요한지 자세히 넣어주면 된다.
원하는 데이터를 얻기위한 페이지까지 도달하기위해 위 내용을 손수 노가다로 작성하였다. 그리고 배당 데이터를 파싱하는 방식을 알려주었다.
# 배당 파싱하는 방식
출전번호별 단,연,복승식의 배당률, 매출총액, 취소마를 제공하는 표
서울 제11경주 2026년 02월 14일 (토)
단승식 연승식 출전
번호 복승식
1 2 3 4 5 6 7 8 9 10 11 12 13 14
18.2 3.3 1 1 298.3 14.1 121.3 24.6 105.5 380.7 25.9 366.6 88.5 93.0 - - -
77.3 14.1 2 - 2 131.1 557.9 219.0 590.9 903.4 214.7 940.8 656.9 538.6 - - -
2.6 1.2 3 - - 3 32.3 4.6 24.6 134.1 3.4 149.4 25.2 28.5 - - -
30.1 5.0 4 - - - 4 65.5 260.0 733.6 69.5 625.4 262.2 237.0 - - -
3.7 1.6 5 - - - - 5 32.1 148.1 5.6 178.8 35.3 36.1 - - -
29.8 3.9 6 - - - - - 6 361.2 29.4 494.6 139.6 154.8 - - -
71.3 9.2 7 - - - - - - 7 113.3 447.1 532.4 400.4 - - -
2.9 1.4 8 - - - - - - - 8 150.5 30.4 34.7 - - -
76.7 10.3 9 - - - - - - - - 9 480.5 383.8 - - -
26.8 4.5 10 - - - - - - - - - 10 97.3 - - -
23.0 3.1 11 - - - - - - - - - - 11 - - -
단승식은 1번이 18.2 2번이 77.3 3번이 2.6 이런식으로 해야함
연승식은 1번이 3.3, 2번이 14.1, 3번이 1.2 이런식으로 해야함
그리고 복승식은 1과 2가 298.3, 1과 3이 14.1, 1과 4가 121.3 이런식이고
2와 3이 131.1 2와 4가 557.9, 2와 5가 219.0 이런식이야 규칙을 알겠지?
위와 같이 markdown 파일을 작성 후, 클로드 코드에게 원하는 기능을 구현해달라고 요청했다. 클로드 코드가 알아서 내용을 파악 후, model.rs에 파싱할 구조를 정의하고 crawler.rs에 크롤링 함수를, 그리고 handler.rs파일에 route에 등록할 함수를 만들어 주었다.
db의 경우 MongoDB를 사용하는데 Nosql의 특성으로 한번에 데이터를 가져갈 수 있도록 기존 races 컬렉션에 있는 날짜_경주지역_경주번호를 id로 가지는 document에 추가로 저장하도록 로직을 구현했다.
frontend쪽에 api 명세를 전달하고 또 클로드에게 여러 질문 및 수정을 거쳐 아래와 같은 ui를 뽑아낼 수 있었다.



아주 만족스럽게 클로드 코드가 ui 를 만들어 주었다. 시간이 될 때, nextjs에 대해서 조금은 공부를 해봐야겠다....
클로드 코드를 약 2주? 정도 사용한 것 같은데 Haiku 4.5 모델을 사용하고 단위 작업이 끝난 뒤 /compact를 해주는 것을 습관처럼 하니 Token이 엄청나게 빨리 소모되는 것 같지는 않다.
아직 클로드 코드에 대해서 전부를 사용하지는 않았지만 하나씩 배워나가고 익숙해질 예정이다. 그리고 앞으로 이 도구(ai)를 잘 활용해서 생산성을 높일 수 있을지 계속해서 고민해야할 것 같다.
무조건 commit을 해야한다. 작업이 진행된 뒤, 클로드 코드가 컨텍스트를 잃어버려 실수로 엉뚱한 작업을 하는 일이 발생했는데, 이게 코드를 자세히 파악하지 못한 상태로 진행을 하다보니 diff로 비교를 하더라도 되돌리기 쉽지 않은 상황이 발생했다. 어쩔 수 없이 되돌리기를 했는데 커밋이 되어있지 않아 너무 예전으로 돌아간 경우가 있었다. 클로드 코드가 자동으로 커밋 메시지도 이쁘게 작성해주고 커밋도 해주기 때문에 적절히 task를 나눠서 커밋하는 습관을 들여야 한다는 것을 깨달았다.
상상도 할 수 없었던 작업을 클로드 코드를 통해서 하고 있다. 잘 사용한다면 엄청난 무기가 될 것이고, 노력하지 않는다면 대체되는 것은 시간문제라고 생각한다.