[Spring] ν…ŒμŠ€νŠΈ 4 - μ–Όλ§ˆλ‚˜ 깊게 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€?

[Spring] ν…ŒμŠ€νŠΈ 4 - μ–Όλ§ˆλ‚˜ 깊게 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€?

4. HOW DEEP - μ–Όλ§ˆλ‚˜ 깊게 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€? 4.1 ν…ŒμŠ€νŠΈ 깊이λ₯Ό κ²°μ •ν•˜λŠ” κΈ°μ€€ ν…ŒμŠ€νŠΈ 깊이λ₯Ό μ„€μ •ν•  λ•ŒλŠ” λ‹€μŒκ³Ό 같은 기쀀을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€: ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œ(Test Pyramid): ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œλŠ” ν…ŒμŠ€νŠΈ μ’…λ₯˜μ— λ”°λ₯Έ 계측 ꡬ쑰λ₯Ό λ³΄μ—¬μ€λ‹ˆλ‹€. 일반적으둜 λ‹¨μœ„ ν…ŒμŠ€νŠΈκ°€ κ°€μž₯ 많고, κ·Έλ‹€μŒμœΌλ‘œ 톡합 ν…ŒμŠ€νŠΈ, μ‹œμŠ€ν…œ λ˜λŠ” E2E(End-to-End) ν…ŒμŠ€νŠΈκ°€ μœ„μΉ˜ν•©λ‹ˆλ‹€. λ‹¨μœ„ ν…ŒμŠ€νŠΈ(Unit Tests): κ°€μž₯ λ§Žμ€ 비쀑을 μ°¨μ§€ν•˜λ©°, μž‘μ€ μ½”λ“œ λ‹¨μœ„λ₯Ό λ…λ¦½μ μœΌλ‘œ ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€. 톡합 ν…ŒμŠ€νŠΈ(Integration Tests): μ—¬λŸ¬ λͺ¨λ“ˆμ΄ μƒν˜Έμž‘μš©ν•˜λŠ”μ§€ ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€. E2E ν…ŒμŠ€νŠΈ(End-to-End Tests): μ‹€μ œ μ‚¬μš©μž κ΄€μ μ—μ„œ 전체 μ‹œμŠ€ν…œμ΄ 잘 μž‘λ™ν•˜λŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€. μœ„ν—˜ 기반 ν…ŒμŠ€νŠΈ(Risk-Based Testing): λΉ„μ¦ˆλ‹ˆμŠ€ μ€‘μš”λ„μ™€ 잠재적 μœ„ν—˜ μš”μ†Œμ— 따라 ν…ŒμŠ€νŠΈ μš°μ„ μˆœμœ„λ₯Ό μ„€μ •ν•©λ‹ˆλ‹€. λΉ„μ¦ˆλ‹ˆμŠ€μ— μ€‘μš”ν•œ κΈ°λŠ₯μ΄λ‚˜ λ¦¬μŠ€ν¬κ°€ 높은 뢀뢄에 λŒ€ν•œ ν…ŒμŠ€νŠΈλŠ” 더 깊이 있게 μˆ˜ν–‰ν•©λ‹ˆλ‹€. 유슀 μΌ€μ΄μŠ€ 기반 ν…ŒμŠ€νŠΈ: 핡심 μ‚¬μš©μž 흐름과 엣지 μΌ€μ΄μŠ€λ₯Ό 기반으둜 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ μ‚¬μš©μžκ°€ 자주 μ‚¬μš©ν•˜λŠ” κΈ°λŠ₯μ΄λ‚˜ μ˜ˆμ™Έμ μΈ μƒν™©μ—μ„œμ˜ λ™μž‘μ„ κ²€μ¦ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€. ν˜„μ‹€μ μΈ μ œμ•½κ³Ό νŒ€ μ—­λŸ‰ κ³ λ €: λͺ¨λ“  뢀뢄을 깊이 ν…ŒμŠ€νŠΈν•˜λŠ” 것은 μ‹œκ°„κ³Ό λ¦¬μ†ŒμŠ€ μΈ‘λ©΄μ—μ„œ λΉ„νš¨μœ¨μ μΌ 수 μžˆμŠ΅λ‹ˆλ‹€. νŒ€μ˜ μ—­λŸ‰κ³Ό ν”„λ‘œμ νŠΈ 일정 등을 κ³ λ €ν•˜μ—¬ ν…ŒμŠ€νŠΈ 깊이λ₯Ό μ‘°μ •ν•˜λŠ” 것이 ν•„μš”ν•©λ‹ˆλ‹€. ...

[Spring] ν…ŒμŠ€νŠΈ 3 - μ–Έμ œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ μš©ν•΄μ•Ό ν•˜λŠ”κ°€?

[Spring] ν…ŒμŠ€νŠΈ 3 - μ–Έμ œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ μš©ν•΄μ•Ό ν•˜λŠ”κ°€?

3. WHEN - μ–Έμ œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ μš©ν•΄μ•Ό ν•˜λŠ”κ°€? 3.1 TDD와 BDD의 κ°œλ… 및 적용 μ‹œμ  TDD (Test-Driven Development): TDDλŠ” ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³ , κ·Έ ν…ŒμŠ€νŠΈλ₯Ό 톡과할 수 μžˆλŠ” μ΅œμ†Œν•œμ˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ©° κ°œλ°œμ„ μ§„ν–‰ν•˜λŠ” λ°©λ²•λ‘ μž…λ‹ˆλ‹€. TDDλŠ” ν…ŒμŠ€νŠΈλ₯Ό 톡해 λͺ…ν™•ν•œ μš”κ΅¬μ‚¬ν•­μ„ ν™•μΈν•˜κ³  μ½”λ“œ ν’ˆμ§ˆμ„ 보μž₯ν•˜λŠ” λ°©λ²•μœΌλ‘œ ν™œμš©λ©λ‹ˆλ‹€. λ ˆλ“œ-κ·Έλ¦°-λ¦¬νŒ©ν„° 사이클: TDD의 κΈ°λ³Έ 개발 사이클은 λ ˆλ“œ 단계 (μ‹€νŒ¨ν•˜λŠ” ν…ŒμŠ€νŠΈ μž‘μ„±) β†’ κ·Έλ¦° 단계 (ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜κΈ° μœ„ν•œ μ½”λ“œ μž‘μ„±) β†’ λ¦¬νŒ©ν„° 단계 (μ½”λ“œ 정리 및 μ΅œμ ν™”)둜 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€. 적용 μ‹œμ : μƒˆλ‘œμš΄ κΈ°λŠ₯을 κ°œλ°œν•˜κ±°λ‚˜ κΈ°μ‘΄ μ½”λ“œλ₯Ό λ¦¬νŒ©ν„°λ§ ν•  λ•Œ, TDDλ₯Ό 톡해 μ½”λ“œμ˜ μ•ˆμ •μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ―Έμ§€μΆœμ²˜: https://medium.com/pilar-2020/applying-test-driven-development-6d6d3af186cbApplying\ Test-Driven\ Development ...

[Spring] ν…ŒμŠ€νŠΈ 2 - ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€?

[Spring] ν…ŒμŠ€νŠΈ 2 - ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€?

2. HOW - ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μ–΄λ–»κ²Œ μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€? 2.1 ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€ 선택 방법 첫 번째 ν…ŒμŠ€νŠΈμ˜ μ€‘μš”μ„±: κ΅¬ν˜„ν•˜κΈ° κ°€μž₯ μ‰¬μš΄ ν…ŒμŠ€νŠΈλΆ€ν„° μ‹œμž‘ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. μ˜ˆμ™Έμ μΈ μƒν™©μ΄λ‚˜ κ°€μž₯ λΉ λ₯΄κ²Œ κ°œλ°œν•  수 μžˆλŠ” ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³ , 점차 ν™•μž₯ν•΄ λ‚˜κ°‘λ‹ˆλ‹€. 점진적 ν™•μž₯: μ‰¬μš΄ ν…ŒμŠ€νŠΈλΆ€ν„° μ‹œμž‘ν•΄ 점차 λ³΅μž‘ν•œ ν…ŒμŠ€νŠΈλ‘œ λ‚˜μ•„κ°€λ©΄μ„œ μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±μ„ κ²€μ¦ν•©λ‹ˆλ‹€. 2.2 TDD (Test-Driven Development) 방법둠 TDDλŠ” ν…ŒμŠ€νŠΈ 주도 개발 λ°©μ‹μœΌλ‘œ, ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³  이λ₯Ό 기반으둜 ν”„λ‘œλ•μ…˜ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. TDDλŠ” λ‹€μŒκ³Ό 같은 μ„Έ 단계λ₯Ό λ”°λ¦…λ‹ˆλ‹€: ...

[Spring] ν…ŒμŠ€νŠΈ 1 - μ™œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€?

[Spring] ν…ŒμŠ€νŠΈ 1 - μ™œ ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€?

1. WHY - μ™œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•΄μ•Ό ν•˜λŠ”κ°€? 1.1 ν…ŒμŠ€νŠΈ μ½”λ“œμ˜ μ€‘μš”μ„± ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ†Œν”„νŠΈμ›¨μ–΄ κ°œλ°œμ—μ„œ 맀우 μ€‘μš”ν•œ 역할을 ν•©λ‹ˆλ‹€. κΈ°λŠ₯을 μˆ˜μ •ν•˜κ±°λ‚˜ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œ μ½”λ“œκ°€ μ•ˆμ •μ μœΌλ‘œ μž‘λ™ν•˜λŠ”μ§€ 확인할 수 μžˆλŠ” μˆ˜λ‹¨μ΄ λ°”λ‘œ ν…ŒμŠ€νŠΈ μ½”λ“œμž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ˜ˆμƒν•˜μ§€ λͺ»ν•œ 버그λ₯Ό λ°©μ§€ν•˜κ³ , μ½”λ“œ ν’ˆμ§ˆμ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€. 1.2 ν…ŒμŠ€νŠΈ μ½”λ“œ μž‘μ„±μ˜ μž₯점 1.2.1 μ•ˆμ •μ μΈ 개발 ν™˜κ²½ ꡬ좕 ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μ½”λ“œμ˜ 변경이 λ‹€λ₯Έ κΈ°λŠ₯에 λ―ΈμΉ˜λŠ” 영ν–₯을 μ΅œμ†Œν™”ν•˜λŠ” 데 도움을 μ€λ‹ˆλ‹€. κ°œλ°œμžλŠ” μžμ‹  있게 μ½”λ“œλ₯Ό μˆ˜μ •ν•˜κ±°λ‚˜ λ¦¬νŒ©ν„°λ§ ν•  수 있으며, κΈ°μ‘΄ κΈ°λŠ₯이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ 검증할 수 μžˆμŠ΅λ‹ˆλ‹€. ...

[Spring] Caused by: java.lang.IllegalArgumentException: 이름이 {fragment}인, λ‘˜ μ΄μƒμ˜ fragment듀이 λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

[Spring] Caused by: java.lang.IllegalArgumentException: 이름이 {fragment}인, λ‘˜ μ΄μƒμ˜ fragment듀이 λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

[Caused by: java.lang.IllegalArgumentException: 이름이 {fragment}인, λ‘˜ μ΄μƒμ˜ fragment듀이 λ°œκ²¬λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” μƒλŒ€μ  μˆœμ„œλ°°μ—΄μ—μ„œ λΆˆν—ˆλ©λ‹ˆλ‹€. 상세 μ •λ³΄λŠ” μ„œλΈ”λ¦Ώ μŠ€νŽ™ 8.2.2 2c μž₯을 μ°Έμ‘°ν•˜μ‹­μ‹œμ˜€. μ ˆλŒ€μ  μˆœμ„œλ°°μ—΄μ„ μ‚¬μš©ν•˜λŠ” 것을 κ³ λ €ν•΄ λ³΄μ‹­μ‹œμ˜€.] Spring MVCκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” μƒνƒœμ—μ„œ μ€‘λ³΅λœ λ””νŽœλ˜μ‹œλ₯Ό μΆ”κ°€ν•˜λ©΄μ„œ λ°œμƒν•œ μ—λŸ¬μ΄λ‹€. 라이브러리 버전업, ν˜Ήμ€ μ‹ κ·œ 라이브러리 μΆ”κ°€ μ‹œ 주둜 λ°œμƒν•˜λŠ” ν˜„μƒμœΌλ‘œ, 메이븐 클린을 톡해 메이븐 리포지토리λ₯Ό μ •λ¦¬ν•˜λ©΄ λœλ‹€. 메이븐 클린(ν”„λ‘œμ νŠΈ 우클릭 > maven > maven clean) κ·Έλž˜λ„ μ•ˆλœλ‹€λ©΄ μ‹€μ œλ‘œ μ€‘λ³΅λœ 라이브러리λ₯Ό μ •λ ¬ ν˜Ήμ€ 정리가 ν•„μš”ν•˜λ‹€. ...