CJ 대한 통운 에서의 프로젝트
이번 대한 통운 에서의 업무는 기존 운영되고 있는 Q-bridge라는 글로벌 포워딩 시스템의 오류들을 개선하고 추가 개발을 하기 위해 투입되었다.
이번 포스트에서는 내가 어떤 업무에 기여했으며 어떤 기술들을 사용해 봤는지를 기술할 예정이며 자세한 기술적인 포스팅은 따로 카테고리에 정리할 예정이다.
1. Q-Brige History
Q-bridge 란 대한통운의 해상, 해운, 항공등 운송업무에 관한 전반적인 모든 관리를 하기 위해 만들어진 시스템이며 오래된 시스템이다 보니 오류도 많고 추가 개발 건도 많은 시스템이었다.
❗TMI❗ : 해당 시스템 초기에 만들어진 년도는 2008년도 이며 계속해서 페이지 추가등 커스텀이 지속적으로 들어갔었다… 그리고 인터뷰때는 Spring으로 만들어져 있었다해서 갔는데 아니더라…😅낚였다…😂
2. 사용 기술 스택
Framework는 Apache Struts로 개발이 되었으며 ibsheet로 화면구성이 이루어 져있었다.
상태관리는 SVN 으로 진행 하였고 개발 툴은 eclipse 를 사용하였다.
1️⃣ Apache Struts
Framework는 Apache Struts로 개발이 되어 있었다 나는 해당 프레임 워크는 사용해 본적이 없었고 공식 문서등 여러 자료들을 보며 어느정도 숙달이 필요했다.
스트러츠에 대한 자료는 공식문서 또는 해당 👉블로그에서 참고하였다.
2️⃣ IBSheet
IBSheet는 웹 환경에서 데이터를 관리하고 모니터링하기 위한 그리드 컴포넌트로서 C/S 환경에서 제공하는 풍부한 사용자 인터페이스를 지원할 수 있고, 대용량 데이터의 효율적인 처리와 스크립트 언어와의 호환성 을 제공하는 솔루션이다.
3. 참여 부분
a. 성능 개선
💥ibsheet 설계 개선
오래된 시스템이다 보니 대체적으로 스파게티 코드들이 많았고 같은 기능을 하는 함수들을 여러 번 출력하는 경우도 많았다. 내가 개선했던 부분은 ibsheet의 함수들이 뒤엉켜있어 오류 가있었던 부분들을 개선하였다.
b. 대용량 Excel Download 기능 개발
💥Excel Download 개발
엑셀을 다운로드하는 기능이 대용량 처리가 불가능하여 개선을 하였다.
기존에 ibsheet의 DirectDown2 Excel 해당 함수를 사용해서 서버에서 만들어진 데이터를 jsp에 받아 다운로드하였고 테이블의 칼럼과 건수가 많다 보니 만건만 넘어도 out of memory error 이 발생하였다.
jsp에 데이터 로그 찍는 부분 때문에 그런 줄 알고 삭제 후 다시 해봤지만 역시나 똑같았다..
결국 다운로드 기능을 새로 만들어야겠다는 생각을 하였고 많이들 사용하는 라이브러리인 poi를 사용하여 개발에 착수했다.
XSSF는 파일을 다운로드 시 메모리에 파일 데이터를 쌓아두었다가 다운로드하는 방식이면, SXSSF는 지정한 건수만큼 엑셀 데이터를 생성해 중간중간 디스크에 Flush 하고 다시 반복하여 메모리를 적게 사용하고 있다. (대충 내가 번역한 바로는 그렇다..)
SXSSFWorkbook 클래스를 사용하여 구현을 하였고 결과적으로 5만 건까지도 무리 없이 가능했다. (엑셀 버전에 따라 생성 가능한 max건수가 다르다)
c. 자동 승인 check 기능 추가
💥사용자의 work flow check 자동화
뭔가 말이 대단해 보이지만 단순하게 사용자들이 해야 할 일의 list의 체크를 수기로 하는 게 아닌 해당 이벤트가 발생했을 때 자동으로 list에 체크가 되게끔 기능을 추가했다
사용자의 특정 이벤트들이 발생될 때 해당 list의 이벤트 내용과 enum에 매핑한 코드값들을 가지고 update 시켜줬다.
d. 그외 사용자 요구사항
💥사용자의 요구사항 개선
사용자들의 요구사항을 개선하였다.
😂화면 구성이나 데이터 추가 등등 자잘한 것들이라서 굳이 쓰지 않겠다…
4. 느낀점
사실 struts 프레임워크도 처음 사용해보았고 ibsheet도 처음 접한 거였다 struts의 서블렛 방식으로만 개발이 되어있는 패턴이 뭔가 나에게는 익숙하지 않았고 나름 서블렛 공부도 되었던 거 같다 ibsheet는 솔루션답게 공식문서가 잘 구성되어있어 그리 어렵게 느껴지지는 않았지만 엑셀 다운로드 업로드 같은 기능은 역시 js로는 한계가 있는 거 같다…