운영 서버 마이그레이션 이후 발생한 OAuth2 로그인 오류
·
카테고리 없음
1. 문제 상황운영 서버를 ECS 기반으로 마이그레이션한 이후, OAuth2 로그인 과정에서 간헐적으로 다음 오류가 발생했다.authorization_request_not_found스테이징 환경에서는 재현되지 않았고, OAuth2 관련 설정값 및 환경변수도 모두 정상적으로 구성되어 있었다.코드 변경 없이 운영에서만 발생하는 문제였기 때문에, 프레임워크 동작 또는 인프라 환경 차이에서 원인을 찾는 방향으로 분석을 진행했다.2. Spring Security OAuth2 로그인 동작 방식 확인오류 메시지가 Spring Security 내부에서 발생한 것이었기 때문에,정확히 어떤 상황에서 해당 오류가 발생하는지를 파악하기 위해 AI와 대화를 통해 내부 동작 흐름을 단계별로 정리했다.추가로 로컬 IDE에서 디버깅..
Wi-Fi에서는 정상인데 모바일 데이터에서만 API가 실패한 사례
·
카테고리 없음
배경 및 상황운영 서버 마이그레이션 작업 직후Wi-Fi로 접속 시 화면 데이터 정상 노출동일 화면을 모바일 데이터(LTE/5G)로 호출하면 데이터 미노출 또는 오류일부 사용자는 Wi-Fi/모바일 데이터 모두 정상일부 사용자는 Wi-Fi에서만 정상, 모바일 데이터에서는 항상 실패개발/스테이징 환경에서는 같은 문제가 재현되지 않음최근에 대규모 인프라 구조 변경이나 네트워크 정책 변경은 없음즉, 특정 네트워크 환경(모바일 데이터)에서만 발생하는 API 장애였고,증상이 사용자별·환경별로 섞여 있어 초기 파악이 어려운 상태였다. 증상 정리 문제 도메인을 예시로 api.myservice.com이라고 하면, 증상은 다음과 같았다.Wi-Fi모바일 데이터(LTE/5G)API 응답 정상 일부 계정/단말에서 API 실패서버..
ThreadLocal 대신 ScopedValue?
·
JVM
ScopedValue — 등장 배경부터 철학까지ScopedValue란 무엇인가 JDK 공식 문서에서는 ScopedValue를 다음과 같이 정의합니다. “A scoped value is a container object that allows a data value to be safely and efficiently shared by a method with its direct and indirect callees within the same thread, and with child threads, without resorting to method parameters.”— JEP 506, OpenJDK 즉, ScopedValue는 한 메서드가 자신이 호출하는 모든 하위 메서드들과 자식 스레드에게 데이터를 안..
Spring 요청이 어떻게 ThreadLocal에 바인딩 될까?
·
Spring
Spring의 RequestContextHolder와 ThreadLocal 기반 요청 바인딩 Spring MVC는 요청 단위로 다양한 데이터를 처리한다. 이 과정에서 “현재 요청의 컨텍스트 정보”를 스레드 내 어디서든 접근할 수 있도록 하는 메커니즘이 필요하다. 이를 가능하게 하는 핵심 구조가 ThreadLocal 기반 요청 바인딩이며, 중심 역할을 하는 클래스가 RequestContextHolder다.아래에서는 요청이 들어와서 ThreadLocal에 바인딩되고, 다시 해제되는 전체 흐름과내부 동작 원리, 그리고 관련 주의사항을 정리한다. 1. 주요 개념 요약용어역할 / 의미스레드 풀WAS(Tomcat, Jetty 등)가 다중 요청 처리를 위해 미리 생성해둔 스레드 집합ThreadLocal각 스레드마다..
RestDocs DSL로 API 문서화를 더 간결하게
·
개발이야기
RestDocs DSL 사내 라이브러리 설계하고 구현하기 이 글은 RestDocs, RestDocs-Api-Spec 기술에 대해서 설명이 없습니다.이전 작성한 글을 보시고 오면 더 도움이 될 것 같습니다! 기존 RestDocs API Spec 문서화 작업에서 개발자들이 겪던 문제들반복적인 보일러플레이트 코드로 인한 개발 생산성 저하가독성이 떨어지는 문서으로 인한 API 문서 수정의 불편함 설계 목표기존 개발 패턴 유지: 팀원들이 익숙한 MockMvc 기반 테스트 작성 방식을 그대로 활용DSL을 통한 선언적 문서화: 가독성 있으며 유지보수가 용이한 문서 작성RestDocs API Spec 호환: 기존 라이브러리와 원활한 통합사내 표준화: 공통 모듈로 분리하여 프로젝트 간 재사용 가능확장 함수 기반 설계 ..
헥사고날 아키텍처와 레이어드 아키텍처는 정말 본질적으로 다른 걸까
·
개발이야기
최근에 제가 고민했던 부분의 다양한 사람들의 의견이 궁금해서 글을 작성합니다.계층형 아키텍처와 헥사고날 아키텍처는 정말 본질적으로 다른 걸까?예를 들어, 계층형 아키텍처에서도 인터페이스를 통해 상위 계층이 하위 계층을 의존하도록 설계하면 DIP(Dependency Inversion Principle)를 지킬 수 있습니다. 그렇게 하면 헥사고날 아키텍처가 지향하는 의존성 역전과 사실상 동일한 구조가 만들어지지 않을까요?그렇다면 DIP를 잘 구현한 계층형 아키텍처는 헥사고날 아키텍처와 다르지 않다고도 볼 수 있을 것 같습니다. 이 생각대로라면, 우리가 그동안 “계층형 아키텍처”라고 부르며 개발하던 많은 구조들이 사실상 헥사고날 아키텍처였던 것 아닌가? 라는 생각도 들었습니다.만약 두 아키텍처가 여전히 다르다..