본문 바로가기

Spring46

[Spring] 동시성 처리 방법 Spring 커머스 토이 프로젝트 개발 시 재고 감소에 대한 동시성 테스트를 진행하였습니다. 처음 재고가 30만개 였고 동시에 5명의 사용자가 각 5개씩 상품을 주문했을 때 25개의 상품이 감소하여 결과적으로는 299,975 재고가 남아있어야 합니다. 하지만 결과적으로는 5개의 재고만 감소되어 데이터 정합성이 깨진 것을 확인할 수 있었습니다. 자세한 내용은 다음 링크에서 확인 가능합니다. 그렇다면 데이터 정합성이 깨지지 않도록 동시성 처리를 할 수 있는 방법은 무엇인지 알아보도록 하겠습니다. 동시성 문제동시성 문제란 하나의 자원에 여러 스레드가 동시에 접근하여 데이터 정합성이 깨지는 것을 말합니다. 동시성 문제는 다양한 원인으로 발생하는데 여기서는 Race Condtion 으로 발생한 문제 입니다.동시.. 2025. 10. 7.
[Spring] Spring Profile 이란 무엇인가? Spring Profile개발을 하다보면 실제 운영 환경에 올리는 애플리케이션 설정과 개발 환경에 올리는 설정이 다를 때가 있습니다. 예를 들어, 개발 환경에서는 Docker Container를 사용해서 개발을 진행하고 실제 운영 환경은 클라우드 또는 온-프레미스를 이용하기도 합니다. 바로 이 때 이용하는 것이 Spring Profile 입니다. Spring Profile은 스프링 프레임워크에서 애플리케이션의 환경 설정을 구분하기 위한 기능입니다. Profile은 애플리케이션을 실행할 때 선택할 수 있습니다. 예를 들어, 개발 환경에서는 'dev' 프로파일을 선택하고 운영환경에서는 'prod' 프로파일을 선택할 수 있습니다. Spring Profile로 애플리케이션 환경 분리하기스프링 프레임워크 애플.. 2025. 9. 28.
[Springboot] @RestControllerAdvice 와 Swagger 충돌 문제 🚨 에러 발생 원인커스텀 예외 클래스를 만들기 위해 도메인 레벨 표현을 위한 enum 클래스, 커스텀 예외 클래스, 커스텀 예외를 처리하는 ExceptionHandler 클래스를 생성하였습니다.// 도메인 레벨 표현을 위한 열거형 클래스 생성public class Constants { public enum ExceptionClass { PRODUCT("Product"); ORDER("Order"); private String exceptionClass; ExceptionClass(String exceptionClass) { this.exceptionClass = exceptionClass; } publi.. 2025. 8. 27.
[QueryDSL] JPAQuery vs JPAQueryFactory QueryDSL을 사용하다보면 개발자별로 JPAQuery, JPAQueryFactory 중 하나를 사용해서 개발하는 것을 볼 수 있습니다. 공부를 하던 중 이 둘의 차이는 무엇이며, 어떤 객체를 사용하는 것이 좋은지 궁금하여 본문을 작성하게 됐습니다. 📌 JPAQuery 란 무엇인가?JPAQuery를 설명하기 위해서 먼저 QueryDSL에 대해서 간단하게 설명하겠습니다. QueryDSL은 정적 타입을 이용해 SQL과 같은 쿼리를 생성할 수 있도록 지원하는 프레임워크 입니다. QueryDSL JPA 모듈은 JPA API와 Hibernate API 2가지를 지원합니다.만약 JPA API를 사용하려면 JPAQuery 인스턴스를 호출해야 합니다.@SpringBootTestpublic class Product.. 2025. 8. 14.
[Spring Data JPA] JpaRepository getById() vs findById() 차이 Spring Data JPA를 사용하게 되면 JPA 인터페이스의 다양한 메서드를 사용하여 DB에 접근하게 됩니다.그 중 DB 내 개별 데이터를 조회하는 메서드 2개를 볼 수 있습니다. findById() 와 getById() 입니다. @NoRepositoryBeanpublic interface CrudRepository extends Repository { Optional findById(ID id);}@NoRepositoryBeanpublic interface JpaRepository extends ListCrudRepository, ListPagingAndSortingRepository, QueryByExampleExecutor { @Deprecated T getById(ID id);} 📌 .. 2025. 8. 10.
[Springboot] JPA 양방향 매핑 시 ToString 메소드 StackOverflowError 문제 🚨 JPA 양방향 매핑 시 StackOverflowError 발생Entity간 아래와 같이 1:1 양방향 매핑을 설정하고 테스트를 실행하면 StackOverflowError가 발생합니다.package com.springboot.spring_jpa.data.entity;import jakarta.persistence.*;import lombok.*;@Entity@Getter@Setter@NoArgsConstructor@ToString(callSuper = true)@EqualsAndHashCode(callSuper = true)@Table(name = "product")public class Product extends BaseEntity { @Id @GeneratedValue(strategy.. 2025. 8. 1.