Backend/Kori 3

모니터링 기술 활용 경험기(Sentry, Prometheus & Grafana)

1. 서론이번에는 예외 모니터링 기술을 활용하여 운영 과정에서 발생한 문제를 빠르게 해결한 경험과 서버 리소스 및 성능 모니터링 기술을 활용하여 개선점을 찾아낸 경험을 공유하고자 한다! 2. 서버 장애에 신속히 대응하기 위해: Sentry작년 10월, 서비스 배포 직후 Sentry로부터 서버에서 500 에러가 발생했다는 알림을 받았다. API End-point 및 사용자의 위치정보는 일부 가렸습니다!개발 과정에서 충분히 케이스를 세분화하여 테스트를 했다고 생각했는데,, 정말 예상치 못한 케이스가 있었다! 사진에서 표시된 위도와 경도 값을 보면, ‘해외에서 전달된’ 요청을 처리하는 과정에서 문제가 발생했음을 알 수 있다. 한류에 관심있는 외국인들이 많은 것 같아서 감사하다. 🫡 에러의 가장 근본적인 원인..

Backend/Kori 2025.02.18

Batch Insert 를 통해 JPA의 한계를 극복하다 (Spring JDBC )

개인 프로젝트를 개선하는 과정을 기록한 글입니다! 1. 서론Kori에는 주기적으로 새로운 축제 정보를 확인하여 데이터베이스에 저장하는 작업이 있다.그런데, MariaDB에 PK 생성을 위임하는 환경에서 JPA를 사용하다보니 삽입 쿼리가 아래와 같이 나타났다.INSERT INTO table (col1, col2) VALUES (val1, val1);INSERT INTO table (col1, col2) VALUES (val2, val2);INSERT INTO table (col1, col2) VALUES (val3, val3);... 이처럼 레코드 수만큼 데이터베이스에 INSERT 쿼리를 전송하면 비효율적인데, 대표적인 원인은 아래와 같다.네트워크 오버헤드 증가각 INSERT 문이 실행될 때마다 데이터베이..

Backend/Kori 2025.01.31

멀티스레드와 스레드 풀을 활용한 축제 업데이트 성능 개선

개인 프로젝트를 개선하는 과정을 기록한 글입니다!1. 서론Kori 에 추가할 기능을 위해, 외부에서 제공하는 API를 바탕으로 데이터를 주기적으로 업데이트하는 기능을 개발하고 있다. 그런데, I/O가 많은 작업을 싱글스레드에서 동기방식으로 처리하는 것이 비효율적이라고 느꼈다. 이번 포스트에서는 스레드 풀을 활용한 멀티 스레드를 도입하여 작업 처리 속도를 개선한 과정을 정리하고자 한다. 1.1 Non-blocking I/O VS Multi-threading싱글스레드에서 동기방식으로 I/O 작업을 처리하면, 해당 작업이 완료될 때까지 실행중인 스레드는 대기 상태가 된다.즉, CPU는 아무런 연산을 하지 못한채 I/O가 마무리될때까지 기다리게 되므로 CPU를 낭비하는 문제가 발생한다.이를 개선하기 위해 대표적..

Backend/Kori 2025.01.13