본문 바로가기

생각하나

소프트웨어의 본질과 도메인 주도 설계

소프트웨어의 본질은 해당 소프트웨어의 사용자를 위해 도메인에 관련된 문제를 해결하는 능력에 있다. 그 밖의 매우 중요하다 할 수 있는 기능도 모두 이러한 기본적인 목적을 뒷받침하는데 불과하다. 도메인이 복잡하면 이 같은 문제 해결은 유능하고 숙련된 사람의 집중적인 노력이 필요한 어려운 일이 된다. 개발자는 업무 지식을 증진하기 위해 도메인 연구에 몰두해야 한다. 그뿐만 아니라 모델링 기법을 연마해서 도메인 설계에 통달해야 한다.

그런데도 이러한 도메인 연구는 대부분의 소프트웨어 프로젝트에서 최우선 과제로 여겨지지 않는다. 대부분의 유능한 개발자는 다뤄야 할 특정 도메인을 학습하는 데 관심이 많지 않으며, 더군다나 도메인 모델링 기법을 쌓는 데는 더더욱 전념하지 않는다. 기술자들은 자신의 기술력을 훈련할 수 있는 정량적인 문제를 좋아한다. 도메인 업무는 무질서하고 컴퓨터 과학자로서의 능력에 보탬이 될 것 같지 않은 복잡하고 새로운 지식을 많이 요구한다.

대신 기술적인 재능이 있는 사람은 정교한 프레임워크를 만드는 작업에 착수해 기술을 바탕으로 도메인 문제를 해결하려 한다. 도메인을 학습하고 모델링하는 일은 다른 이들의 몫으로 남는다. 소프트웨어의 중심에 있는 복잡성은 정면으로 돌파해야 한다. 그렇지 않느면 도메인과 무관한 소프트웨어를 만들어낼지도 모를 위험을 무릅써야 한다.
도메인 주도 설계, 에릭 에반스, 위키북스, 5쪽


이제서야 그동안 개발에서 느끼고 새로운 길을 모색했던 문제들에 대해 해결의 원론을 찾은 느낌이다. 등꼴이 오싹할 정도의 명문장이고, 예측이며, 예언이다. 대부분의 개발자와 개발 프로젝트들이 재능을 정교한 프레임워크에 쏟아부고, 그 프레임워크가 저절로 문제를 해결한다는 잘못된 믿음으로 모두를 불행하게 만든다.