분류 전체보기 (215) 썸네일형 리스트형 [디베이트 타이머] GC로 인해 우주가 잠시 꺼진 이야기 안녕하세요 브로콜리입니다. 오늘은 디베이트 타이머 프로젝트 운영 과정에서 겪었던 GC 이슈에 대해 공유드리고자 합니다. 개요JPA 더티체킹을 활용한 update문에서 발생가능한 StaleObjectException에러를 설명합니다.멀티 스레드 애플리케이션 환경에서 GC로 인한 STW 단계의 스레드 정지가 JPA update 에러로 이어질 수 있는 가능성에 대해 설명합니다. 문제를 발견한 계기디베이트 타이머 dev 환경에서 평화를 깨는 에러 알림이 울렸습니다. 에러를 보고 적잖이 당황했습니다. ObjectOptimisticLockingFailureException? 낙관적 락...에러? 애플리케이션에서 락을 활용한 동시성 처리를 하고 있지 않았기 때문에 문제를 특정하기 어려웠습니다. 그러나, MySQL 내.. 스프링 인터셉터에서 발생한 모든 예외는 ControllerAdvice가 잘 처리해줄까? 안녕하세요 브로콜리입니다. 오늘은 인터셉터를 가지고 실험하다가 발견한 재미있는 부분에 대해 공유하고자 합니다. 1. 개요인터셉터에서 발생한 모든 예외를 스프링 ControllerAdvice/ExceptionHandler가 처리해준다는 오해를 바로잡습니다.인터셉터 preHadle, postHandle, afterCompletion에서 발생한 예외에 대하여 각각 Controller, RestController인 상황에서 어떻게 처리되는지 살펴봅니다.상황은 이렇습니다. 인터셉터 vs 필터에 대해 알아보다가 많은 글에서 크게 두 가지 차이점을 기술하고 있음을 발견했습니다. 차이점1) 스프링에 의한 예외 처리- 인터셉터는 스프링 컨텍스트이기 때문에 스프링에 의해 예외처리 됨- 필터는 스프링 컨텍스트에서 벗어나 .. [디베이트 타이머] 실 사용자 200명과 토론대회 공식 타이머까지 안녕하세요 브로콜리입니다. 연초를 맞아 밀렸던 일 중에 하나를 하고 싶어 늦은 새벽 카페에 왔습니다.약 1년간 이끌어온, 그리고 지금도 진행중인 디베이트 타이머 회고입니다. 1) 성과회원수 : 25년 12월 말 기준 회원 수 233명을 기록했습니다. 트래픽 :올 한해 간 꾸준히 평균적으로 하루 15-20명은 사용하고 있으며 한창 토론 성수기 시즌인 11월에는 WAU 120대를 뚫으며 유의미한 모습을 보여주기도 하였습니다. 연계8월에 진행되었던 중앙선관위 주최 열린 토론대회의 타이머로 활용되어 예본선 63경기를 운영했습니다.심사위원 및 타이머 운용요원분들로부터 만족도 9점에 준하는 높은 만족도를 기록하기도 하였습니다.자세한 운영과정이 궁금하시다면 다음 링크에서 확인하실 수 있습니다. - 과기부 주최 A.. [오디] '따닥' 중복 삽입 동시성 이슈 대응을 위한 8가지 대안 개요오디 프로젝트 운영 중 나타난 동시성 이슈에 대해 8가지 대안을 살펴보고, 결론을 도출해낸 과정을 소개합니다.8가지 대안이란 다음과 같습니다. 1) synchronized + @Transactional2) synchronized + 비관적 락3) synchronized + 수동 트랜잭션4) DB 락(낙관적 락 / 비관적 락)5) Unique Index6) Redis 분산락7) Mysql 네임드 락 + @Transactional8) Mysql 네임드 락 + 수동 트랜잭션 상황회원 탈퇴 에러를 디버깅하던 중 동일 회원이 동일 약속에 중복참여한 케이스가 있다는 것을 알게되었습니다. 의아했습니다. 분명 약속 참여자인 Mate 엔티티에 Unique Index로 (meeting_id, member_id, del.. 구름톤 15기 BE 참여 - 우수상 수상 및 후기 지원한 이유지난 8월 쯤에 구름톤 15기를 모집한다는 인스타 광고를 보았다. 이전 구름톤 지원에서 떨어진 이력이 있기도 했고 이미 다른 해커톤을 진행중이었어서 처음에는 생각이 없었다. 시간이 지날수록 내 마음 깊은 곳에서 다음과 같은 목소리들이 들려왔다.- 제주도 간 김에 워케이션 하자! (- 새로운 기술적 도전을 해보고 싶다- 좋은 인적 네트워크를 쌓고 싶다- 나 홀로 백엔드를 담당하여 중압감을 홀로 감당하는 경험을 해보고 싶다- 쿠버네티스를 사용해보고 싶다 그래, 어차피 저번에도 떨어졌는데 이번도 아쉽지나 않게 지원이나 해보자! 그렇게 하루정도를 잡고 지원서를 작성하게 되었다. 자기소개서 항목별 포인트솔직히 구름톤 백엔드는 단 6명만 뽑기 때문에 운빨이 중요하다. 다만 DB, 인프라, CI/CD 파.. [오디 - 폴링 로직 리팩터링] 5. 리팩터링 총 정리 및 느낀 점 이 글은 총 6편의 오디 - 폴링 로직 리팩터링 시리즈 중 마지막 여섯 번째 글입니다. [오디 -폴링 로직 리팩터링] 0. 실험 설계1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler2. 계정 로드 밸런싱으로 Request Failed를 잡아보자3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자4. 동시 호출 스파이크에 맞는 스레드풀 최적화5. 리팩터링 총 정리 및 느낀 점 그럼 약 한달간의 실험설계 부터 리팩터링까지의 여정을 다시금 돌아보겠습니다. 이번 리팩터링은 약 1년전에 우테코 레벨4 성능 부하 테스트를 통해 발견한 문제를 해결하기 위해 기획되었습니다.당시 각자 여유가 없어 급하게 부하테스트만 하고 넘어간 부분이 있어 '폴링이 부정확하다' 정도의 인.. [오디 - 폴링 로직 리팩터링] 4. 동시 호출 스파이크에 맞는 스레드풀 최적화 이 글은 오디 - 폴링 로직 리팩터링 시리즈 6편의 글 중 5번째 글입니다. [오디 -폴링 로직 리팩터링] 0. 실험 설계1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler2. 계정 로드 밸런싱으로 Request Failed를 잡아보자3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자4. 동시 호출 스파이크에 맞는 스레드풀 최적화5. 리팩터링 총 정리 및 느낀 점 개요프로젝트 오디의 폴링 로직에서는 10분 간격으로 외부 API를 호출합니다. 이 과정에서 호출 태스크가 queue에 머무르면서 비동기 스레드풀의 큐가 50까지 꽉 차는 경우가 발생했습니다. 이것이 문제가 되는 이유는 큐에 태스크가 대기하면서 외부 API를 호출하여 소요시간을 정확히 업데이트하는.. [오디 - 폴링 로직 리팩터링] 3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자 이 글은 오디 - 폴링 로직 리팩터링 시리즈 6편의 글 중 4번째 글입니다. [오디 -폴링 로직 리팩터링] 0. 실험 설계1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler2. 계정 로드 밸런싱으로 Request Failed를 잡아보자3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자4. 동시 호출 스파이크에 맞는 스레드풀 최적화5. 리팩터링 총 정리 및 느낀 점 개요 : 응답속도 줄이기 오디의 폴링 로직 현황을 보기 위해 40개 약속 - 100명의 가상 유저를 대상으로 30분간 10초간격으로 동시요청을 수행한 결과 외부 API 호출 시점인 10분간격마다 응답속도가 10초 이상 늦어지는 것을 볼 수 있었습니다. K6로 요청한 18000건의 요청에서 응답지.. 이전 1 2 3 4 ··· 27 다음