이번에 해볼 미니 프로젝트는 다음과 같다.
목표 : 300만건 이상의 데이터를 DB에 저장하고 페이지네이션을 통해 마지막 페이지에 대한 데이터를 60초 이내로 조회
요구사항
300만건의 데이터를 JDBC를 이용하여 MYSQL DB에 저장하려고 하였다.
테스트코드
@Test
void makeData() throws SQLException {
for (int i = 0; i <= 3000000; i++) {
Long id = (long) i;
String content = "내용 없음";
String s1 = "2022-01-01 00:00:00.000";
String s2 = "2022-12-31 23:59:59.000";
Timestamp tp1 = Timestamp.valueOf(s1);
Timestamp tp2 = Timestamp.valueOf(s2);
//save
Post post = new Post(id, content, 10, tp1, tp2);
this.postRepository.save(post);
}
}
위 코드로 실행하던 도중 소켓연결 관련 에러가 발생하였다.
This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable.
이 키워드를 통해 검색해본 결과 레지스트리 MaxUserPort 변경
의 글을 볼 수 있었다.
에러가 발생하는 이유는
에러를 해결하기 위해 MasUserPort 값을 655534 로 변경해주었습니다.
레지스트리를 여는 방법을 몰라 ChatGpt에게 물어보았습니다.
윈도우의 경우 win+R 을 누른뒤 "regedit"을 입력하게 되면 레지스트리가 열리게 됩니다.
저의 경우 "MaxUserPort" 값이 없어 새로 만들어 주었습니다.
이렇게 설정한 이후 재실행을 해보았는데 Primary 중복 에러가 발생하였다.
고민해본 결과 table 설정의 auto_increment 가 말썽이었다.
테이블 설정을 변경 후 다시 makeData() 테스트를 진행 결과 아래와 같이 성공적으로 진행된 것을 확인할 수 있었다.
하지만 처음 cmd 창에서 확인해본 결과 마지막 id값이 9999라고 나와 입력이 잘못되었나 ? 하고 삭제 하였더니 50001개가 삭제된 것을 확인하였다.
(id 오름차순으로 상단 10개만 불러왔지만 왜 9999로 보이는지 모르겠다..)
웹 화면