개요 OOP와 ORM에서 다형성은 코드의 재사용성과 유지 보수성을 극대화 하는 아름다운 매커니즘이다. 그런데 이것을 ORM과 접목시켰을 때, JSON이 기본적으로 다형성을 제공하지 않기 때문에 상위 클래스나 인터페이스를 통한 다양한 하위 클래스의 객체를 직렬화 역직렬화 하는 것이 까다로울 수 있다. 이를 해결하기 위해 Jackson과 같은 라이브러리에서는 @JsonSubTypes와 같은 애노테이션을 제공하여 다형적 구조를 효과적으로 관리할 수 있게 도와준다. 이번 글에서는 Jackson의 @JsonSubTypes 애노테이션을 중심으로, 다형성 JSON 데이터를 올바르게 직렬화하고 역직렬화하는 방법에 대해 알아보자. 내용@JsonSubTypes의 기본 개념 @JsonSubTypes는 Jackson 라이브..
개요 스프링 프레임워크에서 데이터에 접근할 때 트랜잭션을 효과적으로 관리하기 위해 여러 가지 선언적 트랜잭션 방안이 제공된다. 그 중에서도 @Transactional 애노테이션은 가장 널리 사용되는 방법 중 하나로, 간단한 설정만으로도 강력한 트랜잭션 관리 기능을 구현할 수 있다. 본 글에서는 이러한 선언적 트랜잭션 방안들에 대해 추가로 살펴보고, 특히 @Transactional의 개념과 활용 방법, 그리고 이를 사용하면서 고려해야 할 다양한 사항들에 대해 깊이 있게 논의하고자 한다. 내용@Transactional이 무엇인가? @Transactional은 스프링 프레임워크에서 제공하는 강력한 선언적 트랜잭션 관리 기능을 구현하기 위한 애노테이션이다. 이 애노테이션을 사용하면 코드의 비즈니스 로직과 트랜..
개요서비스를 운영하다보면 이유 모르게 OOM이 발생하거나, Heap 영역이 비정상적으로 튀는 일이 종종 있다. 이럴때 Grafana와 같은 지표로 Heap 영역을 추적할 수 있지만, Heap Dump를 통해 메모리 Leak이 발생하는 주된 원인을 찾는것이 가장 저수준으로 문제를 접근하는 방법이다. 들어가며힙덤프란?힙덤프(Heap Dump)는 자바 애플리케이션이 실행되는 동안 JVM(Java Virtual Machine)의 힙 메모리에 저장된 객체들의 상태를 캡처한 스냅샷이다. 메모리 사용 상태를 분석하고 메모리 누수 문제를 해결하는 데 매우 유용한 도구이며, 힙덤프를 통해 애플리케이션이 어떤 객체를 메모리에 얼마나 많이 가지고 있는지, 어떤 객체가 가장 많은 메모리를 차지하고 있는지 등을 파악할 수 있다..