프로젝트를 마친 이후 조금 지치기도 하고, 블로깅 소재도 없어서 글을 자제하던 차인데
아쉬운 SoC 논쟁을 읽고 마음이 움직였다. 일부 잡음과 달리 이 글을 보고 일민형이 한 마디 해달라고 한 것은 자신은 모델링 전문가가 아니니까 잘 아는 니가 글을 써달라는 것이었는데, 귀차니즘의 늪에 빠진 터라 대충 썼더니 자극적인 표현 탓인지 결과가 이상한 방향으로 튀었다.
소란이 있었으니 SoC는 제쳐두고 내가 애증을 갖고 있는 UML 모델링 관련 부분만 글을 쓰고자 한다.
이 글의 댓글을 보면 내가 하고 싶은 말을 대신한 내용이 있다. 그래서 이를 살려내서 활용하고, 본문에서 오해의 소지가 있는 부분에 대응하여 요즘 UML 툴을 배우시는 분이 잘못 판단하지 않도록 경험을 나누고자 한다.
이 글에선 복잡도를 해결하는 도구로 코드 생성 방법을 이야기하고 있다. 코드 생성이야 오래 전부터 하던 일이니까 새로운 내용은 아니다. 저자는 이상적인 코드 생성 방법으로 UML 모델을 사용하는 방법을 제시했다.
모델링 툴을 이용해서 코드 자동화를 하는게 가장 이상적이라고 생각합니다. 이 정보도 역시 제가 아니라 10년차의 대선배가 전수해 주신 비기죠.
저자의 견해는 존중하더라도 '10년차 대선배'를 동원해서 권위를 부여할 만큼 '비기'는 아니다. 일단 오래 전부터 실제 프로젝트에서 쓰여왔고, 이미 많은 시행착오를 통해서 Lessons Learned가 쌓였다. 하지만 실패 사례를 널리 공개하지는 않는 터라 모델링 실전 경험이 없는 분들에겐 정보를 접할 기회가 없을 뿐이다.
UML 등장 이전에도 모델에서 코드를 자동 생성하는 CASE 툴은 종종 쓰였다. UML 모델링 도구에 집중하면 대표 주자는 역시 Rational Rose다. 우리나라만 놓고 보면, 90년대 후반 혁신적인 툴로 Rose가 등장했다. Rational은 2003년 IBM에 인수되기 전까지 혁신적인 소프트웨어 공학 도구를 시장에 출시했다. 어디 툴 뿐인가? 여전히 우리나라 주류 방법론의 골격을 이루는 방법론인 RUP 그리고 UML도 그들이 만든 결과물이다. 내가 Rose를 처음 접한 때가 2000년 정도였나? 이미 그때도 UML 모델에서 Java/C/C++ 정도의 코드는 생성이 가능했다. 본격 코드 개발 환경과 통합하는 XDE도 있었다. Rose에서도
Script 기반의 SDK를 내장해서 제공하기도 했다. 기능의 존재만 놓고 보면, 10년 전에도 실제 프로젝트에도 EA가 제공하는 기능이 쓰였다.
다른 점이라면 수년이 지난 EA의 최신 버전이 편의성 면에서 훌륭하다는 점이다. 게다가 가격은 Rose와 비교할 수 없이 싸다. 그러니 아래와 같은 댓글은 적정한 평이라 할 수 있다. Rose는 2000년 이후 별 발전이 없었다. 그나마도 2003 버전이 마지막 메이저 버전이다.
로즈는 써 봤는데..
뭐랄까 좀 ‘엄’ 하다고 해야 하나요.. 좀 융통성도 없는 것 같고… 근데 EA는 경험상 봤을때 굉장이 유연 하다고 생각합니다. 플러그인도 상당 하고요…
굳이 꼬치꼬치 따진다면, EA는 Rose와 비교하기 보단 RSA(
IBM Rational Software Architect)와 비교해야 적절하다. EA는 비교적 최근에 나온 툴이니 기능성에서 비교하긴 무리가 있다. Rose에서 코드 생성 기능을 그대로 쓰기는 힘들다. '엄하다'는 표현이 경험에서 비롯되었다 추측할 수 있는데, 예전에 이런 일이 있었다.
Java 코드를 UML 모델로 변환하려고 리버스 명령을 실행시키고 멍하니 로그를 쳐다보지 않으려고 커피를 마시고 왔다. 구둣점이나 주석의 특수 문자 탓에 실패하면, 다시 처음부터 해야 해서 리버스 품질은 매우 낮았다. 코드 생성도 비슷하다. 타입 지정을 위한 클래스가 모두 모델에 로딩시켜야 코드 생성이 가능해서 무척 번거롭다. 그래서 투게더가 좋다고 주장하는 사람이 있었는데, 그렇지는 않다. 투게더는 Rose + XDE에 해당한다.
XDE는 모델과 코드 동기화를 보장하는 도구였는데, 비주얼 스투디오나 WSAD와 함께 쓸 수 있었다. IBM에 합병한 후
IBM Rational Software Architect 나
IBM Rational Software Modeler 로 대치되었다.
나에게 UML 모델링 도구를 고르라면 단연 EA를 선택할 것이다. 그 이유는 가격에 비해 성능이 좋기 때문이다. 경쟁 도구가 몇 천 만원을 호가할 때 EA는 10만원 내외였다. 지금을 가격이 얼마나 하는지 모르지만, 가격은 타사에서 따라올 수가 없다.
저자는 큰 고민 없이 투게더를 추천했는데, 아마 투게더를 많이 써보진 않은 듯 하다.
여러분이 Java 개발자이며 Java만 하신다면 CodeGear의 JBuilder나 Together를 사용하길 권해드립니다. 강력한 역공학을 지원하기 때문인데요.
아래에 인용한 댓글의 작성자 의도는 무엇일까? 얼핏 보아도 실무 흐름을 잘 아는 분인 듯하다.
투게더가 언제적 투게더인데 이걸 쓰는 게 좋을 거라고 권장하는 것도 좀 의문입니다. 지금 어느 현장에서 투게더 깔고 돌려서설계합니까? 그리고 투게더로 인해 생산성이 올라간다는 말은 19세기 벤더 광고용 문구에 지나지 않는다는 점이 증명된지 오래인데…
내가 실전에서 투게더를 써본 경험은 두 번이다.
2003년 봄이던가? 모통신사에서 파일럿 프로젝트를 할 때였다. JCP Initiative의 Reference Implementation를 분석하는 일을 맡았는데, 하나의 요청이 대해 수 십 ~ 수 백 개의 메소드 호출로 구현되어서 파일을 따라 가면서 보는게 죽을 맛이었다. 당시에 이클립스가 있었다면 좋았을텐데... 자바에선 비주얼 스투디오같은 변변한 툴이 없었다. 그래서 역공학을 활용했다. XDE는 너무 무거워서 투게더를 썼다. 당시 최고 사양의 IBM ThinkPad에 RAM 최대로 끼워서 쓰는 경우, 밥 먹고 오면 아주 복잡한 메소드 하나의 후속 호출 관계를 나타내는 시퀀스 다이어그램 하나 정도는 그려줬다. 그 용도가 전부였다. 당시 또 다른 통신사 프로젝트에서 닷넷 기반에 투게더를 썼다가 모델이 너무 커져서 로딩을 못하는 해프닝이 벌어졌다.
왜 이런 일이 발생할까? 모델과 코드를 동기화 하려면 고작 인터페이스 수준이라 할 지라도 라이브러리/프레임워크 정보가 필요하다. 파일 형식이 차이가 있긴 하지만, 쉽게 생각하면 시스템이 사용하는 모든 jar나 dll을 올려야 한다고 생각하면 비슷하다. 투게더로 대형 사이트를 해본 경험이 없어서 겪은 어처구니 없는 시행착오였다. 어떻게 해결했을까? 전해들은 이야기로는 결국 툴 판매 업체에서 가내 수공업(?)으로 모델을 보고 나누어서 새로 그려서 해결해주었다고 한다. 추측컨데 그 후 누구도 감히 모델에 손을 데려고 하지 않았을 것이다.
기존에 구매한 터라 투게더를 쓰시는 분은 있겠지만, 최근에 투게더를 구매해서 쓰는 분은 아마 없을 듯하다.
저자가 소개한 EA나 EA의 코드 생성 기능은 훌륭하다. 특히 EA의 가격을 생각해보면 감탄하지 않을 수 없다. 이왕 정리하는 김에 모델링 도구에 대한 기존 글 링크도 달아 보았다.
- 종종 올린 EA 관련 팁
- RSA 관련 글
역공학에 대해서도 주의해서 활용하시라는 의미로 지난 글을 올려본다.
- 역공학 무용론(?)