# [[Automated Testing Frameworks]] ## πŸ“Œ Brief Summary μžλ™ν™”λœ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ˜ κΈ°λŠ₯이 μ˜λ„ν•œ λŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ μˆ˜λ™ κ°œμž… 없이 κ²€μ¦ν•˜κ³  ν‰κ°€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ˜λŠ” 도ꡬ 및 ν™˜κ²½μ΄λ‹€ [1, 2]. μ΄λŸ¬ν•œ ν”„λ ˆμž„μ›Œν¬λŠ” λ¦¬νŒ©ν† λ§ κ³Όμ •μ—μ„œ κΈ°μ‘΄ κΈ°λŠ₯이 λ³€κ²½λ˜μ§€ μ•Šμ•˜μŒμ„ 보μž₯ν•˜λŠ” ν•„μˆ˜μ μΈ μ•ˆμ „λ§ 역할을 μˆ˜ν–‰ν•˜μ—¬ κ°œλ°œμžκ°€ μ½”λ“œμ˜ λ‚΄λΆ€ ꡬ쑰λ₯Ό μžμ‹ κ° 있게 λ³€κ²½ν•  수 μžˆλ„λ‘ λ•λŠ”λ‹€ [3, 4]. μ†Œν”„νŠΈμ›¨μ–΄ 개발 쑰직은 λ‹¨μœ„ ν…ŒμŠ€νŠΈλΆ€ν„° UI ν…ŒμŠ€νŠΈκΉŒμ§€ λ‹€μ–‘ν•œ 계측에 νŠΉν™”λœ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬λ₯Ό κ²°ν•©ν•˜μ—¬ λΉ λ₯΄κ³  μ•ˆμ •μ μΈ 지속적 배포(CI/CD) νŒŒμ΄ν”„λΌμΈμ„ κ΅¬μΆ•ν•œλ‹€ [5, 6]. ## πŸ“– Core Content * **λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Tests) ν”„λ ˆμž„μ›Œν¬**: μžλ°” ν™˜κ²½μ˜ 사싀상 ν‘œμ€€μΈ JUnit은 `TestCase`와 `TestSuite` νŒ¨ν„΄μ„ 기반으둜 ν…ŒμŠ€νŠΈλ₯Ό κ΅¬μ‘°ν™”ν•˜κ³  μ‹€ν–‰ν•˜μ—¬ 였λ₯˜λ₯Ό λΉ λ₯΄κ²Œ κ°μ§€ν•˜λŠ” λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬μ΄λ‹€ [2, 7, 8]. λ‹¨μœ„ ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬λ₯Ό ν™œμš©ν•˜λ©΄ 전체 ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈμ˜ κΈ°λ°˜μ„ ν˜•μ„±ν•˜λŠ” μž‘κ³  λΉ λ₯Έ ν…ŒμŠ€νŠΈλ₯Ό λŒ€λŸ‰μœΌλ‘œ ꡬ좕할 수 μžˆλ‹€ [9]. * **λͺ¨ν‚Ή(Mocking) 및 μŠ€ν„°λΉ™(Stubbing) ν”„λ ˆμž„μ›Œν¬**: λ³΅μž‘ν•œ μ˜μ‘΄μ„±μ„ κ°€μ§„ μ½”λ“œλ₯Ό κ²©λ¦¬ν•˜μ—¬ ν…ŒμŠ€νŠΈν•˜κΈ° μœ„ν•΄ Mockito와 같은 ν”„λ ˆμž„μ›Œν¬κ°€ ν™œμš©λœλ‹€ [8, 10]. μ™ΈλΆ€ REST APIμ™€μ˜ 연동을 ν…ŒμŠ€νŠΈν•  λ•ŒλŠ” μ‹€μ œ μ„œλ²„ λŒ€μ‹  κ°€μ§œ μ„œλ²„λ₯Ό λ„μ›Œ 응닡을 λͺ¨λ°©ν•˜λŠ” Wiremock λ“±μ˜ ν”„λ ˆμž„μ›Œν¬κ°€ μœ μš©ν•˜κ²Œ 쓰인닀 [10, 11]. * **계약 ν…ŒμŠ€νŠΈ(Contract Tests) ν”„λ ˆμž„μ›Œν¬**: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ ν™˜κ²½μ—μ„œλŠ” μ„œλΉ„μŠ€ κ°„μ˜ μΈν„°νŽ˜μ΄μŠ€ 사양을 κ²€μ¦ν•˜κΈ° μœ„ν•΄ Pact와 같은 μ†ŒλΉ„μž 주도 계약(CDC, Consumer-Driven Contract) ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬κ°€ μ‚¬μš©λœλ‹€ [10, 12]. μ΄λŠ” μ†ŒλΉ„μžκ°€ κΈ°λŒ€ν•˜λŠ” API μŠ€νŽ™μ„ μ •μ˜ν•˜λ©΄ μ œκ³΅μžκ°€ 이λ₯Ό μ§€μ†ν•΄μ„œ 검증할 수 μžˆλ„λ‘ λ•λŠ”λ‹€ [13, 14]. * **μ—”λ“œνˆ¬μ—”λ“œ(End-to-End) 및 UI ν…ŒμŠ€νŠΈ ν”„λ ˆμž„μ›Œν¬**: 전체 μ‹œμŠ€ν…œμ˜ μŠ€νƒμ„ ν†΅ν•©μ μœΌλ‘œ κ²€μ¦ν•˜κΈ° μœ„ν•΄ λΈŒλΌμš°μ €λ₯Ό μžλ™ν™”ν•˜λŠ” Selenium 기반의 λ„κ΅¬λ“€μ΄λ‚˜ REST API 검증을 μœ„ν•œ REST-assured ν”„λ ˆμž„μ›Œν¬κ°€ μ‚¬μš©λœλ‹€ [10, 15, 16]. * **ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œ μ „λž΅**: ν”„λ ˆμž„μ›Œν¬λ“€μ„ 효과적으둜 μ‚¬μš©ν•˜λ €λ©΄, λΉ λ₯΄κ³  μ‹€ν–‰ λΉ„μš©μ΄ μ €λ ΄ν•œ λ‹¨μœ„ ν…ŒμŠ€νŠΈ(JUnit λ“±)λ₯Ό ν•˜λ‹¨μ— λ„“κ²Œ λ°°μΉ˜ν•˜κ³ , 쀑간에 톡합 ν…ŒμŠ€νŠΈλ₯Ό, μƒλ‹¨μ—λŠ” κ°€μž₯ 적은 수의 E2E ν…ŒμŠ€νŠΈ(Selenium λ“±)λ₯Ό λ°°μΉ˜ν•˜λŠ” 'ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œ' μ „λž΅μ„ μ€€μˆ˜ν•΄μ•Ό ν•œλ‹€ [17-19]. ## βš–οΈ Trade-offs & Caveats * **μ—­λ°©ν–₯ ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œ(Inverted Test Pyramid) μ•ˆν‹° νŒ¨ν„΄**: GUI 및 E2E μžλ™ν™” ν”„λ ˆμž„μ›Œν¬μ— κ³Όλ„ν•˜κ²Œ μ˜μ‘΄ν•˜μ—¬ ν•˜ν–₯μ‹μœΌλ‘œ μ ‘κ·Όν•  경우, ν…ŒμŠ€νŠΈ μŠ€μœ„νŠΈκ°€ λΉ„λŒ€ν•΄μ§€κ³  μœ μ§€ 관리가 맀우 μ–΄λ €μ›Œμ§„λ‹€ [20]. μ΄λŸ¬ν•œ 도ꡬ듀은 μ‹€ν–‰ 속도가 느리고 κΉ¨μ§€κΈ° 쉽기 λ•Œλ¬Έμ—(Brittle) μž¦μ€ μ˜€νƒ(False positive)을 λ°œμƒμ‹œν‚€λ©°, κ²°κ΅­ μžλ™ν™” μžμ²΄μ— λŒ€ν•œ νŒ€μ˜ 신뒰도λ₯Ό λ–¨μ–΄λœ¨λ¦¬κ²Œ λœλ‹€ [20-22]. * **μœ μ§€λ³΄μˆ˜ 뢀채 증가**: μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μ½”λ“œλ„ 운영(Production) μ½”λ“œμ™€ λ™μΌν•œ 1κΈ‰ μ‹œλ―ΌμœΌλ‘œ μ·¨κΈ‰ν•˜μ—¬ 주기적으둜 λ¦¬νŒ©ν† λ§ν•˜κ³  λ¦¬λ·°ν•˜μ§€ μ•ŠμœΌλ©΄ 큰 짐이 될 수 μžˆλ‹€ [23, 24]. λΆˆν•„μš”ν•˜κ±°λ‚˜ μ€‘λ³΅λœ κ³ μˆ˜μ€€ ν…ŒμŠ€νŠΈλ₯Ό ν”„λ ˆμž„μ›Œν¬ 상에 λ°©μΉ˜ν•˜λ©΄ μ‹€ν–‰ μ‹œκ°„λ§Œ κΈΈμ–΄μ§€κ³  κ°€μΉ˜κ°€ μ—†μœΌλ―€λ‘œ, 과감히 μ‚­μ œν•˜κ±°λ‚˜ ν•˜μœ„ μˆ˜μ€€μ˜ ν…ŒμŠ€νŠΈλ‘œ λŒ€μ²΄ν•΄μ•Ό ν•˜λŠ” μ œμ•½μ΄ λ”°λ₯Έλ‹€ [25, 26]. * **AI 기반 ν…ŒμŠ€νŠΈ μƒμ„±μ˜ κ°€μΉ˜ μ •λ ¬ μ‹€νŒ¨(Value Misalignment)**: LLM(λŒ€ν˜• μ–Έμ–΄ λͺ¨λΈ) λ“± AI ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‹¨μœ„ ν…ŒμŠ€νŠΈλ₯Ό μžλ™ 생성할 경우, λͺ¨λΈμ΄ λ‹¨μˆœνžˆ 컀버리지 λΉ„μœ¨λ§Œ 높이고 μ‹€μ œ 결함을 μž‘λŠ” λ°λŠ” λ¬΄μ˜λ―Έν•œ(Ineffective) ν…ŒμŠ€νŠΈλ₯Ό λŒ€λŸ‰ μ–‘μ‚°ν•  μœ„ν—˜μ΄ μžˆλ‹€ [27]. λ”°λΌμ„œ λŒμ—°λ³€μ΄ ν…ŒμŠ€νŠΈ(Mutation testing)와 같은 κΈ°λ²•μœΌλ‘œ ν…ŒμŠ€νŠΈμ˜ μœ νš¨μ„±μ„ ν†΅μ œν•˜λŠ” μ•ˆμ „μž₯μΉ˜κ°€ λ™λ°˜λ˜μ–΄μ•Ό ν•œλ‹€ [27]. --- *Last updated: 2026-05-03*