본문 바로가기
  • 개발 로그를 기록하며,
    복습하고 깊이를 더해갑니다.
728x90

Spring24

[SpringBoot] 배치 애플리케이션 종료되지 않는 현상 (with. Connection Pool) Batch 작업이 끝났는데 왜 Application이 정상적으로 종료되지 못할까..? SpringBoot를 사용해 배치 애플리케이션을 개발하는 도중 분명 배치 작업이 끝났는데 애플리케이션(프로세스)가 종료되지 않는 현상이 발생하였다. 왜 애플리케이션이 종료되지 않은 것일까? 💡Elasticsearch Client의 Connection pool이 살아있어 jvm이 종료되지 못한 것 이었다.우선 애플리케이션이 정상적으로 종료되지 않는 이슈가 발생할 때 확인하는 방법에 대해 알아보자.작업이 끝났는데 종료되지 않으면 대부분 스레드가 문제다.. 특히 Non-daemon 스레드는 jvm이 강제로 종료시킬 수 없기 때문에 jvm이 종료되지 못하는 원인이 된다. ✅ jvm 프로세스에 의해 실행중인 스레드 확인하기jp.. 2025. 8. 24.
[SpringFramework] IoC 원칙에 위배되는 static 키워드? 📌 Spring에서 static 키워드를 지양해야 하는 이유Java를 사용할 때 static 키워드는 클래스 레벨에서 공유되는 변수 또는 메서드를 정의할 때 자주 사용된다. 대표적으로 static 메서드는 객체 생성 없이 호출할 수 있고, static 변수는 클래스 로딩 시 메모리에 올라가 하나의 값만을 공유하게 된다. 하지만 Spring Framework에서는 이러한 static 사용이 프레임워크의 철학 및 동작 방식과 충돌하며, 불필요하거나 문제가 될 수 있다. 1. Spring은 IoC 기반 프레임워크 • 객체 생성, 생명주기 관리, 의존성 연결 등을 개발자가 아닌 Spring 컨테이너가 제어한다. • 즉, 객체 인스턴스는 컨테이너가 주입하고 관리해야 하며, 필요한 구성은 모두 빈 단위로 주입 가.. 2025. 7. 28.
[SpringMVC] 비동기 처리 (with. Async) WAS에서 비동기로 처리하는 방법 Spring은 주로 웹 개발에 사용되기 때문에 비동기 처리가 필요한 경우는 보통 UX개선으로 화면의 블로킹 현상을 방지하기 위해 Client(js)에서 Axios등을 사용하여 비동기로 HTTP 요청을 보내는 방식으로 처리한다. 하지만 아래와 같이 서버(WAS)에서 비동기 처리가 필요한 경우도 있다. 무거운 연산 또는 I/O 작업 처리데이터베이스 쿼리, 대용량 파일 처리, 외부 API 호출 등으로 인해 응답 시간이 길고, 클라이언트가 기다리기 어려운 경우서버에서 비동기로 처리해 자원 낭비와 블로킹을 줄임서버 자원 제한 및 동시성 처리 필요제한된 쓰레드 풀에서 다수 요청을 효율적으로 처리해야 할 때서버 쓰레드가 블로킹 되면 전체 처리량이 떨어지므로 비동기 처리로 극복실시간 .. 2025. 6. 29.
[SpringFramework] Data 변경을 감지하여 실시간 정보 제공하기 사용자에게 실시간 정보를 제공하기 위해서는 어떤 방법들이 있을까? 시간에 따라 데이터가 빠르게 변화하는 현대 사회에서는 다양한 분야에서 최신 데이터를 빠르게 확인하는 것이 매우 중요해졌다. 주식 거래, 채팅, 금융 서비스 등의 서비스에서 데이터 갱신은 꼭 필요한 기능이며, 구현 방식에 따라 사용자 경험에 많은 영향을 끼칠 수 있다. 사용자가 데이터의 변경사항을 최대한 빠르게 확인할 수 있는것이 가장 좋겠지만.. 무조건 실시간으로 빨리 처리하는게 좋다고 할 수는 없다. 서비스 유형에 따라 약간의 지연도 있으면 안되는 주식 거래 같은 기능일 수도 있고, 어느정도의 데이터 지연은 감수할 수 있지만 시스템 리소스가 더 중요한 기능일 수도 있기 때문이다. 데이터 지연 시간과 처리 방법에 따라 실시간(Real ti.. 2025. 6. 15.
[SpringMVC] @Value로 Static 변수에 값 주입할 수 있을까? Spring에서 @Value 어노테이션은 application.properties와 같이 프로퍼티에 정의된 값을 주입하는데 사용된다.@Value 어노테이션 사용 방법.propertiesapp.name=MyApplicationapp.version=1.0.0 .java@Componentpublic class AppConfig { @Value("${app.name:default}") private String appName; @Value("${app.version:0}") private String appVersion;}보통 이렇게 @Value 형식에 맞춰 properties 값을 주입하여 주면 간단히 사용할 수 있지만 한 가지 주의할 점이 있다.@Value로 값을 주입할 변수가 sta.. 2024. 12. 10.
[SpringFramework] Filter로 XSS 취약점 대응하기 Servlet Filter를 등록하여 서버로의 HTTP 요청(request)에 대한 XSS 필터링 적용  XSS란?교차 사이트 스크립팅(XSS, Cross-Site Scripting)은 웹 애플리케이션 보안 취약점 중 하나로, 공격자가 악성 스크립트를 다른 사용자의 브라우저에서 실행하도록 만드는 공격 기법이다. 주로 웹 페이지에서 사용자 입력을 제대로 검증하지 않거나 필터링하지 않을 때 발생한다.XSS 공격은 사용자의 세션 쿠키, 개인 정보, 인증서 등을 탈취하거나, 악성 사이트로 리디렉션하거나, 피싱 공격을 수행할 수 있다.  그럼 XSS 공격을 막기 위해 어떻게 해야 할까? XSS는 주요 정보(session, cookie, 개인정보) 탈취, 사용자 리다이렉션, 사이트 조작 등 다양한 공격 방법이 있지.. 2024. 7. 4.
[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.
[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.
[SpringDataElasticsearch] Spring Data Elasticsearch란? Elasticsearch용 Spring Data는 저장소별 기능을 유지하면서 새로운 데이터 저장소에 익숙하고 일관된 Spring 기반 프로그래밍 모델을 제공하는 것을 목표로 하는 Spring Data 프로젝트의 일부이다. Spring Data 프로젝트 중 가장 많이 사용되고 있는 JPA (Spring Data JPA) 와 비슷하게 사용할 수 있기 때문에 보다 익숙하고 쉽게 Elasicsearch에 접근할 수 있게 도와준다. Spring Data Elasticsearch 프로젝트는 Elasticsearch 검색 엔진과의 통합을 제공하며, 주요 기능 영역은 Elasticsearch 문서와 상호 작용하고 Repository Style Data Access 계층을 쉽게 작성하기 위한 POJO 중심 모델이다. P.. 2023. 9. 25.
728x90