본문 바로가기

전체 글38

Spring OpenFeign의 FeignContext 동작 및 ApplicationContext과의 관계 최근 실무에서 요청 스코프 빈(@Scpoe("request")을 참조해버린 Feign 인터셉터 문제로, 컨텍스트 경계를 이해하고 나서 정리했습니다. 요약Spring Cloud OpenFeign은 서비스마다 독립적인 FeignContext를 만든다.@FeignClient(configuration=...)에 넣은 설정과 빈들은 그 클라이언트 전용으로만 로드된다.전역 @Component로 둔 인터셉터가 RequestScope 빈을 건드리면, 웹 요청 스레드 밖(코루틴 등)에서 Scope 'request' is not active가 터질 수 있다.FeignContex의 로컬 Intercepter를 주입해서 해결한다. 문제상황ApplicationContext (루트)│├─ 일반 빈들 (@Service, @Comp.. 2025. 11. 1.
Kotlin +Spring Boot의 private constructor와 static 생성자를 활용한 객체 유효성 검증 실무에서 도메인 객체를 다루다 보면, 아무 곳에서나 Entity의 생성자를 호출하거나 setter로 상태를 바꾸는 일이너무 자연스럽게 벌어질 수 있습니다.검증되지 않은 상태로 객체가 생성되어 저장됨서비스나 팩토리 등 도메인 외부에서 일일이 유효성 검사를 수행함ex) 도메인 바깥 검증 예시if (request.name.isBlank()) { throw IllegalArgumentException("캠페인 이름은 필수입니다.")}if (request.items.isEmpty()) { throw IllegalArgumentException("아이템 목록이 비어 있습니다.")}val items = itemRepository.findAllByIds(request.itemIds)if (items.any .. 2025. 7. 25.
AWS ECS 태스크 무한 프로비저닝 이슈ECS의 A 클러스터에 (컨테이너 인스턴스 n대, AL 로드밸런서 매핑 돼있음)에서비스 몇십개가 n대의 인스턴스에 골고루 배포돼있는데 새로운 서비스를 추가하면서각 서비스의 태스크는 보통 1개가 돌아가는중인데 배포가 일어나면 새로운 도커 컨테이너를 띄우고이미 실행중인 도커 컨테이너는 죽인다. -> 이 과정에서 무중단으로 배포가 일어나야해서 배포시에는 가용영역을 200%로 줬지만..?그런데 이 상황에서 새로운 이미지를 띄울때 리소스 부족 또는 몇시간이 지나야 배포가 새로운 도커 컨테이너가 배포됐다. 해결과정일단 리소스 부족이라고 하니 컨테이너 인스턴스 n대 전부 메모리 가용영역, CPU 등을 체크해봤다.근데 의심가는 부분이 있었는데 딱 하나의 인스턴스가 가용 메모리가 거의 0.몇기가 였고 해당 인스턴스에.. 2025. 2. 20.
ElasticSearch 인덱스 매핑 기록과 한국어 형태소 Nori 특징(?) 29CM 기술블로그 검색 신규 검색 서비스 전환기안녕하세요. 29CM 검색스쿼드 이하윤입니다. 검색스쿼드는 29CM 서비스의 검색플랫폼을 개발하여 사용자가 원하는 결과를 안정적으로 제공하기 위해 최선을 다하고 있습니다. 사용자에게 양질의medium.com다양한 카테고리의 상품을 다루는 서비스인 만큼 검색도 잘 풀어냈을 것 같아 찾아봤는데, 아니나 다를까 원하는 정보가 있었습니다. 위 블로그를 많이 참고했습니다. 일단 저는 ElasticSearch Cloud를 활용했습니다. -> https://www.elastic.co/kr/elasticsearch Elasticsearch: 공식 분산형 검색 및 분석 엔진 | ElasticElasticsearch는 속도, 수평적 확장성, 신뢰성 및 용이한 관리를 위해 .. 2025. 2. 15.