반응형
  • 두 번째 프로젝트 진행 중 회사측으로부터 갑작스런 인사 발령...

하루 정도의 짧은 인수인계 후 노트북 반출을 위한 로우 포맷...

(해당 부서에서 포맷 하는데 꼬박 하루가 걸릴줄은 상상도 못함...)

 

급작스런 인사 발령에 정신은 없었지만, 속으론 쾌재를 불렀고 남아 있는 다른 동료들의 부러운 시선들을 느낄 수 있었다.

아... 이제 이 힘든 출퇴근 지옥에서 자유다~~~


서브원 G-Lab 개선_Value added 프로젝트

 

본사에서 경력이 7년차인 과장님 한 분과 같이 투입되어 설레는 마음으로 다음 프로젝트 장소로 출근하였다.

광화문에 있는 매우 깔끔한 빌딩... 삼성 기흥과는 사뭇다른 활기찬 분위기~

한가지 아쉬운 것은 건물 지하에 롯데카드 구내식당이 있어 그곳을 애용하였는데 가격은 저렴하였으나 음식의 맛은...

 

 

기존 개선 프로젝트인 1차와 2차가 끝나고 기존에 있던 동료들과 3차 개선 작업에 투입되었다.

여기선 궁금한 것은 왜 나인가 이다~ (우연찮게 회식자리에서 알게된 비하인드 스토리)

 

내가 갑자기 투입된 이유는 뭘까?
회사에서 추천한 인력 중 가장 나이가 많아서라고 한다.
헉...

1차와 2차를 진행하였던 동료 중 1명의 갑작스런 퇴사로 인해 추가 인력 협의시 최종 의사 결정권자(현업 기획팀장)가 나이가 어린 개발자들에 대해 책임감 부재라는 편견으로 인해 내가 peak 된 것이다.

(이 이야기를 듣는 순간 내 나이가 너무 고마웠다~ㅋ)

 

이런 우여곡절 끝에 세 번째 프로젝트를 진행하게 되었다.

 

https://glab.serveone.co.kr/ssp/main/index-rnd.do

 

서브원 스토어 - 글로벌 산업재 유통 전문Mall

상품 전문가들이 산업자재 및 기업 소모품을 경쟁력있는 가격으로 추천하는 온라인 전문Mall, 서브원 스토어

store.serveone.co.kr

 

참고로, 서브원이라는 회사는 LG그룹의 MRO 전문 계열사였지만, 공정위의 제재로 인해 이제는 별도의 법인으로 분사된 MRO 전문 기업이다.

 

여기서 MRO란,

Maintenance(유지), Repair(보수) and Operation(운영)의 약자로, 기업에서 제품 생산에 필수적인 직접 원자재를 제외한 소모성 자재와 간접자재를 의미하며 기업소모성자재 또는 기업운영자재라고도 한다. 공구, 모터, 베어링, 복사용지, 문구류, 실험실에서 쓰이는 비커 등도 이에 속한다.

 

서브원은 이런 류의 자재를 판매하는 회사이다.

현재 2023년 기준 매출 3조 1천억원 중 온라인 매출 보다는 오프라인 매출의 비중이 훨씬 높지만 추후 온라인으로의 매출 확대를 위해 투자를 많이 하고 있으며, 글로벌 온라인서비스를 확장하기 위한 준비 기간인 것 같다.

 


프로젝트의 간단한 stack은 아래와 같다.

  • Front - JSP
  • Back - Spring Boot
  • Admin (Back-Office) - Spring Boot + Nexacro
  • DB - Oracle
  • ETC - Redis, MyBatis 등

협업툴은 Teams, Jira, Gitlab을 사용하였고 배포툴은 Jenkins, IDE는 인텔리제이와 디비버를 사용하였다.

VDI환경은 Azure를 사용하였다.

 

3차 개선 작업은 메뉴중 preset, 렌탈전문관, 장비전문관 신규 개발이었으며, 나에게 배정된 작업은 장비전문관 신규 개발이었다. 상품은 G-lab 상품 중 전시 B타입 (가격이 정해져 있지 않고 order made와 비슷한 개념으로 별도의 견적을 받아 주문 하는 상품) 만 해당하며 각각의 장비군과 카테코리, 대표 상품, 노출 순위 등을 설정할 수 있는 BO 화면 개발과 그에 따른 DB CRUD 개발(Back), Front 화면 및 Back 개발이다. 또한 Batch를 통한 대용량 엑셀파일 다운로드 기능 개발이다.

 

일단, Nexacro라는 매우 생소한 프레임워크를 접하였고 첫 1주일 정도는 넥사크로를 학습하는데 시간을 보냈다.

넥사크로는 아주 간단히 말하면 화면에 그리는 각각의 컴포넌트(셀렉트박스, 그리드, 인풋박스 등)등이 Dataset과 연동되어 데이터를 컨트롤한고 Back의 컨트롤러와 정해진 규격에 맞게 파라미터로 데이터 송수신을 쉽게 할 수 있게 만들어진 프레임워크이다. 또한, UI적으로 예전 Visual Basic과 같이 화면상에 드래그앤 드랍으로 대부분의 컴포넌트를 그릴 수 있다.

 

JSP에 비하면 매우 생소한 방식이긴 하지만 2,000년도 초반에 Visual Basic을 독한한 나로서는 아주 많이 생소하진 않았다. 그려진 컴포넌트에 각각의 이벤트핸들러를 지정해주고 그에 따른 로직만 구현해주면 UI동작은 아주 쉽게 구현할 수 있었다. 그 다음 dataset에 연결만 시켜주고 각각의 dataset에 저장된 값들을 컨트롤러에 전달하여 Back단에서 비지니스로직등을 구현하고 DB에 갔다오면 되는 것이다.

 

물론, 지금 내가 말한 것 말고도 넥사크로에는 다양한 기능들이 있다. 하지만, 지금 그 모든 기능들을 설명하진 않을 것이다. 관심있는 분들은 아래 링크를 참고 하기 바란다.

 

https://docs.tobesoft.com/getting_started_nexacro_14_ko/4f7b554633997db5

 

넥사크로플랫폼 14 초보자를 위한 자습서 14.0.1.1501.4

 

docs.tobesoft.com

 

인터넷에 넥사크로에 관한 다양한 의견들이 있지만, 나는 의외로 편하게 사용하였다.

(남들이 뭐라해도 나는 사용하기 편했으므로 이 프레임워크에 대한 평가는 하지 않겠다.)

 


 

이번 과제 중 가장 어려웠던 기술적인 문제 2개를 언급하고 이 프로젝트에 대한 회고를 마치려고 한다.

 

 

1. 전시B타입 상품 검색(이름, 품번 등으로) Query 작성

 

상품 검색 창은 공통으로 구현된 팝업으로 기존 일반 상품을 검색하는 로직과 UI가 있어 그 팝업을 이용해야 했다. 그래서 전시B타입만을 검색해야하는 부모창에서 해당 검색 팝업을 open 할때 검색팝업 안 dataset에 eqmYn(장비)속성을 추가하여 부모창에서 eqmYn 값을 넘겨주어 분기처리, 전시B타입 상품을 검색하기 위한 컨트롤러를 타게 하였다. 문제는 해당 검색을 하기 위한 Query문이였다. 기존 일반 상품을 검색하는 쿼리는 일반상품 테이블을 바라보고 제조사, 전시타입, 기타 등등의 많은 테이블들이 Join 되어 있었고 나에겐 매우 긴 500줄 정도의 쿼리 문을 이번에 새로 생성된 전시B타입 상품을 바라보게 만들어야 했다. 각 테이블, 필드 등을 모두 파악하는데 3~4시간 걸렸고, 어찌어찌하여 에러가 발생하지 않는 선에서의 쿼리문을 만들었다. 그러나~~~ 산넘어 산이라고... 상품명으로는 검색이 되나 그 외 다른 조건으로 검색이 되지 않고 상품명으로 검색되는 것 조차 조회 시간이 너무 오래 걸리는 것이었다. 몇 시간의 씨름끝에 내가 짠 동적쿼리부분의 If문에 있는 문제점을 발견하여 수정하였고 조회속도와 나머지 오류들도 해결 할 수 있었다. 여기서 내가 느낀점은 동적쿼리 및 SQL문을 다시 처음부터 공부해야 겠다는 것이다. 지금껏 경험해보지 못한 매우 긴 쿼리문이 나오고 Left Join과 Right Join 등 다양한 테이블들이 합쳐지고 function까지 있는 경우의 Query문이 익숙해지기 위해서는 기본기가 중요하다는 것을 새삼느꼈다. 올해 2024년이 끝나기 전까지 [러닝SQL]이라는 책을 꼭 한번 정독하겠노라 다시 한번 다짐한다.

 

 

2. 각각의 장비군 노출 순위 지정 로직

 

각각의 새로 만들어진 장비군들이 노출순서를 정하는데 있어, 요구조건은 노출순위를 타이핑하여 입력할 수도 있고, 입력하지 않을 경우에는 자동으로 노출 순위 지정하는 로직이다.

 

예를 들면,

 

Case 1

  • A군 - 노출순위 1번 입력
  • B군 - 노출순위 2번 입력
  • C군 - 노출순위 5번 입력 -> 자동으로 노출순위 3번으로 변경

Case 2

  • A군 - 노출순위 1번 입력
  • B군 - 노출순위 2번 입력
  • C군 - 노출순위 3번 입력 삭제
  • D군 - 노출순위 4번 입력 -> C군 삭제 시 자동 3번으로 변경
  • E군 - 노출순위 5번 입력 -> C군 삭제 시 자동 4번으로 변경

Case 3

  • A군 - 노출순위 1번 입력
  • B군 - 노출순위 2번 입력
  • C군 - 노출순위 3번 입력 -> C군 자동 4번으로 변경
  • D군 - 노출순위 3번 입력

위에 언급된 Case외에 5~6가지의 Case가 더 있다.

 

위 Case들을 모두 만족하는 로직을 Backend의 service에서 구현하는데 많은 시행착오를 겪었고 3일 정도의 시간이 걸려도 풀리지 않아 같이 투입된 선임자와 같이 고민하여 하루만에 이 로직을 구현하였다.

 

이 로직을 구현하며 느낀점은 2가지인데, 팀플레이(협업)과 알고리즘의 중요성이다.

 

협업은 개발자 뿐만아니라, 어느 분야, 어느 업종에서도 매우 중요한 부분이며 적어도 나는 이 부분에서만큼은 다른 어떤 개발자보다 좋다고 자신한다. 물론 나도 사람인지라, 가끔 커뮤니케이션이 어려운 사람이 있다.(이건 어쩔 수 없는 듯~)

 

나는 2023년 3월부터 9월까지 알고리즘 공부를 꽤나 열심히 했다. 프로그래머스 1일 3~5문제는 반드시 풀었다. 나의 git에도 풀이한 것들이 업로드 하여 일명 잔디심기가 되어 있을 정도...

10월부터는 다른 스터디(방송통신대학교 컴퓨터과학과 학과 공부) 및 Spring, Node, React 등에 우선순위에 밀려 한동안 공부하지 못했다. 블로그를 쓰고 있는 지금도 Angular 및 RXjs 밀려 아직 못하고 있다.

 

문제를 해결하는 절차(알고리즘)는 개발자에게는 숙명과도 같다고 생각한다. 위에 같은 사례를 보아도 알고리즘에 조금만 더 능숙했더라면 더 빨리, 더 효율적인 코드를 짰을 텐데... 많이 아쉽다.

 

이 아쉬움을 토대로 7월 부터는 매일 1문제라도 알고리즘 문제를 푸는 습관을 다시 만들어 보려 한다.

이 블로그를 읽으시는 분들께서 응원해주시면 신나서 2문제 풀지도~~~

 

이로써 나의 세 번째 프로젝트도 끝이 났다.

 

마지막 반전
그러나, 아쉽게도 내가 개발한 장비전문관은 기획 및 수요 부족으로 1달 정도 유지되다가 지금은 주석처리되어 메뉴에서 사라졌다.ㅠㅠ (우리 회사에서 파견된 서브원 운영팀을 통해 소식을 접함)
참 허무하다...

 

다음 포스트는 본사에 복귀하여 본사 자체에서 진행한 프로젝트에 대해 회고 할 예정이다.

반응형

'프로젝트 회고' 카테고리의 다른 글

두 번째 프로젝트에 대한 회고  (1) 2024.06.15
나의 첫 포스팅  (8) 2024.06.01

+ Recent posts