본문 바로가기

Spring41

외부 API 단일 필드 연결 시 역직렬화 오류 원인 및 해결 방법 문제 상황: 외부 API에서 단일 필드 데이터를 받아 올 때외부 API에서 단일 필드 데이터를 수신할 때 다음과 같은 예외가 발생할 수 있습니다. Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.web.client.RestClientException: Error while extracting response for type [xxx.JacksonDTO] and content type [application/json;charset=utf-8]] with root cause `xxx.JacksonDTO` (alt.. 2025. 10. 13.
[Spring Data JPA] Projections 간단 정리 Projection은 데이터베이스에서 간단하게 필요한 필드만 선택하여 가져오는 기능입니다. 이를 통해 전체 엔티티를 조회하는 대신, 특정 필드만 포함된 객체를 생성할 수 있습니다. 즉, 성능을 향상시키고 데이터 전송을 최적화할 수 있습니다. 초기 설정(엔티티)@Entitypublic class Address { @Id private Long id; @OneToOne private Person person; private String state; private String city; private String street; private String zipCode; // getters and setters}@Entity@Setter@Getter@NoAr.. 2025. 1. 20.
[Spring Data JPA] 직접 PK 값을 설정하면 발생하는 문제 - Persistable 문제 상황@GeneratedValue를 사용하지 않고, 직접 PK 값을 설정해야 하는 경우가 있습니다. 잘못된 PK 값 설정 시, SimpleJpaRepository.save() 메소드에서 entityInformation.isNew(entity)가 false를 반환하게 됩니다. 이 경우, merge() 메소드가 호출되며, 데이터베이스에 해당 데이터가 존재하는지 확인 후, 없으면 새로운 데이터를 삽입합니다. 이로 인해 예상치 못한 자원 사용이 발생할 수 있습니다.// 문제가 발생하는 엔티티@Entity@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Item { @Id private String id; public Item(St.. 2025. 1. 15.
[Spring Data JPA] Auditing 알아보기 - Spring Security 적용 Auditing 기능은 엔티티의 생성 및 수정 시점을 감시하여 생성일, 생성자, 수정일, 수정자를 자동으로 기록할 수 있으며, 이러한 생성일과 수정자는 엔티티가 공통적으로 가지는 컬럼이므로 중복 코드를 줄이기 위해 BaseEntity 클래스로 분리하여 다양한 방법으로 Auditing을 구현할 수 있습니다. 1. JPA으로 구현1-1. 공통 관심사 엔티티 구현@Getter@MappedSuperclasspublic abstract class BaseEntity { @Column(updatable = false) private LocalDateTime createdDate; private LocalDateTime updatedDate; @PrePersist public void pr.. 2025. 1. 13.
[Spring Data JPA] Custom Repository - 사용자 정의 리포지토리 Spring Data JPA를 사용하면 인터페이스만 정의해도 Spring이 환경 설정 파일을 기반으로 데이터 접근 기술의 구현체를 자동으로 생성해줍니다. 하지만 만약 Spring이 제공하는 구현체가 아닌 다른 데이터 접근 기술을 사용하고 싶다면 어떻게 하는지 알아보겠습니다. CustomRepositoryJPA, JDBC, 데이터 접근 기술, Querydsl 다양한 데이터 접근 기술로 사용자 정의 Repository를 생성할 수 있습니다. 필자는 JPA를 이용해서 간단하게 Custom 인터페이스를 구현해보겠습니다. 1. 사용자 정의 인터페이스 작성 사용자 정의 Repository를 위해서 먼저 사용자 정의 인터페이스를 작성합니다.public interface MemberRepositoryCustom { .. 2025. 1. 13.
[Spring Data JPA] 페이징과 정렬 ≣ 목차데이터를 일정한 크기로 나누는 페이징 처리를 이용해 사용자에게 표시하는 경우는 상당히 많습니다. 또한, 페이징 하는 과정에서 특정 기준에 따라 데이터를 정렬해야 하는 경우도 있습니다. 이번 포스팅에서는 Spring Data JPA를 통해 쉽게 페이징하고 정렬하는 방법을 알아보겠습니다.  초기 설정더보기@Entity@Getter@Setter@ToString(of = {"id", "username", "age"})@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Member { @Id @GeneratedValue @Column(name = "member_id") private Long id; private Str.. 2025. 1. 3.
[Spring + Prometheus + Grafana] 간단한 커스텀 메트릭 구현 #2 - @Counted, @Timed, MeterBinder ≣ 목차이번 포스팅에서는 간단한 주문 관련 메트릭을 구현하는 방법에 대해 알아보겠습니다.스프링 엑추에이터, 프로메테우스, 그라파나의 기초 설정에 대해서는 이미 알고 있다고 가정하겠습니다.  카운터란?카운터는 단순하게 증가하는 단일 누적 측정 항목이며, 일반적으로 전체 값을 의미합니다. 이 측정 항목은 값이 증가하거나 0으로 초기화하는 기능만 가능하고, 마이크로미터에서는 값을 감소시키는 기능도 지원하지만 일반적으로 감소시키는 기능을 사용하는 것은 이러한 목적에는 적합하지 않습니다. 예를 들어 HTTP 요청 수를 카운터로 사용하는데 일반적으로 HTTP 요청 수를 감소 하는 일은 없습니다. 직접 카운터 생성@Slf4j@Servicepublic class OrderService implements OrderSe.. 2024. 10. 20.
[Actuator + Prometheus + Grafana] 모니터링 간단한 구현 #1 간단한 소개spring boot actuator: 스프링부트 내부 라이브러리로, 실행 중인 어플리케이션에 메트릭을 엔드포인트로 제공합니다.Prometheus: actuator가 제공하는 메트릭을 엔드포인트로 가져와 프로메테우스 자체적으로 저장하는 DB에 저장합니다.Grafana: Prometheus에서 저장한 메트릭을 시각화하고, 원하는 정보만 볼 수 있도록 대시보드를 구성합니다.  spring boot Actuator 설정implementation 'org.springframework.boot:spring-boot-starter-actuator'액추에이터는 스프링 부트 내장 라이브러리이기 때문에, 사용하려면 build.gradle 파일에 의존성 코드를 한 개만 추가하면 됩니다.  Prometheus 설.. 2024. 10. 20.
[Spring Boot] micrometer의 역할 (시스템 모니터링) 모니터링 툴의 중요성 - 마이크로미터(Micrometer)의 역할서비스를 운영할 때, 애플리케이션의 CPU, 메모리, 커넥션 사용량 등 다양한 지표를 모니터링하는 것은 필수적입니다. 이러한 지표를 통해 문제 발생 시 사전 대응이 가능하며, 실제 문제가 발생했을 때도 원인을 신속하게 파악하고 대처할 수 있습니다. 예를 들어, 메모리 사용량이 가득 찼다면, 메모리 문제와 관련된 부분을 빠르게 찾아 대응할 수 있습니다. Micrometer란? - 의존성 문제 해결수많은 모니터링 툴이 존재하며, 시스템의 다양한 정보를 툴에 전달하여 사용합니다. 예를 들어, CPU, JVM, 커넥션 정보 등을 JMX 툴에 전달한다고 가정해 보겠습니다. 이 경우, 각각의 정보를 JMX 모니터링 툴이 정한 포맷에 맞추어 측정하고 전.. 2024. 10. 18.
[Spring Boot] 액추에이터(Actuator) 문제 및 해결 방법 Spring Actuator란Spring Actuator는 org.springframework.boot:spring-boot-starter-actuator 패키지를 Dependency에 추가만 해주면 바로 사용할 수 있는 기능으로, 애플리케이션 모니터링 및 관리 측면에서 도움을 줄 수 있습니다. Actuator 보안 이슈애플리케이션 모니터링 및 관리 측면에서 개발자에게 편의를 주는 기능이나, 잘못 사용할 경우 비밀번호, API KEY, Token 등 Credential들이나 내부 서비스 도메인, IP 주소와 같은 중요 정보들이 유출될 수 있습니다.  1. 환경변수로 중요 정보를 저장해 둔 경우개발자들은 보안 문제로 API KEY, DB Password 등 중요한 정보들을 하드 코딩을 하지 않고 appli.. 2024. 10. 16.