<aside> 👉 서버가 시작되면 크롤링하는 코드

</aside>

package listnerCrawling;

import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;
import model.crawling.StoreCU;
import model.crawling.StoreGS25;

/**
 * Application Lifecycle Listener implementation class ListnerCrawling
 */
@WebListener
public class ListnerCrawling implements ServletContextListener {

    // 생성자
    public ListnerCrawling() {
        // 기본 생성자
    }
    /**
     * 서버가 시작될 때 호출되는 메서드
     */
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("[리스너] 서버 시작됨, 크롤링 시작!");

        try {
            // CU 상품 크롤링
            new StoreCU().makeSampleCU();
            System.out.println("[리스너] CU 크롤링 완료!");

            // GS25 상품 크롤링
            new StoreGS25().makeSampleGS25();
            System.out.println("[리스너] GS25 크롤링 완료!");

        } catch (Exception e) {
            System.out.println("[리스너] 크롤링 도중 오류 발생!");
            e.printStackTrace();
        }
    }
    /**
     * 서버가 종료될 때 호출되는 메서드
     */
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("[리스너] 서버 종료됨.");
    }
}

ServletContextListener란?

웹 애플리케이션이 시작되거나 종료될 떄 호출되는 콜백 메서드를 가진 인터페이스


@WebListener 어노테이션

이 클래스가 리스너라는 것을 서버에게 알려주는 어노테이션

따로 web.xml에 등록하지 않아도 자동으로 감지

참고) 톰캣7 이상이면 가능하고 서블릿3.0 이상 환경에서 동작


✅서블릿 VS 리스너 개념 정리 (NOT POJO)

항목 서블릿 (Servlet) 리스너 (Listener)
정의 클라이언트의 요청을 처리하고 응답을 반환하는 Java 클래스 웹 애플리케이션의 상태 변화(이벤트)를 감지하고 자동으로 실행되는 클래스
목적 HTTP 요청-응답 처리 (웹 페이지, API 등) 이벤트 감지 및 후속 작업 처리 (초기화, 리소스 정리 등)
실행 시점 클라이언트 요청이 들어올 때 실행 서버가 시작/종료되거나 세션, 요청이 생성/종료될 때 실행
사용 예시 LoginServlet, BoardListServlet ServletContextListener, HttpSessionListener
상속/구현 javax.servlet.http.HttpServlet 상속 javax.servlet.*Listener 인터페이스 구현
web.xml 등록 <servlet> 태그 <listener> 태그 또는 @WebListener

🔍 리스너는 왜 "서블릿 기술"로 분류될까?

리스너는 서블릿 기술에 포함되긴 하지만, HTTP 요청을 처리하는 기능은 전혀 없어.

대신, 웹 애플리케이션의 생명주기 이벤트(Lifecycle Event) 를 감지해서 자동 실행되는 이벤트 리스너 객체야.

예를 들어:

이런 것들은 직접적으로 웹 페이지를 처리하진 않지만, 백그라운드에서 중요한 작업들을 자동으로 처리함.