핀테크 하이브리드앱에 블록체인을 접목시키는 프로젝트를 참여하게 되었다.
내가 맡은 작업은 크게 3가지로 구분된다.
- 사용자 송금 기능
- 관리자 데이터 조회 및 통계
- 관리자 블럭체인 관련 (지갑 조회, 머니 소각) 웹 서비스 개발
java1.8, mariaDB, myBatis, SVN, accordion을 사용했고, 프로젝트 구조는 MVC 패턴에, 화면은 JSP로 작업했다.
Keep
- 에러 발생 시 해결했던 것들을 기록해 뒀더니 이후 같은 에러가 발생했을 때 빠르게 대처할 수 있었다.
Problem
- 관리자 조회성 화면 개발에서 쿼리 작성할 일이 많았는데 성능을 고려하지 못했던 점이 아쉬웠다. 테이블 간의 관계나 조회 요구사항에 대한 정확한 파악이 부족했던 것 같다.
- 사용자가 요청한 내역을 관리자가 승인해주는 기능 개발 중 관리자 승인시점과 사용자가 확인시점이 눈에 띄게 차이가 나는 이슈가 있었다.
- 화면 설계서와 요구사항 파악에 어려움이 있던 순간이 있었다. 혼자서 너무 많은 시간을 쓰지 않았나 싶은 아쉬움이 있다.
Try
- 먼저 피드백 받은 내용으로는 보통 join을 사용하는 많은 쿼리는 left outer join보단 inner join을 사용하는 편이 더 좋다고 하셨고, 이와 관련해서 카디널리티와 인덱스에 대한 내용도 공부할 수 있었다. 쿼리 성능에 대한 고민을 하게 된 계기가 된 것 같다.
- 관리자 승인시점과 사용자가 확인시점이 눈에 띄게 차이가 나는 이슈는 만료시점에 대한 계산을 자바 Calendar를 사용했었는데 쿼리에서 DATE_ADD 함수를 쓰는 것으로 변경했다.
- 동일한 테이블의 다른 업데이트 쿼리를 리팩터링 하여 DB 통신 횟수를 총 3번 호출에서 2번으로 줄였다. 단건만 처리하는 기능이더라도 성능을 고려한 로직 설계가 중요함을 깨달았다. → DB통신 횟수와 상황별 데이터 처리는 성능에 영향을 끼친다. DB통신은 적을수록 좋고, 대용량의 데이터 처리는 쿼리 상에서 작업하는 것 좋다.
- 추가로 java 날짜,시간 관련 클래스 사용 시 java.util.Date, java.util.Calendar보다 java.time 패키지를 사용하자. Date와 Calendar 클래스는 오래되기도 하고, time 패키지가 api가 간결, 명확하여 계산 처리가 훨씬 용이하다. 불변성과 스레드 안정성 보장, 예외처리도 향상되었다고 한다. 단 자바 8 이상부터 사용가능하다.