inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트로 직접 만들면서 배우는 대규모 시스템 설계 - 게시판

게시글 테스트 데이터 삽입

게시글 테스트 데이터 삽입 에서 SQL 최대 2만건 삽입 되는문제

해결된 질문

189

MinKyu Song

작성한 질문수 5

0

게시글 데이터 삽입 부분에서요, 영상 강의에서는 데이터 1200만건 삽입 하는데 대략 13분 정도 걸리는걸 확인 햇는데, 저는 2초만에 끝나더니 삽입된 갯수 확인해보니까 2만건만 추가 되고 더 추가 안된거같은데 어떤 문제가 있을가요??

아래는 코드랑 영상에서 설명한 sql 설정값 첨부 했습니다.


@SpringBootTest
public class DataInitializer {
    @PersistenceContext
    EntityManager entityManager;
    @Autowired
    TransactionTemplate transactionTemplate;
    Snowflake snowflake = new Snowflake();
    CountDownLatch latch = new CountDownLatch(EXECUTE_COUNT);

    static final int BULK_INSERT_SIZE = 2000;
    static final int EXECUTE_COUNT = 6000;

    @Test
    void initialize() throws InterruptedException {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        for(int i = 0; i < EXECUTE_COUNT; i++) {
            executorService.submit(() -> {
                insert();
                latch.countDown();
                System.out.println("latch.getCount() = " + latch.getCount());
            });
        }
        latch.await();
        executorService.shutdown();
    }

    void insert() {
        transactionTemplate.executeWithoutResult(status -> {
            for(int i = 0; i < BULK_INSERT_SIZE; i++) {
                Article article = Article.create(
                        snowflake.nextId(),
                        "title" + i,
                        "content" + i,
                        1L,
                        1L
                );
                entityManager.persist(article);
            }
        });
    }
}
image.png

 

java mysql spring-boot kafka redis

답변 2

0

쿠케

MinKyu Song님, 안녕하세요!

코드로 봤을 때에는 이상 없어보이는데 이상하네요..

2만건이면, 10개의 스레드풀에서 각 스레드가 1번씩만 실행되고 종료된 것 같은데, 따로 로그 남은건 없을까요?

스프링부트 버전도 강의와 일치하는지 궁금합니다!

0

MinKyu Song

다시 똑같은 코드로 테스트 돌리니까 1200만건이 삽입 됫어요, 처음에 왜그랫는지 모르겟지만, 스프링 버전은 아래내용으로 강의와 맞게 설정 햇어요

plugins { id 'java' id 'org.springframework.boot' version '3.3.2' id 'io.spring.dependency-management' version '1.1.7' }

0

쿠케

앗, 그렇군요. 실수로 취소가 눌러졌거나 뭔가 실행이 잘 안됐었나보네요..!?

아무튼 잘 해결되어서 다행입니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. MinKyu Song님.

질문 주신 내용은 대량의 데이터를 삽입할 때 일부 데이터만 삽입되고 전체 데이터 삽입이 완료되지 못한 문제에 관한 것입니다. 아래에서는 이와 관련된 몇 가지 주요 원인과 해결 방법을 안내드립니다.

주요 원인 및 해결 방법

  1. 트랜잭션과 커밋 문제:

    • 제공해주신 코드에서는 transactionTemplate.executeWithoutResult 안에서 EntityManager.persist를 호출하여 데이터를 삽입하고 있습니다.
    • 대량의 데이터를 삽입할 때 트랜잭션이 너무 커지면 문제가 발생할 수 있으므로, 데이터의 양을 조절하거나 적용 가능한 경우, flush()clear() 메소드를 통해 중간에 커밋하는 방법을 고려해 볼 수 있습니다.
  2. 메모리 이슈:

    • 대량의 데이터를 한 번에 삽입하기 때문에 JVM의 메모리 제한에 걸릴 수 있습니다. 이 경우 JVM 옵션을 통해 힙 메모리를 늘리는 방법도 있습니다.
    • -Xmx-Xms 옵션을 사용하여 JVM의 메모리 크기를 설정할 수 있으며, 이 값이 충분히 큰지 확인해 보세요.
  3. 데이터베이스 설정:

    • MySQL의 설정 중 max_allowed_packet 값이 너무 작거나, 다른 쿼리 제한 설정이 있는지 확인합니다. 이 설정을 통해 데이터베이스에서 수용할 수 있는 데이터의 최대 크기를 조절할 수 있습니다.
  4. 쓰레드 수 조정:

    • 현재 코드에서 스레드 풀을 10개로 설정하여 실행하고 있습니다. 이 수치 또한 메모리 사용에 영향을 미칠 수 있으므로 필요에 따라 조정해야 할 수 있습니다.

위의 문제들과 관련된 추가 자료나 유사한 해결 사례

위의 해결 방법을 기반으로 구체적인 설정을 테스트한 후, 더 많은 정보를 얻으시려면 아래 유사한 문제 해결을 다룬 자료들을 참고하세요:

저는 질문자님의 이해를 돕고자 기존의 지식공유자님의 답변을 참고하여 유사한 해결 링크와 추가 설명을 제공합니다. 현재 베타 기능으로 답변이 충분치 않을 수 있는 점 양해 부탁드리며, 추가적으로 궁금한 점이 있으시면 자유롭게 질문해 주세요. 곧 지식공유자께서 추가적인 답변을 제공해 주실 것입니다.

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

31

1

consumer에서 에러가 발생할 경우 데이터 유실 문의

0

48

2

게시글 테스트 데이터 삽입

0

51

2

정렬, 필터, 검색 등의 조건이 붙을 경우 최적화할 수 있는 방법이 무엇이 있을까요?

0

104

2

좋아요 기능 정합성 보장 방법

0

98

2

좋아요 동시성처리 최적의 선택?

1

136

2

프론트엔드 msa 환경 api 주소 통합? 과 서버끼리 통신 방식에대해

0

92

2

안녕하세요 무한스크롤 강의듣다가 질문이 있습니다.

0

60

1

조회수 조회 로직 질문

1

67

2

비로그인 유저도 어뷰징 방지 정책

1

73

2

CommentServiceTest의 테스트 로직 질문

0

54

2

무한 스크롤 방식에서 페이지 번호 방식 쿼리의 문제점 의문

1

74

2

path 쿼리 관련 질문드립니다!

0

60

2

antigravity 에디터를 쓰신다면 종료해주세요

1

123

0

프로젝트 구조

0

88

2

article_like_count api test

0

79

2

이벤트 페이로드 객체의 생성 방식이 팩토리 메서드 패턴이 아닌 빌더 패턴인 이유가 궁금합니다!.

0

104

2

[33. 좋아요 수 구현] 에서 테스트 하는 화면 동시성 문제

0

92

2

findByPath에서 articleId로도 검색을 해야 할 것 같아요.

0

93

3

jpa ddl-auto none을 하는 이유와 join 방법

0

97

2

팩터리 메소드와 response 객체 사용 이유가 궁금합니다!

0

90

2

커서 기반 페이지네이션 과 무한 스크롤링

0

111

2

게시글 생성 로직에서 오류 발생시 redis 게시글 수 되돌리기

0

97

2

멀티 모듈이 아닌 MSA 환경에서 common

0

157

2