💡 Issue

💡 MyBatis에서 Bulk 연산

  @Transactional
  @Scheduled(cron = SCHEDULE)
  public void sbomOutOfDateScheduling() {
  	List<sbomHistoryUpdateResponse> sbomHistoryUpdateList = sbomMapper.getSbomHistoryUpdateList();
  	if(!sbomHistoryUpdateList.isEmpty()) {
  		sbomMapper.updateOutOfDateSchedule(sbomHistoryUpdateList);
  	}
  }	
	
	<select id="getSbomHistoryUpdateList" resultType = "com.sga.sbomProject.domain.sbom.dto.sbomHistoryUpdateResponse">
		<![CDATA[ 
			SELECT id
		    FROM "Sbom_History"
		    WHERE created_at::date < CURRENT_DATE - INTERVAL '30 days'
		]]>
	</select>
	
	
	<update id="updateOutOfDateSchedule" parameterType="list">
		<![CDATA[ 
		    UPDATE "Sbom_History"
		    SET status = 'exp'
		    WHERE id IN
		    <foreach collection="sbomHistoryUpdateList" item="item" open="(" separator="," close=")">
		        #{item}
		    </foreach>
		]]>
	</update>

💡 Quality Test

DO $$
BEGIN
    FOR i IN 1..1000000 LOOP
        INSERT INTO "Scan_Target_Info" (target_type, target_uploaded_at)
        VALUES('Solution', '2024-08-05 11:21:02.206909');
    END LOOP;

END $$;
DO $$
BEGIN
    FOR i IN 1..100000 LOOP
        INSERT INTO "Sbom_History" (scan_target_id, request_user_name, description, type, status, name, path, created_at, finished_at, created_by )
        VALUES (i+2, 'test', 'test', 'SPDX','ava','test_name', 'test_path', NOW() - (INTERVAL '1 day' * (30 + i)),NOW() - (INTERVAL '1 day' * (30 + i)), 1 );
    END LOOP;
END $$;