java (77) 썸네일형 리스트형 Java Executors, ExecutorService Executor 는 쓰레드 풀의 구현을 위한 인터페이스이다.등록된 작업을 실행작업 실행을 책임public interface Executor { void execute(Runnable command);} Executors 는 Executor, ExecutorService, ScheduledExecutorService, ThreadFactory 등을 위한 정적 팩토리 메서드를 지원해주는 클래스다.newFixedThreadPool(int n)고정된 쓰레드 풀을 생성한다.CPU 코어 수 기준으로 생성 시 좋은 성능을 얻을 수 있다.newCachedThreadPool()필요한 만큼 쓰레드 풀을 생성한다.쓰레드를 캐싱하는 쓰레드풀일정 시간 동안 쓰레드를 검사하여 60초 동안 작업이 없으면 Pool에서 제거한다.쓰레.. Spring Boot에서 전략 패턴 사용하기 전략패턴 전략 패턴은 런타임 중에 알고리즘 전략을 선택하여 객체 동작을 실시간으로 바뀌도록 할 수 있게 하는 행위 디자인 패턴 어떤 일을 수행하는 알고리즘이 여러가지 일때, 동작들을 미리 전략으로 정의함으로써 손쉽게 전략을 교체할 수 있는, 알고리즘 변형이 빈번하게 필요한 경우 적합한 패턴이다. 첫 번째 시도 우선 전략 패턴을 위한 인터페이스와 enum을 작성하였다. public interface Strategy { void execute(); } @Getter @RequiredArgsConstructor public enum StrategyType { A("strategyA"), B("strategyB"), C("strategyC") private final strategyName; } 전략 패턴을 위.. JAVA를 사용한 외부 API 호출 방법 Java로 외부 API를 통신하는 HTTP Library에 대해 알아보겠습니다. HttpURLConnection Java에서 기본적인 HTTP 통신을 수행하기 위한 클래스이다. 장점 Java 표준 라이브러리에 포함되어 있어 추가적인 의존성이 필요 없다 간단한 HTTP 통신에 적합하며 기본적인 요청 및 응답 처리가 가능하다. 단점 기능이 제한적이며, 고급 기능이나 편의 기능이 부족할 수 있다. 코드가 비교적 복잡하다. 응답코드가 4xx 이거나 5xx 일 경우 IOException 타임아웃을 설정할 수 없다. 쿠키 제어가 불가능하다. HttpClient Java 11에 도입된 새로운 HTTP 클라이언트이고 HTTP/2, WebSocket을 지원한다. HttpURLConnection은 비동기 처리를 위해 별도.. Spring Boot Redis + Cache를 사용하여 성능 최적화하기 Cache Spring Boot 에서 Redis + Cache를 적용하여 같은 데이터를 사용하는 경우 서버의 부하를 줄이고 성능을 최적화하여 응답시간을 단축시켜보자 보통 DB로부터 데이터를 조회할 때 동일한 데이터를 반복해서 조회하는 것을 막음으로써 불필요한 일을 없애줍니다. 이로 인해 응답시간을 단축하는 효율성을 가져옵니다. Cache 어노테이션 캐시 어노테이션들은 기본적으로 AOP로 동작합니다. @Cacheable 캐시의 이름과 키를 확인하여 이미 저장된 데이터가 있으면 해당 데이터를 리턴합니다. 만약 데이터가 업다면 메서드를 수행한 후 결과값을 저장합니다. @CachePut 메소드의 실행결과를 항상 저장합니다. 주로 캐시 데이터를 갱신할 때 사용합니다. @CacheEvict 캐시에 있는 데이터를 삭.. OpenSearch를 사용하면서 발생한 문제 1. Error: java.net.SocketTimeoutException: 30,000 milliseconds timeout on connection http-outgoing-2 [ACTIVE] 에러 상황 OpenSearch에 data를 insert 후 default timeout 값인 30초를 넘었기 때문에 TimeOut 발생 원인 클라이언트에서 Connection 종료를 인지하지 못하고 계속 연결되어 있다가 lost connection으로 시 해결 방법 @Configuration public class OpensearchInit { @Value("${opensearch.ip}") private String hostIp; @Value("${opensearch.port}") private int hos.. Spring Actuator 와 Swagger를 사용할 시 의존성 오류 Spring Swagger가 적용되어 있는 환경 속에 모니터링 시스템을 위해 Actuator를 추가하였더니 아래와 같은 오류가 발생했다. Failed to start bean 'documentationPluginsBootstrapper'; nested exception is java.lang.NullPointerException: 기본적으로 해당 오류는 Swagger에서 발생하는 오류로 spring fox에서 업데이트를 진행하지 않아 생긴 버전 이슈이다. application.yml spring: mvc: pathmatch: matching-strategy: ant_path_matcher Actuator를 사용하지 않는다면 해당 설정으로 오류를 해결할 수 있다. 하지만 Swagger와 Actuator를 .. [JAVA] Socket 연결 시 Timeout 설정 Socket Socket Timeout은 네트워크 통신에서 사용되는 소켓 연결 및 데이터 송수신 작업에 대한 대기 시간을 제어하는 중요한 개념입니다. 일정 시간 내에 어떤 이벤트가 발생하지 않으면 연결 또는 작업을 중단하고 오류를 반환하는 방식으로 동작합니다. Java에서는 TCP 기반 스트림 소켓으로 클라이언트 측에서는 java.net.Socket 클래스를 사용하고 서버 측 TCP/IP 으로는 java.net.ServerSocket 클래스를 사용합니다. UDP 작업을 위해서는 java.net.DatagramSocket를 사용합니다. 연결 시간 초과 클라이언트가 서버와의 연결을 설정하는데 걸리는 시간을 제한합니다. 일정 시간 내에 연결이 설정되지 않으면 ConnectionException이 발생합니다. .. [JAVA] GenericObjectPool에 대해 알아보고 사용해보자 Object Pooling 오브젝트의 Pool을 만들어두고 해당 웅덩이 안에서 필요할 때마다 객체를 꺼내서 사용하는 것 잦은 오브젝트 할당으로 인한 오버헤드가 감소된다. GenericObjectPool Apache Commons Pool 라이브러리의 일부로서 객체 풀링(object pooling)을 구현하기 위한 클래스 중 하나입니다. 객체 풀은 자주 생성 및 소멸되는 객체를 관리하고 재사용함으로써 성능을 최적화하는데 사용합니다. 일반적으로는 데이터베이스 연결, 소켓 연결, 스레드 등과 같이 생성 및 제거 비용이 높은 리소스를 효율적으로 사용하는 데 도움이 됩니다. 특징 커스터마이징 가능한 구성 : 객체 풀을 구성할 수 있는 다양한 설정을 제공 합니다 최소 및 최대 객체 수, 리소스 생성 및 제거, 오브.. 이전 1 2 3 4 ··· 10 다음