본문 바로가기

분류 전체보기

(145)
unnamed module of loader org springframework boot loader launch launchedclassloader `unnamed module` 오류는 “같은 클래스가 서로 다른 ClassLoader에서 로드될 때” Object res = httpClient.call(); // 다른 ClassLoader에서 로드된 DTOMyDto dto = (MyDto) res; // 💥 여기서 터짐 java.lang.ClassCastException: class com.app.MyDto cannot be cast to class com.app.MyDto (com.app.MyDto is in unnamed module of loader 'app'; com.app.MyDto is in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader) 클..
Actuator ActuatorSpring Actuator는 Spring Boot 애플리케이션의 상태와 동작을 모니터링하거나 관리할 수 있는 다양한 기능을 제공하는 서브 프로젝트입니다. 이를 통해 애플리케이션의 상태를 점검하고, 메트릭(metrics), 애플리케이션 설정, 사용 중인 스레드 정보 등을 노출하거나 조작할 수 있습니다. 주요 기능모니터링 및 진단애플리케이션의 상태(health)를 확인하고, 의존성, 데이터베이스, 메시징 시스템 등의 연결 상태를 검사합니다.메모리 사용량, 활성 스레드 수, CPU 사용량 등 다양한 메트릭을 제공합니다.엔드포인트 노출HTTP로 접근 가능한 RESTful 엔드포인트를 통해 애플리케이션의 상태 정보를 제공합니다.기본적으로 /actuator 경로를 통해 엔드포인트를 접근합니다.예: ..
람다 Lambda 람다 형태매칭인터페이스메서드() -> { ... }Runnablevoid run()() -> 값SupplierT get()() -> 값CallableT call()(x) -> {}Consumervoid accept(T)(x) -> 값FunctionR apply(T)(a,b) -> 값BiFunctionR apply(T,U)(a,b) -> {}BiConsumervoid accept(T,U)(t) -> true/falsePredicateboolean test(T) predicate examplepublic class Main { public static void main(String[] args) throws InterruptedException { check(5, t-> t>10); ..
vite-plugin-route-meta 현재 vite-plugin-route-meta 라는 이름으로 널리 알려진 공식 패키지는 확인되지 않지만, Vite 생태계에서는 **“라우트 메타(route meta)”**를 다루는 플러그인들이 파일 기반 라우팅과 함께 메타데이터를 설정/확장해주는 역할로 많이 사용됩니다. vite-plugin-route-meta 계열의 목적은RouteObject에 meta: { ... }를 “자동으로/편하게” 붙여주는 것입니다.{ path: '/dashboard', element: , meta: { requiresAuth: true, title: '대시보드', },} React Router(RouteObject)는 공식적으로 meta를 해석하지 않습니다. 메타선언 방법 1) RouteObject에 직접 ..
[Spring] 주석3 (Annotation, DTO) @AllArgsConstructor더보기더보기모든 필드를 파라미터로 받는 생성자 생성@AllArgsConstructorpublic class User { private Long id; private String name;} @NoArgsConstructor더보기더보기파라미터 없는 기본 생성자 생성@NoArgsConstructorpublic class User { private Long id; private String name;} @RequiredArgsConstructor더보기더보기`final` 또는 `@NonNull` 필드만 받는 생성자 final / @NonNull 필드가 있고그로 인해 생성자가 “하나만” 존재한다면Spring 4.3+에서는 @Autowired 없이도 주입된다@..
pull to refresh React에서 Pull to Refresh(당겨서 새로고침) 기능은 모바일 웹앱이나 하이브리드 앱에서 자주 쓰이는 UI 패턴이에요. 보통 사용자가 화면을 위로 스크롤할 수 없을 때, 화면을 아래로 끌면 데이터를 새로 불러오는 동작을 수행합니다. ✅ 구현 방법은 크게 3가지입니다1. 라이브러리 사용 (가장 간단하고 안정적) 대표적으로 다음과 같은 라이브러리를 사용합니다. `react-pull-to-refresh` 가장 많이 쓰이는 경량 라이브러리입니다. import React from 'react';import PullToRefresh from 'react-pull-to-refresh';function App() { const handleRefresh = async () => { // 새로고침 동작..
Java sample code 1. 외부 명령 실행(ProcessBuilder / 쉘 실행)을 악용한 커맨드 인젝션(Command Injection) 및 시스템 파괴 공격을 사전에 차단하기 위한 방어 코드 - Path Manipulation(경로 조작)- OS Command Injection (명령 주입 공격)import java.util.*;import java.util.regex.Pattern;/** * 확장된 금지 명령어 검사기 (Java) * - ProcessBuilder 인자 리스트 또는 쉘 커맨드를 사전에 검사해서 금지 토큰/명령을 발견하면 예외를 던집니다. * - 금지 바이너리 목록은 실무에서 흔히 위험한 셸/인터프리터/관리 유틸을 포함하도록 확장되어 있습니다. * * 주의: 금지목록만으로는 항상 완전한 방어가 되지 않습..
AOP @Cacheable @CacheEvict 문제상황 하나의 트랜잭션에서 캐시를 삭제하고 다시 재조회를 하려는데 캐시가 지워지지 않았다 => 이건 실무에서도 자주 겪는 “한 트랜잭션 내 캐시 반영 지연 문제”입니다.핵심은 👉 Spring의 캐시 동작은 트랜잭션 커밋 시점과는 무관하다는 점이에요.@Servicepublic class UserService { @CacheEvict(value = "user", key = "#id") public void evict(Long id) { // 캐시 삭제 } @Cacheable(value = "user", key = "#id") public User find(Long id) { return repository.findById(id).orElseThrow()..