2025년 9월 8일 월요일(73일차)

Jeonghoon·2025년 9월 8일

jeonghoon's Study

목록 보기
74/128

🏗️ Builder Pattern & 🌐 Web Crawling 정리

🧱 Builder Pattern (빌더 패턴)

Lombok 라이브러리에서 제공하는 객체 생성 패턴으로, 복잡한 객체 생성 과정을 간단하고 직관적으로 표현할 수 있습니다.

✅ 특징 및 장점

항목설명
목적복잡한 객체 생성을 명확하고 간결하게 표현
장점 1매개변수 순서에 구애받지 않음 (유연한 생성)
장점 2필요한 매개변수만 선택적으로 초기화 가능
관련 라이브러리Lombok (@Builder)

⚙️ 주요 메서드

메소드설명
.builder()빌더 객체를 생성 (빌드 시작)
.속성명(속성값)지정한 속성명에 값을 대입
.build()설정된 속성값으로 객체 생성 (빌드 완료)

💻 사용법 예시

@Builder // Lombok 어노테이션 추가
public class MemberDto {
    private String name;
    private int age;
    private String email;
}

// 빌더 패턴 사용 예시
MemberDto member = MemberDto.builder()
    .name("유재석")
    .age(41)
    .email("yoo@test.com")
    .build();

⚠️ 생성자 규칙

규칙설명
1️⃣ 생성자 존재 규칙존재하지 않는 생성자는 호출 불가
2️⃣ 순서 제약 존재매개변수 순서를 바꾸면 오류 또는 다른 의미로 인식
3️⃣ 유연성 부족특정 생성자만 사용할 수 있어 제약이 큼 → Builder로 극복

🌐 Web Crawling (웹 크롤링)

웹페이지에서 원하는 데이터를 자동으로 수집하는 기술입니다.

🧩 웹페이지 구동 원리

페이지 종류설명사용 라이브러리
정적 페이지HTML 문서 내에서 데이터가 바로 존재Jsoup
동적 페이지HTML 내 JS 스크립트로 데이터가 로딩됨Selenium

🎯 크롤링의 목적

  • 데이터 수집 및 분석
  • 트렌드 파악 및 통계 작업
  • 업무 자동화 및 효율성 향상

🧱 robots.txt

웹사이트가 크롤러 접근을 허용하거나 제한하는 규칙 파일입니다.

  • 경로 : 웹사이트주소/robots.txt
  • 예: https://example.com/robots.txt

🧰 Jsoup

HTML 문서를 다루는 Java 기반 크롤링 라이브러리입니다.

⚙️ 설치 방법

📦 https://mvnrepository.com/ 에서 Jsoup 검색 후 Maven/Gradle 의존성 추가

🧱 주요 메소드

메소드설명
Jsoup.connect(URL).get()URL의 HTML을 Document 객체로 불러오기
document.selectFirst("CSS선택자")첫 번째 해당 엘리먼트 추출
document.select("CSS선택자")여러 개의 Elements 리스트로 추출
element.text()요소의 텍스트 데이터 추출
element.attr("속성명")해당 마크업 속성값 추출 (예: src, href 등)

💻 예시 코드

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        // 1. HTML 소스를 Java 객체로 변환
        Document document = Jsoup.connect("https://example.com").get();

        // 2. 특정 태그 선택
        Elements elements = document.select("div.content h2");

        // 3. 데이터 출력
        for (Element e : elements) {
            System.out.println(e.text());
        }
    }
}

0개의 댓글