지난 몇 개월 동안 인스타그램 API를 활용해서 사내의 콘텐츠 서비스와 연동하는 작업을 진행했었고, 약 한 달간의 QA를 끝으로 실제 서비스에 배포하게 되었다. 워낙 큰 작업을 진행했었기 때문에 대규모 단위의 배포를 진행했었다. 사전에 꼼꼼하게 점검하고, 놓친 부분이 없는지 다시 점검한 후에 실 서비스에 배포했지만, 불과 2시간 만에 ConnectionAcquireTimeoutError가 발생했다. 문제 배포를 하고 나서 직접 기능들을 사용해 봤을 때는 문제가 없었다. 하지만 2시간 후에 원인을 알 수 없는 에러로 인해 전체 서비스에 장애가 발생하게 되었다. 우선 Error로그를 파악해봤는데, 특정 시점부터 아래와 같은 Error 로그가 지속적으로 발생하게 되었다. 굉장히 당황스러웠고, 뭐부터 해야 할지..
사내 프로젝트를 진행하다가 테스트 코드를 작성하던 도중 두 객체의 값은 같았는데, 다르다는 에러가 계속해서 발생하게 되었다. 그래서 equals()를 재정의 하지 않아서 발생했던 문제라고 인식하게 되었고, equals()와 hashcode()를 재정의해서 문제를 해결했다. 여기서 끝이 아니라 equals()와 hashcode()를 왜 같이 재정의해야 하는지 간단히 정리하려고 한다. equals()는 언제 정의해야 할까?객체를 기준으로 예를 들자면, equals()는 두 개의 객체가 있고, 두 객체의 값의 동등성을 비교할 때 사용한다. hashcode()는 언제 정의해야 할까?equals()만 재정의 한다고 해서 객체의 값이 동등하다고 할 수는 없다. 객체의 값이 동등하다고 하더라도 해시 값은 다를 수 있..
문제 Hibernate 사용 시 Query Plan Cache 객체를 너무 많이 생성하면, OutOfMemoryError가 발생할 수 있다. https://meetup.toast.com/posts/211 DBA와 개발자가 모두 행복해지는 Hibernate의 in_clause_parameter_padding 옵션 : NHN Cloud Meetup Java ORM 기술의 표준 명세인 JPA가 소개된 지 참 오래되었지만, 국내 현실상 대규모 시스템에서 적용되어 사용된 운영 경험이 충분히 쌓이지 않고 공유되지도 않는 것 같습니다. meetup.toast.com 따라서 Hibernate Query Plan Cache 옵션을 설정하여, OutOfMemoryError를 예방할 수 있다. https://medium.c..