로또 당첨번호 조회 API가 변경된 것 같습니다

워드프레스 정보를 제공하는 블로그 Avada 2026. 1. 3. 23:34 • 댓글:

워드프레스로 로또번호를 랜덤하게 생성하고 이전 당첨번호를 표시하는 로또번호 생성기 페이지를 만들었습니다. 최근 회차의 당첨번호를 표시하는 부분이 잘 작동했지만, 오늘 살펴보니 'Failed to retrieve the latest draw number' 에러가 발생하는 것을 확인했습니다.

화면 전체 HTML을 불러와야 했던 메인 페이지(dhlottery.co.kr/common.do?method=main) 대신, 실제 당첨 정보 데이터만 순수하게 반환하는 내부 API 주소(dhlottery.co.kr/lt645/selectPstLt645Info.do)로 타겟 URL을 변경하여 디자인 변경과 무관하게 안정적인 데이터를 확보하도록 수정했습니다.

로또 당첨번호 조회 API 변경

워드프레스에서 로또번호 추출기 페이지를 만들어서 사용자들이 선호하는 번호와 제외할 번호를 선택하여 로또번호를 생성하도록 했습니다.

실제 작동 화면을 다음 페이지에서 확인할 수 있습니다.😊

https://www.thewordcracker.com/lotto/

 

로또번호 생성기 - 워드프레스 정보꾸러미

로또번호 추출기/생성기 사용 방법 랜덤으로 로또번호를 추출하는 로또번호 추출기입니다. 생성되는 번호에 포함할 숫자와 제외할 숫자를 지정할 수 있도록 하여 마음에 드는 번호를 생성할 수

www.thewordcracker.com

최근 당첨번호도 조회하여 표시하도록 했지만, 오늘 체크해보니 (동행복권 API가 변경되어) 에러가 발생하면서 최근 회차의 당청번호를 가져오지 못하는 에러가 발생하는 것을 발견했습니다.

로또번호 생성기를 제공하고 있는 상황에서 저와 비슷한 문제를 경험하고 있다면 아래 내용을 참고하여 기존 코드를 변경해 보시기 바랍니다.

1. 데이터 수집 방식 변경 (Data Fetching Strategy)

가장 근본적인 아키텍처 변화입니다.

  • 이전 방식 (Legacy): HTML Scraping (SSR 의존)
    • wp_remote_get으로 메인 페이지 HTML을 가져온 후 정규표현식(preg_match)으로 태그를 분석.
    • 실패 원인: 동행복권 사이트가 CSR(Client-Side Rendering) 방식으로 변경됨. 초기 HTML에는 데이터가 없고, 페이지 로드 후 JS가 별도로 데이터를 가져와 렌더링하기 때문에 PHP 파서가 빈 껍데기만 읽음.
  • 현재 방식 (New): Reverse Engineering Internal API
    • 브라우저 네트워크 탭 분석을 통해 프론트엔드 JS가 실제로 호출하는 내부 JSON API 엔드포인트를 식별하여 직접 호출.
    • 장점: 뷰(View) 계층(HTML/CSS) 변경과 무관하게 순수 데이터(Model)만 가져오므로 매우 안정적.

2. 엔드포인트 및 요청 헤더 (Endpoint & Headers)

구분 이전 방식 (HTML Parsing) 새로운 방식 (Internal API)
Target URL dhlottery.co.kr/common.do?method=main dhlottery.co.kr/lt645/selectPstLt645Info.do
Method GET GET
Content-Type text/html application/json
Key Headers User-Agent (단순 위장) X-Requested-With: XMLHttpRequest (필수)

Referer (필수 - 호출 출처 검증 우회)

핵심: 서버가 일반 브라우저 접속이 아닌 AJAX 요청으로 인식하도록 X-Requested-With와 Referer 헤더를 추가한 것이 통신 성공의 열쇠입니다.

3. 파싱 로직 변화 (Parsing Logic)

  • 이전 (Regex): 불확실하고 유지보수가 어려움.
    // 예: HTML 태그 찾기 (깨지기 쉬움)
    preg_match('/<div class="result-ball">(\d+)<\/div>/', $html, $matches);
    
  • 현재 (JSON): 구조적이고 명확함.
    // 예: JSON 객체 접근
    $json = json_decode($body, true);
    $drawNo = $json['data']['list'][0]['ltEpsd']; // 직관적 접근
    

4. 데이터 정확성 (Data Integrity)

  • 이전: 메타 태그나 HTML 텍스트에서 날짜 포맷 등을 2차 가공해야 했음 (오류 가능성 높음).
  • 현재: 서버 DB에서 추출된 Raw Data(ltRflYmd, tm1WnNo 등)를 그대로 받아오므로 데이터 무결성이 보장됨.

참고

https://avada.tistory.com/2897

 

엘리멘터 무료 버전 vs. 프로 버전 비교

엘리멘터(Elmentor)는 1,000만 개가 넘는 사이트에 설치되어 사용되고 있는 인기 워드프레스 페이지 빌더 플러그인입니다. 엘리멘터는 무료 버전과 프로 버전으로 제공됩니다. Elementor 프로 버전에

avada.tistory.com

https://avada.tistory.com/3046

 

해외웹호스팅: 클라우드웨이즈 vs. 블루호스트 vs. 카페24 비교 (Cloudways vs. Bluehost vs. Cafe24)

저는 오랫동안 블루호스트(Bluehost)를 이용해 왔으며 2021년부터는 클라우드웨이즈(Cloudways) 웹호스팅 서비스도 함께 이용하고 있습니다. 현재 일부 중요하지 않는 블로그는 Bluehost에서 호스팅되고

avada.tistory.com