분산 캐시 동기화 문제, Redis Pub/Sub으로 해결하기
·
프로젝트
너무 느린 외부 API우리 팀은 외부 시스템과의 연동 프로젝트를 진행하게 되었다. 요구사항은 간단해 보였죠. "해당 일자에 주문이 가능한지 외부 API를 통해 확인할 수 있어야 한다." 하지만 실제로 구현해보니, 고객에게 정확한 정보를 전달하기 위해선 한 화면에서 40~60건의 날짜별 배송 계획을 한 번에 조회해야 했다. 병렬 처리를 적용했음에도 불구하고 API 응답 시간은 500ms에서 1초, 심지어 요청이 여러 번 겹치면 그 이상 소요되었다. 연동사에서 제공해준 bulk API를 사용했는데 오히려 더 느려졌다.사용자가 주문 가능 일자를 확인할 때마다 1초 이상을 기다려야 한다니, 이건 명백히 사용성에 심각한 문제였다. 우리는 데이터가 일자 단위로 예측 가능하고 실시간이 덜 중요하다는 점을 주목했다.캐..
실무에서 @Transactional을 제거했더니 성능이 2배 향상된 이유
·
Spring/Hibernate
Spring에서 @Transactional(readOnly = true)는 DirtyChecking 모드를 Manual 모드로 바꿔줘 성능 최적화를 위해 사용된다고 알려져 있지만, 오히려 불필요한 JDBC 호출로 인해 성능이 저하될 수 있다. 이 글은 Elastic APM을 통해 확인한 실제 호출 로그를 바탕으로 readOnly 트랜잭션이 성능에 어떤 영향을 주는지 분석하고, 실무적으로 더 나은 대안을 제시한다. 아는 사람만 아는 @Transactional의 비밀다음 API는 @Transactional(readOnly = true)로 선언된 Service 메소드를 호출한다. Elastic APM을 통해 추적한 결과, 해당 API는 단 2개의 SELECT 쿼리만 실행함에도 불구하고, 여러 번 JDBC 호출..
마지막 글또
·
활동/글또
시작할 때의 마음글또 9기가 좋았다.커뮤니티에 속해 다른 사람들과 교류하고, 글을 쓰며 발전해나가는 내 모습이 마음에 들었다. 그래서 10기에도 참여했다. 마지막 글또를 시작하며 몇 가지 목표를 세웠었다.즐기기한 달에 한 명씩 알아가기일주일 앞서서 글 제출하기그렇게 부담스럽지 않은 목표였다.글또 9기 때처럼 매일 야근에 시달리고 있는 시기도 아니었기에, 이번엔 좀 더 여유롭게 할 수 있으리라 생각했다.  게다가, 이번엔 회사 동료분과 함께 하는 활동이었기에 심리적 부담도 덜햇다.'동료가 커뮤니티 활동에 참여하면 나도 껴야지~''다른 활동에 참여할 때, 회사 분들에게 권유도 해봐야지~'그런 긍정적인 생각으로 시작했다. 하지만 우려했던 일이 결국 벌어지고 말았다."지금도 벌여 놓은 일이 많은데, 글또 커뮤니..
당신의 메모리는 안녕하십니까?
·
Spring/Spring Boot
당신의 애플리케이션은 안전한가요?"혹시 서비스 운영 중 아무런 이상이 없어 보이던 시스템이 갑자기 느려지고, 응답 시간이 증가하며, 결국 장애로 이어진 경험이 있지는 않나요? 우리가 흔히 간과하는 작은 코드 한 줄이 애플리케이션 성능 저하와 서버 장애를 초래할 수 있다는 사실, 알고 계셨나요?" 이런 문제는 대부분 메모리 관리의 작은 실수에서 시작된다. 애플리케이션이 실행되는 동안 메모리는 끊임없이 할당되고 해제된다. 특히 Java의 JVM 메모리 관리 방식을 제대로 이해하지 못하면, 시스템 성능 저하와 장애를 초래하는 메모리 누수(memory leak)가 발생하여 시스템 성능이 점점 저하될 수 있다.위 그래프는 JVM 메모리 사용량을 보여준다. 특정 시점에 메모리 사용량이 급격히 증가하고 있다. 많은 ..
기술과 관리 사이에서 (넥스터즈 26기 후기)
·
활동/동아리
PM에 도전하다.넥스터즈가 어떤 식으로 진행되는지도 몰랐던 나는, 패기롭게 아이디어를 제출했다. PM의 역할을 맡으면 이것저것 챙길 일이 많아질 테지만, 제대로 고생 한 번 해보면 스스로 더 성장할 수 있을 거라고 믿었다. 나는 협업의 중심점 역할을 맡아, 팀을 이끌고 문제를 해결하는 경험을 해보고 싶었다. 단순히 맡은 업무를 수행하는 것이 아니라, 팀이 효율적으로 움직일 수 있도록 방향을 제시하는 사람이 되고 싶었다.   나는 어떤 PM이었나?PM이란 "프로덕트를 성공시키기 위해 무엇이든 할 수 있는 역할"이라고 생각했다. 하지만 구체적인 역할을 정의하지 못했던 나는 프로젝트 초기에 약간 방황하며 어려움을 겪었다. 이 과정에서 회사의 PM 분과 커피챗을 요청해 이야기를 나눴다. 그분 역시 "PM의 존재..
2024년 회고
·
끄적끄적
개발1. 1일 1커밋올해도 어김없이 1일 1커밋을 성공적으로 이어갔다.이제는 "1일 1커밋을 해야 하니까 개발을 한다"는 생각이 아니라, "매일 개발을 해야 하니까 그 과정에서 1일 1커밋을 자연스럽게 기록한다"는 느낌이다. 마치 개발을 위한 다이어리를 쓰는 것처럼 말이다. 이는 분명 긍정적인 변화라고 생각한다. 2. 블로그글또 9기의 경험이 좋았기에, 글또 10기에도 참여하게 되었다. 글또 10기 시작!글또 지원9기에 이어 10기에도 지원했다. 이것저것 벌여 놓은 일들(스터디 2개 운영, 오픈소스 컨트리뷰션 활동 등)이 많아 글또를 잘 할 수 있을까? 라는 생각이 있었다. 그래도 하고 싶었다. 저myvelop.tistory.com 글또에 참여한 이후, 더 좋은 글을 쓰기 위해 고민하는 시간이 많아졌다...