Reviews 🧐/Books

[좋은 윔드, 나쁜 윔드 review] 1장 윔드 품질

leejaejae 2023. 12. 12. 17:30

개발자띌멎 한 번쯀은 듀얎뎀을 법한 책읎닀. 대부분의 개발자듀은 몚두 좋은 윔드, 성능읎 나였는 윔드, 였류 없는 윔드, 가독성 좋은 윔드륌 작성하고자 하는 마음읎 있을 것읎닀. 나 또한 귞런 생각을 하Ʞ 때묞에 읎 책을 통핎 나의 윔드의 품질읎 볎닀 개선되Ꞟ 바란닀!


목찚

1.1 윔드는 얎떻게 소프튞웚얎가 되는가
1.2 윔드 품질의 목표
1.3 윔드 품질의 핵심 요소
1.4 고품질 윔드 작성은 음정을 지연시킀는가?
요앜


1장은 닀음곌 같은 낎용을 닀룬닀.

  • 윔드 품질읎 쀑요한 읎유
  • 고품질의 윔드가 읎룚고자 하는 ë„€ 가지 목표
  • 고품질 윔드 작성을 위한 높은 수쀀에서의 여섯 가지 전략
  • 고품질의 윔드 작성읎 얎떻게 쀑장Ʞ적윌로 시간곌 녞력을 절앜할 수 있는지


1.1 윔드는 얎떻게 소프튞웚얎가 되는가

윔드는 음반적윌로 엔지니얎가 작성하자마자 싀제로 싀행되는 소프튞웚얎가 되는 것읎 아니닀. 윔드가 의도한 대로 작동하고 Ʞ졎의 Ʞ능읎 여전히 잘 작동한닀고 확신하Ʞ 위한 닀양한 곌정곌 점검읎 읎룚얎진닀. 읎러한 곌정을 종종 소프튞웚얎 개발 및 배포 프로섞슀띌고 부륞닀. 

윔드로부터 싀제 서비슀되는 환겜에서 싀행되는 소프튞웚얎가 되Ʞ까지의 곌정에는 많은 찚읎가 있지만, 죌요 닚게는 대개 닀음곌 같닀.

  1. 개발자가 윔드베읎슀의 로컬 복사볞을 가지고 작업하멎서 윔드륌 변겜한닀.
  2. 작업읎 끝나멎 윔드 검토륌 위핎 변겜된 윔드륌 가지고 병합 요텅을 한닀.
  3. 닀륞 개발자가 윔드륌 검토하고 변겜을 제안할 수 있닀.
  4. 작성자와 검토자가 몚두 동의하멎 윔드가 윔드베읎슀에 병합된닀.
  5. 배포는 윔드베읎슀륌 가지고 죌Ʞ적윌로 음얎난닀. 얌마나 자죌 배포되는지는 조직곌 팀마닀 닀륌 수 있음.
  6. 테슀튞에 싀팚하거나 윔드가 컎파음되지 않윌멎 윔드베읎슀에 병합되는 것을 막거나 윔드가 배포되는 것을 막는닀.

 

1.2 윔드 품질의 목표

고품질의 소프튞웚얎륌 만듀Ʞ 위핎서는 소프튞웚얎가 잘 구축되얎알 한닀. 읎것읎 바로 윔드 품질의 진정한 목적읎닀. 

'윔드 품질'은 싀제적읞 ꎀ심 사항에 귌거륌 두는데 때에 따띌 사소하거나 쀑요한 섞부 사항에 ꎀ심을 가질 수 있지만 얎느 겜우나 목표는 동음한데, 귞것은 바로 더 나은 소프튞웚얎륌 만드는 것읎닀. 

귞럌에도 불구하고 윔드 품질은 여전히 파악하Ʞ 얎렀욎 개념음 수 있닀. 윔드륌 고품질 혹은 저품질로 정의하는 것은 볞질적윌로 죌ꎀ적읎고 닀소 성꞉한 것읎닀. 볞 책의 저자는 윔드륌 작성할 때 아래와 같은 ë„€ 가지 상위 수쀀의 목표륌 달성하렀 한닀.

  1. 작동핎알 한닀.
  2. 작동읎 멈춰서는 안 된닀.
  3. 변화하는 요구 사항에 적응핎알 한닀.
  4. 읎믞 졎재하는 Ʞ능을 또닀시 구현핎서는 안 된닀.


1.2.1 윔드는 작동핎알 한닀

우늬가 윔드륌 작성하는 읎유는 묞제륌 핎결하Ʞ 위핚읎닀. 윔드의 첫 번짞 목표는 귞것읎 애쎈에 작성된 목적대로 동작핎알 한닀는 것읎닀. 읎것은 또한 버귞가 없닀는 것을 의믞한닀. 

윔드가 '작동한닀'띌는 것을 정의할 때, 우늬는 몚든 요구 사항을 파악할 필요가 있닀. (예륌 듀얎 성능 향상에 ꎀ한 묞제륌 í•Žê²°í•  땐 윔드가 귞에 맞게 수행되도록 하는 것)

1.2.2 윔드는 작동읎 멈추멎 안 된닀.

윔드는 고늜된 환겜에서 홀로 싀행되는 것읎 아니Ʞ 때묞에 죌변 상황읎 바뀌멎서 동작읎 멈출 수 있닀.

  • 윔드는 닀륞 윔드에 의졎할 수 있는데, ê·ž 윔드가 수정되고 변겜될 수 있닀.
  • 새로욎 Ʞ능읎 필요할 때 윔드륌 수정핎알 할 수도 있닀.
  • 우늬가 핎결하렀고 하는 묞제는 시간읎 지낚에 따띌 변겜된닀.


1.2.3 윔드는 변겜된 요구 사항에 적응할 수 있얎알 한닀

요구 사항은 닀음곌 같읎 변할 수 있닀.

  • 비슈니슀 환겜읎 변한닀.
  • 사용자 선혞가 변한닀.
  • 가정읎 더 읎상 유횚하지 ì•Šë‹€.
  • 새로욎 Ʞ능읎 계속 추가된닀.


1.2.4 윔드는 읎믞 졎재하는 Ʞ능을 쀑복 구현핎서는 안 된닀

읎믞 구현된 윔드륌 재사용하멎 좋은 몇 가지 읎유가 있닀.

  • 시간곌 녞력을 절앜한닀.
  • 버귞 가능성을 쀄여쀀닀.
  • êž°ì¡Ž 전묞지식을 활용한닀.
  • 윔드가 읎핎하Ʞ 쉜닀.

읎믞 있는 윔드는 닀시 작성하지 않는닀는 개념은 양방향윌로 적용된닀. ì–Žë–€ 하위 수쀀의 묞제륌 핎결하Ʞ 위핎 닀륞 개발자가 읎믞 윔드륌 작성했닀멎, 귞것을 핎결하Ʞ 위핎 자신의 윔드륌 작성하Ʞ 볎닀는 귞듀의 윔드륌 사용핎알 한닀. 

 

1.3 윔드 품질의 핵심 요소

위에서 삎펎볞 ë„€ 가지 목표는 우늬가 귌볞적윌로 성췚하고자 하는 것에 쎈점을 맞추는 데는 도움읎 되지만, 음상적 업묎로 하는 윔딩 작업곌 ꎀ렚핎서는 특별한 조얞을 제공하지 않는닀. 읎러한 목표에 부합하는 윔드에 작성하는 데 도움읎 될 볎닀 구첎적읞 전략을 파악하는 것읎 유용하닀.

< 윔드 품질의 여섯 가지 핵심 요소 >

  1. 윔드는 읜Ʞ 쉬워알 한닀.
  2. 윔드는 예잡 가능핎알 한닀.
  3. 윔드륌 였용하Ʞ 얎렵게 만듀띌.
  4. 윔드륌 몚듈화하띌.
  5. 윔드륌 재사용 가능하고 음반화할 수 있게 작성하띌.
  6. 테슀튞가 용읎한 윔드륌 작성하고, 제대로 테슀튞하띌.


1.3.1 윔드는 읜Ʞ 쉬워알 한닀

윔드의 가독성읎 떚얎진닀멎, 닀륞 개발자가 ê·ž 윔드륌 읎핎하는 데 많은 시간을 듀여알 한닀. 또한, 윔드의 Ʞ능에 대핮 잘못 읎핎하거나 몇 가지 쀑요한 섞부 사항을 놓칠 가능성 역시 크닀. 읎런 음읎 음얎난닀멎 윔드 검토 쀑에 버귞륌 발견할 가능성읎 작고, 새로욎 Ʞ능을 추가하Ʞ 위핎 닀륞 사람읎 윔드륌 수정할 때 새로욎 버귞가 도입될 가능성읎 크닀. ê·ž 윔드가 묎엇을 하는지 개발자가 읎핎하지 못하멎, 소프튞웚얎 전첎가 제대로 작동하는 것은 거의 불가능에 가깝닀.

1.3.2 윔드는 예잡 가능핎알 한닀

우늬의 윔드륌 사용하는 닀륞 개발자는 읎늄, 데읎터 유형, 음반적읞 ꎀ행곌 같은 닚서륌 사용핎 윔드가 입력값윌로 묎엇을 예상하는지, 윔드가 묎슚 음을 하는지, 귞늬고 묎엇을 반환하는지에 대한 정신 몚덞을 구축한닀. 읎 정신 몚덞곌 얎Ꞌ나는 ì–Žë–€ 음읎 윔드에서 음얎나멎, 읎로 읞핎 버귞가 아묎도 몚륎게 윔드 ë‚Žë¡œ 유입되는 음읎 너묎도 많읎 음얎난닀.

윔드의 사용자는 ê·ž 윔드에 의핎 음얎날 음을 예상하지 ì•Šêž° 때묞에 ê·ž 음읎 싀제로 음얎날 쀄 알지 못한 채 작업을 진행한닀. 잠시 동안은 묞제가 없는 것처럌 볎음 수 있지만 나쀑에 프로귞랚읎 잘못된 상태에 놓윌거나, 읎상한 값읎 사용자에게 반환되얎 심각한 상황을 쎈래할 수 있닀. 

1.3.3 윔드륌 였용하Ʞ 얎렵게 만듀띌

자신읎 작성하는 윔드는 종종 닀륞 윔드에 의핎 혞출되는데, 혞출할 때 읞수가 입력되거나 시슀템읎 특정 상태에 있을 것을 예상한닀. 자신읎  ìž‘성한 윔드가 혞출된 데는 읎유가 있는데, ê·ž 윔드가 잘못 사용된닀멎 쀑요한 음읎 수행되지 않거나, 읎상하게 동작하지만 눈에 띄지 않는닀는 것을 의믞할 수도 있닀.

윔드륌 였용하Ʞ 얎렵거나 불가능하게 하멎 윔드가 작동할 뿐만 아니띌 게속핎서 잘 작동할 가능성을 극대화할 수 있닀.

1.3.4 윔드륌 몚듈화하띌

몚듈화는 개첎나 시슀템의 구성 요소가 독늜적윌로 교환되거나 교첎될 수 있음을 의믞한닀. 몚듈화된 시슀템의 죌요 특징 쀑 하나는 읞터페읎슀가 잘 정의되얎 서로 닀륞 구성 요소 간 상혞작용하는 지점읎 최소화된닀는 점읎닀. 

윔드륌 왞부에 의졎하지 않고 싀행할 수 있는 몚듈로 나누는 것읎 읎로욞 때가 많닀. 읎때 두 개의 읞접한 몚듈 사읎의 상혞작용은 한 곳에서 음얎나고 잘 정의된 읞터페읎슀륌 사용한닀. 읎렇게 하멎 한 가지 Ʞ능을 변겜한닀고 í•Žì„œ 닀륞 부분까지 변겜할 필요가 없Ʞ 때묞에 변화하는 요구 사항에 더 쉜게 적응할 수 있는 윔드륌 작성하는데 도움읎 된닀. 

몚듈화된 시슀템은 음반적윌로 읎핎하Ʞ 쉜고 추론하Ʞ 쉬욎데, Ʞ능읎 ꎀ늬 가능한 닚위로 나누얎지고 Ʞ능 닚위 간 상혞작용읎 잘 정의되고 묞서화되Ʞ 때묞읎닀. 윔드가 몚듈화되얎 작성되멎 윔드가 하는 음을 개발자듀읎 였핎할 소지가 적얎지Ʞ 때묞에 처음에 작동읎 시작되고 ê·ž 후에도 계속핎서 잘 작동할 가능성읎 컀진닀. 

1.3.5 윔드륌 재사용 가능하고 음반화할 수 있게 작성하띌

재사용성곌 음반화성은 유사하지만 앜간 닀륞 개념읎닀.

재사용성(reusability)
ì–Žë–€ 묞제륌 핎결하Ʞ 위한 묎얞가가 여러 가지 닀륞 상황에서도 사용될 수 있음을 의믞한닀. 예륌 듀멎 핾드 드늎은 벜, 바닥 판 등에 구멍을 뚫는 데 사용할 수 있Ʞ 때묞에 재사용 가능한 도구읎닀. (동음한 묞제, 닀륞 상황)

음반화성(generalizability)
개념적윌로 재사용성곌 유사하지만 믞묘하게 닀륞 묞제듀을 í•Žê²°í•  수 있음을 의믞한닀. 예륌 듀얎 핾드 드늎은 구멍을 뚫는 데 사용될 뿐만 아니띌 나사륌 박을 때도 사용될 수 있얎 음반화성을 갖는닀.

윔드가 재사용할 수 있고 음반화되얎 있윌멎 ê·ž 윔드륌 윔드베읎슀의 여러 부분에서, 귞늬고 하나 읎상의 상황에서 사용할 수 있고, 여러 가지 묞제륌 í•Žê²°í•  수 있닀. 읎런 윔드는 시간곌 녞력을 절앜핎죌고 더 신뢰할 수 있는데, ê·ž 읎유는 싀제 서비슀 환겜에서 읎믞 시도되고 테슀튞된 녌늬륌 재사용하Ʞ 때묞읎닀. ëªšë“ˆí™”된 윔드 역시 더 높은 재사용성곌 음반화성을 갖는닀.

1.3.6 테슀튞가 용읎한 윔드륌 작성하고 제대로 테슀튞하띌

테슀튞는 프로섞슀에서 두 가지 핵심 사항에 대한 죌된 ë°©ì–Ž 수닚읎 될 때가 많닀.

  • 버귞나 제대로 동작하지 않는 Ʞ능을 갖는 윔드가 윔드베읎슀에 병합되지 않도록 방지
  • 버귞나 제대로 동작하지 않는 Ʞ능을 갖는 윔드가 배포되지 않도록 막고 서비슀 환겜에서 싀행되지 않도록 볎장

테슀튞는 닀음곌 같은 읎유에서 정말 쀑요하닀.

  • 소프튞웚얎 시슀템곌 윔드베읎슀는 너묎 크고 복잡핎 한 사람읎 몚든 섞부 사항을 알 수 없고,
  • 사람은 싀수륌 하는 졎재닀.

테슀튞와 테슀튞 용읎성은 서로 ꎀ렚은 있지만 고렀하는 사항읎 닀륎닀.

  • 테슀튞: 윔드 혹은 소프튞웚얎 전첎륌 테슀튞하는 것곌 ꎀ렚있닀. 테슀튞는 수동읎나 자동윌로 수행된닀. 개발자는 음반적윌로 테슀튞 윔드륌 통핎 "싀제" 윔드륌 돌렀볎고, 몚든 것읎 정상적윌로 작동하는지 확읞하고, 읎것을 자동화하Ʞ 위핎 녞력한닀.
    • 닚위 테슀튞(unit test): 음반적윌로 개별 핚수나 큎래슀와 같은 작은 닚위의 윔드륌 테슀튞한닀.
    • 통합 테슀튞(integration test): 시슀템은 음반적윌로 여러 구성 요소, 몚듈, 하위 시슀템윌로 구성된닀. 읎러한 구성 요소와 하위 시슀템을 핚께 연결하는 곌정을 통합읎띌고 한닀. 통합 테슀튞륌 통핎 읎러한 여러 구성 요소듀읎 제대로 멈추지 않고 계속 싀행하는 지 확읞할 수 있닀.
    • 종닚간(end-to-end) 테슀튞: 처음부터 끝까지 전첎 소프튞웚얎 시슀템에서 작동의 흐멄(또는 워크플로우)을 테슀튞한닀. 
  • 테슀튞 용읎성(testability): 테슀튞 대상읎 되는 '싀제' 윔드륌 가늬킀며 핎당 윔드가 얌마나 테슀튞하Ʞ 적합한지륌 나타낞닀. 테슀튞 용읎성은 서람시슀템읎나 시슀템 수쀀에도 적용될 수 있닀. 테슀튞 용읎성은 몚듈화와 깊은 ꎀ렚읎 있윌며, 몚듈화된 윔드는 테슀튞 용읎성읎 더 좋닀. 윔드의 테슀튞 용읎성읎 낮윌멎 제대로 테슀튞하는 것읎 불가능할 수 있닀. 현재 작성 쀑읞 윔드의 테슀튞 용읎성을 확읞하Ʞ 위핎 윔드륌 작성하멎서 '얎떻게 테슀튞할 것읞가?'륌 계속 자묞하는 것읎 좋닀.

 

1.4 고품질 윔드 작성은 음정을 지연시킀는가?

닚Ʞ적윌로는 고품질 윔드륌 작성하는 데 시가닝 더 걞늎 수 있닀. 높은 품질의 윔드륌 작성하는 것은 볎통 우늬 뚞늿속에 떠였륎는 것을 바로 윔딩하는 것볎닀 조ꞈ 더 많은 생각곌 녞력읎 필요하닀. 하지만 한번 사용하고 버늎 사소한 유틞늬티성 프로귞랚읎 아닌 좀 더 쀑요한 소프튞웚얎륌 개발하고 있닀멎, 음반적윌로 고품질 윔드륌 작성하는 것읎 쀑장Ʞ적윌로는 개발 시간을 닚축핎쀀닀.

윔드 품질을 고렀하지 않고 뚌저 떠였륎는 대로 윔딩하멎 처음에는 시간을 절앜할 수 있닀. 귞러나 읎러 윔드는 새로욎 Ʞ능을 추가하거나 버귞륌 수정하는 것읎 점점 더 얎렀워지고 시간도 더 많읎 걞늬는데, 작동하지 않는 윔드륌 처늬하고 재섀계핎알 하Ʞ 때묞읎닀. 

 

1장 요앜

  • 좋은 소프튞웚얎륌 만듀렀멎 고품질 윔드륌 작성핎알 한닀.
  • 싀제 서비슀 환겜에서 싀행되는 소프튞웚얎가 되Ʞ 전에 윔드는 음반적윌로 여러 닚게의 검사와 테슀튞륌 통곌핎알 한닀.
  • 버귞나 제대로 동작하지 않는 Ʞ능읎 사용자에게 제공되거나 비슈니슀에 쀑요한 시슀템에서 싀행되는 것을 읎러한 검사륌 통핎 막을 수 있닀.
  • 테슀튞는 윔드륌 작성하는 몚든 닚계에서 고렀하는 것읎 좋닀. 윔드륌 ë‹€ 작성하고 난 후에 고렀하는 것읎 아니닀.
  • 고품질 윔드륌 작성하멎 처음에는 시간읎 였래 걞늬지만, 쀑장Ʞ적윌로는 개발 시간읎 닚축되는 겜우가 많닀.