HanSol's Oak Cask

정적 뢄석 도ꡬ λ³Έλ¬Έ

μš©μ–΄, κ°œλ…

정적 뢄석 도ꡬ

HanSol_Lim 2025. 2. 20. 13:11

πŸ” 정적 뢄석 도ꡬ(Static Analysis Tool)λž€?

정적 뢄석 λ„κ΅¬λŠ” μ†Œν”„νŠΈμ›¨μ–΄ μ†ŒμŠ€ μ½”λ“œ, λ°”μ΄νŠΈ μ½”λ“œ, λ˜λŠ” λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ₯Ό ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 없이 λΆ„μ„ν•˜μ—¬ 버그, λ³΄μ•ˆ 취약점, μ½”λ”© ν‘œμ€€ μœ„λ°˜ 등을 μ°Ύμ•„λ‚΄λŠ” λ„κ΅¬μž…λ‹ˆλ‹€.

  • “정적(Static)”: ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•˜μ§€ μ•Šκ³  μ½”λ“œλ₯Ό 뢄석.
  • λͺ©μ : μ½”λ“œμ˜ ν’ˆμ§ˆ ν–₯상, λ³΄μ•ˆ κ°•ν™”, μœ μ§€λ³΄μˆ˜μ„± κ°œμ„ , ν”„λ‘œλ•μ…˜ 문제 예방.
  • 개발 초기 λ‹¨κ³„μ—μ„œ μ½”λ“œ 문제λ₯Ό λ°œκ²¬ν•˜μ—¬ λΉ„μš©κ³Ό μ‹œκ°„μ„ 절감.

πŸ— 1. 정적 뢄석 λ„κ΅¬μ˜ μ£Όμš” κΈ°λŠ₯

κΈ°λŠ₯ μ„€λͺ…
🐞 버그 탐지 NullPointerException, λ©”λͺ¨λ¦¬ λˆ„μˆ˜, λ¬΄ν•œ 루프 λ“± 잠재적 였λ₯˜ 탐지.
πŸ”’ λ³΄μ•ˆ 취약점 뢄석 SQL μΈμ μ…˜, XSS, 인증 문제 λ“± λ³΄μ•ˆμƒ μ·¨μ•½ν•œ μ½”λ“œ 식별.
🧩 μ½”λ”© ν‘œμ€€ μ€€μˆ˜ μ½”λ”© μŠ€νƒ€μΌ, 넀이밍 κ·œμΉ™, μ½”λ“œ 포맷 검사 (예: PEP8, Google Style).
πŸ”„ λ°λ“œ μ½”λ“œ 탐지 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” λ³€μˆ˜, ν•¨μˆ˜, μ½”λ“œ 블둝 식별.
πŸ›  μ„±λŠ₯ 이슈 탐지 λΉ„νš¨μœ¨μ μΈ 루프, λΆˆν•„μš”ν•œ λ©”λͺ¨λ¦¬ μ‚¬μš© λ“±μ˜ μ„±λŠ₯ 문제 식별.
πŸ“ 정적 μ½”λ“œ 뢄석 λ³΄κ³ μ„œ μ½”λ“œ ν’ˆμ§ˆ, λ³΄μ•ˆ 취약점, λ¦¬νŒ©ν† λ§ μ œμ•ˆ 등을 ν¬ν•¨ν•œ 뢄석 λ³΄κ³ μ„œ 제곡.
🎯 νƒ€μž… 검사 νƒ€μž… 뢈일치 였λ₯˜ 탐지 (예: Python의 mypy, Java의 lint).

⚑ 2. 정적 뢄석 λ„κ΅¬μ˜ λ™μž‘ 방식

  1. ꡬ문 뢄석(Syntax Analysis)
    • μ½”λ“œλ₯Ό ν† ν°ν™”ν•˜κ³  **ꡬ문 트리(AST, Abstract Syntax Tree)**λ₯Ό μƒμ„±ν•˜μ—¬ 문법 였λ₯˜λ₯Ό 탐지.
  2. μ œμ–΄ 흐름 뢄석(Control Flow Analysis)
    • ν”„λ‘œκ·Έλž¨μ˜ 흐름을 λΆ„μ„ν•˜μ—¬ 비정상적인 경둜(예: λ¬΄ν•œ 루프, 쑰건문 λ―Έμ‚¬μš©)λ₯Ό 탐색.
  3. 데이터 흐름 뢄석(Data Flow Analysis)
    • λ³€μˆ˜λ‚˜ λ°μ΄ν„°μ˜ 흐름을 μΆ”μ ν•˜μ—¬ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šμ€ λ³€μˆ˜ μ‚¬μš©, λΆˆν•„μš”ν•œ λ³€μˆ˜ 등을 식별.
  4. νŒ¨ν„΄ λ§€μΉ­(Pattern Matching)
    • λ³΄μ•ˆ 취약점 νŒ¨ν„΄μ΄λ‚˜ ν‘œμ€€ μœ„λ°˜ 사둀λ₯Ό μ½”λ“œμ—μ„œ 검색.
  5. ν˜•μ‹ 검사(Type Checking)
    • μ½”λ“œμ˜ νƒ€μž… 일관성을 κ²€μ‚¬ν•˜μ—¬ λŸ°νƒ€μž„ 였λ₯˜ 예방.

πŸƒ 3. 동적 λΆ„μ„κ³Όμ˜ 차이점

ν•­λͺ©  

  정적 뢄석(Static Analysis) 동적 뢄석(Dynamic Analysis)
뢄석 μ‹œμ  컴파일 μ „ λ˜λŠ” λΉŒλ“œ κ³Όμ • 쀑 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 쀑
μ‹€ν–‰ μ—¬λΆ€ ❌ ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 없이 μ½”λ“œλ§Œ 뢄석 βœ… ν”„λ‘œκ·Έλž¨ 싀행을 톡해 λŸ°νƒ€μž„ μƒνƒœ 뢄석
λͺ©μ  μ½”λ“œ ν’ˆμ§ˆ 검사, λ³΄μ•ˆ 취약점 사전 탐지, ν‘œμ€€ μ€€μˆ˜ 확인 μ„±λŠ₯ μΈ‘μ •, λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 탐지, λ™μž‘ 검증
μ˜ˆμ‹œ 도ꡬ SonarQube, ESLint, FindBugs, Pylint, PMD JUnit, Selenium, JProfiler, Valgrind
μž₯점 λΉ λ₯Έ 였λ₯˜ 탐지, λΉ„μš© 절감, μ‘°κΈ° ν’ˆμ§ˆ 확보 μ‹€μ œ μ‹€ν–‰ ν™˜κ²½μ—μ„œμ˜ 문제 탐지 κ°€λŠ₯
단점 μ‹€ν–‰ 쀑 λ°œμƒν•˜λŠ” 문제 탐지 어렀움 μ‹€ν–‰ μ‹œκ°„μ΄ 였래 걸리고 ν…ŒμŠ€νŠΈ ν™˜κ²½ ν•„μš”

🧰 4. μ£Όμš” 정적 뢄석 도ꡬ μ˜ˆμ‹œ

μ–Έμ–΄ 도ꡬ 이름 νŠΉμ§•

μ–Έμ–΄ 도ꡬ 이름 νŠΉμ§•
Java SonarQube μ½”λ“œ ν’ˆμ§ˆ, λ³΄μ•ˆ 뢄석, 지속적 톡합(CI)와 연계 κ°€λŠ₯.
  PMD Java μ½”λ“œμ—μ„œ λΆˆν•„μš”ν•œ 객체 생성, λ°λ“œ μ½”λ“œ 탐지.
Python Pylint μ½”λ“œ μŠ€νƒ€μΌ 검사, 버그 탐지, λ¦¬νŒ©ν† λ§ μ œμ•ˆ.
  mypy Python νƒ€μž… 힌트λ₯Ό ν†΅ν•œ 정적 νƒ€μž… 검사.
JavaScript ESLint JavaScript ν‘œμ€€ μ€€μˆ˜ 검사 및 μ»€μŠ€ν„°λ§ˆμ΄μ¦ˆ κ°€λŠ₯.
C/C++ Cppcheck λ©”λͺ¨λ¦¬ λˆ„μˆ˜, 경계 검사, 포인터 였λ₯˜ 탐지.
C# FxCop .NET μ½”λ“œμ˜ λ³΄μ•ˆ 및 μ„±λŠ₯ ν‘œμ€€ 검사.
λ‹€μ–‘ν•œ μ–Έμ–΄ Fortify λ³΄μ•ˆ 취약점 뢄석에 강점, λŒ€ν˜• μ—”ν„°ν”„λΌμ΄μ¦ˆμ—μ„œ μ‚¬μš©.
Go GolangCI-Lint Go μ½”λ“œμ— νŠΉν™”λœ λ©€ν‹° λΌμ΄λ„ˆ 검사기.

πŸ“ˆ 5. 정적 뢄석 λ„κ΅¬μ˜ μž₯점과 단점

βœ… μž₯점

  • λΉ λ₯Έ 문제 탐지: 개발 초기 λ‹¨κ³„μ—μ„œ 였λ₯˜λ₯Ό λ°œκ²¬ν•˜μ—¬ μˆ˜μ • λΉ„μš© 절감.
  • λ³΄μ•ˆμ„± ν–₯상: λ³΄μ•ˆ 취약점을 사전에 νƒμ§€ν•˜μ—¬ λ³΄μ•ˆ 사고 예방.
  • ν’ˆμ§ˆ κ°œμ„ : μΌκ΄€λœ μ½”λ”© ν‘œμ€€ μ€€μˆ˜λ‘œ 가독성과 μœ μ§€λ³΄μˆ˜μ„± ν–₯상.
  • μžλ™ν™”: CI/CD νŒŒμ΄ν”„λΌμΈμ— ν†΅ν•©ν•˜μ—¬ 지속적인 μ½”λ“œ ν’ˆμ§ˆ 검사 κ°€λŠ₯.

❌ 단점

  • μ˜€νƒ(false positive) λ°œμƒ κ°€λŠ₯.
  • μ‹€ν–‰ ν™˜κ²½ 문제 탐지 λΆˆκ°€ (동적 뢄석 ν•„μš”).
  • λ³΅μž‘ν•œ μ½”λ“œλ² μ΄μŠ€μ—μ„œλŠ” μ„±λŠ₯ 병λͺ© λ°œμƒ κ°€λŠ₯.

🎯 6. μ–Έμ œ 정적 뢄석 도ꡬλ₯Ό μ‚¬μš©ν•΄μ•Ό ν• κΉŒ?

  • 개발 초기 단계: 섀계 ν›„ μ½”λ“œ μž‘μ„± 초기 λ‹¨κ³„μ—μ„œ ν’ˆμ§ˆ 확보.
  • μ½”λ“œ 리뷰 ν”„λ‘œμ„ΈμŠ€: PR(Pull Request) 전에 μ½”λ“œ ν’ˆμ§ˆ 점검.
  • 지속적 톡합(CI): Jenkins, GitLab CI λ“±κ³Ό μ—°κ³„ν•˜μ—¬ μžλ™ μ½”λ“œ 검사.
  • λ³΄μ•ˆ μš”κ΅¬μ‚¬ν•­μ΄ 높은 ν”„λ‘œμ νŠΈ: 금육, 의료, 곡곡기관 λ“± μ•ˆμ •μ„± ν•„μˆ˜ ν™˜κ²½.

🌟 7. 결둠

정적 뢄석 λ„κ΅¬λŠ” ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ 없이 μ½”λ“œλ₯Ό λΆ„μ„ν•˜μ—¬ 잠재적 문제λ₯Ό 쑰기에 μ‹λ³„ν•˜λŠ” 데 핡심적인 역할을 ν•©λ‹ˆλ‹€.

  • βœ” λΉ λ₯Έ 문제 식별
  • βœ” λ³΄μ•ˆ 취약점 예방
  • βœ” μ½”λ“œ 일관성 및 ν’ˆμ§ˆ ν–₯상

πŸ’‘ ν•œ 쀄 μš”μ•½:

“정적 뢄석 λ„κ΅¬λŠ” μ½”λ“œκ°€ λ°°ν¬λ˜κΈ°λ„ 전에 버그와 λ³΄μ•ˆ 취약점을 μ°Ύμ•„λ‚΄μ–΄, 개발자의 μ‹€μˆ˜λ₯Ό 미리 λ°©μ§€ν•˜λŠ” μ΅œμ „μ„  λ°©νŒ¨μž…λ‹ˆλ‹€.” πŸ›‘βœ¨

'μš©μ–΄, κ°œλ…' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

ν˜•μƒκ΄€λ¦¬ 툴 SVN (vs Git)  (0) 2025.02.20
데이터 κ±°λ²„λ„ŒμŠ€  (1) 2025.02.20
데이터 ν’ˆμ§ˆ  (0) 2025.02.20
ESB 연계방식(vs API Gateway)  (0) 2025.02.20
YAML (XML vs JSON vs YAML)  (0) 2025.02.20