전체 글(616)
-
Spring AOP 로깅 메모리 누수 문제 해결
배경현재 배포되고 있는 Spring 서버를 대상으로 힙덤프를 이용한 MemoryAnalyzer 툴의 메모리 누수 의심 보고서가 다음과 같았습니다. 세번째 메모리 누수 의심은 AspectJExpressionPointcut 인스턴스가 10.35% 메모리 점유하고 있습니다. 해당 인스턴스들은 대부분 `ConcurrentHashMap$Node[]` 배열에서 참조하고 있습니다. 그리고 이러한 배열 데이터는 DefaultListableBeanFactory에 의해서 참조되고 있습니다. 원인메모리 누수가 발생한 원인은 fineAnts Spring 서버의 기능중에서 service 패키지에 존재하는 클래스의 메서드가 실행될때마다 AOP가 과도하게 로깅을 수행하기 때문이었습니다. 그중에서 가장 많이 발생한 것은 종목의 현재..
14:30:05 -
프로메테우스(Prometheus) 컨테이너 배포시 "data/queries.active" 파일 작성 실패 문제 해결
배경프로메테우스 컨테이너를 클라우드에 배포하려고 했으나 다음과 같은 에러가 발생하여 계속 재시작하는 문제가 있었습니다. 위 에러 결과를 보면 컨테이너의 `/prometheus/data/queries.active` 파일을 `./data` 디렉토리 아래에 작성하려고 했으나 `./data` 디렉토리가 존재하지 않아서 에러가 발생했다는 결과입니다. 현재 docker-compose의 프로메테우스 서비스의 설정은 다음과 같습니다.다음 설정 중에서 주목할 부분은 볼륨의 바인드 마운트 방식으로 설정된 부분입니다. 호스트 디렉토리의 `./prometheus/volume` 경로와 컨테이너의 `/promethues` 경로를 연결하도록 설정하였습니다.prometheus: container_name: fineAnts_prom..
12:31: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 -
Github Action, act 로컬 테스트 실행시 SSH Private Key 저장 문제 해결
개요이 글에서는 Github Action의 워크플로우 파일을 로컬 개발 환경에서 act라는 오픈소스 프로세스를 실행하여 테스트하다가 SSH 접속이 안되는 문제를 해결하는 것을 다루고 있습니다.https://github.com/nektos/act GitHub - nektos/act: Run your GitHub Actions locally 🚀Run your GitHub Actions locally 🚀. Contribute to nektos/act development by creating an account on GitHub.github.com 배경GCP 클라우드 기반의 배포를 위한 워크플로우 파일을 작성하는 과정에서 Github Action 워크플로우를 로컬 개발 환경에서 테스트를 하기 위해서 act..
2025.12.05 -
Gradle의 Java 플러그인, implementation과 api의 차이
1. Gradle Java 플러그인과 Java-Library 플러그인Java 플러그인은 무엇인가?Gradle 설정에서 Java 플러그인을 추가하면 해당 프로젝트를 자바 프로젝트로 만들고 자바 소스코드를 컴파일, 테스트, 빌드하는데 필용한 기능들을 Gradle에 부여해줍니다.plugins { id 'java'}Java 플러그인을 추가하면 다음 그림과 같은 테스크들을 사용할 수 있습니다. 각 테스크들간에 화살표 관계는 해당 테스크를 완료하기 위한 선행 조건 테스크들을 의미합니다. 예를 들어 build 테스크를 수행하기 위해서는 check, assemble 테스크가 먼저 수행 및 완료되어야 합니다. 자바 컴파일러가 자바 소스 코드(*.java)를 컴파일 하게 되면 바이트 코드(*.class)를 생..
2025.12.02 -
Gradle 기반 멀티 모듈 생성 및 의존성 추가 방법
개요Gradle 기반으로 멀티 모듈 Project를 생성하는 방법을 학습project, subprojects, allprojects을 통하여 특정 모듈들에 설정하는 방법을 학습모듈간에 다른 의존성을 공유하는 방법을 학습외부 파일을 기반으로 의존성 라이브러리를 관리하는 방법을 학습 멀티 모듈 프로젝트는 무엇인가멀티 모듈 프로젝트는 여러개의 작은 프로젝트들로 구성된 프로젝트입니다. 해당 프로젝트에는 루트 프로젝트가 존재하고 루트 프로젝트 아래에 여러개의 모듈이 존재할 수 있습니다.다음 프로젝트를 보면 프로젝트 이름은 "gradlebasics" 라는 이름이 프로젝트 이름이고 하나의 gradlebasics 라는 프로젝트 이름 아래에 sub-project-1, sub-project-2, common라는 모듈이 포..
2025.12.01