← 탐색

태그된 포스트: 성능 최적화

백엔드 깊이보기 · ·3분 읽기

Virtual Thread 켰더니 오히려 처리량이 반토막 났다

Spring Boot 4에서 spring.threads.

spring bootvirtual threadpinning
백엔드 깊이보기 · ·3분 읽기

LLM 호출 한 줄이 톰캣 스레드 200개를 잡아먹기까지

Spring AI 2.0 GA가 5월 28일에 나온다.

spring aispring boot톰캣
백엔드 깊이보기 · ·3분 읽기

캐시 TTL을 전부 10분으로 맞춘 그날 새벽

캐시 정리의 최적화라고 생각했다. 서비스 전체에 흩어진 @Cacheable 설정을 보니 TTL이 3분, 7분, 15분, 30분 — 제각각이었다.

spring bootrediscache stampede
프론트엔드 시그널 · ·3분 읽기

탭 바꿀 때 상태 날아가는 거 — React가 드디어 답을 냈다

프론트엔드에서 탭 UI를 만들 때 가장 짜증나는 순간이 있다. 사용자가 첫 번째 탭에서 폼을 절반 채우고, 두 번째 탭 갔다 돌아왔더니 입력값이 전부 사라진 거다.

reactactivityreact 19.2
백엔드 깊이보기 · ·3분 읽기

@Transactional 안에 RestClient 호출 한 줄 넣었더니 커넥션 풀이 말랐다

주문 API에서 결제 게이트웨이 연동 하나 추가한 게 전부였다. 배포하고 트래픽 올라가자마자 HikariCP 커넥션 대기 큐가 쌓이기 시작했고, 30초 만에 ConnectionTimeoutException이 터졌다.

spring boottransactionalhikaricp
프론트엔드 시그널 · ·3분 읽기

framer-motion을 반만 지웠더니 Lighthouse가 6점 올랐다

프로젝트에서 framer-motion이 차지하는 번들 비중을 확인한 게 3주 전이다. 페이지 전환 애니메이션 하나 때문에 120KB, gzip으로 38KB.

reactview transitionsframer-motion
백엔드 깊이보기 · ·3분 읽기

Virtual Thread 켰더니 HikariCP가 먼저 터졌다

운영 서버에 Virtual Thread를 적용한 지 이틀 만에 Slack 알림이 울렸다. Connection is not available, request timed out after 30000ms.

virtual threadspring boothikaricp
프론트엔드 시그널 · ·3분 읽기

React Compiler가 조용히 포기하는 컴포넌트들

React Compiler가 정식 출시된 지 반년이 지났다. useMemo와 useCallback을 전부 지워도 된다는 이야기가 트위터를 채웠고, 새 프로젝트에서는 실제로 그런 경우가 많다.

reactreact compilerusememo
프론트엔드 시그널 · ·3분 읽기

스크롤 애니메이션에서 JS를 빼는 데 3년 걸렸다

2023년 Chrome 115에 animation-timeline: scroll()이 들어왔을 때 팀 슬랙에 "GSAP 드디어 졸업"이라고 올렸다. 3년 뒤에도 GSAP는 package.

cssscroll-driven animationsscroll-triggered
백엔드 깊이보기 · ·3분 읽기

findById().save() 대신 한 줄로 끝내는 Upsert가 왔다

3일 전에 findById 하고 save 했더니 데이터가 두 줄 생긴 이야기를 썼다. 그 글을 쓰면서도 속으로 생각했다 — "이걸 왜 아직도 애플리케이션 레벨에서 해결해야 하지?

spring dataupsertspring boot
프론트엔드 시그널 · ·2분 읽기

빌드 46초 → 6초, 근데 진짜 중요한 건 그게 아니었다

Vite 프로젝트를 오래 운영해본 사람이라면 한 번쯤 겪어봤을 거다 — dev 서버에서는 멀쩡한 코드가 프로덕션 빌드에서만 미묘하게 깨지는 상황. 원인을 파고들면 대부분 같은 곳에 도달한다.

viterolldown빌드 도구
백엔드 깊이보기 · ·3분 읽기

Pod 시작 12초를 1초로 줄인 건 GraalVM이 아니었다

작년 겨울, 트래픽 피크 때마다 HPA가 Pod를 늘리는데 Spring Boot 앱이 뜨는 데 12초가 걸렸다. 12초면 이미 늦다.

javaproject leydenspring boot
프론트엔드 시그널 · ·3분 읽기

상태 보존용 꼼수 코드 200줄을 지웠다 — React Activity 실전

사용자가 폼을 3분간 채우고 다른 탭으로 갔다가 돌아오면? 빈 폼.

reactactivity상태 보존
프론트엔드 시그널 · ·2분 읽기

내 '가끔 안 눌리는 버튼' 버그, 2026년부터 Google이 본다

2주 전에 한 사용자가 가격 페이지 결제 버튼이 "가끔 안 눌린다"고 제보했다. 재현이 안 됐다.

engagement reliabilitycore web vitalsinp
백엔드 깊이보기 · ·2분 읽기

Caffeine + Redis 조합, 빠르긴 한데 지뢰도 세 개다

"Redis 앞에 Caffeine 하나 놓으면 빨라지잖아요." 코드 리뷰에서 이 말이 나오면 반은 맞고 반은 틀리다.

caffeineredisspring boot
프론트엔드 시그널 · ·3분 읽기

useMemo 300개를 지우고 나서야 보인 것

작년 10월에 React Compiler 1.0이 나왔을 때, 솔직히 반신반의했다.

reactreact compiler메모이제이션
백엔드 깊이보기 · ·3분 읽기

saveAll() 호출했는데 왜 INSERT가 만 건 나가냐

운영 환경에서 repository.saveAll(list)를 호출하고 슬로우 쿼리 로그를 열었더니 INSERT 문이 10,000줄 찍혀 있었다.

jpahibernatespring boot
프론트엔드 시그널 · ·3분 읽기

React ViewTransition 써봤다 — 번들에서 42KB가 빠졌다

지난달 사이드 프로젝트 하나를 Next.js 16.

reactview-transitionsnext.js
프론트엔드 시그널 · ·3분 읽기

React 앱 INP 실패율이 3배 높은 건 React 탓이 아니다

구글이 3월 코어 업데이트에서 INP를 공식 랭킹 시그널로 격상시켰다. LCP 임계값도 2.

inpcore web vitalsreact