전체 글

legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #6 방향성에 대한 고민2

동적쿼리로 변환한 이후 한가지 문제가 있었는데 바로 검색 성능은 여전히 나쁘다는 것이었다. 사실 동적쿼리로 변환한것 역시 가독성이나 중복되고 반복되는 코드를 줄이기위함이었지 성능을 개선하기 위한 시도는 아니었기 때문에 당연한 결과였다. 그래서 바로 검색 성능을 개선하기 위해서 계획했었던 ElasticSearch를 도입하려고 했으나 우리가 사용하는 MySQL에도 검색 성능을 개선하기 위한 Index 기법이 있었다. Index에도 여러가지 기법이 있었기때문에 이를 통해서 성능을 개선해보고나서 그 뒤에 ElasticSearch와 성능 및 정확도를 비교해보기로 하고 바로 적용하기로 했다.

legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #5 DynamicSQL 코드 개선

코드 개선의 이유 1. 예약 시스템의 로직의 영향으로 리턴해줘야할 컬럼이 늘었기때문에 같은 리스트에 담아서 보내기 위해서는 코드 수정이 필요했다. 2. entity방식으로 리턴하는 것보다는 dto 방식으로 리턴하는 것이 안전했다. 3. OrderBy절의 코드는 지극히 절차지향적이기에 비효율적이었다. 4. BooleanBuilder를 고려해보았다. Entity → Dto 변환 select절에 코드를 추가했다. entity → dto 방식으로 반환타입을 바꾸면서 리스트에 Store entity의 컬럼 이외의 컬럼값도 넣을 수 있게 되었다. OrderBy절의 코드 수정 기존의 OrderBy절의 코드는 지극히 절차지향적이기에 굉장히 원시적이고 비효율적이라고 볼 수있다. 기존의 코드 개선한 코드 위와 같이 수정을..

legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #4 동적쿼리(DynamicSQL) 구현

동적쿼리를 적용한 이유 Query Dsl을 적용하면서 너무나 많은 중복되고 반복적인 코드가 발생하였고 이러한 로직이 Controller와 service단에서 존재했기 때문에 다른 핵심로직의 가독성을 해칠우려가 있다고 판단했고 이를 개선하기 위해서 동적쿼리를 적용하기로 했다. Query Dsl 의 장점 여러 장점 보기 문자가 아닌 코드로 쿼리를 작성함으로써, 컴파일 시점에 문법 오류를 쉽게 확인할 수 있다. 자동 완성 등 IDE의 도움을 받을 수 있다. 동적인 쿼리 작성이 편리하다. 쿼리 작성 시 제약 조건 등을 메서드 추출을 통해 재사용할 수 있다. 근데 그냥 Query Dsl의 장점은 가독성이 좋은 쿼리문 / 동적 쿼리 2가지로 보면 된다. 준비하기 StringUtils 라이브러리만 있으면 된다. 이게..

legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #3 QueryDsl 구현

query dsl 기술적인 선택 이유 findBy 메소드로는 다양한 조건의 검색기능을 구현하기에는 가독성 측면에서 좋지 않다는 점과 제한적인 조건이 걸렸다. 네이티브 쿼리도 고려를 했으나 쿼리를 활용할 것이라면은 쿼리를 코드로 작성할 수 있고 컴파일 에러를 찾아 낼 수 있다는 장점도 가지고 있는 Query Dsl을 적용하기로 했다. 쿼리를 자바 코드로 작성할 수 있게 도와주는 기술로 JPA로는 어려운 복잡한 쿼리나 동적쿼리까지 해결할 수 있는 장점이 있다. 또한 문법의 오류를 컴파일시에 찾아 낼 수 있다는 장점을 가지고 있다. 1. Query Dsl 특징 1. 쿼리를 코드로 작성 가능 (ide의 자동완성 기능을 사용할 수 있다) 2. 컴파일시 문법 오류를 찾아낼 수 있음 3. 동적 쿼리 구현 가능 4. ..

legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #2 JPA findBy 메소드

findby메소드 기술적인 선택 이유 DB에서 데이터를 가져오는 기술은 findBy메소드로 가장 먼저 배웠고 유일하게 배웠기 때문에 가장 먼저 고려를 해서 적용해보기로 했다. 검색기준 220만건 검색 성능의 문제 검색 성능의 측면에서 위 사진과 같은 결과 값은 유효하다고 할 수 없다. 0.5초 이상 걸리는 검색기능을 쓸 사용자는 없기 때문에 이는 개선이 필요하다고 볼 수 있는데 그렇다면 JPA에서의 성능 개선을 할 것인가 다른 기능을 쓸 것인가 라는 고민을 하게 되었는데 회의를 거쳐서 우리는 아래와 같은 이유로 JPA를 적용하지 않고 다른 기술을 사용하기로 했다. 제한적인 카테고리 검색 조건 검색 성능의 문제야 다른 기술을 같이 적용해서 해결을 할 수 있는 문제였지만 JPA의 findBy메소드로 우리의 ..

legacy/Pin-Table 성능 개선 기록

검색 성능 개선 #1 방향성에 대한 고민

우리의 프로젝트는 전국의 음식점을 검색해 찾고 리뷰를 보고 예약을 거는 프로젝트이다. 하지만 유저에게 서비스를 한다기보다는 많은 백엔드적인 기술들을 적용해가면서 성능을 개선하는데에 초점을 맞춘 프로젝트이다. 우리는 최소한의 프론트엔드적인 부분을 뼈대로 갖추고 백엔드 기술적인 부분을 집중적으로 다뤄볼 것이다. 또한 약 천만건의 데이터를 모아서 이를 핸들링하는 경험을 해 볼 것이다. 유저에게 서비스를 하는 값진 경험을 포기하는 대신 과연 어떤 기술적인 부분을 다뤄야 프로젝트의 완성도를 높일 수 있을까? 동시성 제어 검색 성능 향상 대용량 트래픽 핸들링 나는 동시성 제어와 대용량 트래픽에 대한 핸들링은 우리 유능한 팀원분들에게 맡기고 검색 성능을 향상시키기로 했다. 카테고리 검색 우리는 15가지의 카테고리 검..

web/JAVA & SpringBoot

Jmeter 사용도 해보자

설치는 끝났고 이제 다음 사용에 대해서 알아보자 초기화면 Test Plan : 전체 시나리오를 담당하는 global 설정 영역 Thread Group : 부분의 시나리오. spring으로 따지면 하나의 패키지(ex controller, service, repository…) Sampler → HTTP Request : API 통신을 하기 위한 개별의 단위 (ex controller패키지안에 하나의 메소드..) Test Plan 중복으로 들어가는 주소나 로컬일 경우 포트번호를 넣어줘야하는데 여기서 설정을 해주면 Sampler에서 불러와서 쓸 수 있음 Thread Group Action to be taken after a sampler error Continue : 에러를 무시하고 테스트 계속 진행 Star..

web/JAVA & SpringBoot

m1 Mac에서 Jmeter 설치하기

성능테스트를 하기 위해서 Jmeter를 설치해야하는데 mac에서 어떻게 설치하는지에 대해 나중의 나를 위해 정리했다 설치 1. java 설치 https://www.java.com/ko/download/ Download Java for Linux Linux RPM 파일 크기: 63.82 MB 지침 Java를 설치한 후에는 브라우저에서 Java를 사용으로 설정해야 합니다. www.java.com https://www.oracle.com/java/technologies/downloads/ Download the Latest Java LTS Free Subscribe to Java SE and get the most comprehensive Java support available, with 24/7 glob..

3hoon
일단 적어볼게요