㈜헬로핀테크
약 57,000명의 투자자와 2,000명의 대출자를 직접 연결시켜준 P2P 금융플랫폼으로 누적대출액 2조 5,137억원 달성
2023.03 - Till Now 개발팀 - 사원
정산 리뉴얼 프로젝트
여러 도메인으로 분리돼 있던 정산 비지니스 로직 통합 프로젝트 제안 및 채택
프로젝트 인원 : 4명 | 기간 : 2024.06 ~
[문제]
- 정산 로직의 복잡도가 높아 유지보수와 개발 비용이 과도하게 발생
- 분산환경에서의 Race Condition 발생
[원인]
- 정산 로직이 3개의 서버, 13개의 DB Procedure, 11개의 DB Function으로 분산
[해결 및 역할]
- 정산 비즈니스 로직 통합 프로젝트를 제안하고 API 설계 및 구현을 주도
- 기존 아키텍처와 의존성을 분석하고 점진적 전환 전략을 설계해 서비스 안정성을 확보
- Redisson 기반 분산 락을 ****통해 Race Condition 문제 해결
- 통합 이후 테스트와 최적화를 통해 안정적인 운영 환경을 구축
[성과]
[주요 기술] Spring Boot 2.7.3, Java 11, JPA, Redission, Rest API
백오피스 웹서버 개발, 운영 및 개선
PHP 레거시 백오피스 서버 Java, Spring으로 리뉴얼 하며 기존 기능 개발 및 추가 개발 진행
개발, 운영 인원 : 2~6명 | 기간 : 2023.04 ~
[문제]
- 한 Task 내에 JPA와 MyBatis 혼재로 인해 HikariCP Dead Lock 발생
- DB Replication 복제지연 문제로 일관성 이슈 발생
- 비효율적인 서브쿼리와 인덱스 미활용으로 서버 부하 증가
- 한 로직에서 여러 도메인 로직 혼재로 인한 성능저하 (예: 대출 승인 시 심사결과 저장, 문자 발송, 관리자 알림)
[원인]
[해결 및 역할]
- **HikariCP Dead Lock 트러블 슈팅 및 원인 파악,** JPA로의 일원화를 통해 해결
- Connection pool 분리, 영속성 컨텍스트 Connection 반환 시점 변경을 고려하였으나 Mybatis 코드를 JPA로 변경하고 있던 상태였기에 JPA로의 일원화를 통해 해결.
- 문제가 발생한 로직을 우선적으로 수정, 변경 중에는 Pod 수를 늘려 부하 분산을 통해 DBCP의 Connection 갯수가 모두 점유되지 않도록 조치.
- DB Replication 복제지연 문제 해결
@Transactional
의 readOnly
여부로 구분하여 Proxy, Master를 구분하는 방식과 AbstractRoutingDataSource와 AOP를 통한 DataSource 분리를 고려
readOnly
여부로 구분하는 경우 복제지연 문제가 발생하지 않는 트랜잭션도 Proxy를 보지 않게되어 부하 분산 효과가 줄어들 수 있다 생각해 AbstractRoutingDataSource와 AOP로 DataSource를 분리하여 복제 지연 문제를 해결
- 쿼리 최적화를 통한 API 성능 개선
- 불필요한 서브쿼리 제거 및 Join 사용
- 인덱스 활용 및 멀티컬럼 인덱스 최적화
- 해당 API 뿐 아니라 자주 사용하는 컬럼 Indexing 필요여부 의논 및 도입 결정
- 이벤트 기반 비동기 처리 제안 및 도입으로 성능 최적화 및 관심사 분리
[성과]
- 복제 지연 해결을 통한 사용자 신뢰도 향상
- HikariCP Dead Lock 문제 해결을 통한 서버 안정성 향상
- SQL 튜닝을 통해 주요 API 성능 87.66% 개선 ( ART : 10.295초 → 1.27초 )
- 시스템의 유지보수성 및 성능 향상
[주요 기술] Spring Boot 2.6.7, Spring Security, Java 11, JPA, Mybatis, Thymeleaf