안티패턴이란?
안티패턴이란? (What are anti-patterns?)
Elixir로 프로젝트를 진행하다 보면 "이 코드가 정말 좋은 방식일까?" 싶은 순간이 꼭 있죠. 그런 고민이 들 때 기준이 되는 개념이 안티패턴이에요. 이 가이드는 Elixir 코드에서 자주 나타나는 안티패턴을 문서화해서, 개발자들이 문제의 조짐을 알아채고 그 함정을 피할 수 있도록 돕는 글이에요.
본문
안티패턴(anti-pattern)은 코드에서 흔히 볼 수 있는 실수나 문제의 신호를 뜻해요. "코드 스멜(code smells)"이라고도 부르죠.
이 가이드들의 목표는 Elixir 소프트웨어에서 발견될 수 있는 잠재적 안티패턴을 문서화하고, 개발자들이 그것을 식별하고 함정을 이해하도록 돕는 거예요. 다만 한 가지 중요한 점은, 기존 코드가 어떤 안티패턴에 해당한다 해서 반드시 다시 써야 한다는 뜻은 아니에요. 때로는 스니펫이 잠재적 안티패턴과 그 한계에 부합하더라도, 그 문제를 푸는 데는 그게 최선의 접근일 수 있어요. 안티패턴이 전혀 없는 코드베이스는 존재하지 않고, 모든 안티패턴을 제거하는 것을 목표로 삼을 필요도 없어요.
이 가이드에서 다루는 안티패턴은 크게 네 가지 범주로 나뉘어요.
코드 관련 안티패턴 (Code-related anti-patterns): 코드 자체와 특히 언어의 관용구, 기능과 관련돼요.
설계 관련 안티패턴 (Design-related anti-patterns): 모듈과 함수, 그리고 그것들이 코드베이스 안에서 맡는 역할과 관련돼요.
프로세스 관련 안티패턴 (Process-related anti-patterns): 프로세스와 프로세스 기반 추상화와 관련돼요.
메타프로그래밍 안티패턴 (Meta-programming anti-patterns): 메타프로그래밍과 관련돼요.
각 안티패턴은 다음과 같은 구조로 문서화돼요.
이름 (Name): 안티패턴을 식별하는 고유한 이름이에요. 개발자들 사이의 소통을 원활하게 해 주는 중요한 요소예요.
문제 (Problem): 안티패턴이 코드 품질을 어떻게 해칠 수 있고, 개발자에게 어떤 영향을 줄 수 있는지를 설명해요.
예시 (Example): 안티패턴이 발생한 상황을 보여 주는 코드와 텍스트 설명이에요.
리팩터링 (Refactoring): 코드의 품질을 개선하기 위해 코드를 바꾸는 방법이에요. 리팩터링된 코드의 예시도 함께 제시돼요.
추가로 "추가 설명 (Additional Remarks)" 섹션이 붙는 경우도 있어요. 여기에는 안티패턴이 적용되지 않는 알려진 시나리오가 포함될 수 있어요.
안티패턴의 초기 목록은 ASERG/DCC/UFMG의 Lucas Vegi와 Marco Tulio Valente가 제안했어요. 자세한 내용은 "Understanding Code Smells in Elixir Functional Language"와 관련 코드 저장소를 참고하세요.
한편, Erlang Ecosystem Foundation의 보안 작업 그룹(Security Working Group)은 Erlang과 Elixir 양쪽의 보안 리소스와 모범 사례를 담은 문서를 발행하는데, 여기에는 웹 애플리케이션을 위한 상세 가이드도 포함돼요.