넥사크로 개발 후기 (넥사는 왜 사람들을 화나게 할까?)
서론
나는 지금 대기업 SI 회사에 근무 중이다. 이번 프로젝트에서 악명 높은 `nexacro` 를 처음 접했고, 느낀 점을 간단히 정리하며
`넥사크로가 사람들을 화나게 하는 이유` + `넥사크로 개발 꿀팁`을 공유하려고 한다.
이번에 투입된 프로젝트에서 그 악명 높은 `nexacro` 를 만나게 되었다.
내 동기들 중에는 "넥사크로 하기 싫어서" 퇴사한 애들이 몇 명 있었다. 이런 취업난에 어떻게 생퇴사를?! 싶었지만 내가 직접 넥사크로를 겪어보니 정말 이해됐다. ㅋㅋㅋㅋ 나야 몇 개월만 버티면 넥사에서 탈출할 수 있지만, 넥사크로로 유지보수하는 애들은 정말 힘들었겠구나 싶었다.
넥사크로가 사람들을 화나게 하는 이유!! 😇
1. 버그가 너무 많다.
넥사크로를 검색하면 연관 검색어에 욕이 정말 많이 나온다. 왜일까? 일단 툴 자체에 버그가 너무 많다. 매우 불안정해서 툭하면 강제종료. 껐다 키면 빌드하는 데도 시간이 상당해서 짜증난다.
2. 보일러 플레이트 코드 지옥
불필요한 코드가 너무 많다. 예를 들면 넥사크로에는 DataSet(데이터셋) 이라는 테이블 형식의 데이터를 관리하는 오브젝트가 있다. 거의 99프로 쓰이는 필수 기본 개념이다. 그런데 이걸 쓰려면 사전에 무조건 addRow 라고 row 를 추가해줘야 한다. 모든 스크립트에 저 코드는 필수로 들어간다. 애초에 데이터셋을 쓴다는건 데이터를 보여주기 위함인데 도대체 왜 이런 불필요한 코드를 적어야 하는지 의문이다.
2. 독자적 통신 방식 + 디버깅 불지옥
일단 RESTful API 가 아니라 `transaction` 이라는 넥사크로만의 방식을 가지고 서버와 통신한다. 에러가 나도 디버깅 하기가 너무 힘들었다.
그리고 그리드의 상태를 알려주는 `rowType` 이라는 것이 존재한다. rowType 은 데이터의 insert, update, delete 를 감지해주는 역할을 한다. 하지만 정말 기준을 모르겠는게... 그리드에 있는 데이터를 내가 수정해도 반영이 안되서 시간을 잡아먹었던 일이 많았다. 이유는 아직도 못찾았다. 검색해도 안나옴;
3. 사이드 이펙트 폭탄
프론트와 백엔드 결합도가 너무 높아서, 뭐 하나 수정하면 예상치 못한 오류가 계속 터진다.
고객 요구사항 변경은 당연한 일인데, 넥사크로는 그게 너무 치명적으로 작용한다. 넥사크로로 개발을 하다보니 수정사항에 굉장히 예민해졌다. 뭐 하나 고치면 부작용이 심해서 스트레스를 많이 받았다.
3. 검색해도 안나온다.
공식 문서, 홈페이지, F1 도움말…
진짜 필요한 정보는 어디에도 없음.
넥사크로 함수나 이벤트, 자동완성되는 키워드 검색해도 안 나올 때가 많다.
4. 코더 노가다
말 그대로. 반복, 수작업, 비효율의 끝
넥사크로를 처음 하는 사람들을 위한 꿀팁 🛠️
1. ChatGPT + 공식 문서 PDF = 생존 키트
>> 제일 중요 <<
정말 챗 지피티 아니었으면 내가 이 난관을 어떻게 헤쳐나갔을까? 싶을 정도로 도움을 많이 받았다. 무조건 pdf 다 가져다가 학습시켜서 질문해야한다. 이것만 해도 문제의 절반 이상은 해결할 수 있다!!
2. 함수의 상위 찾기 = 함수의 선언부 찾기 = 공통 함수 찾기
`alt + g`
단축키 쓰면 된다. 이마저도 넥사크로 17이상부터 지원. 그 이하 버전은 없는 것으로 안다. (말이 되나...)
3. 검색은 다른 툴 사용하기
넥사크로 툴이 검색이 잘 되지 않고 불편하다. `Everything` 툴 or 이클립스에서 `폴더 우클릭 + Ctrl + H` 활용 추천.
4. 행(row) 단위 컨트롤이 불가능
이거 되는지 안되는지 몰라서 한참 찾아다녔는데 안된다. 컬럼 하나하나마다 expr 수식을 넣어주어야 한다.
5. 그리드 내에 있는 버튼은 클릭 이벤트를 별도로 구현해야 한다.
예를 들어, 10번째 컬럼에 버튼을 넣었다면 그리드에 on click 이벤트를 `e.col == 10` 이런 컬럼 번호로 줘야한다.
`if(e.row != null && e.col == 10) {}` 이런식으로...........흠... 만약 내가 중간에 컬럼 하나 더 삽입한다면 숫자를 e.col == 11로 바꿔줘야 하는데, 이걸 캐치하지 못한다면 바로 사이드 이펙트가 되는 것이다. ㅋㅋ
그리고 특정 조건에 버튼을 보이고, 보이지 않고를 displaytype 에다가 expr 표현식을 넣는다고 버튼의 이벤트까지 컨트롤 되는 것이 아니다!! 클릭 이벤트는 살아있다. 그냥 단순히 보이고 안보이고만 해주기 때문에 버튼이 안보였을 때 버튼이 안눌리게 하고 싶다면? 추가로 if (e.col == "조건") return; 이 부분을 스크립트에 작성 해주어야 한다. 에휴
6. db 에서 쿼리 조회 시 0건인 경우 그리드에 표시가 안됨
무조건 addRow 조건 넣어줘야 한다.
7. 개발할 때는 브라우저 대신 NRE(nexacro runtime environment) 추천
결론
진짜 개발하다가 이게 안된다고???? 싶은 것들 엄청 많았는데 당장 생각나는 건 이 정도다.
여기서 가장 중요한건 무조건 >>>>> 챗 gpt 에게 넥사크로 문서 학습시키기 <<<<<
생각보다 안되는게 많고 정보도 많이 없으니까 모르면 시간 끌지말고 gpt 한테 빠릿빠릿하게 물어보는거 추천한다!!
진짜 이번 프로젝트 들어와서 코드몽키가 된 기분을 끊임없이 느껴서 속상하기도 하고 화도 많이 나고 그랬다. 😥
혹시나 넥사크로를 할 수 있는 기회가 온다면? 궁금해서 검색해서 찾아왔다면? 웬만하면 피하는걸 추천한다. 진심으로