이번 글은 프로젝트를 수행하며 기술적 / 업무적으로 배운 부분들 또는 막혔던 부분들을 해결했던 상황들을 기록하여 다음 프로젝트 또는 나의 성장에 도움이 될 수 있겠다고 생각해 이 글을 작성하는 계기가 되었습니다.
* 당연히 회사 관련 소스는 보안상 공개할 수 없으며 코드를 보여주고 싶을 땐 예제 코드를 작성하고 업무 프로세스 관련사항은 다른 일반적인 예시로 대체하겠습니다
요구사항 분석
- 몇개의 데이터를 보내도 무조건 한개의 데이터로만 처리 되던 부분을 요청 데이터 개수에 맞게 처리 될 수 있어야 한다.
- 처리 되는 데이터의 개수에 맞게 이미지 파일 분리 및 병합
- 데이터베이스에도 단건으로만 들어가던 부분을 다건으로 들어가게 변경해주기
- 다건 요청 데이터 중에 빈값으로 들어 오게 되면 제대로 처리 된 다른 데이터에 중복으로 다 추가해주기
요구사항을 충족할 수 있게 설계 및 구현한 방법
구현한 로직을 파라미터로 요청 받을 때 부터 순서대로 데이터 흐름을 간단하게 작성해보며 정리를 해보자.
1. String 타입으로 파라미터 데이터가 들어오면 ";" 세미콜론을 기준으로 데이터의 개수를 분리해주기
--> 반복문(for문)과 자바의 String클래스의 메소드인 subString()을 이용해 구현.
2. 분리한 데이터들을 각각 Dto에 담아 준 후 Dto를 요소로 하는 배열을 생성해 배열에 넣어주기
3. List 배열에 들어간 Dto들을 Map을 이용해 짝을 맞춰 분배해주기
4. Map에 key값에 들어간 데이터별로 이미지 분리 후 합치기
-- > 오라클의 이미지 편집 라이브러리인 JAI를 사용해 구현.
배웠던 부분 / 느꼈던 부분
- 빈값으로 들어오는 데이터들을 Map에 모든 key값에 넣어줬는데 해당 데이터가 순서대로 이미지 분리를 위해 가장 뒤에 위치해야하는데 테스트를 할 때마다 log값이 계속 다르게 찍히는 현상을 발견했다. 해결 --> 무엇이 문제일까 생각을 하다 이것이 자바다라는 책을 공부하다 Map에 순서가 유지되지 않았나? 라는 생각을 하게 되었고 찾아보니 HashMap은 순서대로 저장이 되지 않고 LinkedHashMap으로 구현을 하면 순서대로 저장이 된다는 부분을 다시 리마인드 했다. 이걸 해결하며 분명 책에서 읽고 정리까지 했던 부분인데 아무생각없이 코드를 작성했다는 거에 대해 반성을 했고 역시 실제로 코드를 작성 해보는 것만큼 기억에 오래남는 공부법은 없구나라고 한번 더 느끼게 되었다. Map에 관한 순서 개념은 한동안은 이 사건을 계기로 오래 기억에 남을 거 같아 얻은 게 있구나라는 뿌듯함을 느꼈다.
- 처음에는 요구사항을 본 후 전체적인 흐름을 생각하지 않고 앞에서부터 코드를 짜며 진행했었다. 이런 방식으로 하니 앞에서는 문제가 없다 생각해 짰던 로직들이 뒤의 영향을 주어 다시 갈아 엎어야 하는 상황들을 마주하게 되었다. 이러한 상황을 여러 번 겪으니 시간적으로나 효율적으로나 뭔가 잘못 되었구나라는 생각을 하여 취준생 시절 스터디모임에서 알고 지냈던 6년차 개발자 지인분께 연락을 드려 조언을 구했고 지인분께서 그럼 먼저 데이터 로직의 흐름을 처음부터 끝까지 그림을 그려보라고 말씀하셨다. 그렇게 바로 코드짜는 걸 멈추고 실행해보니 머릿속으로만 생각했던 데이터 흐름들이 더 섬세하게 잡혔고 앞쪽 부분과 뒤쪽 부분의 관련되는 부분들을 한 눈에 볼 수 있어 구현방법을 수정하는데에도 훨씬 빠르고 편하게 할 수 있었다. 정말 이 그림 하나로 프로젝트 처음부터 끝까지 계속 흐름을 까먹지 않고 복기할 수 있었고 내가 구현한 부분들에 대해 설명이 필요할 때도 자신있게 설명할 수 있었다.
'실무 경험' 카테고리의 다른 글
| 사내 홈페이지 도서신청 기능 개선 설명 및 느꼈던 점들(공공 API 사용) (0) | 2023.03.14 |
|---|