DDR-forum // 파트 1. 소프트웨어와 디자인
https://github.com/stemmlerjs/ddd-forum 해당 소스를 활용하려는 한국인 개발자분들을 위해서 공유합니다!
Coupling causing Complexity
dependencies, 종속성을 가지는 컴포넌트, 함수들이 단단히 결합하고 있는 구조에서는 분해하기가 모호해지기 때문에 복잡성이 증가할 수 밖에 없습니다. 클래스의 결합, 시간적 결합(동작에 있어서 순서가 중요한 비동기적 코드 실행), 동기적 결합 등이 소스에 진하게 남아있으면, 디자인을 하기도 어려울뿐만 아니라 유지보수와 확정성에 있어서도 패널티를 가지게 됩니다.
또한 이러한 결합을 하는 대상이 낮은 응집력을 가지고 있다면 그 문제는 더 커지게 됩니다. 부정확한 의미의 변수, 너무 추상화된 코드, 불필요한 정보 저장을 피하면서 서비스 소스의 응집력을 높게 유지하면서 각각의 dependency가 결합을 느슨하게 가져갈 수 있도록 구조를 디자인 해야합니다.
How to reduce the Complexity then??
- 전술적, 전략적 프로그래밍
Java사의 Sun Microsystems씨가 소프트웨어 평생 비용의 40~80%를 유지관리 및 보수에 사용하고 코드 설계자가 끝까지 책임지는 경우는 절대 없기 때문에 개발을 할 때 50%는 신규 개발, 50%는 유지보수를 위한 자원관리에 사용해야하는 것을 추천하고 있습니다. 복잡한 코드는 결국 인수인계자의 이해에 어려움을 주기 때문에 복잡하지 않으면서도 캡슐, 모듈화가 잘 되어있는 소스가 좋은 소스라고 볼 수 있습니다.
- Extreme Programming
익스트림 프로그래밍(XP)를 통하여 효율적으로 feature를 개발하여 시장에 빠르게 침투하는 것이 거친 생태계에서 살아남기 좋은 방법이 될 수 있습니다.
1. 피드백 : 페어 프로그래밍을 도입하여 개발자 서로가 피드백을 주면서 소스를 작성할 수 있는 환경 조성
2. TDD: Test-driven development을 통한 신규 피쳐 개발로 테스트 실패 케이스 분석을 통한 설계로 신규 기능을 추가
3. 지속적인 통합: CI라고도 하며 형상관리를 주기적으로 하면서 리펙토링, 소규모 릴리즈를 안정적으로 출시
4. Programmer welfare: 칭찬은 고래도 춤추게 만든다는 말처럼 좋은 개발자는 좋은 환경, 좋은 복지에서 성과가 호로록!