ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈ

2025. 3. 25. 23:41ㆍFront-end (Basic)/κ°œλ… 정리

λ°˜μ‘ν˜•

 

ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈμ— λŒ€ν•œ 얕은 κ°œλ… νŒŒμ•…

λͺ©μ°¨

1. ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈλž€?

2. 쒋은 ν…ŒμŠ€νŠΈλž€?

3. TDD와 Trade off

4. ν…ŒμŠ€νŠΈμ˜ μ’…λ₯˜

5. ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œ

6. jest

 


1. ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈλž€?

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ κΈ°λŒ€ν•œ κ²°κ³ΌλŒ€λ‘œ λ™μž‘ν•˜λŠ”μ§€ κ²€μ¦ν•˜λŠ” 일이닀.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ•ˆμ •μ„±κ³Ό μœ μ§€λ³΄μˆ˜μ„± ν–₯상을 λͺ©μ μœΌλ‘œ ν•˜λ©°, 쒋은 ν…ŒμŠ€νŠΈ μž‘μ„±μ€ λΉ λ₯΄κ³  효과적으둜 ν”Όλ“œλ°±μ„ λ°›μ•„ 버그λ₯Ό κ²€μΆœν•  수 μžˆλ‹€.

 

ν”„λ‘ νŠΈμ—”λ“œλŠ” λ‚΄λΆ€ μ½”λ“œμ˜ μ—°μ‚° 뿐만 μ•„λ‹ˆλΌ ν΄λΌμ΄μ–ΈνŠΈ μ˜μ—­μ—μ„œ μ‚¬μš©μžμ™€μ˜ μΈν„°λž™μ…˜ λ˜ν•œ κ³ λ €ν•΄μ•Όν•œλ‹€.

DOM μš”μ†Œλ“€μ΄ μ μ ˆν•œ λͺ¨μ–‘μœΌλ‘œ μ μ ˆν•œ μœ„μΉ˜μ— λ°°μΉ˜λ˜μ–΄μžˆλŠ” μ§€ λ“± μ—­μ‹œ κ²€μ¦ν•΄μ•Όν•œλ‹€.

 

 


2. 쒋은 ν…ŒμŠ€νŠΈλž€?

λͺ¨λ“  ν…ŒμŠ€νŠΈλŠ” λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.

  • Aν…ŒμŠ€νŠΈκ°€ Bν…ŒμŠ€νŠΈλ³΄λ‹€ λ‚˜μ€‘μ— 싀행될 경우 검증에 μ‹€νŒ¨ν•œλ‹€λ©΄, λ‹€λ₯Έ μƒν™©μ—μ„œ μ„±κ³΅ν•˜λ”λΌλ„ μ‹ λ’°ν•  수 μ—†λ‹€.
    각 ν…ŒμŠ€νŠΈλ“€μ€ λ‹€λ₯Έ ν…ŒμŠ€νŠΈμ˜ μ‹€ν–‰ 여뢀와 상관없이 λ…λ¦½μ μœΌλ‘œ μˆ˜ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.

ν…ŒμŠ€νŠΈμ˜ κ²°κ³ΌλŠ” 일관성이 μžˆμ–΄μ•Ό ν•œλ‹€.

  • μ™ΈλΆ€ ν™˜κ²½(OS, λ„€νŠΈμ›Œν¬, 타 μ‹œμŠ€ν…œκ³Όμ˜ μΈν„°νŽ˜μ΄μŠ€)에 상관없이 일관성 μžˆλŠ” 검증을 μˆ˜ν–‰ν•΄μ•Όν•œλ‹€.
    μ‹€μ œ 데이터λ₯Ό μΆ©λΆ„νžˆ ν™œμš©ν•œλ‹€λ©΄ ν…ŒμŠ€νŠΈμ˜ 신뒰도λ₯Ό 높일 수 있으며, μ™ΈλΆ€ μΈν„°νŽ˜μ΄μŠ€ μ²˜λ¦¬μ— 따라 변경될 수 μžˆλŠ” 뢀뢄은 λͺ¨ν‚ΉμœΌλ‘œ λŒ€μ²΄ν•˜μ§€ μ•Šκ³  λ°˜λ“œμ‹œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

λ‚΄λΆ€ κ΅¬ν˜„μ— μ’…μ†λœ ν…ŒμŠ€νŠΈλŠ” μ§€μ–‘ν•΄μ•Ό ν•œλ‹€.

  • λ‚΄λΆ€ κ΅¬ν˜„μ— 쒅속적인 ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” μž‘μ€ κ΅¬ν˜„μ˜ 변경에도 κΉ¨μ§€κΈ° μ‰¬μš°λ©°, μœ μ§€ 보수 λΉ„μš©μ΄ 크닀.
    λ”°λΌμ„œ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ‚΄λΆ€ κ΅¬ν˜„λ³΄λ‹€λŠ” μΈν„°νŽ˜μ΄μŠ€ κΈ°μ€€μœΌλ‘œ ν…ŒμŠ€νŠΈν•˜λŠ” 것이 μ’‹λ‹€.

ν…ŒμŠ€νŠΈλŠ” λ‹¨μˆœν•˜κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μ›Œμ•Ό ν•œλ‹€.

  • ν…ŒμŠ€νŠΈ λͺ¨λ“œμ˜ 가독성이 μ€‘μš”ν•˜λ‹€. λ‹€λ₯Έ μ‚¬λžŒλ“€μ΄ ν…ŒμŠ€νŠΈ μ½”λ“œλ§Œ 보고 μ–΄λ–€ ν…ŒμŠ€νŠΈλ₯Ό ν•˜λŠ” 것인지 ν•œ λˆˆμ— νŒŒμ•…ν•  수 μžˆλ„λ‘ μž‘μ„±ν•˜λŠ” 것이 μ’‹λ‹€.
    λ”°λΌμ„œ ν•˜λ‚˜μ˜ ν…ŒμŠ€νŠΈμ—μ„œ λ„ˆλ¬΄ λ§Žμ€ ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μœΌλ©°, κ²°κ³Ό 검증 μ½”λ“œκ°€ λ³΅μž‘ν•˜λ‹€λ©΄ λ³„λ„μ˜ ν•¨μˆ˜λ‘œ μΆ”μƒν™”ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 μ’‹λ‹€.

μœ μ§€ λ³΄μˆ˜κ°€ κ°€λŠ₯ν•œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€.

  • μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ½”λ“œκ°€ 변경됨에 따라 ν…ŒμŠ€νŠΈ μ½”λ“œ μ—­μ‹œ κ΄€λ¦¬λ˜μ–΄μ•Ό ν•œλ‹€. λ„ˆλ¬΄ μž‘μ€ λ‹¨μœ„μ˜ ν…ŒμŠ€νŠΈλŠ” μœ μ§€ 보수λ₯Ό μ–΄λ ΅κ²Œ λ§Œλ“ λ‹€.

 


3. TDD와 Trade off

TDD(Test Driven Development)λŠ” ν…ŒμŠ€νŠΈ μ£Όλ„μ˜ κ°œλ°œμ„ μ˜λ―Έν•œλ‹€.

μ‹€μ œλ‘œ 개발 μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ° 전에 κΉ¨μ§€λŠ” ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό λ¨Όμ € μž‘μ„±ν•˜κ³ , 지속적인 λ¦¬νŒ©ν† λ§μ„ 톡해 ν…ŒμŠ€νŠΈκ°€ κ²€μ¦λ˜λŠ” 과정을 λ°˜λ³΅ν•˜λ©° κ°œλ°œν•˜λŠ” 방법둠이닀.

 

1. 적색 : μΆ”κ°€ν•˜λ €λŠ” κΈ°λŠ₯을 κ°œλ°œν•˜κΈ° 전에 ν…ŒμŠ€νŠΈλ₯Ό λ¨Όμ € μž‘μ„±ν•œλ‹€. => ν…ŒμŠ€νŠΈ μ‹€νŒ¨λ‘œ 였λ₯˜ λ©”μ‹œμ§€ ν‘œμ‹œ

2. 녹색 : μ½”λ“œλ₯Ό κ΅¬ν˜„ν•˜μ—¬ ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όμ‹œν‚¨λ‹€ => 성곡 λ©”μ‹œμ§€ ν‘œμ‹œ

3. λ¦¬νŒ©ν† λ§ : μž‘μ„±ν•œ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄κ³  μ΄ν•΄ν•˜κΈ° μ‰¬μš°λ©° 잘 μ„€κ³„λ˜μ—ˆλŠ”μ§€ 확인

4. 반볡

 

TDD κ³Όμ • μ†μ—μ„œ μΈν„°νŽ˜μ΄μŠ€λ‚˜ 각 계측 κ°„μ˜ μ˜μ‘΄μ„±μ— λŒ€ν•΄ 지속적인 λ¦¬νŒ©ν† λ§μ„ μ‹€ν–‰ν•˜μ—¬ κΉ”λ”ν•œ μ½”λ“œλ₯Ό 얻을 수 μžˆλ‹€.

 


4. ν…ŒμŠ€νŠΈμ˜ μ’…λ₯˜

ν”„λ‘ νŠΈμ—”λ“œ ν…ŒμŠ€νŠΈμ˜ μ’…λ₯˜λŠ” 크게 λ‹¨μœ„ ν…ŒμŠ€νŠΈ, 톡합 ν…ŒμŠ€νŠΈ, E2E ν…ŒμŠ€νŠΈ, μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈλ‘œ λ‚˜λˆŒ 수 μžˆλ‹€.

μ•žμ˜ μ„Έ κ°€μ§€λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ™μž‘ 및 μ›Œν¬ ν”Œλ‘œμš°λ₯Ό κ²€μ¦ν•œλ‹€λ©΄, μ‹œκ°μ  νšŒκ·€ ν…ŒμŠ€νŠΈλŠ” μ‹œκ°μ μΈ μš”μ†Œλ“€μ„ λΉ„κ΅ν•˜μ—¬ κ²€μ¦ν•œλ‹€.

 

λ‹¨μœ„ ν…ŒμŠ€νŠΈ

λ‹¨μœ„ ν…ŒμŠ€νŠΈλŠ” 단일 ν•¨μˆ˜μ˜ κ²°κ³Όκ°’, ν΄λž˜μŠ€λ‚˜ μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœ, ν–‰μœ„λ₯Ό κ²€μ¦ν•œλ‹€.

λ‹€λ₯Έ μš”μ†Œμ™€μ˜ μƒν˜Έμž‘μš©μ„ κ²€μ¦ν•˜κΈ° λ³΄λ‹€λŠ” 각 μš”μ†Œμ˜ λ™μž‘μ„ λ…λ¦½μ μœΌλ‘œ κ²€μ¦ν•˜λŠ” ν…ŒμŠ€νŠΈμ΄λ‹€.

μš”μ†Œ λ‚΄μ˜ λͺ¨λ“  ν–‰μœ„/μƒνƒœλ₯Ό κ²€μ¦ν•˜κΈ° λ³΄λ‹€λŠ” 핡심 μ½”λ“œλ§Œ κ²€μ¦ν•˜λŠ” 것이 μ’‹λ‹€.

예λ₯Ό λ“€μ–΄ μΈν„°νŽ˜μ΄μŠ€λ‘œ λ…ΈμΆœλ˜λŠ” publicν•œ λ©”μ„œλ“œλ“€μ— λŒ€ν•΄μ„œλ§Œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

private λ©”μ„œλ“œ ν…ŒμŠ€νŠΈ μ½”λ“œλŠ” λ„ˆλ¬΄ λ§Žμ•„μ§ˆ 수 있으며 λ‚΄λΆ€ κ΅¬ν˜„ 변경에 따라 κΉ¨μ§€κΈ° 쉽기 λ•Œλ¬Έμ— μ§€μ–‘ν•˜λŠ” 것이 μ’‹λ‹€.

 

 

톡합 ν…ŒμŠ€νŠΈ

톡합 ν…ŒμŠ€νŠΈλŠ” κ°œλ³„ μš”μ†Œλ“€μ΄ μ‘°ν•©λ˜μ—ˆμ„ λ•Œ μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜λŠ” μ§€ ν™•μΈν•œλ‹€.

λ‹¨μœ„ ν…ŒμŠ€νŠΈμ— λΉ„ν•΄ ν…ŒμŠ€νŠΈμ˜ 사전 ν™˜κ²½ 섀정이 λ³΅μž‘ν•  수 있으며, 'λͺ¨ν‚Ή'이 ν•„μš”ν•  수 μžˆλ‹€.

ν•˜μ§€λ§Œ λͺ¨ν‚Ήμ€ μ΅œλŒ€ν•œ μ κ²Œν•˜λŠ” 것이 μ’‹λ‹€.

 

 

E2E ν…ŒμŠ€νŠΈ

E2EλŠ” End-To-End의 μ€„μž„λ§λ‘œ, μ‹€μ œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜μ—¬ 전체 μ›Œν¬ ν”Œλ‘œμš°λ₯Ό κ²€μ¦ν•˜λŠ” ν…ŒμŠ€νŠΈμ΄λ‹€.

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€μ œ μ‚¬μš©μžκ°€ μ‚¬μš©ν•˜λŠ” κ²ƒμ²˜λŸΌ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μž‘μ„±ν•˜μ—¬ κ²€μ¦ν•œλ‹€.

 


5. ν…ŒμŠ€νŠΈ ν”ΌλΌλ―Έλ“œ


각각의 ν…ŒμŠ€νŠΈν•„λ“œμ— λ“€μ–΄κ°€λŠ” λΉ„μš©μ΄ λ‹€λ₯΄λ‹€.

λ”°λΌμ„œ 각 ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•¨μœΌλ‘œμ¨ 얻을 수 μžˆλŠ” νš¨κ³Όμ™€ 신뒰성을 따져보고, μ–΄λ–€ 것이 Trade Offλ₯Ό μ΅œμ†Œν™”ν•  수 μžˆλŠ”μ§€ 생각해보아야 ν•œλ‹€.

 

μ—¬λŸ¬ ν…μŠ€νŠΈ ν•„λ“œλ₯Ό μž…λ ₯ν•˜κ³  λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ λ‚΄μš©μ΄ μ˜¬λ°”λ₯΄κ²Œ μ „μ†‘λ˜λŠ”μ§€ ν™•μΈν•˜κ³  μ‹Άλ‹€λ©΄,

-> E2Eλ³΄λ‹€λŠ” 톡합 ν…ŒμŠ€νŠΈκ°€ μ μ ˆν•  수 μžˆλ‹€.

 

μ–΄λ–€ λͺ¨λ“ˆμ— λ³΅μž‘ν•œ 계산 둜직이 μžˆλ‹€λ©΄,

-> λ‹¨μœ„ ν…ŒμŠ€νŠΈμ—μ„œ ν•΄λ‹Ή μ—°μ‚°λ§Œ κ²€μ¦ν•˜λŠ” 것이 μ μ ˆν•  수 μžˆλ‹€.

 

 


6. jest

jestλŠ” νŽ˜μ΄μŠ€λΆμ—μ„œ λ§Œλ“  μžλ°”μŠ€ν¬λ¦½νŠΈ ν…ŒμŠ€νŒ… ν”„λ ˆμž„μ›Œν¬μ΄λ‹€.

검증을 μ‹€ν–‰ν•˜λŠ” 맀처(matcher)와 λͺ¨ν‚Ήμ— ν•„μš”ν•œ API듀을 λŒ€λΆ€λΆ„ μ œκ³΅ν•˜κΈ° λ•Œλ¬Έμ— λ³„λ„μ˜ 라이브러리λ₯Ό κ²°ν•©ν•˜μ§€ μ•Šκ³ λ„ μ‰½κ²Œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν•  수 μžˆλ‹€.

 

λ‹€λ§Œ Node.js ν™˜κ²½μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜κΈ° λ•Œλ¬Έμ— λΈŒλΌμš°μ €μ²˜λŸΌ DOM에 μ ‘κ·Όν•˜κ±°λ‚˜ μ‘°μž‘ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.

λŒ€μ‹  jestμ—μ„œ μ œκ³΅ν•˜λŠ” jsdomμ΄λΌλŠ” ν™˜κ²½μ—μ„œ DOM APIλ₯Ό ν˜ΈμΆœν•˜μ—¬ 검증할 수 μžˆλ‹€.



 

 

 

 

μ°Έκ³ 

λ°˜μ‘ν˜•