본문 바로가기

분류 전체보기8

Kubernetes 에서 안전하게 힙 덤프 수행하기 운영 중인 서비스를 모니터링 하다보면 메모리 사용량이 비정상적인 경우가 있다. 메모리 사용량이 지속적으로 우상향하여 누수 현상이 의심되거나 객체가 비정상적으로 많이 할당된다는 생각이 들면 힙 덤프를 분석하여 원인을 진단할 수 있다.힙 덤프는 어떤 프로세스의 특정 순간의 메모리 스냅샵이다. 분석하려는 서버에 접근하여 힙 덤프를 생성하고 MAT 과 같은 도구로 이를 분석하면 유의미한 결과를 얻을 수도 있다. 자바에서는 JDK 와 함께 번들로 제공되는 jmap 명령을 이용하면 쉽게 생성할 수 있다.다만, 머신 입장에서 힙 덤프는 쉽게 생성할 수 있는 파일이 아니다. 어플리케이션에 할당된 메모리 양이 클수록 힙 덤프 수행시간도 오래걸리고, 힙 덤프를 생성하기 전에 필요없는 객체를 없애도록 Full GC 를 수행.. 2024. 6. 13.
AWS Vault 의 --ec2-server 옵션 알아보기 SDK 혹은 CLI 를 이용하면 외부에서 자신이 생성한 AWS 리소스에 접근할 수 있습니다. 콘솔에 로그인하여 리소스에 접근하는 것처럼 이러한 도구를 사용할 때에도 자격 증명을 제공하여 권한이 있는 리소스에 접근할 수 있게 됩니다.로컬 개발환경에서는 .env, shell 혹은 ~/.aws/credentials 에 Access Key 와 같은 자격 증명을 저장하여 사용합니다. 다만, 이 방식은 개발자의 노트북에 접근만 할 수 있다면 누구나 자격 증명을 확인할 수 있게 되고 도난당할 수 있는 지점이 됩니다.AWS Vault 는 이러한 취약점을 개선하기 위해 Mac 의 keychain 과 같은 안전한 저장소에 자격 증명을 저장하여 접근하는 도구입니다. 자격 증명이 텍스트로 보관되지 않고 실제 사용 시에는 임시.. 2024. 5. 5.
Github Rest API 를 통한 테스트 자동화 여러 프로젝트에서 공통으로 사용되는 기능이나 설정을 관리하기 위해 라이브러리를 만들어 배포하는 경우가 있습니다. 한번 배포된 라이브러리는 여러 곳에서 의존할 수 있기 때문에 수정하는 것은 경우에 따라 부담스러운 작업일 수 있습니다. 물론 버저닝을 할 수 있지만 큰 변화가 없는 경우에는 하위 호환을 지켜주는 것이 좋수정한 라이브러리 자체에 대한 테스트는 Junit 같은 도구를 통해 쉽게 할 수 있습니다. 추가로, 이 라이브러리를 사용하는 쪽에서 수정된 버전으로 빌드나 테스트를 했을 때 깨지지 않는지도 확인하고 싶은 경우가 있을 수 있습니다.예를 들어 사내에 jackson-databind 2.16.1 버전을 이용하는 common-library 가 있는데, jackson-databind 의 버전을 2.17.0.. 2024. 3. 31.
Jpa Multi-datasource 구성과 @Transactional Springboot 에 Jpa 를 설정할 때 개발자는 db 관련 정보만 적어주면 single-datasource 환경에 한하여 필요한 모든 구성을 자동(auto configuration)으로 설정해줍니다. 비지니스가 복잡해지면 multi-datasource 연결이 요구되어 Jpa 관련 설정을 직접 해야 하는 경우가 생길 수 있는데요, 이 글에서는 설정에 필요한 요소들과 multi-datasource 환경에서 @Transactional 이 어떤 커넥션을 획득하여 트랜잭션을 처리하는지 간단히 정리해보겠습니다. DataSource DataSource 는 db config 정보를 통해 커넥션을 생성하고 관리하는 객체입니다. val config = HikariConfig().apply { jdbcUrl = "jd.. 2024. 3. 19.