2025-10-05
1일 1아티클
REFACTORING ENGLISH
개발 철학 9가지
소개
- 20년 경력의 SW 엔지니어의 개발 철학에 영향을 준 9가지 소프트웨어 에세이
1. 조엘 테스트
- “당신의 회사는 개발자를 존중하고 있는가?”에 대한 12가지 질문 리스트
2. 검증 말고 파싱하라
- 데이터를 단순 검증에서 그치지 않고, 검증 완료된 데이터를 새로운 타입으로 파싱하여 사용
- ex. 사용자가 입력한 아이디를
validate에서 나아가parse하여 검증 성공한 아이디만Username타입으로 변환하여 사용 → 항상 안전함이 보장됨
3. No Silver Bullet
- 소프트웨어 개발의 복잡성은 본질적 복잡성과 부수적 복잡성으로 나뉘며, 본질적 복잡성을 획기적으로 줄일 수 있는 기술은 없다!
- 본질적 복잡성 : 비즈니스 규칙 정의와 같이, 반드시 해야 하는 핵심 고민
- 부수적 복잡성 : 컴파일 대기, 라이브러리 사용법을 익히는 등 도구로 해결 가능한 부차적 문제
최신 기술은 부수적 복잡성을 줄일 뿐, 본질적 복잡성을 고민하는 개발자를 완전히 대체할 수 없다.
4. 선택
- 사용자에게 선택지를 제공하는 것은 그들에게 생각하고 결정하라는 부담을 주는 것
- 따라서, 불필요한 선택지는 최소화해야 한다.
개발자가 사용자 대신 현명한 결정을 내릴 수 있다면, 그렇게 해야 한다.
5. 호환성 계층은 고객을 위한 것
- 사용자의 행동 유도 시, 사용자 입장에서 가장 저항이 적은 경로를 설계해야 한다.
- ex. 인증되지 않은 편법이 사용자 문제를 해결한다면, 사용자는 편법을 쓰게 될 것. 개발자는 이러한 사용자 심리를 이해하고 시스템 개발 필요
6. 테스트 코드에 로직을 넣지 마라
- 좋은 테스트 코드는 복잡성을 줄이는 것보다 명확성이 더 중요
- 테스트 코드에서까지 중복 제거를 위해 변수, 헬퍼 함수 사용하는 것은 지양
7. 약간의 순수 자바스크립트로 많은 것이 가능하다
- Vanilla JS는 매우 강력, 복잡한 프레임워크(React, Vue) 없이도 대부분의 웹 개발 가능
- 프레임워크는 의존성 문제, 복잡한 디버깅 유발
8. 지루한 기술을 선택할 것
- 새 프로젝트 시작 시, 최신 유행 기술보다는 오래되고 검증된 지루한 기술을 선택하는 것이 더 안정적
- 최신 기술은 미확인 버그 및 약점이 많아, 문제 발생 시 해결이 어려움
9. 내 디지털 생활에서 나 자신이 잠겼다
- 모든 디지털 기기가 한 번에 먹통이 되는 최악의 상황 대비
- 디지털 재난 시나리오를 미리 점검하고 대비할 것
BONUS. 사용자 입력 처리
- 사용자가 전화번호나 카드 번호 입력 시, 불필요한 문자(공백, 하이픈, etc.)는 시스템이 알아서 제거해야 한다.
- 사용자에게 엄격한 형식을 강요하지 말 것