TECHNICAL NOTES

실제 문제에서 출발한 기술 기록 2페이지

가설을 세우고 로그·코드·SQL을 확인해 원인을 좁힌 과정을 기록합니다. 외부 서비스 분석은 공개된 기능과 제약을 근거로 삼고, 확인한 사실과 해석을 구분합니다.

TECHNICAL NOTES

전체 기술 기록

업무 사례와 서비스 분석에서 확인한 사실은 해석과 구분했습니다. 내부 식별자는 기술적 의미가 남도록 일반화했고, 프로젝트 진행 시기 또는 분석 시점도 함께 표시했습니다. 글은 작성일이 최신인 순서로 정렬됩니다. RSS로 구독하기

전체 · 28개 글 · 작성일 최신순 · 2/3페이지

외부 API·시스템 연계프로젝트 2026.04 — 2026.05 · 7분조회 집계 중

실패했는데 HTTP 200을 반환하면 안 되는 이유

Well 좌표 충돌로 서버 처리가 실패했는데도 HTTP 200과 빈 본문이 반환됐습니다. 예외가 응답으로 바뀌는 경로를 추적해 비2xx 상태와 `errorCode`·`errorMessage`를 담은 오류 응답으로 바로잡은 사례입니다.

REST APIHTTP StatusError ContractSpring Boot
트랜잭션·데이터 정합성프로젝트 2023.04 · 6분조회 집계 중

JOIN으로 늘어난 행마다 Report ID가 증가한 문제

JOIN으로 성적서 대상 행이 늘어나자 Java 반복문이 행마다 번호를 증가시켜 Report ID가 건너뛰었습니다. 발급 대상과 연결 주문을 별도 쿼리로 조회해 해결한 사례입니다.

Oracle SQLJoin CardinalityID GenerationJava
레거시 현대화프로젝트 2025.03 — 2025.08 · 8분조회 집계 중

같은 DTO에서 API마다 다른 필수값을 검증하기

다운로드 DTO 하나를 여러 API에서 재사용하면서, 각 API에 필요한 필드만 검사하도록 Bean Validation 그룹과 AOP를 조합했습니다.

Spring MVCBean ValidationSpring AOPLegacy Modernization
레거시 현대화프로젝트 2025.03 — 2025.08 · 5분조회 집계 중

레거시 URL의 언어 규칙을 Spring Locale로 연결하기

브라우저 설정이 아니라 URL과 법인 환경으로 언어를 정하던 시스템에서, 기존 호출 규칙을 유지하면서 요청 처리 전에 로케일을 결정했습니다.

Spring MVCMessageSourceLocaleBackward Compatibility
트랜잭션·데이터 정합성프로젝트 2025.03 — 2025.08 · 8분조회 집계 중

DB Link 제거 후 복수 DataSource를 한 트랜잭션으로 관리하기

DB Link 대신 각 DB에 직접 연결하고 매퍼를 분리한 뒤, 조건에 따라 참여하는 데이터소스를 하나의 Spring 트랜잭션 선언으로 관리하도록 Atomikos 기반 JTA를 구성했습니다.

Spring JTAAtomikosMyBatisXA DataSource
외부 API·시스템 연계프로젝트 2025.06 — 2025.11 · 7분조회 집계 중

반응마다 JVM을 종료하면 Connection Pool을 재사용할 수 없습니다

Spring Boot·MyBatis 커넥션 풀·직접 JDBC를 같은 조건에서 구현해 반복 비용을 비교했습니다. 반응마다 JVM이 종료되는 문제를 확인하고 연계를 상시 기동 REST API로 바꿨습니다.

JavaHikariCPREST APIProcess Lifecycle
운영 장애 분석프로젝트 2025.03 — 2025.08 · 7분조회 집계 중

JVM 클래스 로딩 로그로 추적한 Oracle JDBC 드라이버 충돌

JVM 클래스 로딩 로그에서 서버 공용 구형 드라이버가 애플리케이션 드라이버보다 먼저 선택된 사실을 확인했습니다. 다른 애플리케이션의 자체 패키징을 보완한 뒤 공용 의존성을 정리했습니다.

JavaOracle JDBCClassLoaderAbstractMethodError
레거시 현대화프로젝트 2025.03 — 2025.08 · 14분조회 집계 중

축약 파라미터는 유지하고 DTO 필드명은 명확하게 바꾸기

기존 URL과 연계 시스템이 보내는 축약 파라미터는 유지하면서, Spring MVC 확장으로 내부 DTO에는 의미가 드러나는 필드명을 사용했습니다.

Spring MVCHandlerMethodArgumentResolverBackward CompatibilityCustom Annotation
레거시 현대화프로젝트 2025.03.12 — 2025.04.08 · 6분조회 집계 중

연쇄 팝업이 차단되자 iframe과 postMessage로 단계 전환하기

브라우저 정책에 따라 끊기던 다단계 화면을 다이얼로그·iframe·postMessage로 전환했습니다. 기존 팝업 호출도 같은 화면을 사용할 수 있게 유지했습니다.

JavaScriptJSPiframepostMessage
트랜잭션·데이터 정합성프로젝트 2024.10 — 2025.04 · 6분조회 집계 중

Spring Singleton 서비스에 요청 데이터를 멤버 변수로 두면 생기는 일

Spring 서비스의 멤버 변수가 동시 요청 사이에서 주문 데이터를 섞을 수 있었습니다. 요청 데이터를 지역 변수로 옮기고 주문 유형의 공통 동작을 인터페이스로 분리했습니다.

JavaSpringConcurrencyRefactoring
트랜잭션·데이터 정합성프로젝트 2024.09 — 2024.10 · 6분조회 집계 중

재발급 성적서를 덮어쓰지 않고 발행 순번으로 관리하기

공인 성적서의 원본·재발급·폐기 상태를 발행 순번으로 연결했습니다. 진위 확인과 동시 재발급도 같은 상태 규칙으로 처리했습니다.

Data ModelingOracleAudit TrailConcurrency