본문 바로가기 메뉴 바로가기

기록하는 개발자

프로필사진
  • 글쓰기
  • 관리
  • 태그
  • 방명록
  • RSS

기록하는 개발자

검색하기 폼
  • 분류 전체보기 (127)
    • JAVA (6)
    • Spring (38)
    • Django (7)
    • 알고리즘 (28)
    • Network (16)
    • 회고 (17)
      • 우아한테크코스 (11)
    • Linux (11)
    • 이슈 (2)
    • 인프라 (2)
  • 방명록

프로젝트 (4)
[400분이 걸리는 10만 개의 알림 요청 시간을 줄여보자] 4. 비동기를 더 우아하게 써볼 순 없을까?

(이 글은 외로운 우테코 5기 취준생 “김동욱”, “이건회” aka “그레이”, “하마드”가 작성했습니다.) 현재 비동기 호출과 FCM의 sendAsync를 통해 FCM 알림 호출까지 비동기로 처리하고 있다. 하지만… String response = FirebaseMessaging.getInstance().sendAsync(message).get(); 여기서 get() 메서드가 자꾸 눈에 걸렸다. 자바 5에서 비동기 함수의 리턴 값을 받을 수 있도록 Future 객체가 등장했고 Future 객체에 값을 꺼내기 위해 get 메서드를 사용한다. FirebaseMessaging의 sendAsync의 반환 타입인 ApiFuture에서 get 꺼내는 동작을 찾아보니 블록킹 방식으로 동작하고 있었다. 추가적으로 자..

Spring 2024. 2. 21. 16:26
[400분이 걸리는 10만 개의 알림 요청 시간을 줄여보자] 3. 왜 CPU 스파이크가 발생할까? JVM WarmUP으로 해결해보자

문제 발생 비동기 처리와 스레드 풀 튜닝을 통해 알림 기능을 개선하며 성능 테스트 하던 중, 문제가 발생했다. ?????????????? 갑자기 CPU 수치가 급등해 99.9%를 찍게 되는 현상을 발견했다. 알림을 처리하는 중 간헐적으로 발생하는 것이 아닌, 배포를 완료한 직후 요청(초반)에만 발생한 후 천천히 내려가는 것을 파악했다. 가용 중인 애플리케이션에서 CPU 수치가 99%를 찍는다는 것은 굉장히 위험한 징후다. 누가 CPU를 좀먹고 있었을까? 해당 현상을 확인하기 위해 다양한 시도를 했다. * 배포 직후 스레드 덤프 → 총 32개 스레드 먼저 스레드 덤프를 통해 확인해보니 알림 요청이 오기 전에는 비동기 스레드가 생성되지 않다가, 알림 요청이 온 이후에야 스레드가 생성 후 RUNNABLE 상태..

Spring 2024. 2. 20. 19:40
[400분이 걸리는 10만 개의 알림 요청 시간을 줄여보자] 2. @Async와 Executor를 사용해 비동기로 이사가기

(이 글은 외로운 우테코 5기 취준생 “김동욱”, “이건회” aka “그레이”, “하마드”가 작성했습니다.) 동기적 알림 처리를 비동기로 수정 @Component @RequiredArgsConstructor public class NotificationEventListener { private final NotificationService notificationService; @EventListener @Async public void handleNotificationEvents(NotificationEvents notificationEvents) { for (NotificationEvent event : notificationEvents.getNotificationEvents()) { notificat..

Spring 2024. 2. 20. 16:50
[400분이 걸리는 10만 개의 알림 요청 시간을 줄여보자] 1. 우리의 알림 서비스는 왜 문제였을까?

(이 글은 외로운 우테코 5기 취준생 “김동욱”, “이건회” aka “그레이”, “하마드”가 작성했습니다.) 사건의 발단 때는 23년 12월 말...하반기 공채에 무참히 실패한 우테코 5기 수료생 두 남자가 만났다. 서울대입구 라멘집에서 늘 그렇듯 일상적인 개발 얘기를 하던 와중 말을 꺼냈다. "피움(23년에 진행한 식물 관리 서비스 프로젝트)의 알림 기능이 문제가 많아 보인다. 프로젝트 막판이라 생각없이 짠 코드가 너무 많다." 처음에 그 말을 꺼냈을 때는 별 관심이 없어 보였다. "이미 끝난 프로젝트이기도 하고...알림? 그거 내가 짠 기능 아닌데? 굳이 신경써야 하나? 그냥 다른 프로젝트 하면 안돼?ㅎㅎ" 하마드는 대충 이런 생각이었다. 하지만 식사 후 서울대입구역 집무실에서 내가 그에게 이 프로젝..

Spring 2024. 2. 20. 16:19
이전 1 다음
이전 다음
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
  • 우테코 회고
  • 알림기능개선기
  • 2차 데모데이
  • 8주차 회고
  • dm-zoned
  • 스프링MVC
  • ZNS SSD
  • 팀프로젝트
  • 런칭 페스티벌
  • 우테코
  • java
  • 피움
  • 스프링 Logback
  • 파이썬
  • dm-zoned 코드분석
  • ZNS
  • 네트워크
  • 백준
  • 피움 6주차 회고
  • 알림개선기
  • 3차 데모데이
  • jpa
  • CI/CD
  • 환경 별 로깅 전략 분리
  • Spring
  • 스프링 프레임워크
  • 회고
  • 스프링 부트
  • 프로젝트
  • 5주차 회고
more
«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함

Blog is powered by Tistory / Designed by Tistory

티스토리툴바