스프링

 

 

1) pom.xml 에  commons-lang3 라이브러리 추가 (테스트 데이터 랜덤 문자열 생성에 사용)

 

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.12.0</version>
</dependency>

 

 

 

2) applicaiton.properties     jdbcUrl 에 옵션 추가 => ?allowMultiQueries=true

예)

spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/DB명?characterEncoding=UTF-8&serverTimezone=UTC&allowMultiQueries=true

 

 

 

3) logback-default.xml 에 root level info 로 변경 ( 로그를 보기위한)

 

    <root level="info">
        <!-- 3.유형 로그 사용 -->
        <appender-ref ref="fileAppender" />
    </root>

 

 

 

 


4) Board.xml 에  saveList 쿼리 추가 foreach 사용하여 배열 INSERT QUERY 사용

	<insert id="saveList" >
	  INSERT INTO T_BOARD  ( TITLE, CONTENTS, REG_DATE )
	 
		  VALUES
		   	  
		  <foreach collection="boardList" item="board" separator=",">
		  		( #{board.title}, #{board.contents}, NOW()  )	
		  </foreach>
		 
	</insert>

 

 

5) BoardRepository 에 saveList 관련 기능 추가

 

/** 게시판 Repository */
@Repository
public interface BoardRepository {


	public void saveList(Map<String, Object> paramMap);


		
}

 

 

6) BoardController, BoardService saveList1, saveList2 1000 건 데이터 생성

 

BoardService

	
	/** 단순 반복문을 이용한 등록 처리 */
	public void saveList1(List<BoardDTO> list) {
		for(BoardDTO dto : list) {
			boardRepository.save(dto);
		}
	}
	
	
	/** 100개씩 배열에 담아서 일괄 등록 처리 **/
	public void saveList2(List<BoardDTO> boardList) {
		Map<String, Object> paramMap=new HashMap<>();
		paramMap.put("boardList", boardList);
		boardRepository.saveList(paramMap);
	}

 

 

BoardApiController

	
	/**대용량 등록 처리1 **/
	@ApiOperation(value="대용량 등록처리1" , notes="대용량 등록처리1")
	@PutMapping("/saveList1")
	public BaseResponse<Boolean> saveList1(){
		int count=0;
		//테스트를 위한 랜덤 1000 건의 데이터를 생성
		List<BoardDTO> list=new ArrayList<BoardDTO>();
		while(true){
			count++;
			String title=RandomStringUtils.randomAlphabetic(10);
			String contents=RandomStringUtils.randomAlphabetic(10);
			list.add(BoardDTO.builder().title(title).contents(contents).build());
			if(count >1000) {
				break;
			}
		}
		
		long start =System.currentTimeMillis();
		boardService.saveList1(list);
		long end =System.currentTimeMillis();
		log.info("실행 시간 : {}",  (end-start) / 1000.0);
		
		return new BaseResponse<Boolean>(true); 
	}
	
	
	
	/**대용량 등록 처리2 **/
	@ApiOperation(value="대용량 등록처리2" , notes="대용량 등록처리2")
	@PutMapping("/saveList2")
	public BaseResponse<Boolean> saveList2(){
		int count=0;
		//테스트를 위한 랜덤 1000 건의 데이터를 생성
		List<BoardDTO> list=new ArrayList<BoardDTO>();
		while(true){
			count++;
			String title=RandomStringUtils.randomAlphabetic(10);
			String contents=RandomStringUtils.randomAlphabetic(10);
			list.add(BoardDTO.builder().title(title).contents(contents).build());
			if(count >1000) {
				break;
			}
		}
		
		long start =System.currentTimeMillis();
		boardService.saveList2(list);
		long end =System.currentTimeMillis();
		log.info("실행 시간 : {}",  (end-start) / 1000.0);
		
		return new BaseResponse<Boolean>(true); 
	}
	

 

 

 

 

소스 :

https://github.com/braverokmc79/sprig_boot_2.7.0_mybatis_board_project/commit/258581bb58261173f9f6c6afe7e557acbec29528

 

 

 

 

 

about author

PHRASE

Level 60  라이트

세계는 진실, 법, 평화의 세 토대 위에 서있다. -탈무드

댓글 ( 4)

댓글 남기기

작성