반응형
본인은 여태 테스트용 데이터는 무조건 만들어진 기능을 통해 생성해 왔다.
기존 시퀀스에 영향을 주거나 특정 기능에 연쇄돼서 생성되어야 하는 데이터가 존재하기 때문에 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
'개발 > 스프링' 카테고리의 다른 글
[Trouble-shooting] 클라이언트에서 Websocket-STOMP 연결 요청 시 FALLBACK이 사용되는 현상 (2) | 2025.03.28 |
---|---|
[Trouble-shooting] 중첩 클래스명 중복으로 Swagger가 고장났다 (2) | 2025.03.21 |
[Trouble-shooting] MyBatis는 카멜케이스 설정을 직접 해야 한다 (2) | 2025.03.18 |
Swagger씨, API 문서 작성해주세요 ! (2) | 2025.03.06 |
P6Spy를 도입하여 쿼리 로깅을 개선해보자 (2) | 2025.03.06 |