본문 바로가기
728x90

🍃SpringFrameworks77

[SpringBoot] Thread starvation or clock leap detected (feat. 쓰레드 기아 현상) 트러블슈팅 Spring을 위해 열일하는 우리의 작고 귀여운 EC2가 자주 죽는 이유인 쓰레드 기아 현상이란? 제목에 있는 Thread starvation or clock leap detected 해당 에러가 어떤 에러이며, 왜 발생하는지 또 해당 에러로 인한 문제와 해결 방법에 대해 알아보자. 우선 EC2 서버가 갑자기 다운되는 상황은 자원 부족, 예외 처리 미흡, 서버 설정 문제 등 이 외에도 매우 다양한 원인들로 인해 갑작스럽게 돌연사 해버릴 수 있는 개복치 같은 서버의 사망 원인을 파악하기 위해서는 가장 쉬우면서도 중요한 서버의 로그를 확인해보면 서버의 상태나 죽었다면 죽은 이유를 파악할 수 있다. 서버가 이런 로그를 계속하여 뱉어냈다면 이 글에서 다루는 쓰레드 기아 문제이다. WARN 23318 --- [l.. 2024. 2. 11.
[SpringDataElasticsearch] Spring Data Repository의 기본과 Elasticsearch 세부 사항 Data Repositories Spring Data Repository의 기본과 Elasticsearch 세부 사항 설명. 1. 핵심 개념 (feat. Entity 상태 감지 전략) 2. Repository Interface 정의 Fine-tuning 저장소 정의 Spring Data Module 사용 3. Elasticsearch Repositories 4. Reactive Elasticsearch Repository (반응형) 사용 구성 5. Repository Instances 생성 (Instance & Bean) Java 구성 XML 구성 Filter 사용 6. Query Method 정의 7. Query Methods 쿼리 조회 쿼리 생성 Method 반환 타입 @Query 어노테이션 8. P.. 2023. 12. 16.
[SpringDataElasticsearch] Entity Callbacks. 특정 메서드가 호출되기 전후에 Entity 수정 사항을 적용하는 방법 Entity Callbacks 특정 메서드가 호출되기 전후에 Entity 수정 사항을 적용하는 방법. SpringData 인프라는 특정 메서드가 호출되기 전/후에 엔티티를 수정할 수 있는 훅을 제공하며, 이러한 EnttiyCallback 인스턴스는 Entity를 콜백 형식으로 확인하고 수정하는 편리한 방법을 제공한다. EntityCallback은 동기 및 반응형 API와의 통합 지점을 제공하며 ProcessChain 내에서 실행 순서를 보장하고, 수정된 Entity나 반응형 래퍼 유형을 반환할 수 있다. 엔티티 콜백 구현 (Implementing Entity Callbacks) EntityCallback은 일반적으로 제네릭 타입 인수를 사용하기 때문에 해당 도메인 타입과 직접적인 연관관계를 가진다. In.. 2023. 12. 16.
[SpringDataElasticsearch] Java 객체 JSON 데이터 매핑 방법. Object Mapping Java 객체(DomainEntity)를 Elasticsearch에 저장된 JSON 타입의 데이터에 매핑하고, 또 그 반대로 매핑하는 방법. Meta Model Object Mapping (메타 모델 객체 매핑) 메타모델(Metamodel) 기반 접근 방식은 Elasticsearch와의 데이터 읽기/쓰기를 위해 도메인 유형 정보를 사용한다. 이는 특정 도메인 유형 매핑을 위해 Converter 인스턴스를 등록하는 것을 허용한다. 1. Mapping Annotation Overview (매핑 주석 개요) MappingElasticsearchConverter는 메타데이터를 사용하여 객체를 문서로 매핑한다. 이 메타데이터는 Entity의 속성에서 가져오며, 이를 위해 다양한 주석을 .. 2023. 12. 16.
[SpringDataElasticsearch] Index 생성/삭제, Entity 저장/검색, Query 사용 등 조작 방법. Spring Data Elasticsearch는 여러 인터페이스를 사용하여 Elasticsearch 인덱스에 대해 호출할 수 있는 작업을 정의한다. 인터페이스는 Elasticsearch API 구조로 되어 있으며 인덱스 관리, 도메인 유형에 대한 읽기/쓰기 매핑 지원, 풍부한 쿼리 및 기준 API, 자원 관리 및 예외 번역 등의 기능 사용할 수 있게 해준다. 1. IndexOperations (인덱스 작업) IndexOperations는 인덱스 수준에서 동작하는 작업을 정의하는 인터페이스이다. 주로 인덱스를 생성하거나 삭제하는 등의 관리 작업을 수행한다. IndexOperations indexOps = elasticsearchRestTemplate.indexOps(MyEntity.class); index.. 2023. 12. 16.
[SpringDataElasticsearch] Client 구현을 통한 사용 방법 Elasticsearch 클라이언트를 직접 사용하여 클러스터 작업을 수행할 수 있지만 SpringDataElasticsearch 클라이언트를 사용하면 DataAccess, ObjectMapping, Annotation, QueryDSL, Transaction 등을 이용하여 보다 쉽고 편리하게 Elasticsearch를 사용할 수 있게 도와준다. Imperative Rest Client (명령형 REST 클라이언트) 전통적인 동기식 프로그래밍 방식을 따르며, 요청을 보내고 응답을 기다리는 동안 블로킹되는 방식을 동작한다. Ex> RestTemplate, WebClient 등,, 명령형 (비반응형) 클라이언트를 사용하기 위한 Bean 구성 @Configuration public class MyClientCo.. 2023. 12. 16.
[SpringBoot] Redirect처리 과정 (feat. ClassCastException) SpringMVC를 사용하여 웹 API개발 중 세션이 없는 요청에 대해 로그인 페이지로 Redirect 시키는 서비스 로직을 작성하였는데 화면 이동등에 대한 요청은 문제없이 Redirect 처리 되었지만 데이터 조회와 같은 Api요청에서는 에러가 발생하였다. 우선 원인은 Redirect처리 시 발생한 ClassCastException 때문인데, Spring의 Redirect의 처리 과정에 대해 자세히 알아보자. Spring에서 Redirection은 클라이언트에게 새로운 URL로 이동하라고 알려주는 프로세스를 의미한다. 리다이렉션은 주로 사용자를 다른 페이지로 이동시키거나, 요청을 다른 컨트롤러 또는 URL로 보내는 데 사용된다. Redirect Processing Logic (Debugging) 1. .. 2023. 10. 23.
[SpringBoot] 로그아웃 후 이전 페이지로 이동(뒤로가기) 방지 웹 브라우저에서 로그아웃, 세션 만료 등으로 인해 로그인페이지로 이동됐을 때 뒤로가기 버튼을 눌러 이전 페이지로 돌아가는것을 막는 방법..! 웹 사이트에서는 보통 Session을 이용해 사용자의 로그인 상태를 유지한다. Interceptor를 등록해 session의 유무를 확인하여 로그아웃이나 세션 유지기간의 만료로 인해 세션이 소멸된 경우 로그인 화면으로 강제로 이동(redirect)시킨다. 하지만 강제로 로그인 페이지로 Redirect 시키더라도 웹 브라우저의 뒤로가기 버튼을 누르면 이전 페이지를 볼 수 있다. *Session이 없는 상태에서 주요 페이지를 보는것은 보안 매우 취약할 수 있다. 원인: 웹브라우저에서 페이지를 이동하면 자체적으로 방문기록(History)을 캐시(cache)에 저장하는데 .. 2023. 10. 20.
[JPA] QueryDSL이란? QueryDSL은 JPA를 사용하여 데이터베이스 쿼리를 작성하고 실행하기 위한 유용한 도구이다. QueryDSL을 사용하면 Java 코드로 쿼리를 작성할 수 있어서, 컴파일 타임 오류확인 및 IDE의 자동완성 기능을 사용할 수 있다. QueryDSL?: JPA Entity와 관련된 쿼리를 생성하기 위한 builder 라이브러리이다. SQL을 직접 작성하는 대신, Java 코드를 사용하여 query를 작성할 수 있다. Entity와 Q타입: Entity의 메타 모델을 사용하여 query를 작성하기 때문에 Entity클래스에 대응하는 Q타입 클래스가 필요하다. ex) Customer -> QCustomer 문법: QueryDSL은 Java코드로 작성되며, MethodChaining을 사용하여 query를 작.. 2023. 9. 26.
728x90