Spring29 순차 처리로 인한 네트워크 트래픽 문제, Queue 기반 스케줄링으로 70% 감소 순차 처리로 인한 네트워크 트래픽 문제, Queue 기반 스케줄링으로 70% 감소기술 블로그의 게시글을 한번에 볼 수 있는 서비스를 운영하고 있습니다.서비스 이용자분들에게 최신의 게시글을 보여드리기 위해서, 하루 간격으로 RSS를 제공하는 블로그의 게시글을 수집하고 있습니다.수집하는 작업은 아래와 같이 Spring Scheduler를 통해서 구현했는데요.(궁금하신 분들은 아래 코드를 참고해주세요.) 매일 동시간대에 19개의 블로그를 순차적으로 수집하다보니, 트래픽이 급격하게 증가하는 현상이 지속적으로 발생했습니다.Network InNetwork Out피크 트래픽이라고 하기엔 다소 낮은 수치일 수도 있습니다. (수치를 직접 확인해보고 싶으신 분들은 아래 내용을 참고해 주세요.)600 Kbps = 600,.. 2024. 9. 27. Cglib Proxy에 포함되지 않는 Final Method 모든 코드는 github를 참고해주세요.Cglib Proxy에 포함되지 않는 Final Method토이 프로젝트에서 Server Error 발생 시에 Slack으로 알림을 보내주도록 설정했었는데요.해당 설정을 사내에서 진행했던 프로젝트에 적용하려고 했습니다.(궁금하신 분들은 Spring AOP로 Slack 알람 구현 포스팅을 참고해주세요.)토이 프로젝트에서 적용했던 설정을 사내 프로젝트에 그대로 적용했지만,개발 서버에 정상적으로 배포 후, 제보를 받았어요.클라이언트에서 Server Error 응답을 받았지만,슬랙 채널로 알림이 오지 않는데요? 분명, local(로컬) 환경에서 테스트를 진행했었고, dev(개발) 환경에 정상적으로 배포되었는데 말이죠.디버깅을 해보면서 확인해보니, 특정 Exception .. 2024. 6. 29. 강결합된 구조를 이벤트 기반 약결합된 구조로 변경하기(with. Spring Event) 강결합된 구조를 이벤트 기반 구조로 변경하기(with. 트랜잭션 분리)쿠폰(Coupon) 발급 시 해당 회원에게 알림이(Notification) 발송되어야 하는 요구사항으로 인해 기존 프로덕션 코드가 수정되어야 했습니다.* 알림: 서비스 내 알림, 메일, SNS 알림 등을 의미합니다. 해당 요구사항을 파악 후 기존 쿠폰 서비스 객체에 알림 서비스 객체를 추가하는 방향을 고려했습니다. 그렇다면, 쿠폰 발급 시 알림이 발송되는 흐름은 다음과 같습니다. 하나의 트랜잭션으로 진행되다보니, 다음과 같은 문제점을 발견했습니다. 보조 업무인 알림 발송이 실패할 경우, 핵심 업무인 쿠폰 발급이 실패할 수 있다. 핵심 업무(Core Business): 쿠폰을 발급하는 로직보조 업무(Auxiliary Bu.. 2024. 5. 8. ATDD, 클린 코드 with Spring 과정을 통해 배운 인수 테스트(Acceptance Test) 인수 테스트(Acceptance Test)본 포스팅은 ATDD, 클린 코드 with Spring에서 경험한 E2E(API) 테스트 기반의 인수 테스트에 대한 내용을 소개합니다.독자분들에게 미리 말씀드립니다.인수 테스트가 만능이다?인수 테스트를 무조건 작성해야 한다?절대 아닙니다!!!인수 테스트란?인수 테스트에 대해 이야기하기 전, 먼저 테스트가 무엇인지 스스로 고민해볼 필요가 있을 것 같습니다.어떤 사람은 아래와 같이 생각할 수 있을 것 같습니다. 코드를 작성하고 검증하는 것 인수 테스트를 작성하기 시작한다면, 아래와 같이 생각해볼 수 있을 것 같습니다. 코드를 작성하기 전, 어떤 코드를 작성해야 하는지 TODO 리스트를 작성하는 것 이는 TDD(Test Driven Development)에서 실.. 2024. 3. 8. Rate Limiting 인터셉터를 활용한 트래픽 관리 NOW 프로젝트를 진행하면서 기록한 글입니다. Rate Limit에 대해서 고민을 하게된 계기 현재 컨테이너 기반 PaaS 클라우드 서비스를 이용해서 배포 후 운영 중, 잠시 다음과 같은 생각을 하게되었는데요. 추후 실제 서비스를 시작하게 된다면? … 혹은 사용자가 점차 늘어난다면? 어떠한 플랜을 구독할까?.. 또 어떠한 플랜들이 있을까? 출처: https://www.cloudtype.io/pricing 현재 사용 중인 플랜은 디벨로퍼로, 매달 허용하는 트래픽을 10GB로 제한하고있는데, 현재 서비스에서 대략적으로 발생되는 트래픽량이 어느정도인지 가늠해보고자 했습니다. 메인 페이지 기준으로 디버깅을 해보았습니다. 초기 로딩 시 현재 프로젝트 구조가 SPA(Single Page Application) 이다.. 2023. 9. 11. Spring Cache(스프링 캐시) 적용 NOW 프로젝트를 진행하면서 기록한 글입니다. Cache를 적용하게 된 이유 Cache를 적용하기 전, 수백 명이 동시에 메인 페이지로 접속할 경우에 대해서 생각해보았습니다. 수백 명의 사용자는 게시물 목록을 가져오는 요청을 보낼 것이고, 아래 핸들러 메서드가 수백 개의 쓰레드(Thread)에 의해 실행될 것입니다. 이로 인해 트래픽이 급격하게 증가하게 되며, 이는 주로 WAS(Web Application Server)와 데이터베이스(DB) 간의 통신량이 급증하는 것을 의미합니다. (아래는 모든 게시물 목록을 가져올때 실행되는 쿼리입니다.) 이에 따라, 우선적으로 현재 상황에서 부하를 최소화 하기 위한 방법으로 쿼리 최적화보다는 자주 요청되는 쿼리 결과를 Cahce하여 서버 응답 성능을 향상시키고자 했습.. 2023. 8. 26. 이전 1 2 3 4 5 다음