본문 바로가기

분류 전체보기58

[Hibnernate] Query Cache Plan 흔히 JPA를 사용하다보면 ~~in 쿼리를 종종 사용하게 된다. 만약 in 쿼리를 많이 사용한다면 하이버네이트의 옵션 중 query.in_clause_parameter_padding 을 꼭 true로 설정해두어야 한다. 그 이유를 하이버네이트의 QueryCachePlan과 함께 학습해보았다. 하이버네이트는 최적화를 위해 파라미터와 응답값을 캐시한다. 하이버네이트 5.2.18 버전부터 JPQL을 실행할 때 쿼리 컴파일 시간을 줄이기 위해 QueryCachePlan을 제공하고 있다. 또한 ParameterMetadata에는 native query의 namedParameter와 return type을 캐싱한다. 따라서 쿼리가 실행될 때 hibernate은 먼저 parameter와 resultType에 대해 p.. 2022. 12. 24.
[Redis] Redis를 쓰면서 고려했던 것들 - 푸시 배치 이번에 어떤 이유로 특정 사용자들에 대해 푸시 알림을 보내야 하는 일이 있었다. 이 과정에서 Redis를 사용했고, Redis를 사용하면서 고려 & 만난 여러가지 이슈들을 정리해보고자 한다. 1. 자료구조의 선택 자료구조를 선택하는 과정에서 여러가지 고민이 있었다. String 우선 String은 배재했다. String을 사용하면 scan을 이용해서 특정 prefix로 key를 가져와서 보낼 수 있겠지만 푸시알람을 보낼 대상을 같은 key로 두고 해당 key에 list나 set 형태로 쓰는 게 더 데이터 관리 측면에서 간단해보였다. 또 어떤 상황이 올지 모르니 마음대로 expire를 지정할 수 도 없는 노릇이고, push가 성공적으로 나가면 key들을 전부 삭제해야 하는데 이 과정이 조금 귀찮기도 했다... 2022. 12. 18.
우아한테크코스를 마무리하며 우아한테크코스가 초반 게더타운에서 어색하게 대화했던 때가 생각난다. 새벽 늦게까지 게더타운에서 떠들며 시간을 보내는 게 왜 그렇게 재밌던지. 다음 날 오전에 일어나야 해도 게더타운에서 크루들과 우스꽝스런 이야기를 하는 게 그렇게 웃겼다. 보이는 라디오도 기억에 남는다. 나라는 사람을 다른 크루들에게 강하게 각인 시킨 날인 것 같다. 후니 오빠라는 역할을 수행했는데, 그게 재밌었던 것 같다. 사람들도 많이 좋아해주고 좋아하는 사람들을 보니 나도 덩달아 기뻤다. 페어 프로그래밍이라는 것을 처음 하게 됐다. 의견을 주고 받으며 미션을 수행했는데, 솔직히 처음에는 많이 서툴렀다. 뭔가 내 주장을 너무 많이 펼친다는 생각이 많이 들었다. 그래도 가면 갈 수록 좋아졌던 것 같고.. 또 페어를 했던 크루들에게 많이 .. 2022. 11. 11.
Java 17 학습테스트 제가 개발을 처음 시작할 즈음 Java 17 버전이 나왔고, 최근에는 Java 19 버전까지 나온 것으로 알고 있는데요. 17, 19 버전 내용을 훑어보니 꽤나 재미있는 내용들이 있는 것 같아 간단하게 학습 테스트를 진행해보았습니다. 특히 코틀린을 사용하셨던 분들이라면 꽤나 익숙한 것들이 있을 거에요. 깊이 있게는 아니고, 그냥 간단하게 Java 17 버전을 학습테스트 한 내용을 정리해보겠습니다. Record 기존에는 VO를 만들기 위해, 각 field에 private final 키워드를 붙이고, Getter를 재정의 해주고, Equals & hashcode를 재정의 해야 합니다. 많은 boilerplate 때문에 lombok을 주로 사용해왔는데요. java 17 버전부터는 그러지 않아도 됩니다. 과거에.. 2022. 10. 3.
부하테스트(3) - WAS, Connection Pool 설정하기 앞선 글을 보면 활성 이용자 수를 통해 VUser를 계산하고 적절한 부하테스트 툴을 설정했다면, 이제 테스트를 진행하며 성능 개선 혹은 적절한 설정을 해줄 수 있는데요. 이번 글에서는 부하테스트를 진행하고 현재 상황에 적절한 WAS, Connection Pool 설정을 진행한 과정을 설명드리고자 합니다. 0. 초기 테스트 환경 AWS EC2 t4g.micro WS : memory 1GB, CPU 2 core WAS : memory 1GB, swap 1GB, CPU 2 core DB : memory 1GB, CPU 2 core Hikari CP default 회원의 모든 받은 쿠폰 조회 -> 단일 쿠폰 조회 join , 총 5만건 VUser 10 ~ 20 Spring actuator, Prometheus,.. 2022. 9. 27.
리팩터링(3) - 하다보니 보이는 것들 지난 글에 이어 리팩터링을 하다보니 보이는 것들에 대해 작성해보겠습니다. 리팩터링은 단순히 코드의 개선을 의미하지 않습니다. 코드가 개선되는 만큼 리팩터링한 개발자의 성장, 팀원의 성장으로 이어집니다. 제가 리팩터링하면서 볼 수 있었던 모든 성장, 개선에 대해 설명해보겠습니다. 리팩터링한 개발자의 성장 앞선 글들을 보았다면 리팩터링을 하기 위해 많은 과정을 거치는 것을 알 수 있을텐데요. 그 과정을 거치다보면 자연스럽게 타인이 작성한 코드를 이해하는 능력이 길러집니다. 물론 매 PR마다 코드리뷰를 진행하지만 코드 리뷰를 하는 것과 직접 팀원이 개발한 코드를 사용하는 것은 정말 다른 일입니다. 위 PR의 64개의 comment 중 절반 이상을 제가 달았음에도 막상 직접 사용하려 할 때는 이 코드를 작성한 .. 2022. 9. 25.