Kuhnhee / hacker-laws-kr

💻📖 개발자에게 유용한 법칙, 읎론, 원칙, 귞늬고 팚턎듀 #hackerlaws

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

💻📖 hacker-laws

개발자에게 유용한 법칙, 읎론, 원칙, 귞늬고 팚턎듀



서론

개발을 읎알Ʞ할 때 흔히 녌하는 법칙듀읎 있습니닀. 읎 저장소는 ê·ž 쀑 가장 볎펞적읞 것듀에 대한 찞조와 개요입니닀. 공유와 PR 제출 부탁드렀요!

❗: 읎 저장소는 여러 법칙, 원칙, 귞늬고 팚턎에 ꎀ한 섀명을 포핚하고 있지만, ê·ž 쀑 ì–Žë–€ 것도 지지 하고 있지 않습니닀. 귞것듀을 적용하여알 할지에 말지에 대핎서는 얞제나 녌의의 여지가 있윌며, 또한 당신읎 ì–Žë–€ 작업을 하느냐에 따띌서도 크게 달띌집니닀.


(읎 Ꞁ은 https://github.com/dwmkerr/hacker-laws 의 번역입니닀.)


법칙

암달의 법칙

위킀플디아의 암달의 법칙

암달의 법칙은 시슀템에 늬소슀륌 추가핚윌로썚 얻을 수 있는 컎퓚터 작업 성능 향상의 최대 폭을 나타낎죌는 공식읎닀. 음반적윌로 병렬 컎퓚팅에서 읎륌 읎용하여, 프로섞서 개수의 슝가가 프로귞랚 자첎의 구조적읞 병렬화 제한에 맞서 싀제적윌로 가젞닀죌는 읎득을 예잡할 수 있닀.

예시륌 삎펎볎자. ì–Žë– í•œ 프로귞랚읎 닚음 프로섞서로 구동되얎알 하는 부분 A와 병렬화될 수 있는 부분 B로 읎룚얎젞있닀고 할 때, 우늬는 프로섞서의 추가적읞 투입읎 제한된 읎득만을 가젞닀쀌을 알 수 있닀. B 부분의 성능을 크게 향상시킬 수 있지만, A 부분의 속도는 귞대로 낚을 것읎Ʞ 때묞읎닀.

아래의 귞래프는 성능 향상 가능성의 예시륌 볎여쀀닀.

Diagram: Amdahl's Law

(읎믞지 출처: Daniels220 @영얎 Wikipedia, Creative Commons Attribution-Share Alike 3.0 Unported, https://en.wikipedia.org/wiki/File:AmdahlsLaw.svg)


볎닀시플 50%나 병렬화 가능한 프로귞랚임에도 10개 프로섞서 읎후에는 거의 읎득읎 없는 반멎, 95% 병렬화 가능한 프로귞랚은 수천 개가 추가될 때까지도 유의믞한 성능 향상을 볎여죌고 있닀.

묎얎의 법칙곌 개별 프로섞서의 성능 슝가 속도가 완화되멎서, 병렬화는 최적화의 핵심읎 되었닀. 귞래픜슀 프로귞래밍읎 읎에 대한 가장 알맞은 예시읎닀. 셰읎더 Ʞ반의 최신 컎퓚팅에서는 개별 픜셀 혹은 프래귞뚌튞륌 병렬로 렌더링할 수 있는데, 읎것읎 최신 귞래픜 칎드듀읎 대개 수천 개의 윔얎(GPU 또는 셰읎더 유닛)로 구성된 읎유읎닀.


ì°žê³  :


람룩슀의 법칙

위킀플디아의 람룩슀의 법칙

지첎되는 소프튞웚얎 개발 프로젝튞에 읞력을 더하는 것은 개발을 늊출 뿐읎닀.

읎 법칙은 읎믞 늊얎지고 있는 소프튞웚얎 개발을 빚늬하Ʞ 위핎 사람을 더 투입하는 것은 도늬얎 완성을 늊출 뿐읎띌고 말한닀. 람룩슀는 읎것은 비록 극도로 닚순화한 읎알Ʞ임을 분명히 했윌나, 닀만 음반적윌로 볎았을 때 자원 투입 시간곌 의사소통 비용윌로 읞핎 닚Ʞ적윌로 속도가 쀄얎듀 수 있닀고 하였닀. 또한 많은 작업듀은 분할할 수 없Ʞ 때묞에, 슉 읞력읎 늘얎난닀고 하여 쉜게 분배할 수 없Ʞ 때묞에, Ʞ대할 수 있는 속도 슝가 역시 낮닀.

흔히 말하는 "임산부 9명읎 몚여도 아Ʞ륌 한 달만에 낳을 수는 없닀"는 구절은 람룩슀의 법칙 쀑에서도, 특정 작업은 나누거나 병렬화할 수 없음을 비유적윌로 뜻한닀.

읎것은 귞의 저서 '맚뚌슀 믞신'의 죌요한 죌제읎닀.


ì°žê³  :


윘웚읎의 법칙

Conway's Law on Wikipedia

읎 법칙에 따륎멎 시슀템의 구조는 섀계하는 조직의 구조륌 반영한닀. 읎것은 조직 개선을 시도할 때 종종 읞용되고는 하는데, 가령 조직읎 여러 개의 작고 끊얎진 닚위로 구성되얎 있닀멎 거Ʞ에서 나옚 소프튞웚얎 또한 ê·ž 몚습을 닮는닀고 한닀. 또한 만앜 조직읎 Ʞ능곌 서비슀륌 쀑심윌로 수직적윌로 짜여 있닀멎, 읎 역시 소프튞웚얎가 읎러한 몚습을 반영할 것읎란 것읎닀.


ì°žê³  :


컀닝햄의 법칙

Cunningham's Law on Wikipedia

읞터넷에서 올바륞 답을 얻Ʞ 위한 가장 좋은 방법은 질묞을 하는 것읎 아니띌, 잘못된 답변을 올늬는 것읎닀.

슀티랐 맥Ʞ디에 따륎멎, 와드 컀닝햄은 1980년대 쎈에 귞에게 읎런 조얞을 핎죌었닀 : '읞터넷에서 올바륞 답을 얻Ʞ 위한 가장 좋은 방법은 질묞을 하는 것읎 아니띌, 잘못된 답변을 올늬는 것읎닀'. 맥Ʞ디는 읎것을 컀닝햄의 법칙읎띌 읎늄 붙였지만, 정작 볞읞은 읎륌 잘못된 읞용읎띌며 부정하였닀. 원래는 유슈넷에 ꎀ한 읎알Ʞ였지만 읎 법칙은 닀륞 옚띌읞 컀뮀니티듀읎 얎떻게 작용하는지륌 섀명하는 데에도 쓰읎게 되었닀(예시 : 위킀플디아, 레딧, 튞위터, 페읎슀북).


ì°žê³  :


던바의 숫자

위킀플디아의 던바의 숫자

"던바의 숫자는 한 사람읎 안정적읞 사회적 ꎀ계(한 개읞읎 닀륞 읎듀에 대하여 누가 누군지 잘 알며 ê·žë“€ 사읎의 ꎀ계도 파악할 수 있는 ꎀ계)륌 유지할 수 있는 읞지적 최대치로서 제시된 수읎닀." 정확한 수치에 대핎서는 의견읎 분분하닀. "
(던바는) 읞간은 였직 150명까지의 안정적읞 ꎀ계만을 펞안히 유지할 수 있닀"ê³  죌장하였닀. 귞는 좀 더 사회적읞 맥띜에서 말하Ꞟ, "바에서 우연히 만났을 때 얎색하지 않게 같읎 술을 마싀 수 있는 사람의 수"띌고 하였닀. 음반적윌로 100에서 250 사읎띌고 추정한닀.

개개읞 간의 안정적읞 ꎀ계처럌, 개발자와 윔드베읎슀의 ꎀ계도 유지하렀멎 녞력읎 ë“ ë‹€. 크고 복잡한 프로젝튞 혹은 여러 프로젝튞륌 마죌할 때, 우늬는 규몚륌 확장하Ʞ 위핎 ꎀ례, 정책, 귞늬고 만듀얎진 절찚륌 따륞닀. 던바의 숫자는 사묎싀읎 컀질 때만 엌두핎둘 것읎 아니띌 팀읎 듀음 녞력의 범위륌 얌마나로 할지, ì–žì œ 몚덞링곌 계획 자동화 툎에 투자할지 등을 정하는 데에도 쀑요하닀. 엔지니얎링 잡멎에서 볎멎, 읎 숫자는 당직(On-call : 시슀템 장애 발생을 대비하여 대Ʞ핚)윌로 ì„€ 수 있는 프로젝튞의 수읎닀.


ì°žê³  :


갈의 법칙

Gall's Law on Wikipedia

잘 작동하는 복잡한 첎계는 항상 잘 작동하던 ê°„ë‹ší•œ 첎계에서 발전한닀. 처음부터 복잡하게 섀계된 첎계는 절대로 작동하지 않윌며 잘 돌아가도록 만듀 수도 없닀. 얞제나 작동하는 ê°„ë‹ší•œ 시슀템에서 출발핎알 한닀.

(ì¡Ž 갈)

갈의 법칙은 고도로 복잡한 시슀템을 섀계 하렀는 시도는 대개 싀팚핚 암시한닀. 고도로 복잡한 첎계는 하룚아칚에 읎룚얎진 것읎 아니띌, 더 ê°„ë‹ší•œ 첎계로부터 진화한 것읎닀.

고전적읞 예시는 월드 와읎드 웹읎닀. 현재의 웹의 상태는 굉장히 복잡하닀. 귞러나 처음에는 ê·žì € 학술 Ʞꎀ 간의 간펞한 컚텐튞 공유 시슀템윌로서 시작했을 뿐읎닀. 읎러한 목적을 성공적윌로 달성하였Ʞ 때묞에 시간읎 지낚에 따띌 복잡한 시슀템윌로 진화할 수 있었닀.


ì°žê³  :


핞런의 멎도날

위킀플디아의 핞런의 멎도날

얎늬석음윌로 충분히 섀명읎 되는 음을 악의의 탓윌로 돌늬지 말띌.

— 로버튞 J. 핾런

읎 법칙에 따륎멎 부정적읞 결곌륌 낳는 행동은 악의로부터 비롯된 것읎띌Ʞ볎닀는, 행동곌 귞것읎 불러올 파장에 대한 몰읎핎 때묞읎닀.


혞프슀태터의 법칙

Hofstadter's Law on Wikipedia

섀령 혞프슀태터의 법칙을 고렀하더띌도, 음은 마치는 걎 얞제나 예상볎닀 였래 걞늰닀.

— 더Ꞁ띌슀 혞프슀태터

묎얞가가 얌마나 걞늎지 짐작할 때 읎 법칙을 읞용하는 것을 듀을 수 있을지 몚륞닀. 뻔한 말 같지만, 우늬는 소프튞웚얎륌 개발핚에 있얎 결곌륌 낎놓Ʞ까지의 Ʞ간을 예상하는 것에 귞닀지 능하지 ì•Šë‹€.

읎는 'ꎎ덞, 에셔, 바흐 : 영원한 황ꞈ 녾끈'에서 나옚 말읎닀.


ì°žê³  :


허튞버의 법칙

Hutber's Law on Wikipedia

개선은 악화륌 의믞한닀.

(팹튾멭 허튞버)

읎 법칙의 죌장에 따륎멎 시슀템의 개선은 닀륞 부분의 악화로 읎얎지거나 닀륞 악화륌 숚겚, 현 상태로부터 전첎적읞 질적 저하륌 불러였게 된닀.

예륌 듀얎 특정 엔드 포읞튞의 응답 시간 감소로 읞핎 요청 흐늄에 있얎서 슀룚풋곌 용량 읎슈가 늘얎날 수 있고, 읎는 전혀 닀륞 부분에 영향을 끌칠 수 있닀.


하읎프 사읎큎 & 아마띌의 법칙

위킀플디아의 하읎프 사읎큎

우늬는 새로욎 Ʞ술의 횚곌륌 닚Ʞ적윌로는 곌대평가하고, 장Ʞ적윌로는 곌소평가하는 겜향읎 있닀.

— 로읎 아마띌

하읎프 사읎큎은 믞국의 정볎 Ʞ술 연구 및 자묞 회사읞 가튞너에서 시간의 흐늄에 따륞 Ʞ술에 대한 Ʞ대와 성숙도륌 시각적윌로 나타낾 것읎닀.


The Hype Cycle

(읎믞치 출처: Jeremykemp @영얎 Wikipedia, CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=10547051)


슉, 읎 사읎큎에 따륎멎 대개 신Ʞ술곌 ê·ž 전망에 대하여 거품읎 쎉발된닀. 읎때 많은 팀듀은 너묎 빠륎게 뛰얎듀었닀가 결곌묌에 종종 싀망하고는 한닀. 읎것은 얎쩌멎 Ʞ술읎 아직 덜 성숙하Ʞ 때묞읎거나, 혹은 싀제 섞계에의 적용읎 덜 읎룚얎졌Ʞ 때묞음 것읎닀.

특정 시점읎 지나고 나멎 Ʞ술 자첎의 역량곌 싀제적읞 적용의 Ʞ회가 늘얎나고, 마칚낎 생산성을 얻을 수 있게 된닀. 로읎 아마띌는 읎륌 가장 간결한 묞장윌로 정늬하였닀. "우늬는 새로욎 Ʞ술의 횚곌륌 닚Ʞ적윌로는 곌대평가하고, 장Ʞ적윌로는 곌소평가하는 겜향읎 있닀".


하읎럌의 법칙 (암시적 읞터페읎슀의 법칙)

Hyrum's Law Online

API에 충분한 수의 유저가 있닀멎,

명섞에서 지정된 것은 아묎런 상ꎀ읎 없닀:

시슀템에서 ꎀ잡될 수 있는 몚든 행동 양식은

닀륞 읎듀에게 달렀있을 것읎닀.

— 하읎럌 띌읎튞

하읎럌의 법칙에 따륎멎 API에 충분히 많은 수의 소비자가 있을 때, API의 몚든 행동 양식은 궁극적윌로 명섞에 있는 정의가 아닌 아닌 닀륞 누군가에게 달렀있게 된닀. ê°„ë‹ší•œ 예시륌 듀자멎 가령 API의 응답 시간곌도 같은 비핚수적 요소듀읎닀. 좀 더 구첎적읞 예시는 에러 메섞지에 정규 표현식을 읎용하여 API의 에러의 타입 을 알아낎는 소비자듀을 ë“€ 수 있닀. API의 공개 명섞에서는 메섞지의 낎용에 ꎀ하여서 아묎 것도 알렀죌지 않윌며 대신 에러 윔드륌 사용핎알 한닀고 하고 있더띌도, ì–Žë–€ 유저듀은 메섞지륌 사용하거나 메섞지의 낎용을 변겜하여 API륌 사싀상 붕ꎎ시킬 수 있닀.


ì°žê³  :


묎얎의 법칙

위킀플디아의 묎얎의 법칙

집적 회로의 튞랜지슀터 수는 대략 2년마닀 2배가 된닀.

반도첎와 Ʞ판 Ʞ술의 가파륞 성장 속도륌 섀명하Ʞ 위한 묎얎의 예잡은 1970년대부터 2000년대 후반까지 굉장히 정확한 것윌로 드러났닀. 최귌에는 부품 소형화의 묌늬적 한계로 읞하여 앜간 둔화되ꞎ 하였지만 말읎닀. 하지만 병렬화와 반도첎 Ʞ술의 혁신적 변화에 대한 가능성, 귞늬고 양자 컎퓚팅은 묎얎의 법칙읎 향후 몇 십 년간에도 듀얎맞을 수 있음을 의믞할 수도 있닀.


뚞플의 법칙 / 소드의 법칙

위킀플디아의 뚞플의 법칙

잘못될 수 있는 음은 잘못될 것읎닀.

에드워드 A. 뚞플, Jr의 뚞플의 법칙 에 따륎멎 묎얞가가 잘못될 수 있닀멎, 귞것은 잘못될 것읎닀.

읎는 개발자듀 사읎에서 흔한 격얞읎닀. 때로는 개발 시, 테슀팅 때, 심지얎 프로덕션 닚계에서 예상치 못한 음읎 발생한닀. 읎는 (영국에서는 더 흔한) 소드의 법칙 곌 ꎀ렚읎 있닀:

만앜 묎얞가가 잘못될 수 있닀멎, 귞것은 가장 안 좋은 때에, 잘못될 것읎닀.

읎 '법칙'듀은 대개 농닎처럌 읎알Ʞ된닀. 귞러나, 확슝펞향 읎나 선택펞향 곌도 같은 현상듀은 읎 법칙듀을 곌도하게 믿게 만듀 수 있닀(잘 되는 대부분의 겜우는 읞지하지 못하나 싀팚는 알Ʞ 쉜고 더욱 눈에 띠Ʞ 때묞에).


ì°žê³  :


파킚슚의 법칙

Parkinson's Law on Wikipedia

작업은 낚은 Ʞ한을 채욞 때까지 늘얎난닀.

원래 맥띜에서 읎 법칙은 ꎀ료제에 대한 연구륌 Ʞ반윌로 하고 있닀. 소프튞웚얎 개발 계획에서도 비ꎀ적윌로 적용될 수 있는데, 개발자듀은 Ʞ한읎 닀가였Ʞ 전에는 횚윚적읎지 못하닀가 Ʞ한읎 가까워지멎 ꞉하게 음을 하게 되므로 ê²°êµ­ 싀제적읞 데드띌읞을 흐늿하게 한닀.

만음 읎 법칙읎 혞프슀태터의 법칙곌 결합된닀멎, 더욱 비ꎀ적읞 ꎀ점에 도달할 수 있닀. 작업은 낚은 시간을 채우Ʞ 위핎 늘얎나멎서도 예정된 시간볎닀 Ꞟ얎지Ʞ까지 할 것읎닀.


ì°žê³  :


성꞉한 최적화의 법칙

Premature Optimization on WikiWikiWeb

성꞉한 최적화는 몚든 악의 귌원읎닀.

(도널드 컀누슀)

도널드 컀누슀의 녌묞 Goto묞을 읎용한 구조적 프로귞래밍에 따륎멎, "프로귞래뚞듀은 프로귞랚에서 쀑요하지 않은 부분을 최적화하는 것을 생각하고 또 걱정핚윌로썚 얎마얎마한 시간을 낭비하는데, 읎런 시도는 디버깅읎나 유지볎수륌 고렀하멎 였히렀 횚윚성에 막대하게 부정적읞 영향을 끌친닀. 우늬는 가령 97% 정도의 겜우에, 작은 부분의 횚윚성에 ꎀ하여 생각하지 ì•Šì•„ì•Œ 한닀 : 성꞉한 최적화는 몚든 악의 귌원읎닀. 귞러나 나뚞지 결정적읞 3%의 겜우에까지 Ʞ회륌 저버늬멎 안 된닀."

성꞉한 최적화 란 (좁은 의믞로) 귞것읎 ꌭ 필요한지 알Ʞ 전에 행핎지는 최적화띌고 할 수 있닀.


푞튞의 법칙

Putt's Law on Wikipedia

Ʞ술은, 자신읎 ꎀ늬하지 않는 것듀을 읎핎하는 자듀곌, 자신읎 ꎀ늬하는 것듀을 읎핎하지 못하는 자듀 두 가지 분류의 사람듀에 의핎 지배된닀.

푞튞의 법칙에는 종종 닀음 푞튞의 귀결읎 따띌붙는닀:

몚든 Ʞ술 조직의 계꞉에서는 시간읎 흐륎멎서 역량의 역전읎 음얎난닀.

읎 묞구에 따륎멎 조직 구성론에 대한 여러 가지 선택 Ʞ쀀곌 유행 변화에 따띌서, 조직에는 여러 명의 숙렚된 녾동 계잵곌 자신듀읎 ꎀ늬하는 음의 복잡도와 얎렀움을 몚륎는 여러 명의 ꎀ늬직읎 생Ʞ게 된닀. 읎것은 플터의 원늬 혹은 딜버튞의 법칙곌도 같은 현상 때묞읎닀.

닀만 읎런 류의 법칙에서 잊지 말아알 할 점은 읎러한 몚혞한 음반화는 음부 조직에는 적용될 수도 있윌나, 나뚞지에는 아니띌는 점읎닀.


ì°žê³  :


복잡성 볎졎의 법칙 (테슬러의 법칙)

The Law of Conservation of Complexity on Wikipedia

읎 법칙에 따륎멎 시슀템에는 더 읎상 쀄음 수 없는 특정한 정도의 복잡성읎 졎재한닀.

시슀템에 있얎 ì–Žë–€ 종류의 복잡성은 '의도되지 않은 것'읎닀. 귞것은 빈앜한 구조, 싀수, 혹은 묞제에 대한 귞늇된 몚덞링의 대가읎닀. 읎러한 의도되지 않은 복잡성은 쀄읎거나 없앚 수 있닀. 반멎에, 풀얎알 할 묞제에 대하여 '낎재적'윌로 자늬하는 복잡성읎 있닀. 읎러한 복잡성은 옮겚질 수는 있윌나 없앚 수는 없닀.

읎 법칙읎 시사하는 흥믞로는 점은, 섀령 전첎 시슀템을 닚순화하더띌도 낎재적읞 복잡성은 쀄얎드는 것읎 아니띌 사용자에게 전읎되얎서, 읎용을 더욱 복잡하게 만든닀.


허술한 추상화의 법칙

The Law of Leaky Abstractions on Joel on Software

몚든 사소하지 않은 추상화는, 얎느 정도, 허술하닀.

—조엘 슀폎슀킀

읎 법칙에 따륎멎 컎퓚팅에서 복잡한 시슀템곌 작업하Ʞ 위핎 음반적윌로 사용되는 추상화에서는 때에 따띌 하당 요소의 '누수'가 음얎날 수 있고, 읎는 추상화가 예상치 못한 방향윌로 전개되게 한닀.

파음을 불러와 낎용을 읜는 상황을 삎펎볎자. 파음 시슀템 API는 로우 레벚 컀널 시슀템의 추상화 읞데, 읎 시슀템 또한 자Ʞ 플래터(혹은 플래시 메몚늬나 SSD)의 데읎터륌 묌늬적윌로 변겜하는 것의 추상화읎닀. 대부분의 겜우 파음을 읎진 데읎터의 슀튞늌윌로서 추상화하는 것은 묞제가 없을 것읎닀. 귞러나 자Ʞ 디슀크에서는 데읎터륌 순서대로 읜는 것읎 임의 접귌볎닀 비교할 수 없을 만큌 빠륞 반멎에(페읎지 폮튾 비용 때묞에), SSD에서는 전혀 상ꎀ읎 없닀. 낎부 구현을 상섞히 읎핎하여알 읎런 겜우에 대처할 수 있는데(가령, 데읎터베읎슀 읞덱슀 파음은 임의 접귌의 비용을 쀄읎도록 구조가 짜여젞 있닀), 읎렇듯 추상화는 개발자가 몚륎멎 곀란하도록 낎부 구현 상섞륌 '누출'한닀.

위의 예시는 더 많은 추상화가 도입되멎 더욱 복잡핎질 수 있닀. 늬눅슀 욎영첎제는 넀튞워크륌 겜유하여 파음에 접귌할 수 있도록 하멎서도 로컬에서는 '음반' 파음로 췚꞉한닀. 읎런 추상화는 넀튞워크 였류가 발생하멎 '허술핎질' 것읎닀. 만앜 개발자가 읎런 파음듀을 넀튞워크 지연읎나 였류에 대한 ê³ ë € 없읎 '음반' 파음로 췚꞉한닀멎, 버귞가 생Ꞟ 것읎닀.

읎 법칙을 섀명하는 Ꞁ에 따륎멎 하부 구동 원늬륌 몚륞 채로 추상화에 곌도하게 의졎할 겜우, 도늬얎 묞제 핎결을 복잡하게 만듀 수 있닀고 하고 있닀.


ì°žê³  :


싀제 사례:

  • 포토샵의 느며 쎈Ʞ 로딩 - 곌거에 마죌한 묞제읎닀. 포토샵은 종종 쌜는 데에 몇 분씩읎나 걞늬Ʞ도 하는데, 읎 묞제는 구동 시작시에 현재 Ʞ볞윌로 섀정된 프늰터의 정볎륌 읜얎였는 것에서 발생하였닀. 만앜 ê·ž 프늰터가 넀튞워크 프늰터띌멎 극도로 였랜 시간읎 걞늬게 되는 것읎닀. 시슀템에 넀튞워크 프늰터의 추상화 가 로컬 프늰터와 유사하게 제공된 점은 연결 상태가 좋지 못한 상황의 사용자에게 묞제륌 음윌쌰닀.

사소핚의 법칙

The Law of Triviality on Wikipedia

읎 법칙은 정작 심각한 혹은 쀑요한 것듀볎닀 사소한 읎슈듀 혹은 왞양에 훚씬 더 많은 시간을 쏟게 됚을 시사한닀.

가상의 예시로서, 위원회가 원자력 발전소에 걎섀 계획을 허가하는 곌정에서 훚씬 쀑요한 발전소 자첎의 섀계는 놔두고 자전거 볎ꎀ소 얘Ʞ나 하는 데에 시간을 쏟는 것을 ë“€ 수 있닀. 거대하고 복잡한 죌제의 녌의에서 ê·ž 분알의 전묞 지식읎나 사전 쀀비 없읎 뭔가 유용한 읎알Ʞ륌 할 수는 없을 것읎닀. 귞러나 사람듀은 자신읎 Ʞ여하는 것처럌 볎여지고 싶얎하고, 따띌서 쉜게 핎결될 수 있윌며 귞닀지 쀑요한 것은 아닌 작은 디테음에 너묎 많은 시간을 쏟는 겜향읎 생겚난닀.

읎 가상의 음화는 사소한 디테음에 시간 버늬는 것을 '자전거볎ꎀ소한닀'ê³  표현하도록 만듀었닀.


유닉슀 철학

위킀플디아의 유닉슀 철학

유닉슀 철학은 소프튞웚얎의 구성 요소는 ìž‘ì•„ì•Œ 하며, 하나의 특정한 작업을 잘하도록 í•Žì•Œ 한닀는 것읎닀. 작고 닚순하며 잘 정의된 닚위듀을 조합핚윌로썚, 거대하고 복잡하며 닀목적읞 프로귞랚을 읎용하는 것볎닀 쉜게 시슀템을 섀계할 수 있닀.

서비슀가 작고, 하나의 특정한 작업을 맡윌며, 복잡한 행동은 닚순한 랔록의 조합윌로 구성할 수 있는 '마읎크로서비슀 아킀텍쳐' 같은 귌래의 ꎀ행 또한 읎 법칙의 적용윌로 생각할 수 있닀.


슀포티파읎 몚덞

The Spotify Model on Spotify Labs

슀포티파읎 몚덞은 '슀포티파읎'에 의핎 유명핎진 팀곌 조직 구조에 대한 접귌법읎닀. 읎 몚덞에서 팀은 Ʞ술볎닚 Ʞ능을 쀑심윌로 구성된닀.

슀포티파읎 몚덞은 부족, êžžë“œ, 지부와 같은 ê·žë“€ 조직 구조의 요소 또한 유명하게 만듀었닀.


Spotify Tribe Engineering Model

(읎믞지 출처: https://medium.com/@media_75624/exploring-key-elements-of-spotifys-agile-scaling-model-471d2a23d7ea)


와듀러의 법칙

Wadler's Law on wiki.haskell.org

프로귞래밍 얞얎륌 섀계할 때, 읎 Ʞ능 목록에 나옚 항목듀을 녌의하는 데 걞늬는 쎝 시간은 2의 항목의 번혞 제곱에 비례한닀.

  1. 의믞론
  2. 구묞론
  3. 얎휘
  4. 죌석닀는 법

(슉, 의믞론에 1시간을 ì“ž 때마닀 죌석닀는 법에 1 곱하Ʞ 2의 섞제곱읞 8시간을 쓎닀는 뜻읎닀.)

사소핚의 법칙처럌, 와듀러의 법칙에 따륎멎 ì–žì–Ž 구조륌 섀계할 때 쓰읎는 시간은 각 Ʞ능의 쀑요도에 반비례한닀.


ì°žê³  :


원칙

원칙듀은 음반적윌로 섀계의 가읎드띌읞곌도 같닀.


딜버튞의 법칙

The Dilbert Principle on Wikipedia

Ʞ업듀은 시슀템적윌로 묎능력한 직원듀을 ꎀ늬직윌로 승진시쌜 업묎 흐늄에서 배제하는 겜향읎 있닀.

슀캇 아닎슀

슀캇 아닎슀(딜버튞 만화의 작가)에 의핎 만듀얎진 겜영 개념읞 딜버튞의 법칙은 플터의 원늬로부터 영향을 받았닀. 딜버튞의 법칙에 따륎멎, 묎능한 직원듀은 귞듀읎 입힐 수 있는 플핎륌 최소화하Ʞ 위핎 ꎀ늬직윌로 승진된닀. 아닎슀는 1995년 월 슀튞늬튞 저널의 Ʞ사에서 읎륌 처음 섀명했고, 읎륌 1996년 귞의 겜영학 서적 딜버튞의 법칙에서 확장하였닀.


ì°žê³  :


파레토의 원늬 (80 : 20의 법칙)

위킀플디아의 파레토 법칙

섞상 대부분의 것듀은 균등하게 분배되지 않았닀.

파레토의 원늬에 의하멎, 겜우에 따띌 대부분의 결곌는 소수로부터 비롯된닀:

  • ì–Žë–€ 소프튞웚얎의 80%는 쎝 시간 쀑 20%만에 쓰음 수 있닀(반대로, 가장 얎렀욎 20%륌 만드는 것에 80%의 시간읎 ë“ ë‹€).
  • 20%의 녞력읎 80%의 결곌륌 만듀얎낞닀.
  • 20%의 음읎 80%의 수입을 찜출한닀.
  • 20%의 버귞가 80%의 크래쉬륌 음윌킚닀.
  • 20%의 Ʞ능읎 사용량 쀑 80%륌 찚지한닀.

1940년대에 품질 ꎀ늬의 아버지로 널늬 알렀진 믞국계 룚마니아읞 공학자 조셉 죌란 박사는, 품질 묞제에 파레토의 원늬륌 적용하Ʞ 시작했닀.

읎 원늬는 또한 80 : 20의 법칙, 쀑요한 소수의 법칙, 혹은 희소 읞자의 원늬띌고도 불늬욎닀.


싀제 사례:

  • 2002년 당시 마읎크로소프튞는 20%의 가장 많읎 볎고된 버귞륌 고칚윌로썚, 윈도우슈와 였플슀에서 80%의 ꎀ렚 에러와 크래쉬가 사띌졌닀고 하였닀(출처).

플터의 원늬

The Peter Principle on Wikipedia

사람듀은 조직 낎에서 자신읎 "묎능력핎지는 계잵"까지 올띌가렀는 겜향읎 있닀.

로렌슀 J. 플터

로렌슀 J. 플터에 의핎 고안된 겜영 개념읞 플터의 원늬에서, 음을 잘하는 사람듀은 귞듀읎 더 읎상 성공적읎지 못한 수쀀("묎능력한 정도")까지 승진한닀. 읎 지점에서 귞듀은 심각할 정도로 성곌가 없지 않는 읎상 상꞉자가 될 수록 조직에서 쫓겚날 가능성읎 더욱 낮아지며, 자신곌 별로 ꎀ렚된 능력읎 없는 역할에 계속 낚게 될 것읎닀. 귞듀을 성공적윌로 읎끌었던 원래 가진 능력은 새로욎 음에 귞닀지 필요하지 ì•Šêž° 때묞읎닀.

읎것은 특히 엔지니얎에게 있얎 흥믞로욎데, 처음엔 Ʞ술력읎 깊읎 요구되는 분알에서 시작하나 대개 겜력읎 귌볞적윌로 닀륞 능력읎 필요한 ꎀ늬직 윌로 읎얎지Ʞ 때묞읎닀.


ì°žê³  :


견고핚의 원칙 (포슀텔의 법칙)

위킀플디아의 견고핚의 원칙

당신읎 하는 음은 엄하게, 낚의 것을 받아듀음 때는 너귞럜게.

종종 서버 얎플늬쌀읎션 개발에 있얎, 읎 원칙에 따륎멎 볎낎는 것은 최대한 간략하멎서도 명섞륌 철저히 따륎도록 하되, 받는 것은 섀령 명섞륌 따륎지 않더띌도 처늬할 수 있는 한 받아듀읎는 것을 지향핎알 한닀고 한닀.

읎 원칙의 목적은 의믞가 분명한 입력의 겜우 비록 형식적윌로는 빈앜하더띌도 읎핎는 할 수 있윌므로 읎륌 수용핚윌로썚 견고한 시슀템을 섀계하는 것읎닀. 닀만 귞러한 Ʞ형의 입력을 받아듀임에 있얎 특히 입력을 제대로 테슀튞하지 않을 겜우, 볎안 위협의 가능성읎 생Ꞟ 수 있닀.


솔늬드

읎는 닀음에 대한 앜자읎닀:

읎것은 객첎지향 프로귞래밍의 핵심 원칙읎닀. 읎러한 섀계 원칙듀은 개발자듀읎 유지볎수 가능한 시슀템을 짓는 것을 도욞 수 있닀.


닚음 책임 원칙

위킀플디아의 닚음 책임 원칙

몚든 몚듈곌 큎래슀는 닚음한 책임만을 지녀알 한닀.

'솔늬드' 원칙의 첫 번짞읎닀. 읎 원칙에 따륎멎 몚듈읎나 큎래슀는 반드시 였직 하나의 음만을 í•Žì•Œ 한닀. 좀 더 싀용적윌로 말하자멎, 프로귞랚 Ʞ능에 있얎서 하나의 작은 변화는 였로지 한 구성 요소만을 바꿔알 핚을 뜻한닀. 가령, 팚슀워드 복잡도 검슝을 얎떻게 처늬할지 변겜하는 것은 였직 프로귞랚의 한 곳만을 바꿔알 한닀.

읎론적윌로 읎것은 윔드륌 더욱 견고하게 만듀고 수정을 용읎하게 한닀. 바뀔 구성 요소가 닚음 책임만을 지고 있닀는 것을 안닀멎 ê·ž 변화에 대한 테슀팅 또한 더욱 쉜Ʞ 때묞읎닀. 앞서 말한 예시에서, 팚슀워드 복잡도 ꎀ렚 구성 요소륌 변겜하는 것은 였직 팚슀워드 복잡도 ꎀ렚 Ʞ능에만 영향을 끌친닀. 여러 책임을 지고 있는 구성 요소륌 바꿀 때에 ì–Žë– í•œ 음읎 음얎날지 예잡하는 것은 훚씬 더 얎렵닀.


ì°žê³  :


개방-폐쇄 원칙

위킀플디아의 개방-폐쇄 원칙

개첎는 확장에 대핎서는 ì—Žë € 있얎알 하고, 수정에 대핎서는 닫혀 있얎알 한닀.

'솔늬드' 원칙의 두 번짞읎닀. 읎 원칙에 따륎멎 개첎(큎래슀, 몚듈, 핚수 등)는 행동을 확장 할 수 있얎알 하지만, Ʞ졎의 행동은 ê³ ì¹  수 없얎알 한닀.

가상의 예시로서 마크닀욎 묞서륌 HTML로 변환할 수 있는 몚듈을 상상핎볎자. 몚듈읎 낎부적읞 변겜 없읎도 새로읎 제안된 마크닀욎 Ʞ능을 닀룰 수 있도록 확장 가능하닀멎, 확장에 대핮 ì—Žë € 있는 것읎닀. 만앜 몚듈읎 소비자에 의핎서 Ʞ졎의 마크닀욎 Ʞ능 처늬륌 변겜할 수 있도록 수정될 수 없닀멎, 수정에 대핮 닫혀 있는 것읎닀.

읎 원칙은 특히 객첎지향 프로귞래밍곌 ꎀ렚읎 있는데, 우늬는 객첎륌 쉜게 확장하고 싶은 반멎 예상치 못한 방향윌로 수정되는 것은 플하고 싶Ʞ 때묞읎닀.


ì°žê³  :


늬슀윔프 치환 원칙

늬슀윔프 치환 원칙

시슀템을 파ꎎ하지 않윌멎서도 자료형을 하위 자료형윌로 대첎할 수 있얎알 한닀.

'솔늬드' 원칙의 ì„ž 번짞읎닀. 읎 원칙은 만음 ì–Žë– í•œ 구성 요소가 자료형에 의졎한닀멎, 시슀템 싀팚나 하위 자료형읎 묎엇읞지에 대한 정볎 없읎도 하위형을 대신 사용할 수 있얎알 한닀고 말한닀.

가령, 파음을 나타낮는 구조로부터 XML 묞서륌 읜얎듀읎는 메소드가 있닀고 하자. 만앜 메소드가 '파음' Ʞ반형을 사용하고 있닀멎, '파음'에서 파생된 몚든 것은 핎당 핚수에서 쓰음 수 있닀. '파음'읎 역방향 탐색을 지원하고 XML 파서가 ê·ž Ʞ능을 읎용한닀고 할 때 만앜 하위 자료형읞 '넀튞워크 파음'에 대한 역방향 탐색 시도 시 싀팚한닀멎, '넀튞워크 파음'은 규윚을 위반하고 있는 것읎닀.

읎 원칙은 특히 객첎지향 프로귞래밍곌 ꎀ렚읎 있는데, 자료형의 계잵 ꎀ계륌 섞심히 몚덞링핎알 시슀템 사용자듀의 혌란을 막을 수 있Ʞ 때묞읎닀.


ì°žê³  :


읞터페읎슀 분늬 원칙

위킀플디아의 읞터페읎슀 분늬 원칙

ì–Žë– í•œ 큎띌읎얞튞도 자신읎 사용하지 않는 메소드에 의졎하도록 강요당하멎 안 된닀.

'솔늬드' 원칙의 ë„€ 번짞읎닀. 읎 원칙에 따륎멎 구성 요소의 소비자는 구성 요소가 가진 핚수듀 쀑에서 싀제로 사용하지 않는 것듀에 의졎하멎 안 된닀.

예륌 듀멎, 파음을 나타낮는 구조로부터 XML 묞서륌 읜얎듀읎는 메소드가 있닀고 하자. ê·ž 메소드는 였직 파음에서의 바읎튞 읜Ʞ, 전진, 귞늬고 후진 Ʞ능만읎 필요하닀. 만앜 읎 메소드가 파음 구조의 연ꎀ 없는 Ʞ능(파음 볎안을 위한 권한 업데읎튞와도 같은)읎 변하였닀고 í•Žì„œ 업데읎튞가 필요하닀멎, 읎 원칙은 묎횚가 된 것읎닀. 파음읎 '탐색 가능 슀튞늌' 읞터페읎슀륌 구현하고, XML 늬더Ʞ가 사용하도록 하는 펞읎 나을 것읎닀.

읎 원칙은 특히 객첎지향 프로귞래밍에서 적용되얎, 읞터페읎슀, 계잵 구조, 귞늬고 추상 자료형을 통핎 구성 요소 간의 결합도의 최소화륌 읎룚렀고 한닀. 덕 타읎핑은 명시적 읞터페읎슀륌 제거핚윌로썚 읎 원칙을 강제한닀.


ì°žê³  :


의졎 ꎀ계 역전 원칙

위킀플디아의 의졎 ꎀ계 역전 원칙

고수쀀 몚듈은 저수쀀 구현에 의졎핎서는 안 된닀.

'솔늬드' 원칙의 닀섯 번짞읎닀. 고수쀀에서 지휘하는 구성 요소는 의졎 ꎀ계륌 알 필요가 없닀는 원칙읎닀.

예시로서, 웹사읎튞의 메타데읎터륌 읜는 프로귞랚읎 있닀고 하자. 우늬는 쀑심 구성 요소가 웹페읎지 낎용을 닀욎로드하는 구성 요소와 메타데읎터륌 읜을 수 있는 구성 요소륌 알아알만 한닀고 생각할 수 있닀. 만앜 의졎 ꎀ계 역전 원칙을 고렀한닀멎, 쀑심 구성 요소는 였로지 바읎튞 데읎터륌 가젞올 수 있는 추상 구성 요소와 바읎튞 슀튞늌에서 메타데읎터륌 읜을 수 있는 추상 구성 요소에만 의졎하멎 된닀. TCP/IP, HTTP, HTML 등에 대핎서는 알 필요가 없닀.

읎 원칙은 마치 예상되는 의졎 ꎀ계륌 '역전'하는 것처럌 볎음 수 있Ʞ 때묞에 복잡하닀(귞래서 읎러한 읎늄읎 붙었닀). 싀제로는, 개별 지휘첎가 올바륞 구현의 추상 자료형읎 사용되었는지도 확싀시 í•Žì•Œ 핚을 뜻한닀(위의 예시에서 묎얞가 가 여전히 메타데읎터륌 읜는 추상 구성 요소에 HTTP 파음 닀욎로더와 HTML 메타 태귞 늬더Ʞ륌 제공핎알 한닀). 읎것은 제얎 반전읎나 의졎성 죌입곌 같은 팚턎윌로 읎얎진닀.


ì°žê³  :


GLIDE (???)

읎는 닀음에 대한 앜자읎닀?:

읎것은 객첎지향 프로귞래밍의 핵심 원칙읎닀? 읎러한 섀계 원칙듀은 개발자듀읎 유지볎수 가능한 시슀템을 짓는 것을 도욞 수 있닀?


DRY 원칙

The DRY Principle on Wikipedia

몚든 지식은 시슀템 낎에서 반드시 닚음하고, 몚혞하지 않윌며, 권위적읞 표현윌로 나타나알 한닀.

DRY는 Don't Repeat Yourself반복하지 마띌 의 앜자읎닀. 읎 원칙은 개발자듀에게 있얎 윔드의 반복을 쀄읎고 정볎륌 한 곳에 몚을 수 있도록 돕Ʞ 위핎 고안되었윌며, 1999년 앀드류 헌튞와 데읎람 토마슀의 저서 싀용죌의 프로귞래뚞에 나와 있닀.

DRY의 반대는 WET (Write Everything Twice몚든 것을 두 번 썚띌, 혹은 We Enjoy Typing저희는 타자치는 게 좋아요)읎띌 할 수 있겠닀.

만음 같은 정볎가 둘 혹은 ê·ž 읎상 곳에 흩얎젞 있닀멎, DRY 원칙을 적용하여 하나로 합친 후 원하는/필요한 곳에서 재사용할 수 있닀.


ì°žê³  :


YAGNI

위킀플디아의 YAGNI

읎것은 You Aren't Gonna Need It넌 필요 없을 ê±°ë‹€ 의 앜얎읎닀.

얞제나 싀제로 필요할 때만 구현하고, 절대 혹시 나쀑에 쓞지도 몚륎니 만듀지 말아띌.

(ë¡  제프늬슈) (XP의 공동 섀늜자읎자 "Extreme Programming Installed : XP 도입을 위한 싀전 입묞"의 저자)

읎 익슀튞늌 프로귞래밍 (XP) 원칙은 개발자듀읎 였직 당장 요구될 때에만 Ʞ능을 개발하고, 믞래륌 예잡하여 혹시 추후에 필요할지 몚륎는 Ʞ능을 구현하렀는 시도륌 플하띌고 말한닀.

읎 원칙을 고수한닀멎 윔드베읎슀에서 사용되지 않는 윔드의 양을 쀄음 수 있을 것읎고, 의믞 없는 Ʞ능 구현에 시간곌 녞력을 쏟지 않아도 될 것읎닀.


ì°žê³  :


추천 도서

읎 개념듀읎 흥믞롭닀멎, 닀음 책듀도 슐Ꞟ 수 있을 것입니닀.


TODO

Hi! If you land here, you've clicked on a link to a topic I've not written up yet, sorry about this - this is work in progress!

Feel free to Raise an Issue requesting more details, or Open a Pull Request to submit your proposed definition of the topic.

About

💻📖 개발자에게 유용한 법칙, 읎론, 원칙, 귞늬고 팚턎듀 #hackerlaws

License:MIT License