전체 글 (113) 썸네일형 리스트형 [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) .. 더티 체킹(Dirty Checking) - 개념 및 주의사항 / @DynamicUpdate 더티 체킹(Dirty Checking)이란?: JPA가 트랜잭션 커밋 시점에 영속성 컨텍스트에 저장된 엔티티 객체의 상태 변경 여부를 감지하여, 자동으로 DB에 반영해주는 기능 언제 발생할까? 1. 트랜잭션 안에서 2. 영속 상태(EntityManager가 관리 중)인 엔티티에 대해 3. save() 등의 메서드 없이 필드를 변경만 하고 4. 트랜잭션이 commit될 때 → JPA가 내부적으로 flush()를 수행, 이전 스냅샷과 비교해서 변경이 감지되면 UPDATE 쿼리를 날린다 !flush()란?: 영속성 컨텍스트의 변경 내용을 DB에 반영하는 동작→ 트랜잭션 commit 직전에 JPA가 자동으로 호출, 이 시점에 더티 체킹이 수행됨 예)@Transactionalpublic void updateUs.. @Transactional 이해하기 - 내부 동작 및 주의사항 포함 @Transactional이란?: spring에서 지원하는 트랜잭션을 선언적으로 처리하기 위한 어노테이션주로 DB 작업을 수행하는 Service 계층에서 사용되며, @Transactional이 적용된 메서드를 실행하면 트랜잭션이 시작되고 메서드 정상적 종료 시 commit / 예외 발생 시 rollback→ 이러한 흐름을 자동으로 처리해줌 ! 내부 동작 원리 @Transactional은 프록시 기반 AOP 기술로 동작즉, 실제 서비스 객체를 감싸는 프록시 객체가 생성되고 이 프록시가 메서드 호출을 가로채 트랜잭션을 관리 → 프록시가 메서드 실행 전후에 트랜잭션 시작 / 커밋 / 롤백 수행프록시(Proxy)란?: 객체를 감싸서 실제 객체 호출 전/후에 부가적인 처리를 하는 중간 객체Spring에서는 대표.. CustomException 처리 중 DB 저장 오류로 인한 500 에러 해결 문제 상황 잘못된 QR 코드로 출입 요청 시, INVALID_QR_CODE 예외가 발생해야 하지만 500 Internal Server Error 발생 ! 기존 QR 출입 인증 처리 실패 플로우 1. 클라이언트가 QR 코드로 출입 요청 2. processQrAccess()에서 validateQr() 호출 - 요청받은 QR 코드 검증 수행try{ identifier = qrService.validateQr(request.getQrCode());} 3. QR 유효성 검사 → 실패 시 CustomException(INVALID_QR_CODE) 발생public String validateQr(String qrCode){ try{ String storedIdentifier = redisT.. 이전 1 2 3 4 ··· 15 다음