우리는 개선을 위한 변경이나 유지보수를 많이 한다.

그때마다 느끼는 것은 dependency가 많으면 이해하기도 어렵고, 코드에 손을 대기가 쉽지 않다.개선의 어려움에 보너스로 테스트도 어렵다.

우리는 이러한 문제들때문에 dependency를 줄이려는 노력을 많이 한다.물론 이 문제는 중요한 문제임에 틀림이 없다.

내가 하려는 이야기는 잘못된 dependency break를 얘기하려 한다.
 
개발자들은 깔끔한 상태를 좋아하고, 다른 개발자에게 간섭을 받기 싫어한다.
그래서, 커뮤니케이션을 통해서 코드를 개발하는 것을 그닥 즐기지 않는다.

여러 팀이 있을 경우는 상대방 팀에 대한 도메인 영역을 이해하기 어렵기때문에 별도로 분리(separate)하는 일이 종종 생긴다. 커뮤니케이션이 어려운 구조이기때문에 공통의 도메인을 구축하기보다는 별도의 도메인을 구축하는 것이 더 올바른 선택일 수도 있다. 이 경우는 대규모 프로젝트에에 다양하고 많은 팀들이 참여할 경우이다.

대부분 우리가 진행하는 팀단위의 작은 프로젝트들은 팀원간에 원활한 소통을 통해서 도메인 지식을 cohesive하게 만들 필요가 있다. 같은 도메인 영역인데, 기능이 다르다고 해서 많은 구현을 만드는 경우도 보게 된다. 같은 로컬을 바라보는 팀이라면, 잦은 소통을 통해서 구현을 줄이고, 인터페이스를 늘리는 것이 좋겠다.

도메인이 같은데, 도메인 영역이 dependency가 있는데, 코드상으로만 break하는 노력은 잘못된 선택일수도 있다는 것을 명심해야 한다.

대규모, 소규모 프로젝트는 같은 프로젝트라도 context에 따라서 달라질수가 있다. 자신이 하는 일이 어디에 해당하는지는 잘 생각을 해봐야 한다. 
Posted by ologist
많은 dependency와 잘못된 dependency로 인해서 코드변경이 어렵다.

기존에 있던 코드의 잘못된 디자인으로 시작된 옳지 않은 dependency때문에 계속해서 문제가 발생을 한다.

이걸 break를 하고 가야 하는데, 오픈이 얼마 남지 않아서 못하는구나.

이 작업은 다음 프로젝트에는 꼭 하고야 말겠다. 내가 만든 코드는 아니지만, 더 이상 미루면 안될거 같다.

조금 귀찮지만, 다음에 작업을 위해서 조금만 더 수정을 해야겠다.
Posted by ologist
복잡한 UI와 비즈니스 로직으로 인해서 어쩔 수 없이 이해하기 어렵고 디자인 자체가 복잡해질 경우를 볼수가 있다. 로직이 복잡해지다가 보면 서로 상충되는 로직이 들어가고는 있는데, 일단 교통 정리를 끝냈다고 생각을 해보자.

그 복잡한 비즈니스 로직과 상관없는 로직을 구현을 할때 서로 영향을 끼치지 않고, 복잡한 관계를 알지 못해도 자신이 원하는 로직을 쉽게 구현 하는 것이 좋겠다.

계속된 확장이 된다면, 필요한 확장 부분에서 다시 branch가 만들어지고 확장을 해야 비즈니스 로직이 엄격히 분리가 될 듯하다.

물론 책임이 분리가 되더라도 재사용은 가능해야 한다. 재사용이 가능한 시점에서 branch를 나누자.

아무리 안에서 알맞는 것은 선택해준다고 해도, dependency를 가지고 있으면 안에 있는 것이 궁금하게 마련이다. 궁금증을 갖지 않게 해주자.
Posted by ologist
최근 블로그에 비즈니스 로직의 복잡성와 의존성에 대한 이야기를 많이 적었는데, 마침 업무를 진행중에 재미있는 일이 발생을 했다.

우리 팀에 초보 개발자인 막내는 경력이나 경험에 비해서 센스가 꽤 있는 편이다.
그 초보 개발자가 어느날부터 jakarta-POI를 열심히 API를 익히면서 코딩을 하고 있었다. 간단한 API이기때문에 빠른 시간에 습득해서 잘 사용하고 있었다.

어제 코드리뷰 시간에 그 내용에 대해서 언급을 하는 자리가 있었는데, 아주 흥미로운 일이 벌어졌다..^^

초보 개발자가 구현해야 할 업무는 테스트로 진행되고 있는 데이터를 실디비로 마이그레이션을 하는 업무였다. 한번 쓰고 내다버릴 배치성 업무였다.

2가지의 문제가 거론이 되었는데, 이것이 흥미롭다.

1. 테스트 DB에서 데이터를 가져와서 자바빈에 바인딩을 하고 그것을 다시 실디비에 데이터를 넣고 있었다. 중간에 DTO를 십분 활용을 하는 것이다.

어쨌든 우리가 가장 일반적으로 사용하는 방법이다.
하지만,
한번 밖에 호출되지 않은 심플한 로직과 업무처리에서 굳이 빈에 담아서 어렵게 할 필요없이 컨넥션을 2개 열어서 ResultSet에서 바로 loop를 돌면서 실디비로 데이터를 이관을 할수 있을 것이다.

EP
님이 조언을 해주셨다. 약간의 생각만 바꾸어도 코드량이 줄어들뿐만 아니라 의미없는 코드로 노가다를 하는 작업이 대량 줄어들었다.

2. 초보개발자는 기획자가 엑셀로 데이터를 줄 것으로 예상을 했다. 엑셀에서 키값 데이터를 읽어서 그것을 처리하는 방식으로 개발을 한 것이다.

기획자뿐만 아니라 우리 나라 직장인은 엑셀을 선호하는 경향이 있다. 아마 구현을 하기전에 그렇게 준다고 커뮤니케이션을 했을 수도 있다. 리뷰를 시작하면서 테스트 엑셀 파일을 열었는데, 컬럼 2개에 데이터가 있었다. 정말 심플한 데이터였다. 이것을 CSV로 변환을 해서 단순하게 text파일을 읽어서 구분자(,)로 구분해서 데이터를 읽었더라면, POI 라이브러리 의존성도 없이 구현이 가능했을 것이다. 같이 리뷰하던 고수의(?) 개발자분들은 이구동성으로 얘기를 했다. 물론 자주 사용되는 어플리케이션이라 CSV로 바꾸는 것 조차 귀찮다고 한다면, POI를 이용한 어플리케이션이 더 빛을 발할수도 있었겠지만, 이번 건은 CSV로 넣는 것이 더 좋은 선택으로 보인다.

실제로 전에 있던 회사에서 업무를 진행할 때 CSV로 넣었던 import데이터를 엑셀도 추가로 가능하게 구현한 적도 있다. 그 때는 엑셀으로 임포트가 명확한 요구사항이고, 자주 사용하던 기능이었다.



우리는 개발을 진행을 하다보면 과다 설계과 디자인의 홍수 속에서 살게 된다.
과연 이렇게까지 해야만 할까? 이게 정말 옳은 일인까? 수많은 고민을 하게 된다.

dependency가 많고 코드량이 많으면 버그가 증가할 수 밖에 없다. 최소주의의 코딩이 절실하게 필요하다. 최소주의 코딩은 당연한 이야기지만, testability도 확연히 좋아진다.

문제의 해결점은 최대한 비즈니스 로직을 심플하게 정리를 하고(개발에 쓰는 머리에 5%만 사용을 해도 단순하게 바꿀수 있다) 여러가지 문제 해결 방법이 있다면, 가능한 의존성이 적은 구현, 테스트를 하기 쉬운 구현으로 생각을 해보자


당연한 이야기지만, 의존성이 적을 수록 테스트하기는 쉬워 질 것이다.
갑자기 테스트가 웬말이라는 사람이 있을까봐 한줄 더 적는다..^^



Posted by ologist
이전버튼 1 이전버튼

블로그 이미지
ologist

공지사항

Yesterday171
Today52
Total34,795

달력

 « |  » 2012.02
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      

최근에 받은 트랙백

글 보관함