분류 전체보기(619)
-
배포 환경, 클라이언트 및 서버가 크로스 도메인 상태에서 XSRF-TOKEN 쿠키 값 읽기 에러 문제 해결
개요이 글에서는 개인 프로젝트 invest72에서 웹서버에 있는 자바스크립트가 웹 애플리케이션 서버가 발급한 XSRF-TOKEN 쿠키 값을 읽지 못하는 에러를 해결하는 경험을 소개합니다. 문제 해결 경험에서는 문제가 발생한 배경, 문제 원인, 해결 방법에 대해서 소개합니다. 배경현재 배포중인 웹서버와 웹 애플리케이션 상태는 다음과 같습니다.웹서버(React) : `https://invest72.web.app`웹 애플리케이션 서버(Spring) : `https://invest72-api.duckdns.org`CSRF 공격을 막기 위해서 웹 애플리케이션 서버에서 CSRF 토큰을 발급합니다. 이 토큰은 XSRF-TOKEN 쿠키에 값을 담아서 응답합니다.XSRF-TOKEN 쿠키의 속성은 `HttpOnly=fa..
2026.04.01 -
자바 인터페이스 메서드의 리턴타입 리팩토링
개요자바 인터페이스 메서드가 정의되어 있고, 몇개의 구현체 클래스가 이미 구현된 상태이고 클라이언트 코드에서 이미 호출되어 있는 상황입니다. 하지만 요구사항의 변경으로 인하여 특정 인터페이스의 메서드 리턴타입을 변경해야 하는 경우에 리팩토링하는 방법에 대해서 소개합니다.예제 소스코드에 대해서는 현재 개인 프로젝트인 invest72 프로젝트의 소스 코드를 활용합니다.현재 인터페이스 메서드 상황투자 금액을 의미하는 InvestmentAmount 인터페이스는 다음과 같습니다.이러한 상황에서 요구사항의 변경으로 getAmount() 메서드의 리턴타입을 BigDecimal에서 래퍼 클래스인 Money 클래스 타입으로 변경해야 합니다.public interface InvestmentAmount { Money ..
2026.03.13 -
PostgreSQL DECIMAL vs NUMERIC
개요PosgreSQL 컬럼 데이터 타입중에서 고정 소수점 타입에 해당하는 Numeric과 Decimal의 차이점을 분석합니다.Storage and syntaxPostgres는 DECIMAL 또는 NUMERIC 데이터 타입을 제공하고 있습니다. 해당 데이터 타입은 사용자 정의 정밀도(precision)을 제공하여 특정 자릿수까지 숫자를 정확하게 표현할 수 있습니다.Decimal 컬럼 정의 문법DECIMAL(precision, scale)가변 길이정수 부분 최대 131072자리, 소수점 최대 16383자리까지NUMERIC(precision, scale)가변 길이정수 부분 최대 131072자리, 소수점 최대 16383자리까지precision정밀도(precision)은 소수점을 기준으로 왼쪽과 오른쪽을 모두 포..
2026.03.12 -
Spring AOP 로깅 메모리 누수 문제 해결
배경현재 배포되고 있는 Spring 서버를 대상으로 힙덤프를 이용한 MemoryAnalyzer 툴의 메모리 누수 의심 보고서가 다음과 같았습니다. 세번째 메모리 누수 의심은 AspectJExpressionPointcut 인스턴스가 10.35% 메모리 점유하고 있습니다. 해당 인스턴스들은 대부분 `ConcurrentHashMap$Node[]` 배열에서 참조하고 있습니다. 그리고 이러한 배열 데이터는 DefaultListableBeanFactory에 의해서 참조되고 있습니다. 원인메모리 누수가 발생한 원인은 fineAnts Spring 서버의 기능중에서 service 패키지에 존재하는 클래스의 메서드가 실행될때마다 AOP가 과도하게 로깅을 수행하기 때문이었습니다. 그중에서 가장 많이 발생한 것은 종목의 현재..
2026.01.20 -
프로메테우스(Prometheus) 컨테이너 배포시 "data/queries.active" 파일 작성 실패 문제 해결
배경프로메테우스 컨테이너를 클라우드에 배포하려고 했으나 다음과 같은 에러가 발생하여 계속 재시작하는 문제가 있었습니다. 위 에러 결과를 보면 컨테이너의 `/prometheus/data/queries.active` 파일을 `./data` 디렉토리 아래에 작성하려고 했으나 `./data` 디렉토리가 존재하지 않아서 에러가 발생했다는 결과입니다. 현재 docker-compose의 프로메테우스 서비스의 설정은 다음과 같습니다.다음 설정 중에서 주목할 부분은 볼륨의 바인드 마운트 방식으로 설정된 부분입니다. 호스트 디렉토리의 `./prometheus/volume` 경로와 컨테이너의 `/promethues` 경로를 연결하도록 설정하였습니다.prometheus: container_name: fineAnts_prom..
2026.01.20 -
VisualVM Profiler 사용할 때 특정 Profile Class가 표시되지 않는 문제 해결
배경Troubleshooting Java 도서에서 서버의 특정 엔드포인트(/demo)에 대한 CPU 프로파일링을 실습하고 있었습니다. 해당 엔드포인트는 요청을 받으면 내부적으로 OpenFeign 라이브러리를 사용하여 "httpbin.org" 사이트에 요청을 보내고 일부러 5초 동안 응답 지연합니다. 프로파일링 결과는 다음과 같습니다. 위 결과를 보면 DemoController.demo() 메서드에 대한 정보만 나올 뿐이지 OpenFeign 호출에 대한 상세한 정보는 프로파일링 되지 않고 있습니다. 제가 원하는 것은 OpenFeign에 대한 프로파일링 정보까지도 표시되는 것이었습니다. 원인프로파일러의 CPU settings에서 Profile classes 입력창에 OpenFeign 라이브러리 경로를 설정하..
2025.12.15