실패했는데 HTTP 200을 반환하면 안 되는 이유
Well 좌표 충돌로 서버 처리가 실패했는데도 HTTP 200과 빈 본문이 반환됐습니다. 예외가 응답으로 바뀌는 경로를 추적해 비2xx 상태와 `errorCode`·`errorMessage`를 담은 오류 응답으로 바로잡은 사례입니다.
TECHNICAL NOTES
가설을 세우고 로그·코드·SQL을 확인해 원인을 좁힌 과정을 기록합니다. 외부 서비스 분석은 공개된 기능과 제약을 근거로 삼고, 확인한 사실과 해석을 구분합니다.
TECHNICAL SERIES
문제 분석부터 전환과 검증까지 이어지는 글을 한데 묶었습니다.
TECHNICAL NOTES
업무 사례와 서비스 분석에서 확인한 사실은 해석과 구분했습니다. 내부 식별자는 기술적 의미가 남도록 일반화했고, 프로젝트 진행 시기 또는 분석 시점도 함께 표시했습니다. 글은 작성일이 최신인 순서로 정렬됩니다. RSS로 구독하기
전체 · 28개 글 · 작성일 최신순 · 2/3페이지
Well 좌표 충돌로 서버 처리가 실패했는데도 HTTP 200과 빈 본문이 반환됐습니다. 예외가 응답으로 바뀌는 경로를 추적해 비2xx 상태와 `errorCode`·`errorMessage`를 담은 오류 응답으로 바로잡은 사례입니다.
JOIN으로 성적서 대상 행이 늘어나자 Java 반복문이 행마다 번호를 증가시켜 Report ID가 건너뛰었습니다. 발급 대상과 연결 주문을 별도 쿼리로 조회해 해결한 사례입니다.
다운로드 DTO 하나를 여러 API에서 재사용하면서, 각 API에 필요한 필드만 검사하도록 Bean Validation 그룹과 AOP를 조합했습니다.
브라우저 설정이 아니라 URL과 법인 환경으로 언어를 정하던 시스템에서, 기존 호출 규칙을 유지하면서 요청 처리 전에 로케일을 결정했습니다.
DB Link 대신 각 DB에 직접 연결하고 매퍼를 분리한 뒤, 조건에 따라 참여하는 데이터소스를 하나의 Spring 트랜잭션 선언으로 관리하도록 Atomikos 기반 JTA를 구성했습니다.
Spring Boot·MyBatis 커넥션 풀·직접 JDBC를 같은 조건에서 구현해 반복 비용을 비교했습니다. 반응마다 JVM이 종료되는 문제를 확인하고 연계를 상시 기동 REST API로 바꿨습니다.
JVM 클래스 로딩 로그에서 서버 공용 구형 드라이버가 애플리케이션 드라이버보다 먼저 선택된 사실을 확인했습니다. 다른 애플리케이션의 자체 패키징을 보완한 뒤 공용 의존성을 정리했습니다.
기존 URL과 연계 시스템이 보내는 축약 파라미터는 유지하면서, Spring MVC 확장으로 내부 DTO에는 의미가 드러나는 필드명을 사용했습니다.
브라우저 정책에 따라 끊기던 다단계 화면을 다이얼로그·iframe·postMessage로 전환했습니다. 기존 팝업 호출도 같은 화면을 사용할 수 있게 유지했습니다.
Spring 서비스의 멤버 변수가 동시 요청 사이에서 주문 데이터를 섞을 수 있었습니다. 요청 데이터를 지역 변수로 옮기고 주문 유형의 공통 동작을 인터페이스로 분리했습니다.
공인 성적서의 원본·재발급·폐기 상태를 발행 순번으로 연결했습니다. 진위 확인과 동시 재발급도 같은 상태 규칙으로 처리했습니다.
CES 결과 ZIP 생성 과정에서 파일 복사 병목을 찾아 Java NIO로 전환했습니다. 같은 558개 파일의 복사 시간을 160,556ms에서 714ms로 줄인 운영 사례입니다.