728x90
반응형

전체 글 142

Redis Cache 성능 저하 이슈 수정

이번주 월요일에 슬랙에 지속적으로 같은 로그가 되게 많이 떴었다.사실 redis를 다른 팀에서도 사용을 하고 있기에 좀 더 주의깊게 확인해봐야 했지만 전체가 태그되는 바람에 잘 모니터링 하지는 못했던 것 같다.이게 갑자기 alert log가 뜨게 되니까 되게 이상했다. 그리고 latency가 그래프 상으로 기하급수적으로 증가한게 보일 것이다.이 로그가 문제는 내가 배포했던 시간부터 쭉 나왔다는 것이다.신규 기능을 해당 시간에 오픈을 진행했었고, 그 이후로 로그가 지속적으로 찍혔었다. 😭😭😭퇴근길에 놓치고 있었던 스레드에 같은 팀의 백엔드 개발자분이 먼저 남겨주셨다.말씀주신 기능보다는 다른 기능에서 문제가 있긴 했다. 저쪽은 캐시도 사용하지 않으며 문제될것이 전혀 없던 곳이었다.아래 제보된 것부터는 ..

NoSQL 2025.03.26

FeignClient의 parameter type mismatch

개발을 하다가 어드민을 사용하시는 부분에서 제보가 들어왔다.request log를 보니 LocalDate 를 받도록 되어있는데 분명히 yyyy-MM-dd 형식으로 request log가 찍혔는데?근데 좀 달랐다. access-language가 en-US로 되어있는것!어드민 사용하시는 분에게 여쭤봤더니 자신은 크롬 브라우저를 영어모드로 사용한다고 했다.시작점아, 설명하기 앞서 이 상황은 앞단에 proxy 서버가 따로있다. 호출 방식이 아래처럼 되어있다.앞단은 proxy server라고 지칭하겠다.client ->  proxy server -> 우리의 serverproxy server에서는 우리 server로 bypass 시켜주며 그 때 call 해주는 방식을 Spring Cloud OpenFeign을 사용..

디버깅 2025.02.26

Hikari CP Connection is not available 오류

일을 하면서 서버 에러로그에 언제부턴가HikariPool-1 - Connection is not available, request timed out after 3000ms위와 같은 에러 문구가 특정 주기를 가지고 계속 노출되었다.일단 여러가지 문제가 있었는데, 먼저 해결된 것부터 써보려고 한다.HikariCP pool size일단 내가 개발하는 서비스 특성상 특정 시간대 or CRM으로 푸시알림이 발송된 순간에 트래픽이 몰리는 경향이 있다.그래서 내가 입사하기 이전부터 서비스에선 hikari cp 권장사항인 maximum-pool-size와 minimum-idle 개수를 다르게 줬었다.물론 minimumIdle 설정 개수가 더 적었었다.그렇게 잘 유지되다가 어느날부터 트래픽이 몰리면 이제 유휴에서 max..

DB 2025.02.19

2024년 회고

올 한해도 뭔가 얻어간게 많았던 것 같은 시기였다.작년에는 회고글도 못쓰고 바쁘게 지나갔던 것 같은데, 이번에는 또 어떻게 시간이 나서 이렇게 정리글을 쓸 수 있게 되었다. 1. 이직기존 회사에서 자비스앤빌런즈(삼쩜삼)로 이직하게 되었다.이전 회사에 비해서 인원이 일단 굉장히 많아졌고 그리고 개발자분들이 되게 많아서 놀랐다.물론 나머지 회사들이 아깝게 떨어져서 마지막으로 여길 오게된건 운명이 이끈걸까? 싶다. 이번에도 서류를 합격하는 맛을 보았기 때문에 이제 더 위로 계속 갈 수 있을거라고 많이 생각하고 있다. 계속 은행과 돈이 관련된 업무들을 쭉 하고 싶다는 생각에 아래 회사들을 넣었었다.- 카카오뱅크 (과제 불합)- 토스뱅크 (2차면접 불합 -> 재시도 후 1차면접 불합)- 카카오페이증권 (과제 취소..

Diary 2024.12.30

DataIntegrityViolationException에 대해서

짧은 근황을 먼저 얘기하자면...올해 3월부터 이직을 하게되어 삼쩜삼(자비스앤빌런즈) 백엔드 엔지니어로 현재 이직하여 회사를 다니고 있다.나중에 다른 포스팅으로 해당 부분은 잘 작성해보도록 하겠다.이전 포스팅인 @Transactional 제대로 알고쓰기 에서는 무지성 중첩 트랜잭션에 대한 포스팅이었는데,이번에는 좀 다른 케이스였다.해당 예외가 발생하는 것이었다.회사에서는 Mysql을 RDBMS로 채택하여 사용해서 아래와 같은 예외가 보였지만, 예제에서는 H2 DB를 사용하기 때문에 같은 에러메시지는 아니지만,내용은 똑같다는 점을 일단 알고 넘어가면 좋을 것 같다.HHH000099: an assertion failure occurred (this may indicate a bug in Hibernate, ..

JPA 2024.08.20

Mysql 인덱스

인덱스란? 번역을하면 바로 색인이라는 단어로 번역된다. 색인은, 검색하면 책속의 낱말이나 어떤 챕터나 구절들을 빠르게 찾아볼 수 있게 쪽수 정보를 나타내주는 것을 뜻한다. 이 개념을 DB에 적용시킨 것이다. 인덱스는 어떻게 구성하는가? 인덱스는 CREATE INDEX 키워드로 구성이 가능하다. Team 이라는 테이블이 이렇게 있다. id(primary key) name member_id grade 1 홍길동 1 1 2 가나다 2 2 3 고길동 3 3 4 나길동 4 4 이름만으로 인덱스를 구성하고 싶다면 아래와 같이 수행해주면 된다. CREATE INDEX 테이블(칼럼); CREATE INDEX team_index team(name); 이렇게 해주게 되면 name의 오름차순 순서로 정렬되게 된다. 왜 정렬..

effectively final 및 lambda capturing에 대해 톺아보기

개요 당연하게 사용하던 Java의 람다 기능에 대해서 의문을 갖지 않고 막 써댔다. 그렇지만, 면접에서의 질문을 받았을 때 당황했다. 뜬금포로 final을 쓰고 안쓰고의 차이를 물어보셨는데 순간 답변을 하지 못했다. 그래서 정리해본다. 람다 캡쳐링에 대해서 알아보기 이전에 Effectively final에 대해 먼저 알아보자. Effectively Final 이란? 해당 단어를 deepL을 통해 해석해보면 사실상 최종 이라고 해석해준다. final을 선언한 상수와 같이 변경되지 않았다면 그와 같은 수준으로 컴파일러가 해석해준다. effectively final이 되려면 아래의 3가지 조건을 만족해야 한다. 아래 3가지 조건은 공식문서를 통해서 나와있는 정보들이다. 명시적인 final을 선언하지 않았다. ..

Java 2023.12.08

Kafka가 내 로직을 9번이나 재시도를 했다

개요 회사의 기술스택에서 카프카를 사용하고 있다. 내가 이번에 정리하는 글은 막연하게 ack을 날리는 부분에 있어서 간과했던 로직 때문에 벌어진 이슈를 정리한다. 어떻게 로직이 생겼었는가? 우선 카프카를 사용하기 위해선 스프링 부트에서 Spring for Apache Kafka 를 사용해야 한다. 나는 로직에서 try-catch-finally 를 붙여 사용했는데 동료 개발자분께서 의도하신 것인지는 모르겠으나 catch절을 빼고 로직을 구성했다. @KafkaListener public void consumeExample(final ScrapeUpdateDto dto, final Acknowledgement ack) { try { // do something } finally { ack.acknowledge..

디버깅 2023.11.02

Slack Slash Commands(슬랙 슬래시 커맨드) 사용하기

회사에서 어떻게 하면 좀 더 편하게 어떤 기능을 사용하게 할 수 있을까? 라는 생각이 계속해서 들었는데, 좋은 기회가 생겼다. 회사에서 영업을 하시는분들이 컨퍼런스, 세미나 등등을 많이 참석하여 홍보하고 고객을 유치하는 과정에서 기회가 생겼다. 그것은 회사의 카드를 발급을 받았는지에 대한 여부 확인을 따로 할 수 없었다는 것인데, 당연히 그럴 것이 회원가입할 때 법인 유무를 체크하지는 않으니 말이다. 그래서 종이로든 아니면 엑셀시트던 특정 자료를 세미나 전에 준비해서 가는 부분이 매우 불편해보였다. (갈 때마다 추가 법인이 있으니까 매번 정리해야 된다.) 자! 그래서 슬랙에서 /법인찾기 법인명 하면 우리에게 가입된 법인인지를 찾는 기능을 구현하고 싶었다. 그래서 데모로 슬래시 커맨드를 만드는 법을 데모로..

Spring 2023.07.06

Stream 오류 제거

의문점 스크래핑 로직 실행 시간에 대해 의문을 가졌다. 평균 시간이 그럭저럭 다들 비슷한 수준에 머무는데, 이상하게 한 부분만 너무 느렸다. 증권사에 대한 스크래핑 내역이었는데, 특정 증권사만 중복 로그인이 감지되었을 경우 30초를 대기했다가 다시 수행할 수 있게 하는 로직이 들어있었고, 테스트 코드는 그에맞는 정말 30초를 기다리는지에 대한 여부를 테스트 하고 있었다. 🤔 그냥 30초를 기다리는것보단 특정한 법인이 아니라면 30초를 기다리지 않는다 를 테스트하면 되지 않을까? 이렇게 생각했던 이유는 30초를 테스트에서 기다리는 비용이 비싸다고 생각했고, 전체 테스트를 돌릴 때 이 부분때문에 30초를 더 기다려야 한다는 것이다. 그리고 milliseconds 차이값을 비교했기에 간헐적으로 실패하는 경우도..

디버깅 2023.04.21
728x90
반응형