๐ก 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๋ ๋์ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ ์ฐ๊ฒฐ์ ์ ํ์ด ์์ ์ ์์ผ๋ฏ๋ก ์ฌ๋ฌ ๋์ ์น์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด๋ฅผ ์ ์ํด์ผํ๋ค !!
- ๐ https://jaehee329.tistory.com/35
- Requires_New์ ๋ํ ๊ณ ๋ฏผ
- INSERT, UPDATE๋ฅผ ํ๋ ๋ก์ง์ด๋ฏ๋ก Transactional์ ์ญ์ ํ๋ ๊ฒ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด๋ผ ์์๋๋ค.
- ๊ทธ๋ฌ๋ฏ๋ก, syft ๋ฐ๊ธ๊ณผ ํธ๋์ญ์ ์ ๋ถ๋ฆฌํ์ฌ ์๋ก์ด ํธ๋์ญ์ ์ ๊ตฌ์ฑํ๋ Requires_New๋ฅผ ์ ํํ๋ค.
- ํ์ง๋ง, HikariPool์ ํ์ธํด๋ณด๋ฉด ์คํ๋ ค ์ธ๋ถ ํธ๋์ญ์ ๊ณผ ๋ด๋ถํธ๋์ญ์ ์์ ๊ฐ๊ฐ 1๊ฐ์ ์ปค๋ฅ์ ์ ํ์๋กํ๋ฏ๋ก ์คํ๋ ค ์ปค๋ฅ์ ํ์ด ๊ณ ๊ฐ๋๋ ํ์์ ๋ฐ๊ฒฌํ๋ค.
๐ก Async๋ฅผ ํ์ฉํ ๋ถ๋ฆฌ
- ์ด๋ฌํ ๊ณ ๋ฏผ ๋์, ๋ฐ๋๋ฝ์ ์ํ์ ์ต์ํํ๋ฉด์ ๋ ๋ฆฝ์ ์ธ ํธ๋์ญ์ ์ผ๋ก ๋ถ๋ฆฌํ ์ ์๋ @Async ๋ฅผ ๋์ ํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
- Async
- ๋น๋๊ธฐ์ ์ธ ์ฒ๋ฆฌ๋ฅผ ์งํํด์ ์๋ก์ด ์ค๋ ๋์์ ์์ ์ ์ํํ๋๋ก ํ๋ค.
- ํธ๋์ญ์ ์ ์ค๋ ๋ ๋ก์ปฌ์ด๊ธฐ ๋๋ฌธ์, ๋ ์์ฒญ์์ ์๋ก ๋ค๋ฅธ ํธ๋์ญ์ ์ ์ฌ์ฉํ๊ฒ ๋๋ค.
- ์ปค๋ฅ์ ํ์ด ๊ฐ๋ ์ฐฌ ์ํฉ์ด๋ผ๋, ๋ด๋ถ ํธ๋์ญ์ ์ ์ธ๋ถ ํธ๋์ญ์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ ํด๋น ์ปค๋ฅ์ ์ ๊ฐ์ ธ๊ฐ๋ค.
- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ด๋ถ ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ฅผ ์ธ๋ถ ๋ฉ์๋์์ ํ์ฉํด์ผ ํ ๊ฒฝ์ฐ, ์ ํฉํ์ง ์๋ค.
๐ ⇒ ๋๋์ด ์ ์ฅ ์๋ฃ !!
'BACKEND > JAVA & SPRING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฒํฌ์ฐ์ฐ์ ํตํ update ์ฑ๋ฅ ๊ฐ์ ์๋ ๊ทธ๋ฆฌ๊ณ ์ผ๋ฐ ์ฐ์ฐ๊ณผ์ ๋น๊ต (0) | 2024.08.07 |
---|---|
MultipartFile์ Ajax๋ฅผ ํ์ฉํ ํ์ผ ์ ๋ก๋ (0) | 2024.08.01 |
[Spring Security + JWT + OAUTH2] ์นด์นด์ค/๋ค์ด๋ฒ ์ธ๋ถ ๋ก๊ทธ์ธ ๊ตฌํ (0) | 2024.04.30 |
HttpURLConnection์ ์ด์ฉํ API ๋ฐ์ดํฐ ๋ฐ์์ค๊ธฐ (1) | 2024.04.25 |
Call By Value & Call By Reference ์ ๋ฆฌ (0) | 2024.03.11 |