경진대회 예선 플랫폼
공공 경진대회 예선의 시간·트랙·1회 제출 규칙을 서버에서 강제하고, 코드 실행은 기존 제품에 맡기되 대회용 자원은 분리했습니다.
Spring Boot, Spring Security, JPA, Mustache, MySQL, CodeMirror
SFTP 파일 연계 흐름을 유지하면서 두 API 조회 경로와 SAP RFC 중계를 추가했습니다.
Java 17, Spring Boot, SFTP, SAP JCo, Spring Cloud OpenFeign, OAuth 2.0
금융기관 인증·조회 백엔드를 신규 구축했습니다. 기관별 요청·응답 차이를 Java 구현과 Adapter·Signer 경계에 반영하고, 실제 금융기관에서 로그인·조회 동작을 확인했습니다.
Java 21, Spring Boot, BouncyCastle, PKCS#7/CMS, PKCS#8, JDK HttpClient, Playwright
고객 인증서를 고객사 밖으로 내보낼 수 없고 설치 산출물이 고객 손에 남는 제약 아래, 개인키 연산 분리와 native 바이너리의 서로 다른 경계를 설계·검증했습니다.
Java 21, Gradle Multi-Module, GraalVM Native Image, BouncyCastle, mTLS WebSocket
신규 대량 금융 전송에서 상태 선점·중복 이력·불확실 응답 처리 규칙을 팀에서 합의하고, 코드와 회귀 테스트를 구현·검토해 운영 환경에 배포했습니다.
Java, Spring Transaction, MyBatis, JUnit, Mockito
처리 지연 중 동일 거래가 큐에 중복 적재된 사고를 재현하고, 적재와 소비 단계의 상태 검증을 함께 수정했습니다.
Java, SQL, Batch Update, Integration Test
운영에서 발생한 데드락을 재현하고, 원인이 된 인덱스와 갱신 쿼리를 수정했습니다.
InnoDB, SQL, Integration Test
DB에서 제출 횟수를 조회·증가·판정하는 사이 동시 요청이 같은 횟수를 기준으로 통과할 수 있었습니다. 증가와 한도 검사는 팀 단위 Redis Lua 카운터에서 한 번에 실행하도록 묶었습니다.
Redis, Lua, Spring Boot, Spring AOP
ECS Fargate 전환 뒤 CloudWatch 로그만으로 빠르게 보기 어려웠던 응답 시간 추세와 요청 경로를 지표 수집과 호출 추적으로 나눠 관측했습니다.
Spring Actuator, Prometheus, Grafana, Pinpoint
컨트롤러마다 반복되던 역할·이벤트 소속 검사를 어노테이션과 인터셉터로 분리하고, 요청 경계에서 사용자와 경로 리소스를 조합해 검사했습니다.
Spring MVC, Spring Security, HandlerInterceptor
Redis ZSet을 채팅 메시지 캐시로 사용하고, Spring Batch로 PostgreSQL에 이관하는 저장·조회 흐름을 구현했습니다.
Redis ZSet, Spring Batch, JDBC batchUpdate, PostgreSQL
WebSocket에서는 기본 필터가 동작하지 않아 프레임 단계에서 인가를 검사했습니다.
WebSocket, STOMP, JWT, ChannelInterceptor
원본을 그대로 쓰던 미리보기와 순차 업로드를 S3 event Lambda 변환과 병렬 업로드로 바꾸고 테스트에서 측정했습니다.
AWS Lambda, S3 event, CompletableFuture
Google·Kakao·Naver 로그인에 반복되던 실행 순서는 template으로 묶고, endpoint와 응답 검증은 provider별 callback으로 분리했습니다.
Java, Spring Boot, OpenFeign