
협력에 적합한 사람인지, 압박이 심한 상황도 잘 헤쳐나갈 자질이 있는지, 모호한 문제를 건설적으로 해결할 능력이 있는지 등을 살펴볼 수 있다✅ 오버 엔지니어링의 위험을 피할 수 있는 방법
1. 기술 의사 결정 과정 기록하기
- 다음과 같은 패턴을 보인다면, 기술 부채가 계속 쌓이면서 오버 엔지니어링이 일어날 가능성이 높다
- 해결할 문제와 솔루션에 대한 충분한 검토없이 기술 도입 결정
- 잘못된 선택이나 변화에 대한 두려움 때문에 필요한 결정을 하지 않음
- 의사 결정 과정이 투명하지도 추적되지도 않아 중복된 논의가 계속됨
- 이런 경우,
아키텍처 결정 기록 (Architectural Decision Records, ADR) 프로세스를 사용할 수 있다.
- ADR : 소프트웨어 아키텍처에 필요한 구성 요소에 대한 의사 결정, 동기 및 맥락 및 그리고 결과에 대해 설명하는 간단한 문서
- ADR 프로세스를 사용함으로써 동일한 기술 주제에 대한 반복적인 토론을 방지하고, 기존 직원 혹은 신규 입사자에게 기술 도입 과정을 효과적으로 전달할 수 있다
- “왜, RDB가 아니라 NoSQL을 선택했는지, 왜 구현 방법으로 Amazon DynamoDB를 선택했는지”, “왜 쿠버네티스를 선택했는지, 왜 운영 방법으로 Amazon EKS를 선택했는지”, “왜, API의 도메인 범위를 이렇게 나누었는지” 등등 각 의사 결정 사항을 ADR 문서로 저장한다
- ADR 문서는 다양한 템플릿이 존재하는데, 보통 ‘문제에 대한 정의’, ‘의사 결정에 대한 동기 및 맥락’, ‘최종 결정 사항’, ‘예상 결과’, ‘결정 참여자’ 등의 항목을 짧더라도 구체적으로 담아야 한다.
2. 해결하려는 문제 정확히 파악하기
- 해결하려는 문제에 대해 정의를 내리고, 도입하려는 기술에 대한 동기와 맥락을 정확히 알아야만 올바른 의사 결정을 할 수 있다
- ex) 매일 발생하는 대량 로그 처럼 일회적인 쓰기 사용량이 높다고 해서 무턱대고 NoSQL을 선택하는 경우
- 쓰기 이후에도 읽기나 분석 요구가 많은 경우라면, 간단한 파일 저장소나 Elasticsearch 같은 다른 솔루션을 고려할 필요도 있음.
3. 문제 해결 기술 후보를 선정하고 테스트하기
- 몇 가지 후보를 선택하고 이를 테스트한 후, 나온 결과를 보고 선택해야 해야 한다
추가적으로 가끔 오버엔지니어링 처럼 보이는 것이 필요할 때도 있다. 예를 들어, 시스템 보안이나 개인 정보 보호 같은 영역은 법적인 규정 준수 문제들이 있기 때문에 현재 가지고 있는 것 보다 더 많은 고려가 필요하다.
✅ 오버 엔지니어링에 대한 현직자의 생각
확장이나 축소 가능한 상태를 유지하는게 핵심
ex) 현 요구사항보다 +a 를 구현했더라도 축소 가능한 상태로 설계가 되어 있다면 괜찮음.
(from. https://youtu.be/yDOT2-6KPZc?si=nOAjBWaujwo0FJZ2)
❓ 시스템의 배포 방식 종류