분류 전체보기 (116) 썸네일형 리스트형 @Retryable 사용 시 'Cannot locate recovery method' 500 에러 해결하기 Spring Retry는 네트워크 오류나 DB 비관적 락 구현 등의 상황에서 유용합니다. 오늘은 비관적 락 구현을 위해 사용한 @Retryable에서 발생했던 500 에러를 바탕으로 @Retryable과 @Recover의 동작 원리와 주의점을 정리해 보겠습니다. @Retryable의 동작 원리 @Retryable이 붙은 메서드가 포함된 클래스는 Spring에 의해 프록시 객체로 빈 등록이 됩니다.외부에서 메서드를 호출하면 프록시가 가로채서 다음과 같은 흐름으로 로직을 처리합니다. 재시도 및 복구 흐름 비즈니스 로직 실행 중 에러가 발생하면 설정에 따라 분기됩니다.include에 정의된 에러: 정의된 횟수만큼 재시도를 반복합니다.횟수를 초과하면 해당 에러를 처리할 @Recover 메서드를 찾아 실행합니.. 동시성 문제 - Synchronized, 낙관적 락, 비관적 락, 분산 락 비교 분석 애플리케이션에서 사용자가 동시에 동일한 자원을 수정하려고 할 때 경쟁 상태(Race Condition)가 발생할 수 있으며, 개발자는 이러한 동시성 문제가 발생하지 않도록 설계해야 합니다. 이때 개발자가 선택할 수 있는 4가지의 주요 전략을 분석합니다. 락(Lock)이란 무엇이며 왜 필요할까? 락(Lock)은 여러 주체가 하나의 공유 자원에 동시에 접근하려 할 때, 순서를 제어하고 데이터의 정합성을 유지하기 위한 권한 제어 메커니즘입니다. 공유 자원에 대해 여러 작업이 동시에 일어날 때 한 작업의 결과가 다른 작업에 의해 임의로 변경되는 등의 현상(Race Condition)을 막기 위해서 락이 필요합니다! 공유 자원여러 주체가 동시에 접근할 수 있는 데이터Race Condition공유자원에 동시에 접.. Spring AOP - Aspect, Proxy, Self-Invocation 스프링에서 디버깅을 하며 실행 흐름을 추적하다 보면 내가 짠 적 없는 클래스와 메서드들을 마주하게 됩니다....Proxy, ...Intercepter 등의 클래스들이 실행 스택 트레이스의 상당 부분을 차지하는 것은 AOP가 동작하고 있다는 증거가 됩니다! 이번 글에서는 애스팩트와 프록시가 무엇인지, 왜 디커플링을 가능하게 하는지에 대해 정리합니다. 애스팩트(Aspect) 코드를 짜다보면 핵심 비즈니스 로직이 아니더라도 로깅, 트랜잭션 관리 등 여기저기서 공통적으로 필요한 기능들이 생깁니다.애스팩트(Aspect)는 이러한 공통 기능들을 한 곳에 모아 관리하는 모듈입니다.즉, 부가 기능의 내용과 해당 부가 기능을 어디에 적용할지를 정의한 것! 이렇게 애스팩트를 사용하는 프로그래밍 방식은 AOP(관점 지향 .. [CI/CD] 위험을 감지하는 카나리(Canary) 배포 [infra] - [CI/CD] 가장 기본적인 무중단 배포, 롤링 업데이트(Rooling Update)롤링 업데이트는 배포 중 버전이 섞이는 문제가 있었고, [infra] - [CI/CD] 가장 안전한 배포, 블루-그린(Blue-Green) 배포블루-그린은 안전하지만 리소스 비용 및 '전부 아니면 전무(All or Nothing) 방식의 부담이 존재했다. 이 둘의 장점을 합칠 수 있다면?"배포로 인한 위험을 최소화하면서, 실제 운영 환경에서 신규 버전의 성능을 데이터로 검증하고 점진적으로 안정적인 출시하기"이 질문에 대한 해답으로 카나리(Canary) 배포 전략이 있다. 카나리 배포란? 이름의 유래 카나리 배포는 과거 광부들이 유독가스를 감지하기 위해 탄광에 카나리아 새를 데리고 들어갔던 것에서 유.. [CI/CD] 가장 안전한 배포, 블루-그린(Blue-Green) 배포 [infra] - [CI/CD] 가장 기본적인 무중단 배포, 롤링 업데이트(Rooling Update) 롤링 업데이트는 간단하고 효율적이지만, 배포 중 버전이 섞이는 문제와 장애 발생 시 롤백이 느리다는 명확한 한계가 있었다. 배포로 인한 장애 위험을 극도로 줄이고, 문제가 생겼을 때 1초 만에 이전 버전으로 되돌리기 위해서는 안정성에 모든 것을 건 블루-그린 배포 전략을 고려할 수 있다! 블루-그린 배포란? 똑같은 구성의 운영 환경을 두 세트 준비하여, 서비스 중단 없이 안전하게 배포를 완료하는 전략블루(Blue) 환경 : 현재 운영되어 사용자들이 접속하고 있는 실 서비스 환경 (구버전)그린(Green) 환경 : 새로 배포할 버전이 담길, 사용자에게는 노출되지 않은 환경 (신버전)이 두 환경에 대한 트.. [CI/CD] 가장 기본적인 무중단 배포, 롤링 업데이트(Rooling Update) CI/CD 파이프라인의 마지막 단계인 '배포(Deploy)'에서 무중단 배포 방법 중 하나로 롤링 업데이트(Rolling Update)가 있다. 무중단 배포가 왜 필요할까? 무중단 배포를 적용하지 않은 서비스에서 새로운 버전을 배포하기 위해서는 서비스를 잠시 중단해야 한다.기존 서비스를 내린 뒤 새로운 버전으로 교체하고 다시 실행하는 방식.하지만 24/7 운영이 기본인 오늘날, 배포를 위한 서비스 중단은 사용자에게 나쁜 경험을 주고 비즈니스에 손실을 입힐 수 있다. → 무중단 배포는 이러한 다운타임을 없애기 위한 배포 전략들을 총칭하는 말이며,대표적으로 Rolling Update, Blue-Green, Canary 배포가 있다. 롤링 업데이트의 동작 방식 말 그대로 '굴러가듯이' 점진적으로 업데이트하는.. [CI/CD] 개발부터 배포까지, 자동화하기 이제 CI/CD는 더 이상 선택이 아닌 필수가 되었다.빠른 개발 속도와 안정적인 서비스 운영을 위해 반드시 구축해야 하는 개발 프로세스인CI/CD가 무엇인지 그 개념부터 필요성, 대표 CI/CD 툴까지 알아보자. CI (Continuous Integration) 여러 개발자가 하나의 프로젝트를 진행할 때, 각자 맡은 기능을 며칠, 몇주에 걸쳐 개발한 뒤 마지막에 코드를 합친다면 수많은 conflict가 발생하여 해결에 엄청난 시간이 소요될 것이다.CI란?: 여러 개발자의 각 소스들을 메인 소스에 병합하고 빌드하는 과정의 반복을 자동화하는 것'주기적으로', 그리고 '자동으로' 통합하고 테스트하는 것 왜 필요할까?코드 통합 시 발생하는 문제점을 조기에 발견하고 빠르게 해결 가능버그가 발견되는 시점을 앞당기고.. JPA Specification - 복잡한 검색 조건 처리하기 (vs QueryDSL) JPA Specification이란?: JPA에서 동적 쿼리를 조합할 수 있게 도와주는 WHERE 절 조건 빌더조건을 메서드 단위로 나누고, 조합할 수 있도록 함→ where 절의 조건 하나하나를 Specification 객체로 만들고, 이를 .and(), .or() 등으로 조립한다 ! 기본 사용법 1. Repository에 JPASpecificationExecutor 확장public interface UserRepository extends JpaRepository, JpaSpecificationExecutor {} 2. Specification 정의public class UserSpecification { public static Specification hasName(String name) .. 이전 1 2 3 4 ··· 15 다음