개발/스프링

Faker가 만들어 주는 테스트 데이터, 또 나만 몰랐지

brobro332 2025. 3. 19. 22:05
반응형
본인은 여태 테스트용 데이터는 무조건 만들어진 기능을 통해 생성해 왔다.
기존 시퀀스에 영향을 주거나 특정 기능에 연쇄돼서 생성되어야 하는 데이터가 존재하기 때문에 SELECT 쿼리 외에는 DB를 통해 데이터를 조작하는 걸 꺼려했던 것이다.

그런데, 반대로 생각하면 기존 데이터나 다른 테이블에 영향을 주지 않는 선에서는 DB 조작을 통해 데이터를 생성해도 무방하다는 것이다.

오늘 공지사항 화면을 개발하고, 페이지네이션 버튼이 잘 생성되는 지 확인하기 위해 테스트용 더미 데이터가 필요했다.
그런데 DB에 ID, 제목, 내용, 등록일자, 수정일자, 작성자 이메일 등 직접 컬럼 값을 작성하기가 너무 귀찮은 것이다. 
그래서 테스트용 더미 데이터를 생성할 수 있는 라이브러리 Faker를 들고 왔다.
Faker는 Java, Kotlin, Python, Javascript 등 대부분의 개발 언어를 지원한다고 한다. 

 

의존성 주입

# gradle
implementation 'net.datafaker:datafaker:2.2.2'

# maven
<dependency>
    <groupId>net.datafaker</groupId>
    <artifactId>datafaker</artifactId>
    <version>2.2.2</version>
</dependency>

 

Main() 메서드에 코드 작성

@SpringBootApplication
class Application

fun main(args: Array<String>) {
    runApplication<Application>(*args)

    val faker = Faker()
    val url = "jdbc:log4jdbc:postgresql://localhost:5432/postgres"
    val user = "postgres"
    val password = "1234"

    DriverManager.getConnection(url, user, password).use { conn ->
        val sql = "INSERT INTO tbl_notice (id, title, content, created_at, updated_at, writer_email) VALUES (?, ?, ?, ?, ?, ?) ON CONFLICT (id) DO NOTHING"
        conn.prepareStatement(sql).use { stmt ->
            for (i in 1..101) {
                stmt.setInt(1, i)
                stmt.setString(2, faker.dog().name())
                stmt.setString(3, faker.dog().sound())
                stmt.setTimestamp(4, faker.date().birthday())
                stmt.setTimestamp(5, faker.date().birthday())
                stmt.setString(6, "test1@test.com")
                stmt.executeUpdate()
            }
            stmt.close()
        }
        conn.close()
    }
}
  • 참고로 PostgreSQL에서는 ON CONFLICT (id) DO NOTHING 구문을 통해 추가 데이터 id 중복 시 충돌을 방지할 수 있다.
  • 프로젝트를 실행하면 이제 main() 메서드와 함께 INSERT 구문이 실행된다.

 

  • 이렇게 101개의 데이터가 잘 생성되었다.
너무 편하다. 방법도 간단해서 아마 나만 몰랐을 듯.

 

마치며

결론적으로 페이지네이션 버튼은 엉망이었다.
버튼을 눌러도 반응이 없다.
화면개발이 진짜 시간 엄청 잡아 먹는 것 같다..
타임리프 써보니깐 리액트가 그나마 좀 유연하고 편하기는 한데..
지금 개인 프로젝트 2개 모두 화면개발 해야 되는데 숨이 턱 막힌다. 😑

 

이미지 출처

 

페이커 쉿 - 근데 저 대상혁 포즈 무슨 의미임?

라이엇이 불신자들 헤이러들 닥치라고 만들어준건데 ㄹㅇ감다살 일단 간지나기도 하고ㅋㅋㅋㅋㅋ실력과 결...

blog.naver.com