일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- API
- query
- high level client
- 차트
- matplotlib
- token filter test
- zip 암호화
- sort
- MySQL
- analyzer test
- Test
- docker
- aggs
- licence delete curl
- Python
- Kafka
- 파이썬
- flask
- zip 파일 암호화
- Elasticsearch
- aggregation
- TensorFlow
- License
- 900gle
- springboot
- Java
- Mac
- ELASTIC
- license delete
- plugin
- Today
- Total
목록JAVA (71)
개발잡부
**다형성(Polymorphism)**은 객체 지향 프로그래밍(OOP)의 핵심 원칙 중 하나로, "하나의 인터페이스로 여러 가지 형태를 취할 수 있는 능력"을 의미합니다. 즉, 같은 타입의 객체라도 그 구현이 다르게 동작할 수 있게 해주는 특징입니다. 다형성은 주로 메소드 오버로딩(Method Overloading)과 메소드 오버라이딩(Method Overriding)을 통해 구현됩니다. 다형성의 종류컴파일 시간 다형성 (정적 다형성) - 메소드 오버로딩과 연산자 오버로딩을 통해 구현됩니다.런타임 다형성 (동적 다형성) - 메소드 오버라이딩을 통해 구현됩니다. 1. 메소드 오버로딩 (Method Overloading) - 컴파일 시간 다형성메소드 오버로딩은 같은 이름의 메소드가 여러 가지 다른 파라미터..
**은닉화(Encapsulation)**는 객체 지향 프로그래밍(OOP)의 중요한 원칙 중 하나로, 객체의 상태(데이터)를 외부에서 직접 접근하거나 수정하지 못하도록 감추고(캡슐화), 대신 메소드를 통해 접근할 수 있도록 하는 개념입니다. 이를 통해 객체의 내부 구현을 숨기고, 외부에는 필요한 기능만 제공하는 구조를 만듭니다.은닉화의 핵심 개념데이터 보호: 객체의 내부 데이터를 외부에서 직접 접근하지 못하도록 private 접근 제어자를 사용하여 데이터를 보호합니다.공용 메소드 제공: 객체의 내부 데이터에 접근하거나 수정하려면 getter와 setter 메소드를 사용해야 하며, 이를 통해 제어가 가능합니다.은닉화의 특징정보 숨기기: 객체의 상태를 외부로부터 숨겨, 외부에서 직접적으로 접근하거나 수정할 수..
Java에서 추상화(Abstraction)는 복잡한 시스템을 단순화하여, 사용자나 개발자가 불필요한 세부사항에 신경 쓰지 않고 핵심 기능만을 사용할 수 있도록 하는 개념입니다. 추상화는 주로 **인터페이스(Interface)**와 **추상 클래스(Abstract Class)**를 통해 구현됩니다. 추상화의 주요 특징세부 구현을 숨긴다: 객체의 동작을 정의하지만, 어떻게 동작하는지는 숨깁니다.핵심 개념만 제공: 필요한 기능만을 외부에 제공하여, 시스템을 더 쉽게 사용할 수 있도록 합니다. 추상화 방법인터페이스 (Interface):인터페이스는 구현체가 없고, 메소드 선언만 존재합니다.implements 키워드를 사용하여 클래스를 인터페이스에 연결하고, 메소드들을 실제로 구현합니다.interface An..
Vavr는 Java에서 함수형 프로그래밍(FP)을 지원하는 라이브러리입니다.이 라이브러리는 Java의 전통적인 객체 지향 프로그래밍 스타일을 보완하며, 함수형 프로그래밍 패러다임을 더 쉽게 구현할 수 있도록 도와줍니다. Vavr은 Java에서 부족한 함수형 프로그래밍 관련 기능을 제공하고, 불변성, 함수형 데이터 구조, 고차 함수, 패턴 매칭 등의 개념을 지원합니다.주요 기능함수형 데이터 구조: Vavr은 불변 컬렉션과 데이터 구조를 제공합니다. 예를 들어, List, Map, Set 등 Java 표준 라이브러리의 컬렉션들과 유사한 자료구조를 제공하지만, 이들은 모두 불변입니다. 불변성은 멀티스레드 환경에서 안전하게 사용할 수 있다는 장점이 있습니다.옵셔널 타입: Java의 Optional 클래스와 유사..
RedisConnectionFactory 를 찾지 못해 에러가 발생했다면 아래와 같이 확인해보자 import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;import org.springframework.data.redis.core.RedisTemplate;import org.springframe..

일단 삽질 부터 정리를 하자면.. 왜 삽질을 정리하냐 물어보신다면.. "결과가 좋지 않으니 시간낭비를 하지 말자" 라는 의미로 첨에 성능개선의 방향을 메소드 별 캐싱, 즉 동적인 결과를 반환하는 메소드 외에 검색키워드에만 영향을 받아 캐싱이 되어도 무방한 정적인 데이터를 처리하는 메소드를 캐싱 해버린다. 이렇게 캐싱할 메소드를 정해놓고 데이터 처리 하는 로직을 component 에 이관하고 component 를 캐싱하려고 했으나.. 메소드 캐싱을 할수록 시간이 증가하는 기적이 .. 20~50ms 씩 증가.. 위의 구조라면 저것들을 다 캐싱하는 순간.. 그래서 캐싱은 1번으로 끝내고 가능하다면 최전방으로 배치한다. 의 전략 최초 호출인 /search 의 호출을 캐싱해버리는.. /search 호출은 상품정보..

Concept 실제 서비스에 적용될 api cache 의 구성 동적인 데이터를 처리하는 메소드와 정적인 데이터를 처리하는 메소드를 구분하여 캐싱 구성 Detail Data component 데이터를 조회 / 후처리 까지 처리하는 메소드 Data component 단위로 캐싱 application.yml 더보기 spring: profiles: local redis: timeout: 1000 lettuce: pool: max-active: 3 max-idle: 3 min-idle: 3 password: password elasticache: master: - name: itemList redisMaster: host: 127.0.0.1 port: port - name: itemSpecial redisMast..

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 를 만들어서 ..

검색성능 개선 final 이다. 지금까지 테스트 해본 결과를 바탕으로 구조를 잡아서 테스트 ( final 이라고 해놓고 진격의 거인마냥 final part 1, final part 2, final 1기 1쿨 이렇게 증식되지 않기를 바랄뿐..) 우선 이슈는 픽업 서비스 오픈 이후 response time이 튀는 현상이 발생했다. 당연히 검색쿼리로 데이터 조회 후 처리 로직이 추가되었으니 당연히 응답시간이 늘어나는건데 이것이 문제가 되고 있으니.. 늘어난 응답시간은 100ms 이하라서 사용자가 인지하기 힘든 속도이긴 하나. cloud watch 의 모니터링 대시보드에선 널뛰기를 하는 모습으로 나온다. 그래도 로직이 추가될때마다 성능이 저하된다면 문제가 맞긴 한듯하다 cloud watch의 ALB 대상그룹의 ..

검색결과중 일부 메소드에서 처리하는 데이터 들만 캐싱해야하는 상황.. 일단 구현해보자 https://father-lys.tistory.com/42 에서 세팅한 redis 정보를 활용 우선 컨드롤러 생성 CacheService 의 getCaches 를 호출 package com.doo.aqqle.controller; import com.doo.aqqle.model.CommonResult; import com.doo.aqqle.service.CacheService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.Requ..