BACKEND/JAVA & SPRING

Transaction์˜ ์ „ํŒŒ (feat. REQUIRES_NEW์˜ ๋ฌธ์ œ์ )

์ด-ํ”„ 2024. 7. 31. 10:07

๐Ÿ’ก Issue

  • syft ๋ฐœ๊ธ‰์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , database์— ์™„์„ฑ๋œ syft์™€ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.
  • ์ด๋ฅผ ์œ„ํ•ด, 2๊ฐœ์˜ service ๋กœ์ง์„ ๋ถ„๋ฆฌํ•œ ๋’ค, ์ฒ˜์Œ์—๋Š” ์ฒซ๋ฒˆ์งธ ๋กœ์ง์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” Propagetion.REQUIRED (default) ๋กœ ์ง„ํ–‰์„ ํ–ˆ๋‹ค.
    • ์ฒซ๋ฒˆ์งธ ๋กœ์ง (SYFT ๊ธฐ๋ณธ ์ •๋ณด ์‚ฝ์ž…) ์ด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์žˆ์–ด์•ผ, 2๋ฒˆ์งธ ๋กœ์ง (SYFT ๋ฐœ๊ธ‰ ์ •๋ณด ์—…๋ฐ์ดํŠธ)๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ, k8s_resource_v1.0.0.tar์™€ ๊ฐ™์ด ์•ฝ 6gb๊ฐ€ ๋„˜๋Š” ํŒŒ์ผ์„ sbom ๋ฐœ๊ธ‰์— ์ถ”๊ฐ€์‹œ, HIKARIPool์ด ๊ณ„์†ํ•ด์„œ ๋งŒ๋“ค์–ด์ง€๋ฉด์„œ Connection Leak ํ˜„์ƒ์„ ๊ฒช์—ˆ๋‹ค.
/**	
	 * SYFT ์‘์šฉ ๋กœ์ง
	 * 
	 * @param type : SBOM ํƒ€์ž… (SPDX, CyclondDX)
	 * @param path : Solution, Dir, File ๊ฒฝ๋กœ
	 * @param targetName : SBOM ๋ฐœ๊ธ‰ ์ด๋ฆ„
	 */
	@Transactional(propagation = Propagation.REQUIRED)
	public void updateSbomInfo(Long sbomHistoryId, String result) {
	        File checkIfFile = new File(result);
	        if (checkIfFile.isFile()) {
	            String sbomName = Paths.get(result).getFileName().toString();
	            Map<String, Object> params = new HashMap<>();
	            params.put("sbomHistoryId", sbomHistoryId);
	            params.put("sbomPath", result);
	            params.put("sbomName", sbomName);
	            
	            syftMapper.insertSuccessSbomHistory(params);
	        } else {
	            syftMapper.insertFailSbomHistory(sbomHistoryId, result);
	        }
	    } catch (Exception e) {
	        System.out.println(e.getMessage());
	    }
	}

 

๐Ÿ’ก Connection Leak

  • HikariCP์—์„œ ํ’€ ํฌ๊ธฐ๊ฐ€ ์ตœ๋Œ€์น˜์— ๋„๋‹ฌํ•œ ํ›„, ์ƒˆ๋กœ์šด ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•  ๋•Œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ
  • ์—ฐ๊ฒฐ ํ’€์— ๋Œ€ํ•œ ์„ค์ •์ด ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ฐ๊ฒฐ ๊ด€๋ฆฌ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

 

๐Ÿ’ก Connection Pool์„ ๋Š˜๋ฆด์ง€, Requires_New๋ฅผ ์‹œ๋„ํ• ์ง€ ๊ณ ๋ฏผ

  • Connection Pool์„ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ
    • Connection Pool์€ ๊ธฐ๋ณธ ์„ค์ •์—์„  10๊ฐœ์˜ ์—ฐ๊ฒฐ์„ ๊ฐ–๊ณ  ์žˆ์œผ๋ฉฐ, ์œ ํœด ์ƒํƒœ์—๋„ 10๊ฐœ๋ฅผ ์œ ์ง€ํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค.
    • ๋‹ค๋งŒ, Connection Pool์˜ ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๋ฉฐ๋А, ๊ทธ๋งŒํผ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ์œ ์ง€ํ•˜๋ฉด์„œ ์›น์„œ๋ฒ„์˜ CPU ๋ฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ๋Ÿ‰์ด ์ฆ๊ฐ€ํ•˜๊ณ  ๋„คํŠธ์›Œํฌ์˜ ๋ถ€ํ•˜ ์—ญ์‹œ ์ฆ๊ฐ€ํ•œ๋‹ค.
    • ๋˜ํ•œ, DB๋„ ๋™์‹œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์—ฐ๊ฒฐ์˜ ์ œํ•œ์ด ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๋Œ€์˜ ์›น์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์œ ์˜ํ•ด์•ผํ•œ๋‹ค !!
    ⇒ ๊ฒฐ๊ณผ์ ์œผ๋กœ SBOM์€ ์•ž์œผ๋กœ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€๋  ์˜ต์…˜์ด๋ฏ€๋กœ ๋„คํŠธ์›Œํฌ์˜ ๋ถ€ํ•˜๋ฅผ ์ตœ์ ํ™” ํ•˜๊ธฐ ์œ„ํ•ด Pool์„ ๋Š˜๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.
  • ๐Ÿ”— https://jaehee329.tistory.com/35

 

  • Requires_New์— ๋Œ€ํ•œ ๊ณ ๋ฏผ
    • INSERT, UPDATE๋ฅผ ํ•˜๋Š” ๋กœ์ง์ด๋ฏ€๋กœ Transactional์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์ด๋ผ ์˜ˆ์ƒ๋๋‹ค.
    • ๊ทธ๋Ÿฌ๋ฏ€๋กœ, syft ๋ฐœ๊ธ‰๊ณผ ํŠธ๋žœ์žญ์…˜์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” Requires_New๋ฅผ ์„ ํƒํ–ˆ๋‹ค.
    • ํ•˜์ง€๋งŒ, HikariPool์„ ํ™•์ธํ•ด๋ณด๋ฉด ์˜คํžˆ๋ ค ์™ธ๋ถ€ ํŠธ๋žœ์žญ์…˜๊ณผ ๋‚ด๋ถ€ํŠธ๋žœ์žญ์…˜์—์„œ ๊ฐ๊ฐ 1๊ฐœ์˜ ์ปค๋„ฅ์…˜์„ ํ•„์š”๋กœํ•˜๋ฏ€๋กœ ์˜คํžˆ๋ ค ์ปค๋„ฅ์…˜ ํ’€์ด ๊ณ ๊ฐˆ๋˜๋Š” ํ˜„์ƒ์„ ๋ฐœ๊ฒฌํ–ˆ๋‹ค.

 

๐Ÿ’ก Async๋ฅผ ํ™œ์šฉํ•œ ๋ถ„๋ฆฌ

  • ์ด๋Ÿฌํ•œ ๊ณ ๋ฏผ ๋์—, ๋ฐ๋“œ๋ฝ์˜ ์œ„ํ—˜์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๋…๋ฆฝ์ ์ธ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” @Async ๋ฅผ ๋„์ž…ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.
  • Async
    • ๋น„๋™๊ธฐ์ ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•ด์„œ ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํ•œ๋‹ค.
    • ํŠธ๋žœ์žญ์…˜์€ ์Šค๋ ˆ๋“œ ๋กœ์ปฌ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ์š”์ฒญ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์ปค๋„ฅ์…˜ ํ’€์ด ๊ฐ€๋“ ์ฐฌ ์ƒํ™ฉ์ด๋ผ๋„, ๋‚ด๋ถ€ ํŠธ๋žœ์žญ์…˜์€ ์™ธ๋ถ€ ํŠธ๋žœ์žญ์…˜์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ ํ•ด๋‹น ์ปค๋„ฅ์…˜์„ ๊ฐ€์ ธ๊ฐ„๋‹ค.
    • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๋ถ€ ๋ฉ”์„œ๋“œ์˜ ๊ฒฐ๊ณผ๋ฅผ ์™ธ๋ถ€ ๋ฉ”์„œ๋“œ์—์„œ ํ™œ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ, ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค.

๐Ÿ”‘ ⇒ ๋“œ๋””์–ด ์ €์žฅ ์™„๋ฃŒ !!