본문 바로가기

전체 글

(212)
[오디] '따닥' 중복 삽입 동시성 이슈 대응을 위한 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건의 요청에서 응답지..
[오디 - 폴링 로직 리팩터링] 2. 계정 로드 밸런싱으로 Request Failed를 잡아보자 이 글은 총 6편의 오디 - 폴링 로직 리팩터링 시리즈 중 3번째 글입니다. [오디 -폴링 로직 리팩터링] 0. 실험 설계1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler2. 계정 로드 밸런싱으로 Request Failed를 잡아보자3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자4. 동시 호출 스파이크에 맞는 스레드풀 최적화5. 리팩터링 총 정리 및 느낀 점 개요 : Request Failed 0% 만들기 오디 폴링 로직 현황을 살펴보기 위해 40개 약속 - 100명의 가상유저 시나리오로 30분간 폴링을 지속한 결과 10분간격으로 외부 API를 호출하는 상황에서 60%가량 되는 Request Failed가 발생했습니다. 현재 오디는 좌표 간 대중교통..
[오디 - 폴링 로직 리팩터링] 1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler 이 글은 총 6편의 오디 - 폴링 로직 리팩터링 시리즈 글 중 2번째 글입니다. [오디 -폴링 로직 리팩터링] 0. 실험 설계1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler2. 계정 로드 밸런싱으로 Request Failed를 잡아보자3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자4. 동시 호출 스파이크에 맞는 스레드풀 최적화5. 리팩터링 총 정리 및 느낀 점 개요 오디 폴링 로직 리팩터링을 위해 K6로 부하 테스트를 진행하던 중 CPU 스파이크가 튀는 문제가 발생했습니다.본 글은 CPU 스파이크 해결을 위해 Jit Compiler Warm Up 순으로 해결방안을 시도했던 기록을 담습니다. Jit Compiler가 코드를 최적화하는 과정을 알아보고 ..
[오디 - 폴링 로직 리팩터링] 0. 실험 설계 프로젝트 '오디'는 약속시간 30분 전부터 친구들이 약속 시간 내에 도착할지, 지각할지 등의 도착예정정보를 알 수 있게 해주는 서비스입니다. 1년전, 우테코 미션으로 이 핵심로직에 성능테스트를 진행하였고, 몇 가지 리팩터링 사안을 발견하였습니다. 1년이 지난 지금, 팀원들은 모두 흩어졌지만 핵심로직을 개발한 사람으로서 그 사명을 다하고자 약 한달 간 실험 설계부터 리팩터링까지 진행해보았습니다. 이번 글은 총 6편의 리팩터링 시리즈의 첫번째 글입니다. [오디 -폴링 로직 리팩터링] 0. 실험 설계1. Warm up Code로 CPU 스파이크 해결하기 feat) JIT Compiler2. 계정 로드 밸런싱으로 Request Failed를 잡아보자3. 트랜잭션에서 외부 API를 분리하여 응답 속도를 낮춰보자4..