사내 비품 관리가 엑셀로 많이 되어있다고 알고 있어, 엑셀 파일의 데이터를 읽어와 한번에 등록하는 기능을 구현했습니다. B2B 서비스를 주제로 진행한 만큼 엑셀 등록 기능은 핵심 기능 중 하나입니다.
기존의 단일 등록에서의 ModelAttribute를 List화 해서 받을 수 있었다면 정말 편했겠지만, 실패 했기 때문에 다른 방법을 모색했습니다.
최종적으로는 SupplyExcelDto의 형태의 객체를 Stringify해서 List화 하여 MultipartFile List와 함께 받았고, Service 단계에서 ObjectMapper를 이용하여 풀어서 쓰는 것으로 해결하였습니다.
복수등록에서는 한번에 많은 비품들을 등록 시도하기 때문에 오류가 어느 부분에서 발생했는지 명시해줘야 했습니다. 기존의 Exception 클래스로는 불가능 했기 때문에 Excel용 subClass를 하나 만들어서 처리 하였습니다.
엑셀에는 사내의 비품이 정리 되어 있고, 그 양은 방대할 가능성이 높습니다. 이것을 하나하나 이미지 파일을 첨부하는 것은 무리라 판단하였고, 이에 NaverShopping Api를 이용하여 모델명에 맞는 이미지를 찾아주는 기능을 만들어 편의성을 제공했습니다.
가끔 이미지 리서치 또한 모델명이 부적절한 경우 Naver에서 제한하기 때문에 오류나는 부분을 명시하기 위해 Excel Error를 적용해 주었습니다.
많은 비품을 한번에 등록하는 과정은 많은 오류가 따르게 됩니다. 원래도 Front에서도 Validation을 진행해야 하지만, 사용성 측면에서도 다 세팅해서 보냈더니 오류가 난다면 허탈할 수 있습니다. 가장 오류가 많이나는 사원 체크를 Excel을 집어넣는 단계에서 해주기 위해서 부서와 사원 리스트의 데이터를 제공하는 Api를 만들었습니다.
기존에 DTO로 Front와 주고 받던 과정과 다르게, key(부서명) : value(사원리스트) 로 제공하기 위해 Map 형식으로 주고받아야 했던 점이 개인적으로 재밌었습니다. 어렵게 풀어나간 것 같고 훨씬 쉬운 방식이 존재할 것 같지만, 자료구조를 생각하며 최대한 for문을 적게 돌게끔 생각해볼 수 있어서 좋았습니다.
현재 코드로는 복수등록을 하기 위해서는 사원들이 이미 회원으로 존재해야 합니다. 아마 복수등록은 회사가 서비스를 구매한 후 초기 세팅으로 진행할텐데, 이것을 고려하지 못했다는 생각이 들었습니다. 더 시간이 존재했다면 나중에 사원들이 회원 가입을 진행했을 때 바로 데이터가 들어갈 수 있도록 예약 기능 같은 것을 만들어 봤을 것 같습니다.
그리고 현재 하나라도 문제가 있다면 전체적인 Rollback이 들어가게 되는데, 이에 대한 Validation 체크를 먼저 해줬으면 어떨까 생각합니다. 하지만 DB 자원 활용에 대한 정확한 지식이 부족하여 Process만 괜히 늘리는 건가 하는 생각도 들어, 많이 부족하다는 생각을 하게 됩니다.