5๊ฐ์ ์ ์ Java ์ฝ๋ ๋ถ์๊ธฐ ๊ฒํ
์ถ์ฒ:
DZone ๊ฐ๋ฐ์๋ ๊ฐ๋ฐ ์ด๊ธฐ์ ์๋ชป๋ ์ฝ๋๋ฅผ ์ฐพ์ ์์ ํ ์ ์๋ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ๋ฅผ ๋น๋กฏํ ๋ค์ํ ํ๋ก๊ทธ๋จ์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ์ฝ๋ ๊ฒํ ๋ ์ด๋ฌํ ๋
ธ๋ ฅ์ ์์ด ๋งค์ฐ ๊ท์คํ ๋๊ตฌ์ด์ง๋ง ๋๋ก๋ ๊ฒํ ํ๊ณ ๊ฒํ ํด์ผ ํ๋ ์ฝ๋ ๊ฒํ ์์ ์์ด ์์ฒญ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ง์ ์๊ฐ๊ณผ ๋
ธ๋ ฅ์ด ํ์ํฉ๋๋ค. ์ด๋ ๋ํ ๊ฒํ ์๊ฐ ํ๋ก๊ทธ๋จ ์๋์ ์ค์ํ ์ฝ๋ ์กฐ๊ฐ์๋ง ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค๋ ์ฌ์ค๋ก ์ด์ด์ง๋๋ค. ์ ์ ๋ถ์ ๋๊ตฌ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ๋์ผํ ์ ํ๋๋ก ๊ฒ์ฌํฉ๋๋ค.
IntelliJ IDEA์ ํธํ๋๋ ์ฌ๋ฌ ์ฝ๋ ๋ถ์๊ธฐ๋ฅผ ๊ตฌ์ฑํ์ต๋๋ค. ์ด๊ฒ์ด ๊ทํ์ ์
๋ฌด์ ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋ด์ฅ IntelliJ IDEA ๋ถ์๊ธฐ
IntelliJ IDEA์ ๋ด์ฅ๋ ์ ์ Java ์ฝ๋ ๋ถ์๊ธฐ๋ ์ ๋ฌธ ์ ์ ๋ถ์ ๋๊ตฌ๋ณด๋ค ๊ฒฐ์ฝ ์ด๋ฑํ์ง ์์ต๋๋ค. ์์ฌ์ค๋ฝ๊ฑฐ๋ ์ด์์ ํ๊ฑฐ๋ ์๋ชป๋ ์ฝ๋ ์กฐ๊ฐ์ ๋ํ ๊ฒ์์ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์ ๋ฐ ํจํด ์ผ์น์ ๊ฐ์ ๋ค์ํ ์ ์ ๋ถ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ํ๋ฉ๋๋ค. IntelliJ IDEA์๋ ์๋ง์ ๊ฒ์ฌ๊ฐ ์์ต๋๋ค. ์ฌ์ค, ๊ทธ๋ค ์ค ๋ง์ ์ฌ๋๋ค์ด ํญ์ ์ค๋ฅ๋ฅผ ์ ํํ๊ฒ ๋ณด๊ณ ํ์ง๋ ์์ต๋๋ค. ์คํ๋ ค ์ฝ๋๊ฐ ์์ฑํ๊ฑฐ๋ ๊น๋ํ ๋์์ผ๋ก ๋ณ๊ฒฝํ ๊ฐ๋ฅ์ฑ์ด ์์์ ๋ํ๋
๋๋ค. "Inspections โ Java"๋ฅผ ์กฐ๊ธ ๊ณต๋ถํ ํ, ํ ๊ฐ์ง ์ฌ์ค์ ๊นจ๋ฌ์์ต๋๋ค. ์์ ์ค๋ฅ, ์์น ๋ฌธ์ , ์ง๋ ฌํ ๋ฌธ์ ๋ฒ์ฃผ์ ๊ฒ์ฌ์์๋ ์ค์ ์ค๋ฅ๋ฅผ ๋ฐ๊ฒฌํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ ํ
์คํธ๋ฅผ ์ง์ ์ํํ๊ณ ์ด๋ค ํ
์คํธ๊ฐ ํ๋ก์ ํธ์ ์ ์ฉํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค. ์ ์ ๋ถ์์ ์ฝ๋ ํธ์ง ๋ชจ๋์์ ์ํ๋๋ฏ๋ก IntelliJ IDEA์์๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ ํ ๋ช ์ด ๋ด์ ์ค๋ฅ๋ฅผ ์์ ํ ์ ์์ต๋๋ค. ํธ์ง๊ธฐ๋ ์๋ชป๋ ์ฝ๋ ์กฐ๊ฐ์ ์ฆ์ ๊ฐ์กฐ ํ์ํฉ๋๋ค.
์ ๋ง ํธ๋ฆฌํ๊ณ ๋ฉ์ง๋ค์! ๋ํ ์ ํํ ์ฝ๋์ ๋ํด "Alt + Enter" ์กฐํฉ์ ์ฌ์ฉํ๋ฉด ์ํฉ์ ๋ง๋ ๋ฉ๋ด๋ฅผ ํตํด ์ค๋ฅ๋ฅผ ์์ ํ๋ ์ต์
์ค ํ๋๋ฅผ ์ ํํ ์ ์์ต๋๋ค.
๋ํ ํน์ ๊ฒ์ฌ๋ฅผ ์คํํ๋ ์ด์ ๋ฅผ ํ์ธํ ์๋ ์์ต๋๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๊ฒ์ ์๊ฐ์ด ๋จ์ถ๋ฉ๋๋ค.
"๋ถ์ โ ์ฝ๋ ํ์ธ"์ ์ ํํ์ฌ ์๋์ผ๋ก ๋ถ์์ ์คํํ ์ ์์ต๋๋ค. ๋๋ โ๋ถ์ โ ์ด๋ฆ๋ณ ๊ฒ์ฌ ์คํโ์ ํตํด ๊ฐ๋ณ ๊ฒ์ฌ๋ฅผ ์คํํ ์๋ ์์ต๋๋ค. ์ด๋ฅผ ์ํํ๊ธฐ ์ ์ ๋ถ์ ๋ฒ์(ํ๋ก์ ํธ, ๋ชจ๋ ๋๋ ๊ฐ๋ณ ํ์ผ์ ๋ํ)๋ฅผ ์ง์ ํ์ญ์์ค. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋ถ์์ ์คํํ๋ฉด ๋ณต์ก์ฑ์ผ๋ก ์ธํด ํธ์ง ๋ชจ๋์์ ์๋ํ์ง ์๋ ์ผ๋ถ ๊ฒ์ฌ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ๋ถ์ ํ ๊ฒฐ๊ณผ๋ ๋ณ๋์ ์ฐฝ์ ์นดํ
๊ณ ๋ฆฌ/๋๋ ํฐ๋ฆฌ๋ณ๋ก ๊ทธ๋ฃนํ๋ฉ๋๋ค. ์ด ์ฐฝ์์ ํน์ ๊ฒ์ฆ ํธ๋ฆฌ๊ฑฐ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
IntelliJ์์๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ HTML ๋ฐ XML ํ์์ผ๋ก๋ง ์ ์ฅํ ์ ์์ต๋๋ค. ๋ถํํ๊ฒ๋ ์ ์๊ฐ์๋ IDE ์์ฒด์์ ๋ฐ๊ฒฌ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ํธ๋ฆฌํฉ๋๋ค. ๋ฉ๋ชจ. ๋๋ถ๋ถ์ ์ ์ ๋ถ์๊ธฐ ๊ธฐ๋ฅ์ ๋ฌด๋ฃ IntelliJ IDEA Community Edition์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
SonarJava
SonarJava ๋ SonarSource์ Java์ฉ ์ ์ ์ฝ๋ ๋ถ์๊ธฐ์
๋๋ค. ๊ธฐ๋ฅ ๋ชฉ๋ก์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
๋ค์ํ IDE( SonarLint ํ๋ฌ๊ทธ์ธ์ ํตํด )์
SonarQube ์์ ๋ณ๋๋ก ๋ถ์์ ์คํํ ์ ์์ต๋๋ค . SonarLint๋ ๋ด์ฅ๋ IntelliJ IDEA ์ฝ๋ ๋ถ์๊ธฐ์ ํจ๊ป ์๋ํ ์ ์์ต๋๋ค. ๊ฐ์กฐ ํ์๋ ์ฝ๋ ๋ถ๋ถ ์๋ก ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๊ฐ๋ฉด ๋ ๋ถ์๊ธฐ์ ๊ฒฝ๊ณ ๋ฅผ ์์ฃผ ๋ณผ ์ ์์ต๋๋ค.
๋ฌผ๋ก ๋ณ๋์ ์ฐฝ์์ ๊ฒฝ๊ณ ๋ฅผ ๋ณผ ์๋ ์์ต๋๋ค.
์ ๋ฐ์ ์ผ๋ก SonarJava๋ฅผ ๋ค์ํ ๋ฐฉ์์ผ๋ก ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋งค๋ ฅ์ ์
๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ์์ฑํ ๋ ๋๊ตฌ๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์์ต๋๋ค.
FindBugs/SpotBugs
์ํ๊น๊ฒ๋
FindBugs๋ ์ค๋ซ๋์ ์
๋ฐ์ดํธ๋์ง ์์์ต๋๋ค. ๋ง์ง๋ง ์์ ๋ฆด๋ฆฌ์ค๋ 2015๋
์ ์ถ์๋์์ต๋๋ค. ๊ทธ๋ฌ๋ ์๋ง๋ ๊ฐ์ฅ ์ ๋ช
ํ ๋ฌด๋ฃ ์ ์ Java ์ฝ๋ ๋ถ์๊ธฐ์ด๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ฌ์ ํ ๊ทธ๊ฒ์ ๊ธฐ์ตํ๊ณ ์ฌ์ฉํฉ๋๋ค. Java ๊ฐ๋ฐ์์๊ฒ ์ ์ ๋ถ์์ ๋ํด ๋ฌธ์ํ๋ฉด ์๋ง๋ ์ฆ์ FindBugs๋ฅผ ๋ ์ฌ๋ฆด ๊ฒ์
๋๋ค. ์คํ ์์ค ๋ถ์๊ธฐ
SpotBugs๋ ๋ฒ๋ ค์ง FindBugs์ ๋
ผ๋ฆฌ์ ์ฐ์์ฒด๊ฐ ๋์์ต๋๋ค. FindBugs์ ๋ชจ๋ ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ต๋๋ค. ์ด๊ฒ์ด ์ข์์ง ๋์์ง๋ ์๊ฐ์ด ๋งํด ์ค ๊ฒ์
๋๋ค. ๊ทธ ๋์ ๋ถ์๊ธฐ ์ปค๋ฎค๋ํฐ์์๋ ์ด๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. SpotBugs์ ์ฃผ์ ๊ธฐ๋ฅ:
- 400๊ฐ ์ด์์ ์ค๋ฅ ๊ฐ์ง ๊ท์น;
- Ant, Maven, Gradle, Eclipse, IntelliJ IDEA์ ํตํฉ;
- ์ฌ์ฉ์ ์ ์ ์ง๋จ ๊ท์น์ผ๋ก ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.
์์ฌ์ค๋ฌ์ด ์ฝ๋๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ํจํด ์ผ์น์ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์์ด๋ผ๋ ๋์ผํ ๋ฐฉ๋ฒ๋ก ์ด ์ฌ์ฉ๋ฉ๋๋ค. ๋ถ์๊ธฐ๋ ๋ฉํฐ์ค๋ ๋ฉ, ์ฑ๋ฅ, ์ทจ์ฝ์ , ์ฝ๋ ๋๋
ํ ๋ฑ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ ํ์ ์ค๋ฅ๋ฅผ ๊ฐ์งํฉ๋๋ค. IntelliJ IDEA์์ ๊ฒฝ๊ณ ์ฐฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฒฝ๊ณ ๋ ๋ฒ์ฃผ, ํด๋์ค, ๋๋ ํฐ๋ฆฌ ๋ฐ ์ ๋ขฐ ์์ค๋ณ๋ก ๊ทธ๋ฃนํํ ์ ์์ต๋๋ค. ๋ชจ๋ ์ง๋จ ๊ท์น์ ๋ํ ๊ฒฝ๊ณ ์ ๋ฌธ์๋ฅผ ๋์์ ๋ณผ ์ ์์ต๋๋ค. ๋ถ์์ ์๋์ผ๋ก ์์๋ฉ๋๋ค. ๋ถ์ ํ์๋ ๋ฌธ์ ๊ฐ ์๋ ๋ชจ๋ ์ฝ๋ ์กฐ๊ฐ์ด IntelliJ IDEA ๋ฐ SonarLint์ ๋ค๋ฅธ ๊ฒฝ๊ณ ์ ํจ๊ป ๊ฐ์กฐ ํ์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ํ์ผ์ ๋ํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋๋ก ๊ฒฝ๊ณ ๋ฅผ ์
๋ฐ์ดํธํ๋ ค๋ฉด ๋ถ์์ ๋ค์ ์คํํด์ผ ํฉ๋๋ค. ๋ํ ๋ง์ ๊ถ๊ณ ๊ฒฝ๊ณ ๊ฐ ์์ผ๋ฏ๋ก ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ ์ ๋ถ์๊ธฐ๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
PVS-์คํ๋์ค
PVS-Studio๋ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ Spoon์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ์์ค ์ฝ๋๋ฅผ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ณ ์๋ฏธ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ค๊ณ๋ AST ๋ชจ๋ธ์ ๊ตฌ์ถํฉ๋๋ค. ์ด ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ถ์๊ธฐ๋ ๋ค์๊ณผ ๊ฐ์ ์ต์ ๊ธฐ์ ์ ์ฌ์ฉํฉ๋๋ค.
- ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์;
- ์์ง์ ํผํฌ๋จผ์ค;
- ๋ฉ์๋ ์ฃผ์
- ํจํด ๊ธฐ๋ฐ ๋ถ์.
ํ์ฌ ๋ถ์๊ธฐ๋ ๋ค์ํ ์ฝ๋ ๊ฒฐํจ์ ์๋ณํ๋ 105๊ฐ ์ด์์ ์ง๋จ ๊ท์น์ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์คํ ์์ , Null ์ฐธ์กฐ ์ด๋ฆ ๋ณ๊ฒฝ, ์ฐ๊ฒฐํ ์ ์๋ ์ฝ๋, ๋ฒ์๋ฅผ ๋ฒ์ด๋ ๋ฐฐ์ด ์ธ๋ฑ์ค, ๋ฉ์๋ ๊ณ์ฝ ์ฌ์ฉ ์๋ฐ ๋ฐ ๊ธฐํ ์ค๋ฅ๊ฐ ํฌํจ๋ฉ๋๋ค.
์ฌ๊ธฐ์์ ๋ชจ๋ ์ง๋จ ๊ท์น ๊ธฐ๋ฅ์ ํ์ธํ ์ ์์ต๋๋ค . PVS-Studio์ ์ฃผ์ ๊ธฐ๋ฅ:
PMD
PMD ๋ ์คํ ์์ค ์ ์ ๋ถ์๊ธฐ์
๋๋ค. ์ฌ์ฉ๋์ง ์๋ ๋ณ์, ๋น ๋ธ๋ก, ๋ถํ์ํ ๊ฐ์ฒด ์์ฑ ๋ฐ ๊ธฐํ ๋ฌธ์ ๋ฑ ์ผ๋ฐ์ ์ธ ๊ฐ๋ฐ ์ค๋ฅ๋ฅผ ์๋ณํฉ๋๋ค. ๋ถ์๊ธฐ๋ ์์ค ์ฝ๋๋ฅผ ์
๋ ฅ์ผ๋ก ์ฌ์ฉํฉ๋๋ค. ํ์ฌ PMD๋ ํ๋ก์ธ์ค๋น ํ๋์ ์์ค ํ์ผ์ ๋ถ์ํ๋ฏ๋ก ๋ถ์์ ์์ ์ฑ์ ์ ํ์ด ์์ต๋๋ค. PMD ์์ฑ์๋ ๋ถ์ ์ ์ ํ๋ก์ ํธ๋ฅผ ์กฐ๋ฆฝํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ถ์ ์ค์ธ ์ฝ๋์ ์ฌ์ฉ๋ ์ ํ์ ๋ํ ์ ๋ณด๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค. PMD์ ์ฃผ์ ๊ธฐ๋ฅ:
- ๋ค์ํ IDE(IntelliJ IDEA, Eclipse, NetBeans) ๋ฐ ๋น๋ ์์คํ
(Maven, Gradle, Ant)๊ณผ ํตํฉ
- SARIF, CSV, IDEA, JSON, ํ
์คํธ(๊ธฐ๋ณธ๊ฐ), XML, HTML, TextColor ๋ฑ ๋ค์ํ ๋ถ์๊ธฐ ๋ณด๊ณ ์ ํ์์ ์ง์ํฉ๋๋ค.
- 300 ๊ฐ๊ฐ ๋๋ ์ง๋จ ๊ท์น ํ
ํ๋ฆฟ์ด ์์ต๋๋ค. ์นดํ
๊ณ ๋ฆฌ: ์ฝ๋ฉ ์คํ์ผ, ๋ชจ๋ฒ ์ฌ๋ก, ๋ฒ๊ทธ, ๋ฉํฐ์ค๋ ๋ฉ, ์ฑ๋ฅ ๋ฑ
- ์ฝ๋์์ ์ค๋ณต์ ๊ฐ์งํ๋ PMD์ ํจ๊ป CPD(๋ณต์ฌ-๋ถ์ฌ๋ฃ๊ธฐ ๊ฐ์ง๊ธฐ)๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋ชจ๋ ์ง๋จ ๊ท์น์ ์ดํด๋ณด๋ฉด PMD๋ ์ฝ๋ฉ ์คํ์ผ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ๋ช
๋ฐฑํ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๋ ๋ฐ ๋ ์ค์ ์ ๋ก๋๋ค. ์ง๋จ ๊ท์น์ ์๋ก ์ถฉ๋ํ ์ ์์ผ๋ฏ๋ก ๋ถ์๊ธฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. IntelliJ IDEA์ฉ ํ๋ฌ๊ทธ์ธ์ ํตํด ๋ถ์์ ์คํํ ์๋ ์์ง๋ง ๋ถ์์ ์ํด ๊ฐ๋ณ ํ์ผ์ ์ ํํ ์๋ ์์ต๋๋ค. ๊ฒฝ๊ณ ์ฐฝ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ ์๊ฐ์๋ ๊ฒฝ๊ณ ์์
์ ํ์ผ๊ณผ ๋ช
ํํ์ง ์์ ๋ฉ์์ง๋ณ๋ก ๊ทธ๋ฃนํํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ ํธ๋ฆฌํ์ง ์์ต๋๋ค. ๊ฒฝ๊ณ ์๋ก ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๊ฐ ๋๋ง ๋ํ๋ฉ๋๋ค.
๊ฒฐ๋ก
๋ฌผ๋ก ์์์ ์ค๋ช
ํ ๋ถ์๊ธฐ ์ธ์๋ ๋ค๋ฅธ ์๋ฃจ์
์ด ์์ต๋๋ค. ์ ๋ฃ(Coverity, Klockwork, JArchitect) ํ๋ก๊ทธ๋จ๊ณผ ๋ฌด๋ฃ(Error Prone, Infer, Checkstyle) ํ๋ก๊ทธ๋จ์ด ๋ชจ๋ ์์ต๋๋ค. ๊ทธ๋ค์ ๋ชจ๋ ํ ๊ฐ์ง์ ์ด์ ์ ๋ง์ถฅ๋๋ค: ๋ถ์ ํํ๊ฑฐ๋ ์ ์ฌ์ ์ผ๋ก ๋ฒ๊ทธ๊ฐ ์๋ ์ฝ๋๊ฐ ํ๋ก๋์
์ ๋๋ฌํ๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๊ฒ์
๋๋ค. ๋๋ ์ด ์์
์ ์ด๋ค ๋ถ์๊ธฐ๊ฐ ๋ ์ ํฉํ์ง ํ๋จํ ๊ถ๋ฆฌ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฐ์ดํฐ ํ๋ฆ ๋ถ์ ๋ฐ ๊ธฐํธ ์คํ์ ๊ฐ๋ฐํ๋ ๋ถ์๊ธฐ๋ ์ฝ๋์์ ์ค์ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ ๊ฐ๋ฅ์ฑ์ด ๋ ๋์ต๋๋ค. ์ ์ ๋ถ์๊ธฐ๋ฅผ ์ ํํ๋ ๊ฒฝ์ฐ ๋ค์ ์ฌํญ์ ์ฃผ์ํ์ธ์.
- ๋ค์ํ IDE๋ก์ ํตํฉ;
- ์กฐ๋ฆฝ ์์คํ
์ ํตํฉ;
- ์๋ฒ์์ ๋ถ์๊ธฐ๋ฅผ ์ฝ๊ฒ ์์ํ ์ ์์ต๋๋ค.
- ์ฝ๋ ํธ์ง ๋ชจ๋์์ ์ค๋ฅ๋ฅผ ๊ฐ์งํ๋ ๊ธฐ๋ฅ;
- ๊ฒฝ๊ณ ๋ฅผ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ;
- SAST ์ค๋ฆฌ์ํ
์ด์
;
- ๊ฑฐ์ง ๊ธ์ ๋น์จ;
- ๊ตฌ์ฑ์ ๋ณต์ก์ฑ.
- ๋ชจ๋ ์ฅ๋จ์ ์ ์กฐํฉํ๋ฉด ๊ทํ๊ฐ ์ต๊ณ ๋ผ๊ณ ์๊ฐํ๋ ์ ์ ๋ถ์๊ธฐ์ ์๊ฐ ๋ง์์ง ๊ฒ์
๋๋ค.
์ฐธ๊ณ : IntelliJ IDEA๋ฅผ ์์ฃผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ IntelliJ IDEA์ ํตํฉ๋ ์์ ๋ฅผ ์ ๊ณตํ์ต๋๋ค.
Java ํ ๋ฐ ์คํ ๋ฉ๋ชจ๋ฆฌ ์ค๋ฅ
์ถ์ฒ :
DZone ์ด์ Java ํ์ด๋ ์คํ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ํ ์ ์๋ ์ฃผ์ ์ค๋ฅ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ํ์ง๋ง ๋จผ์ ์ด ๋ ์ฉ์ด๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ๊ธฐ์ตํด ๋ณด๊ฒ ์ต๋๋ค.
- ํ ๋ฉ๋ชจ๋ฆฌ๋ Java ๊ฐ์ฒด๊ฐ ์ ์ฅ๋๋ ํน์ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์
๋๋ค.
- ์คํ ๋ฉ๋ชจ๋ฆฌ๋ ๋ฉ์๋ ํธ์ถ ์ ๋ณ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ์์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด๋ค.
ํ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ค๋ช
ํ๋ ์ฃผ์ ์์ธ๋
java.lang.OutOfMemoryError ์
๋๋ค .
Java ํ ๊ณต๊ฐ
์ด ์ค๋ฅ๋ Java ํ๋ก๊ทธ๋จ์ด ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ฐ์ฒด๋ฅผ ํ ๋นํ์ง ๋ชปํ ๊ฒฝ์ฐ ๋ฐ์ํฉ๋๋ค.
GC ์ค๋ฒํค๋ ํ๋๋ฅผ ์ด๊ณผํ์ต๋๋ค.
Java ํ๋ก๊ทธ๋จ์ ๊ฐ๋น์ง ์์ง์ ๋๋ฌด ๋ง์ ์๊ฐ์ ์๋นํฉ๋๋ค. ์ด ์ค๋ฅ๋ ๊ฐ๋น์ง ์์ง์ด ํ๋ก๊ทธ๋จ ์๊ฐ์ 98%๋ฅผ ์ฐจ์งํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ 2% ๋ฏธ๋ง์ ๋ณต๊ตฌํ ๋ ๋ํ๋ฉ๋๋ค.
public class OutOfMemoryErrorDemo {
public static void main(String[] args) {
int i = 0;
List<String> stringList = new ArrayList<>();
while (i < Integer.MAX_VALUE) {
i++;
String generatedString = new String( "Some string generated to show out of memory error example " + i);
stringList.add(generatedString);
}
}
}
์ฌ๊ธฐ์
stringList์๋ ์์ฑ๋ ๋ฌธ์์ด์ ๋ํ ์ฐธ์กฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฏ๋ก ๊ฐ๋น์ง ์์ง๊ธฐ๋ ์์ฑ๋ ๋ฌธ์์ด์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ ์ ์์ง๋ง ์ ํ๋ฆฌ์ผ์ด์
์์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๋น์ง๋ฅผ ์ ๊ฑฐํ๋ ค๊ณ ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ๋ง์ผ๋ก๋ ์ถฉ๋ถํ์ง ์์ต๋๋ค.
์์ฒญํ ์ด๋ ์ด ํฌ๊ธฐ๊ฐ VM ์ ํ์ ์ด๊ณผํจ
ํ์ ์ถฉ๋ถํ ๊ณต๊ฐ์ด ์์ ๋ ๋ฐฐ์ด์ ํ ๋นํ๋ ค๊ณ ํ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
public class OutOfMemoryErrorDemo {
public static void main(String[] args) {
long[] array = new long[Integer.MAX_VALUE];
}
}
๋ฉํ์คํ์ด์ค
ํด๋์ค ๋ฐ์ดํฐ ์ ๋ณด๋ฅผ ์ํ ๋ฉํ๊ณต๊ฐ ์์ญ์ ๊ณต๊ฐ์ด ์์ผ๋ฉด ์ด ๋ฉ์์ง์ ํจ๊ป ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ค์ ๊ณต๊ฐ ์์(์ด์ ๋ก ์ธํ ์์ฒญ ํฌ๊ธฐ ๋ฐ์ดํธ. ์ค์ ๊ณต๊ฐ์ด ๋ถ์กฑํฉ๋๊น?)
๊ธฐ๋ณธ ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๊ฑฐ๋ ํฌ๊ธฐ๊ฐ ๋ถ์กฑํ ๊ฒฝ์ฐ ์ค๋ฅ๊ฐ ๋ํ๋ฉ๋๋ค.
์ด์ stack_trace_with_native_method
์์ Java ์ธํฐํ์ด์ค ๋๋ ์์ ๋ฉ์๋๊ฐ ํ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ง ๋ชปํ์ต๋๋ค.
StackOverFlowError - ๋ฉ์๋ ํธ์ถ์ด ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ. ์ผ๋ฐ์ ์ผ๋ก ๋ด๋ถ์ ์ฌ๊ท๊ฐ ํฌํจ๋ ๋ฉ์๋์ ์ํด ์์ธ๊ฐ ๋ฐ์ํฉ๋๋ค.
public class StackOverFlowErrorDemo {
public static void main(String[] args) {
recursiveMethod(2);
}
public static int recursiveMethod(int i) {
return recursiveMethod(i);
}
}
GO TO FULL VERSION