본문 바로가기

Spring39

[Spring] 동시에 상품 주문 시 Deadlock found when trying to get lock 에러 기존 상품 주문 로직소비자가 상품을 주문하면 기존 재고 수량에서 주문 수량 만큼을 뺀 수량을 재고 수량으로 업데이트 합니다. 이 때 우려되는 상황은 동시에 여러 명의 소비자가 동일한 상품을 주문할 경우 재고 수량에 대한 데이터 정합성이 제대로 유지될까 입니다. 이를 확인하기 위해 동시성 테스트를 진행했습니다.@Service@RequiredArgsConstructorpublic class OrderService { private final OrderRepository orderRepository; private final ProductRepository productRepository; private final B2CMemberRepository b2cMemberRepository; .. 2025. 1. 1.
스프링 부트 로그를 Json 형식으로 저장하기 스프링부트 로그를 Grafana로 확인해보자현재 토이 프로젝트의 경우 아래와 같이 Logback을 설정하여 로그를 저장하고 있었습니다. 이렇게 설정할 경우 아래와 같이 로그가 찍히는 것을 볼 수 있습니다. ${LOG_PATTERN} ./application.log true ./application-%d{yyyy-MM-dd}.log 7 ${LOG_PATTERN} [2024-12-27 21:49:31.5.. 2025. 1. 1.
[Spring] logback 로깅 프레임워크 자바 진영에서 가장 많이 사용되는 로깅 프레임워크는 Logback 입니다. Logback 이란 log4j 이후에 출시된 로깅 프레임워크로서 slf4j를 기반으로 구현됐으며, 과거에 사용되던 log4j에 비해 월등한 성능을 자랑합니다.또한, 스프링부트의 spring-boot-starter-web 라이브러리 내부에 내장돼 있어 별도의 의존성을 추가하지 않아도 사용할 수 있습니다.  Logback의 특징Logback의 특징은 다음과 같습니다. 1. 크게 5개의 로그 레벨(TRACE, DEBUG, INFO, WARN, ERROR)을 설정할 수 있습니다.ERROR: 로직 수행 중에 시스템에 심각한 문제가 발생해서 애플리케이션의 작동이 불가능한 경우를 의미합니다.WARN: 시스템 에러의 원인이 될 수 있는 경고 레.. 2024. 12. 24.
[Spring] logback, log4j2 로깅 Log란?개발을 할 때 로깅은 개발자에게 여러 정보를 전달해주는 역할을 합니다. 개발자가 필요한 정보를 직접 로깅할 수도 있고 애플리케이션이 예상치 못한 동작을 했을 때 error 정보를 전달해주기도 합니다. 또한, 로그를 통해 서비스를 이용하는 사용자가 자주 사용하는 기능을 분석하여 사용자의 니즈를 찾아 품질이 높은 서비스를 제공할 수도 있습니다. 이렇게 중요한 로그를 System.out.println()으로 출력하면 어떻게 될까요? 로그는 시스템의 상태를 알려주는 정보이기 때문에 방대한 양을 담고 있습니다. 그런데 이런 로그를 System.out.println()으로 찍게 되면 상세한 로그를 못 찍을 뿐만 아니라 방대한 정보를 효율적으로 관리할 수 없습니다. 그렇기 때문에 Spring에서는 SLF4J.. 2024. 12. 24.
[Spring] 캐시 데이터 동기화 문제 회원정보 수정 시 데이터 동기화 문제앞서 로그인 및 회원정보 조회시 Spring 캐시를 사용하도록 설정하였습니다.@Service@RequiredArgsConstructor@Transactionalpublic class MemberService { private final MemberRepository memberRepository; private final BCryptPasswordEncoder passwordEncoder; public SignupResponse signup(SignupRequest req) { String phone = req.phone(); String nickname = req.nickname(); String password .. 2024. 11. 27.
[Spring] Spring 캐시를 이용한 로그인 인증 캐시를 이용한 로그인MemeberService에서 @CachePut 어노테이션을 사용하여 로그인한 사용자 정보를 캐시 저장소에 저장합니다.@Service@RequiredArgsConstructor@Transactionalpublic class MemberService { private final MemberRepository memberRepository; private final BCryptPasswordEncoder passwordEncoder; ... @CachePut(value = "member", key = "#session.id") public LoginResponse login(HttpSession session, LoginRequest req) { S.. 2024. 11. 27.