개발관련/용어

오버 엔지니어링(Overengineering) 과 적정 엔지니어링(Just-enough Engineering

고통받는다 2023. 7. 2. 04:37

해당 포스팅에서 객체지향형에 설명하다 오버 엔지니어링이라는 용어가 나왔습니다.

객체지향의 단점으로 오버 엔지니어링의 위험이 있다..라고 말이죠..

그럼 이 오버 엔지니어링이라는 용어가 무엇을 의미하는 걸까요?

오버 엔지니어링?

 

현재 필요한 것보다 더 과하게 제품을 디자인하는 것을 말합니다.

즉 현재 서비스 요구사항에서는 20이 필요한데 미래에 ~~을 더 추가할 수도 있고 ~~기능 변화가 있을 수 있으니 이것저것 고려해서 50을 만들어 놓는 겁니다.

20에서 50으로 배 이상이 추가되었으니 그에 따른 시스템 구조도 더 복잡해지고 비용 역시 증가하게 됩니다.

오버 엔지니어링은 다음과 같은 특성을 가질 수 있습니다.

1. 과도한 복잡성

문제 해결을 위해 복잡한 알고리즘, 디자인 패턴, 아키텍처 등이 사용되어, 코드가 불필요하게 복잡해지고 이해하기 어렵게 만듭니다.

2. 불필요한 기술 사용

필요한 수준의 기술만으로 문제를 해결하는 것이 가능한데도 불필요하게 고급 기술이나 라이브러리 등을 사용하여, 추가적인 학습, 개발 및 유지 보수 비용이 발생합니다.

3. 불필요한 일봔화

특정 상황에 특화된 설루션 대신 일반화된 설루션을 적용하려고 하여, 불필요한 일반화가 높은 추상화 레벨이나 범용성을 강조한 코드가 작성되어, 개발 및 유지 보수 비용이 증가합니다.

4. 불필요한 확장성

문제 해결을 위해 필요한 확장성 수준을 초과하여, 불필요한 확장성을 고려한 코드가 작성되어, 개발 및 유지 보수 비용이 증가하고, 런타임 성능이 저하될 수 있습니다.

오버 엔지니어링은 프로젝트에 불필요한 복잡성과 비용을 추가할 수 있으며, 개발 및 유지 보수를 어렵게 만들 수 있습니다. 따라서 개발자는 소프트웨어 개발 과정에서 실제 필요한 수준의 기술과 디자인을 적용하고, 필요한 기능을 충족하는 간결하고 효율적인 설루션을 추구하는 것이 중요합니다.

​​

적정 엔지니어링?

 

잘못 만들어진 설계가 오버 엔지니어링이라면 적정 엔지니어링은 소프트웨어 개발과정에서 필요한 최소한의 엔지니어링 원칙과 기술을 적용하여, 문제를 효과적으로 해결하는 것을 의미합니다.

적정 엔지니어링은 다음과 같은 특징을 가질 수 있습니다.

1. 필요한 최소한의 복잡성

문제를 해결하기 위해 필요한 최소한의 복잡성만을 적용하여, 코드가 간결하고 이해하기 쉽게 작성됩니다.

2. 필요한 최소한의 기술 사용

문제를 해결하는 데 필요한 최소한의 기술만을 허용하여, 불필요한 학습 및 개발 비용을 최소화합니다.

3. 문제에 특화된 설루션

특정 상황에 최적화된 설루션을 개발하여, 필요한 기능을 충족하면서도 복잡성을 최소화합니다.

4. 필요한 확장성

필요한 확장성 수준만을 고려하여, 불필요한 확장성을 제거하고, 개발 및 유지 보수 비용을 최소화합니다.

개발자의 실력은 여기서 결정이 난다고 생각합니다.

얼마나 적절하게 설계를 하는지... 확장을 할 수 없게 설계를 하는지, 아니면 너무 과하게 설계를 하는지...

적정 엔지니어링을 하는 수준이 되려면 그만큼 프로젝트 경험이 많아야 할 테고... 이 능력을 가지기 시작한다면 이제 팀장급의 개발자가 될 수 있지 않나 하고 생각을 합니다.

그만큼 해당 능력을 가지고 있는 개발자는 몇 없고... 몸값이 그에 비례해서 커질 겁니다.