본문 바로가기

Spring40

[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.
[Spring Boot] 액추에이터(Actuator) 정리 ≣ 목차 액추에이터란?스프링 부트는 프로덕션 환경에서 애플리케이션을 모니터링하고 관리하는데 필요한 감사(auditing), 추적(trace), 지표(metric)을 자동으로 수집하는 기능을 제공하며, HTTP 엔드포인트와 JMX를 통해 애플리케이션의 상태를 확인하고 관리할 수 있습니다. 그럼 해당 기능들이 왜 필요할까??모니터링을 통해 개발자는 애플리케이션의 상태를 쉽게 파악하고 문제를 신속하게 해결할 수 있으며, 시스템의 부하나 성능 저하를 조기에 감지할 수 있습니다. 또한, 보안 설정을 통해 중요한 정보에 대한 접근을 제어할 수 있어 민감한 데이터의 노출을 방지할 수 있습니다. 이러한 이유로 스프링 액추에이터는 애플리케이션의 효율적인 관리와 운영에 필수적인 도구로 자리잡고 있습니다. build.gra.. 2024. 10. 16.