안티패턴
안티패턴(anti-pattern)은 소프트웨어 공학, 프로젝트 관리, 비즈니스 프로세스에서 반복되는 문제에 대한 일반적인 대응으로, 보통 비효과적이며 매우 역효과적일 위험이 있다.[1][2] 이 용어는 1995년 컴퓨터 프로그래머 앤드루 쾨니히(Andrew Koenig)가 만든 것으로, 《디자인 패턴》(Design Patterns, 소프트웨어 개발에서 저자들이 매우 신뢰할 만하고 효과적이라고 여긴 여러 디자인 패턴을 강조한 책)에서 영감을 받아 《객체 지향 프로그래밍 저널》(Journal of Object-Oriented Programming)에 발표한 그의 논문에서 처음 출간되었다.[3] 1996년 마이클 액크로이드(Michael Ackroyd)가 오브젝트 월드 웨스트 컨퍼런스(Object World West Conference)에서 발표한 추가 논문에서도 안티패턴을 문서화했다.[3]
하지만 1998년 《안티패턴》(AntiPatterns) 책이 이 아이디어를 대중화하고 소프트웨어 설계 분야를 넘어 소프트웨어 아키텍처와 프로젝트 관리까지 범위를 확장했다.[3] 이후 다른 저자들은 환경적, 조직적, 문화적 안티패턴을 포함하도록 더욱 확장했다.[4]
정의
[편집]《디자인 패턴》의 저자들에 따르면, 안티패턴을 나쁜 습관, 나쁜 관행, 또는 나쁜 아이디어와 구별하는 두 가지 핵심 요소가 있다.
- 안티패턴은 일반적으로 사용되는 프로세스, 구조 또는 행동 패턴으로, 처음에는 문제에 대한 적절하고 효과적인 대응으로 보이지만, 좋은 결과보다 나쁜 결과가 더 많다.
- 안티패턴이 해결하려고 시도하는 문제에 대한 다른 해결책이 존재한다. 이 해결책은 문서화되고, 반복 가능하며, 안티패턴과 달리 효과적임이 입증되었다.
일반적으로 사용되는 것에 대한 지침은 패턴과 유사한 "3의 법칙"이다: 안티패턴이 되려면 최소 세 번 발생하는 것이 목격되어야 한다.[5]
사용
[편집]안티패턴을 문서화하는 것은 문제 공간을 분석하고 전문가 지식을 포착하는 효과적인 방법이 될 수 있다.[6]
일부 안티패턴 설명은 단순히 패턴의 부정적인 결과만 문서화하지만, 좋은 안티패턴 문서화는 또한 대안을 제공하거나 안티패턴을 개선할 수단을 제공한다.[7]
소프트웨어 공학 안티패턴
[편집]소프트웨어 공학에서 안티패턴에는 빅 볼 오브 머드(big ball of mud, 설계의 부재), 갓 오브젝트(제어가 여러 클래스에 분산되지 않고 단일 클래스가 프로그램의 모든 제어를 처리하는 것), 매직 넘버(설명되지 않은 의미를 가지거나 명명된 상수로 대체될 수 있는 여러 번 나타나는 고유 값들), 폴터가이스트(다른 클래스의 메서드를 호출하기 위해서만 존재하는 일시적인 컨트롤러 클래스들)가 포함된다.[7]
빅 볼 오브 머드
[편집]빅 볼 오브 머드는 인식 가능한 아키텍처가 부족한 소프트웨어 시스템을 나타낸다. 소프트웨어 공학 관점에서는 바람직하지 않지만, 비즈니스 압박, 개발자 이직, 코드 엔트로피로 인해 이러한 시스템은 실제로 흔하다.
이 용어는 브라이언 푸트(Brian Foote)와 조셉 요더(Joseph Yoder)의 1997년 동명의 논문에서 대중화되었으며, 이 논문에서 다음과 같이 용어를 정의했다.
빅 볼 오브 머드는 무작정 구조화된, 무질서하게 뻗어나간, 조잡한, 덕트 테이프와 철사로 묶은, 스파게티 코드 정글이다. 이러한 시스템들은 규제되지 않은 성장과 반복적이고 임시변통적인 수리의 명백한 징후를 보인다. 정보는 시스템의 멀리 떨어진 요소들 사이에서 무분별하게 공유되며, 종종 거의 모든 중요한 정보가 전역적이 되거나 중복되는 지경에 이른다.
시스템의 전체 구조는 잘 정의된 적이 없을 수도 있다.
만약 정의되었다면, 인식할 수 없을 정도로 침식되었을 수도 있다. 약간의 아키텍처 감각을 가진 프로그래머들은 이러한 수렁을 피한다. 오직 아키텍처에 무관심하고, 아마도 실패하는 제방의 구멍을 메우는 일상적인 허드렛일의 관성에 편안함을 느끼는 사람들만이 그러한 시스템에서 작업하는 것을 만족스러워한다.
— 브라이언 푸트와 조셉 요더, Big Ball of Mud. 제4회 프로그램 패턴 언어 컨퍼런스(PLoP '97/EuroPLoP '97) 몬티첼로, 일리노이주, 1997년 9월
푸트와 요더는 이러한 종류의 아키텍처에 대한 "빅 볼 오브 머드" 용어의 창시자가 브라이언 매릭(Brian Marick)임을 인정했다.[8]
프로젝트 관리 안티패턴
[편집]《안티패턴》 책에 포함된 프로젝트 관리 안티패턴에는 다음이 있다.
- 블로하드 잼버리(Blowhard Jamboree, 업계 전문가들의 과도함)
- 분석 마비(Analysis paralysis)
- 뷰그래프 엔지니어링(Viewgraph Engineering, 프레젠테이션 제작에 너무 많은 시간을 보내고 실제 소프트웨어에는 충분하지 않음)
- 계획에 의한 죽음(Death by Planning, 마찬가지로 너무 많은 계획)
- 성공에 대한 두려움(Fear of Success, 프로젝트 완료 근처에서의 비합리적인 두려움)
- 콘콥(The Corncob, 사람들과의 어려움)
- 지적 폭력(Intellectual Violence, 전문용어나 비밀스러운 기술의 사용을 통한 위협)
- 비합리적 관리(Irrational Management, 나쁜 관리 습관)
- 연기와 거울(Smoke and Mirrors, 판매원들의 데모와 프로토타입의 과도한 사용)
- 담 너머로 던지기(Throw It Over the Wall, 동의 없이 개발자들에게 유행하는 소프트웨어 공학 관행을 강요하기)
- 소방훈련(Fire Drill, 짧은 위기로 구두점이 찍힌 긴 단조로움의 기간)
- 불화(The Feud, 관리자들 간의 갈등)
- 이메일은 위험하다(e-mail Is Dangerous, 잘못 조언된 이메일 메시지로 인한 상황들).
각주
[편집]- ↑ Budgen 2003, 225쪽.
- ↑ Ambler 1998, 4쪽.
- ↑ 가 나 다 Neill, Laplante & DeFranco 2011, 4쪽.
- ↑ Neill, Laplante & DeFranco 2011, 5쪽.
- ↑ Neill, Laplante & DeFranco 2011, 6쪽.
- ↑ Jimenez 2006.
- ↑ 가 나 Demeyer 2008, 102쪽.
- ↑ Foote, Brian; Yoder, Joseph (1999년 6월 26일). “Big Ball of Mud”. 《laputan.org》. 2019년 4월 14일에 확인함.
참고문헌
[편집]- Neill, Colin J.; Laplante, Philip A.; DeFranco, Joanna F. (2011). 《Antipatterns: Managing Software Organizations and People》 seco판. Applied Software Engineering Series. CRC Press. ISBN 9781439862162.
- Budgen, D. (2003). 《Software design》. Harlow, Eng.: Addison-Wesley. 225쪽. ISBN 0-201-72219-4.
As described in Long (2001), design anti-patterns are 'obvious, but wrong, solutions to recurring problems'.
- Ambler, Scott W. (1998). 《Process patterns: building large-scale systems using object technology》. Cambridge, UK: Cambridge University Press. 4쪽. ISBN 0-521-64568-9.
...common approaches to solving recurring problems that prove to be ineffective. These approaches are called antipatterns.
- Jimenez, Edward (2006년 4월 24일). “AntiPatterns”. 《AntiPatterns》. 2006년 4월 24일에 확인함.
- Demeyer, Serge (2008). 〈ObjectOriented Reengineering〉. Mens, Tom; Demeyer, Serge (편집). 《Software Evolution》. Springer Science + Business Media. ISBN 9783540764403.
더 읽어보기
[편집]- Koenig, Andrew (March–April 1995). “Patterns and Antipatterns”. 《Journal of Object-Oriented Programming》 8 (1): 46–48.
- Later re-printed in: Rising, Linda (1998). 《The patterns handbook: techniques, strategies, and applications》. Cambridge, U.K.: Cambridge University Press. 387쪽. ISBN 0-521-64818-1.
An antipattern is just like a pattern, except that instead of a solution it gives something that looks superficially like a solution, but isn't one.
- Later re-printed in: Rising, Linda (1998). 《The patterns handbook: techniques, strategies, and applications》. Cambridge, U.K.: Cambridge University Press. 387쪽. ISBN 0-521-64818-1.
- Laplante, Phillip A.; Neill, Colin J. (2005). 《Antipatterns: Identification, Refactoring and Management》. Auerbach Publications. ISBN 0-8493-2994-9.
- Brown, William J.; Malveau, Raphael C.; McCormick, Hays W.; Thomas, Scott W. (2000). Hudson, Theresa Hudson (편집). 《Anti-Patterns in Project Management》. John Wiley & Sons. ISBN 0-471-36366-9.
- Stamelos, Ioannis (January 2010). “Software project management anti-patterns”. 《Journal of Systems and Software》 83 (1): 52–59. doi:10.1016/j.jss.2009.09.016.