본문 바로가기

전체 글144

[알고리즘] Moore's voting algorithm leetcode의 169. Majority Element 문제를 풀다가 알게된 알고리즘입니다. 이 알고리즘은 처음 들어봐서 공부하고 정리했습니다.  1. 배경문제를 간단하게 요약하면,array 에 (array의 length // 2) 번 넘게 나타나는 원소를 찾는 것입니다. 처음에는 sort를 이용하려고 했는데, O(nlogn) 시간복잡도가 생기고 공간은 O(1) 를 사용하게 됩니다.하지만 문제 맨 마지막 줄에 선형 시간 + 공간 O(1) 만 사용해서 풀 수 있다는 글이 있었습니다.  도저히 모르겠어서 결국 해답을 봤고, Moore's voting 알고리즘을 알게 되었습니다.  2. 알고리즘 이 알고리즘은 stream algorithim 입니다.(데이터 스트림을 처리하는 알고리즘) 배열에 중복되는 데이터.. 2025. 3. 27.
[DB, REDIS] PostgreSQL 및 Redis Cluster 관련 이슈 팀원이 운영하는 서비스에 장애가 났었습니다.그래서 같이 원인을 찾아봤습니다. 1. 문제 상황PostgreSQL 를 사용하고 있습니다.  여기서 문제는 해당 Table 을 조회하는 쿼리를 잘못 전송해서 db disk 사용량이 급격히 증가했고, 이 타이밍에 partition table 만드는 작업이 수행이 되어서 db lock이 걸려서 문제가 되었습니다.  Redis의 경우에는 master node가 종료됨에 따라서 데이터를 write를 못하는 현상이 있었고, 서비스를 사용자에게 제공하기 까지의 시간이 매우 오래 걸리는 문제가 있었습니다.  2. 원인PostgreSQL의 disk 사용량이 급격하기 늘어난 이유는 temp file 때문입니다.PostgreSQL은 sorting을 할 때, worker memor.. 2025. 2. 25.
[Spring] redis stream 최근 회사에서 로깅 로직 때문에 성능 저하가 있었습니다.요청 -> 로그 DB 적재 형태로 되어 있다 보니 트래픽이 많이 발생하게 되면 connection pool , insert 성능 등 문제가 있었습니다. 그래서 로그를 DB에 바로 적재하는 방식이 아니라 중간에 로그를 모아서, bulk로 insert 하도록 로직을 수정하려고 했습니다.이를 위해 redis stream을 이용했습니다.  1. redis stream이란?redis에는 다양한 자료 구조가 있습니다.이중에서 이벤트 소싱처럼 쓰기 적절한 자료구조로 list, pub/sub, stream 이 있습니다. pub/sub의 경우에는 중복 없이 데이터를 동시에 처리할 수가 없습니다. 예를 들면, test_topic이라는 topic이 있고, 이를 여러 c.. 2024. 12. 17.
로깅 로직 수정 1. 문제 상황트래픽이 몰리는 시간 대에 response time이 지연되는 현상이 있었습니다. 로깅 툴을 보니 jdbc 커넥션을 맺거나 db에 insert하는 데에 많은 시간이 걸리고 있었습니다. 2. 원인제가 맡은 서비스는 아니였지만, 최근에 도메인을 넓히면서 해당 서비스도 보고 있었습니다. 이 서비스는 사용자 요청이 오면 이를 처리한 후 DB에 로그 데이터를 넣는 방식으로 동작하고 있었습니다. DB의 insert 작업은 조회에 비쌉니다.(다행히도 index는 걸려있지 않았었습니다. 해당 로그를 조회할 일이 크게 없어서 그런가봅니다...)그렇다보니 부하가 발생하면 해당 작업을 처리하기까지 connection pool을 차지하고 있을 것이고 다른 요청들은 남는 connection pool이 없어서 대기.. 2024. 12. 15.
[Mybatis] 테스트 코드 작성 최근 회사에서 서비스를 분리하고 있습니다. 기존 서비스가 점점 거대하지면서 서비스를 분리하려고 했습니다.서비스를 분리하면서 구현한 기능이 잘 동작하는 지 테스트 해볼 필요가 있습니다. 이를 위해서 저는 테스트 코드를 작성하자고 팀원에게 제안했었습니다. 팀원 분도 관심이 있으셔서 받아들였습니다.(기존에는 테스트 코드가 존재하지 않았었습니다.)   1. 서론아키텍처 구조는 헥사고날 아키텍처를 이용하고 있습니다. https://github.com/thombergs/buckpal GitHub - thombergs/buckpal: An example approach for implementing a Clean/Hexagonal ArchitectureAn example approach for implementing.. 2024. 11. 23.
[REDIS] 레디스 조회 성능 개선 - 1 1. 문제 상황회사에서 겪은 문제입니다. 레디스 hash 구조로 데이터가 저장되어 있습니다.그리고 이 중 몇 개를 가져와서 가공 후 실제 데이터를 제공합니다. 부하테스트를 했을 때 기대치보다 낮은 결과가 나왔었습니다.그래서 원인을 파악하기 위해서 시간을 로그로 찍어본 결과, redis에서 데이터를 조회하는 데에 대부분의 시간을 소모하고 있었습니다. 레디스에서 데이터를 읽는 데만 약 140~200ms 정도 걸렸었습니다.2. 원인첫 번째로 생각했던 이유는 redis 설정 문제였습니다. 하지만 os 파라미터 등을 조회해봤을 때 큰 문제는 없었습니다.두 번째는 네트워크 부하입니다. 데이터가 꽤 크기 때문에 네트워크 단에서 부하가 일어나지 않았을까라고 생각했었습니다.마지막으로는 redis의 hkey 같은 O(N).. 2024. 10. 2.