전체 글146 [JAVA] logback gz 압축 방법 최근 회사에서 위치 정보를 보관하기 위한 모듈을 만들고 있습니다.사실 제 서비스에서만 돌아가도록 구현을 해도 상관 없지만, 팀 내에 다른 서비스에도 적용해야 하기 때문에 이왕이면 모듈화를 시켜서 팀의 생산성을 높이고 싶어서 모듈을 만들었습니다. 이 과정에서 logback 내부를 뜯어보면서 많은 점을 배웠습니다. 이 점을 공유하려고 해당 글을 작성하게 되었습니다. RollingPolicy위치 정보를 파일로 남기는 방식으로 진행이 되게 됩니다.그러기 위해서는 logback의 FileAppender를 이용하고 rolling policy를 이용하면 편합니다. spring 개발자라면 TimeBased나 SizeAndTimeBased를 자주 이용하실 것입니다. 하루가 지나면, 이 로그를 gz로 압축하는 등의 작업.. 2025. 4. 29. [책] 가상 면접 사례로 배우는 시스템 설계 2 이 책이 2편이 나왔습니다. 1편도 많이 유명했었고, 실제 업무에 도움이 되어서 좋았습니다.2편은 2회독 했고, 역시 제 생각을 넓히는 데 많은 도움이 되었습니다.(1회독 끝난 지 꽤 되었습니다. 3달 넘은 것 같네요.) 인상 깊은 내용으로는우선 redis의 big key와 hot key 문제입니다. 이 내용은 꽤 유명하고 redis 공식 문서에서도 다루고 있습니다.실제로 제가 개발하고 있는 서비스에도 hot key 문제가 보여서 수정하고 부하 테스트를 해보려고 하고 있습니다. 2번 째로 인상 깊은 내용은 전자 지갑 파트입니다.이 파트에서 잔액 이체의 트랜잭션을 위해서 redis 대신 RDBMS를 사용해서 분산 트랜잭션을 구현한다는 내용이 있습니다.실제로 정합성이나 트랜잭션이 중요한 서비스는 redis를.. 2025. 4. 20. [알고리즘] 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. 이전 1 2 3 4 ··· 25 다음