컴퓨터가 이해할 있는 코드는 어느 바보나 있다.

좋은 프로그래머는 사람이 이해할 있는 코드를 짠다.

-마틴 파울러-

 

 

데이터를 뽑고 빼는건(CRUD) 정보처리라는 소프트웨어의 사용목적에 있어서 가장 기본적인 기능이다

하나의 도메인에 대한 CRUD 처리는 너무나 쉽다 구글에 널려있는 jdbc 예제 소스코드를 긁어온다면

Crtl+C,V 3가지 버튼 만으로도 구현 할수 있다.

그러나 10개의 도메인에 대한 CRUD 처리는 좀더 어렵다. 1:N M:N 문제로 여러 테이블들이 서로 얽매여서

비지니스에 핵심적인 도메인이 무엇인지 선택하고 결정하는 것은 향후 개발에 있어서 문제를 일으킬수있다.

 

예를 들어

우체국에서 사용할 소프트웨어는  '주소' 도메인이다.

주소를 통해 물류들을 분류하고 주소를 활용하여 거리를 측정하고 배송비용을 산정한다.

우체국을 위한 소프트웨어를 개발해야한다면 설계자는 주소를 도메인으로 인식하고

주소에 대해 처리될수 있는 여러 비지니스적 문제들을 깊게 파고 들어 설계를 해야 할것이다.

 

그러나 다른 소프트웨어 에서 '주소' 회원 정보의 애트리뷰트(속성) 정도만으로도 문제 없이 사용될수있다.

 

같은 '주소'라는 정보를 처리하는 방식은 소프트웨어를 사용하는 클라이언트가 누구냐에 의해

우리(개발자)들은 다르게 인식해야한다.

 

 

다시 돌아와 도메인에 대해 얘기 하자면

도메인을 결정하기 위해서는 도메인에 대한 이해가 필요하다.

도메인간 연관 관계에 대한 이해 , 그에 맞는 설계 진행되지 않는다면 소프트웨어는 개발될수없다.

 

나는 그점을 간과했다.

 

경영팀에 해당하는 팀장역활을하는 친구의 말을 너무 쉽게 받아들였다.

"게시판이 필요하고 메시지를 우리 어플 유저끼리 보낼수 있어야해"

"우리 어플에서 만들어진 정보들을 기반으로 pdf파일을 생성하서 메일을 보내줘야해 "

 같은 문장들을 게시판, 메시지, 메일 같은 단일 도메인으로 받아들였고

나는 망언을 했다

"그거 쉽겠네 3주일이면 될거 같다"

게시물을 등록하는 기능

메시지를 보내는 기능

메일을 보내는 기능

너무나 쉽다.

구글링을 하면 발에 치이는 것이 기능들에 대해 설명하는 소스코드들이다.

나는 1개의 도메인을 처리하는 소프트웨어를 여러 만든다고 생각을 해서

기능들을 쉽다고 망언을 뱉었다.

 

결론을 말하자면 3주만에 끝내겠다던 프로젝트는 5달동안 질질 끌었고(중간고사 기말고사 문제이 껴있긴했지만)

개발이 되는 과정에서 기획은 기능구현이되자마자 변경되는 일도 많았다.

기획이 날아올랐다.

어찌보면 기획은 잘못이 없을수도 있다.

소프트웨어의 끊임 없는 변경은 소프트웨어공학이 해결하고자 했던 오랜 문제 이며

  문제를 해결하기 위한 여러 방법론 개발론들이 있다.

 

나는 단순 기능 구현에만 집중했고 좀더 객체지향적이고 ,추상화를 통해 소프트웨어 결합도를 낮추고자하는

 노력과 실력 그리고 경험이 없었기 때문에 설계가 망가졌다.

 

나중에는 서버측 하나의 기능테스트를 하려면 개발팀(4) 전부가 모여야만 가능할만큼 소스코드는 망가져있었다 

( 부분은 단위테스트의 중요성에서 자세히 다룰것이다.)

 

 마틴 파울러가 말했다.

컴퓨터가 이해하는 코드는 어느 바보나 짤수있다.(돌아가는 코드는 누구나 짠다.)

좋은 프로그래머는 사람이 이해할수 있는 코드를 짠다.

 

나는 바보 였나 보다.

+ Recent posts