일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Cache
- 양자컴퓨터
- object aggs
- Docker
- elasticsearch cache
- request cache
- API
- KNN
- Query
- redis expire time
- aqqle
- api cache
- IONQ
- ann
- nested aggs
- aggs
- 아이온큐
- Analyzer
- java
- nested aggs vs object aggs 성능 비교
- Elastic
- NORI
- Aggregation
- nested aggs example
- Elasticsearch
- hset
- mysql
- Selenium
- JPA
- redis
- Today
- Total
목록Java (20)
아빠는 개발자
각설하고 퀵하게 가보자 우선 디펜던시 (DB, JPA) implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' implementation 'org.springframework.boot:spring-boot-starter-data-jpa' runtimeOnly 'mysql:mysql-connector-java' 테이블은 이렇게 생겼고 테이블 명은 keywords 그리곤 엔티티 package com.doo.aqqle.domain; import lombok.*; import javax.persistence.*; @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Setter @Ent..
EventListener 란? Java의 @EventListener은 Spring Framework에서 사용되는 애노테이션입니다. Spring Framework은 이벤트 기반 아키텍처를 지원하며, @EventListener은 이벤트를 처리하는 메서드를 표시하는 데 사용됩니다. @EventListener 애노테이션을 사용하면 이벤트를 수신하고 처리하는 메서드를 정의할 수 있습니다. 이 메서드는 특정 이벤트가 발생할 때 호출됩니다. 예를 들어, Spring 애플리케이션에서 이벤트가 발생하고 해당 이벤트를 처리하려는 경우 다음과 같이 @EventListener을 사용할 수 있습니다 라고 한다. PotalEventHandler를 @Component 설정해주고 process 에 EventListener 어노테이션..
신조어.. 물고기 아님 먹는거 아님 우리회사에서 불사의 프로젝트로 영생을 누리고 있는 프로젝트 상품명에서 키워드를 조회해서 신조어로 등록될 만한 단어들을 선별해야 하는데 ngram 으로 Mysql DB 조회를 하려고 했으나 DBA 이방지의 반대가 심해서 다른방법을 찾는 중.. 배치시간 12시간에서 1시간 내 실행으로 변경해야지만 운영환경에 올라갈 수 있다. 어뷰징 키워드 제거, 중복제거를 했으나.. 3시간 이상 소요되는 배치 데이터를 살펴보니 고구마맛 200ml, 고구마맛 300ml, 고구마맛 500ml 이런식으로 옵션상품들이 많이 있는데 이것들을 모두 조회하는 것은 리소스 낭비이고 배치시간이 길어지는 이유이다. 그래서 이것들은 한번만 조회 하는 방법으로 변경하려고 한다. 근데 이것을 어떻게 구분한담....
selenium 으로 많은 것을 할수 있지만 우선은 그림자 분신술 우선 브라우저를 띄워야 하는데 내 로컬에서 띄우려면 컨트롤 할수 있는 브라우저가 필요하다. 사용하기 가장 편하게 되어 있는 크롬 브라우저를 다운로드 받아보자 https://father-lys.tistory.com/15 위의 내용처럼 다운받아서 설치 하면 차크라를 컨트롤 할 수 있게된다. 다음은 술법을 배워보자. 그림자 분신술은 기본적으로 ThreadPoolTaskExecutor 를 사용할 예정이다. https://father-lys.tistory.com/62 음.. 아래 글이 비슷한게 또 있네...이런식으로 알을 깐 글들이.. 문제인데 https://father-lys.tistory.com/18 자 이제 ファンヨンブンシンスル !!! (카게..
File 클래스로 디렉토리를 삭제하려면 디렉토리 안의 파일을 먼저 삭제하고 디렉토리를 삭제해야 디렉토리가 삭제된다 귀찮타.. 그래서 FileUtils 라이브러리를 사용해보잣 // https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 implementation 'org.apache.commons:commons-dbcp2:2.9.0' build.gradle 에 의존성 부여 추가 전체색인을 구현해야 하는데 DB 데이터를 추출하는 디렉토리인데 이전실행에서 생성된 파일, 디렉토리가 없어도 될 것 같아 파일 추출 전에 디렉토리 전체 삭제 File file = new File("/data/static/"); FileUtils.cleanDirector..
Table '{DB}.hibernate_sequence' doesn't exist 같은 에러를 두번 만났다.. 과거에 만나서 기억이 없어서 또 검색을 하고 문서를 만들고.. 하다보니 아래에 글이 있었다 Entity의 PK를 @GeneratedValue(strategy = GenerationType.AUTO)로 해두었을 때 발생한 문제이다. hibernate_sequence라는 테이블에서 PK를 조회하는데 해당 테이블이 존재하지 않아서 발생한다. 이 때 선택할 수 있는 방법이 두 가지 있다. DDL 자동생성 설정 하기 GenerationType 변경하기 Spring Boot 이용 시 application.properties 변경 spring.jpa.hibernate.ddl-auto=create persis..
ThreadPoolTaskExecutor 스프링에서 멀티쓰레딩을 편하게 구현 하도록 도와주는 Class 스레드를 몇개를 까야 가장 성능이 좋을까.. 서버 혹은 로컬 머신에 스팩에 따라 다르겠지만.. 내 pc 기준으로 하자면 8core / 16GB / i9 아래와 같은 결과를 얻었다. total time is : 717705 taskExecutor.setCorePoolSize(1); //기본 쓰레드 사이즈 taskExecutor.setMaxPoolSize(5); //최대 쓰레드 사이즈 taskExecutor.setQueueCapacity(10); //Max쓰레드가 동작하는 경우 대기하는 queue 사이즈 total time is : 739373 taskExecutor.setCorePoolSize(2); /..
일단 삽질 부터 정리를 하자면.. 왜 삽질을 정리하냐 물어보신다면.. "결과가 좋지 않으니 시간낭비를 하지 말자" 라는 의미로 첨에 성능개선의 방향을 메소드 별 캐싱, 즉 동적인 결과를 반환하는 메소드 외에 검색키워드에만 영향을 받아 캐싱이 되어도 무방한 정적인 데이터를 처리하는 메소드를 캐싱 해버린다. 이렇게 캐싱할 메소드를 정해놓고 데이터 처리 하는 로직을 component 에 이관하고 component 를 캐싱하려고 했으나.. 메소드 캐싱을 할수록 시간이 증가하는 기적이 .. 20~50ms 씩 증가.. 위의 구조라면 저것들을 다 캐싱하는 순간.. 그래서 캐싱은 1번으로 끝내고 가능하다면 최전방으로 배치한다. 의 전략 최초 호출인 /search 의 호출을 캐싱해버리는.. /search 호출은 상품정보..
Api 성능이슈로 정적인 데이터, 동적인데이터에 분리가 필요하고 정적인 데이터에 대한 캐싱이 필요한 상황이 되었다. cache 키를 어떻게 생성할건지에 대한 고민을.. 우선 키 생성방법은 단일 param 을 key 로 cache key 생성 @Cacheable(value = CacheKey.DISTANCE, key = "#request.distance", unless = "#result == null") 복수의 param 을 key 로 cache key 생성 @Cacheable(value = CacheKey.DISTANCE, key = "{#request.distance, #request.countryCode}", unless = "#result == null") key generator 를 만들어서 ..
Spring Controller에서 데이터를 받아오는 방법 httpServletRequest.getParameter() getParameter()는 String 값을 반환 httpServletRequest.getAttribute() getAttribute()는 getParameter()와 비슷하지만 String 값이 아닌 Object 값을 반환 @RequestParam @RequestParam은 query string 방식으로 url을 통해 parameter로 값을 받아옵니다. 갖고있는 속성으로는 value, required, defaultValue가 있습니다. value는 위의 코드에서 알 수 있듯이 query string으로 받아오는 key값을 의미하고 뒤에 오는 변수에 해당 값을 바인딩합니다. re..