전자정부 프레임워크 공부

게시판 개발용 페이크 데이터 추가하기 [전자정부 프레임워크 공부]

그랜파 개발자 2025. 5. 18. 12:18

게시판의 페이크 라이브러리를 사용하여 데이터 100개를 mysql 서버의 boarddb 디비 posts 테이블에 추가하는 기능 만들어줘

ChatGPT의 말:

좋습니다! 아래는 Java에서 Faker 라이브러리를 사용하여 MySQL의 boarddb.posts 테이블에 게시글 100개를 자동 삽입하는 코드 예제입니다.


✅ 전제 조건

  1. MySQL에 다음과 같은 테이블이 있다고 가정합니다:
CREATE TABLE posts (
  id INT AUTO_INCREMENT PRIMARY KEY,
  title VARCHAR(255),
  content TEXT,
  writer VARCHAR(100),
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

2. 아래 라이브러리를 .jar로 다운로드하여 WEB-INF/lib 폴더에 추가합니다:

라이브러리 이름 다운로드 링크
javafaker https://repo1.maven.org/maven2/com/github/javafaker/javafaker/1.0.2/javafaker-1.0.2.jarGitHub+1Maven Repository+1
commons-lang3 https://mvnrepository.com/artifact/org.apache.commons/commons-lang3
snakeyaml https://repo1.maven.org/maven2/org/yaml/snakeyaml/2.4/snakeyaml-2.4.jar

✅ Java 서블릿 예제: InsertFakePostsServlet.java

package controller;

import com.github.javafaker.Faker;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.sql.*;
import java.util.Date;

@WebServlet("/insertFakePosts")
public class InsertFakePostsServlet extends HttpServlet {

    private static final String DB_URL = "jdbc:mysql://localhost:3306/boarddb?useSSL=false&serverTimezone=Asia/Seoul&allowPublicKeyRetrieval=true";
    private static final String DB_USER = "root";
    private static final String DB_PASSWORD = "your pass!";

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Faker faker = new Faker();

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            try (Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD)) {

                String sql = "INSERT INTO posts (title, content, writer, created_at) VALUES (?, ?, ?, ?)";
                PreparedStatement pstmt = conn.prepareStatement(sql);

                for (int i = 0; i < 100; i++) {
                    String title = faker.book().title();
                    String content = faker.lorem().paragraph(3);
                    String writer = faker.name().username();
                    Date randomDate = faker.date().past(365, java.util.concurrent.TimeUnit.DAYS);
                    Timestamp createdAt = new Timestamp(randomDate.getTime());

                    pstmt.setString(1, title);
                    pstmt.setString(2, content);
                    pstmt.setString(3, writer);
                    pstmt.setTimestamp(4, createdAt);

                    pstmt.executeUpdate();
                }

                response.setContentType("text/html;charset=UTF-8");
                response.getWriter().println("<h3>✅ 페이크 게시글 100개가 성공적으로 추가되었습니다.</h3>");
            }
        } catch (Exception e) {
            e.printStackTrace();
            response.getWriter().println("❌ 오류 발생: " + e.getMessage());
        }
    }
}

✅ 실행 방법

  1. 위 클래스를 controller 패키지에 생성
  2. WEB-INF/lib에 Faker 관련 .jar들 추가
  3. 서블릿 URL:
    브라우저에서 http://localhost:8080/BoardMySQL/insertFakePosts 접속

✅ 결과 예시

  • 제목: The Empire of Dreams
  • 내용: Lorem ipsum dolor sit amet...
  • 작성자: john_doe92
  • 생성일: 2023~2024년 사이 무작위 날짜

나의 말:

javafaker, commons-lang3, snakeyaml 설명해줘

ChatGPT의 말:

아래는 Java에서 많이 사용하는 세 가지 라이브러리인 javafaker, commons-lang3, snakeyaml에 대한 설명입니다.


✅ 1. javafaker

📌 한 줄 요약

가짜 데이터(이름, 주소, 회사명 등)를 무작위로 생성해주는 라이브러리

✅ 사용 목적

  • 테스트용 더미 데이터 자동 생성
  • 게시판, 쇼핑몰, 회원가입 등 샘플 데이터를 빠르게 만들 때 유용

✅ 예시

Faker faker = new Faker();
System.out.println(faker.name().fullName());       // John Smith
System.out.println(faker.internet().emailAddress()); // john.smith@example.com
System.out.println(faker.book().title());          // The Empire of Light

✅ 주요 카테고리

  • 이름 (faker.name())
  • 이메일, 도메인 (faker.internet())
  • 주소 (faker.address())
  • 책, 영화, 동물, 직업 등등

✅ 2. commons-lang3

📌 한 줄 요약

Java 표준 라이브러리로 부족한 기능을 보완해주는 유틸리티 모음

✅ 제공 기능

  • 문자열 처리
  • 날짜 계산
  • 객체 비교 및 널 처리
  • 난수 생성
  • 리플렉션, enum 유틸리티 등

✅ 자주 쓰는 클래스/메서드

import org.apache.commons.lang3.StringUtils;

String str = "";
System.out.println(StringUtils.isEmpty(str)); // true

String result = StringUtils.capitalize("hello"); // Hello

✅ 왜 중요한가?

  • javafaker도 내부적으로 commons-lang3의 기능을 사용하기 때문에 종속되어 있음

✅ 3. snakeyaml

📌 한 줄 요약

YAML 파일을 Java에서 쉽게 읽고 쓸 수 있도록 해주는 파서

✅ YAML이란?

  • 설정 파일 포맷
  • JSON보다 가독성이 좋아서 Spring Boot 등에서 널리 사용됨

✅ 사용 예시

# config.yml
name: ChatGPT
version: 4.0
Yaml yaml = new Yaml();
InputStream input = new FileInputStream("config.yml");
Map<String, Object> data = yaml.load(input);
System.out.println(data.get("name")); // ChatGPT

✅ 왜 필요한가?

  • javafaker는 이름, 책 제목 등의 단어 리스트를 YAML 파일로 저장해두고 그것을 읽어서 데이터 생성
    → 따라서 snakeyaml이 없으면 오류 발생

✅ 요약 비교표

라이브러리 주요 역할 javafaker와의 관계
javafaker 가짜 데이터 생성 핵심 라이브러리
commons-lang3 문자열, 날짜 등 유틸리티 제공 내부적으로 사용됨
snakeyaml YAML 파일 파싱 faker의 단어 데이터 로딩 시 필요