본문 바로가기

Java

(6)
Java Executors, ExecutorService Executor 는 쓰레드 풀의 구현을 위한 인터페이스이다.등록된 작업을 실행작업 실행을 책임public interface Executor { void execute(Runnable command);} Executors 는 Executor, ExecutorService, ScheduledExecutorService, ThreadFactory 등을 위한 정적 팩토리 메서드를 지원해주는 클래스다.newFixedThreadPool(int n)고정된 쓰레드 풀을 생성한다.CPU 코어 수 기준으로 생성 시 좋은 성능을 얻을 수 있다.newCachedThreadPool()필요한 만큼 쓰레드 풀을 생성한다.쓰레드를 캐싱하는 쓰레드풀일정 시간 동안 쓰레드를 검사하여 60초 동안 작업이 없으면 Pool에서 제거한다.쓰레..
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..
[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)을 구현하기 위한 클래스 중 하나입니다. 객체 풀은 자주 생성 및 소멸되는 객체를 관리하고 재사용함으로써 성능을 최적화하는데 사용합니다. 일반적으로는 데이터베이스 연결, 소켓 연결, 스레드 등과 같이 생성 및 제거 비용이 높은 리소스를 효율적으로 사용하는 데 도움이 됩니다. 특징 커스터마이징 가능한 구성 : 객체 풀을 구성할 수 있는 다양한 설정을 제공 합니다 최소 및 최대 객체 수, 리소스 생성 및 제거, 오브..
[Java] try-with-resource (AutoCloseable) 회사에서 라이브러리르 사용하던 중 제품에 대해서 리소스를 사용하고 반납해야하는데 에러로 인하여 모든 자원을 반납을 못하던 상황을 해결하기 위해 AutoCloseable을 구현해서 사용하였다. try-with-resource와 AutoCloseable에 대해 알아보고 사용해보자 try-with-resource 예외 발생 여부와 상관없이 사용했던 리소스 객체의 close 메소드를 호출해서 안전하게 리소스를 닫아준다. AutoCloseable 인터페이스를 구현해야 한다. try-catch-finally public static void main(String[] args) { FileInputStream fs = null; BufferedInputStream bs = null; try { fs = new Fil..
[Java] - Synchronized 자바에서 멀티스레드를 이용하면 여러작업을 동시에 처리할 수 있기 때문에 작업효율이 좋아집니다. 하지만 하나의 공유자원을 여러 스레드에서 동시에 접근하여 사용하게 되면 때때로 우리가 예상치 못한 결과가 나타나게 됩니다. 이를 해결하기 위해 스레드 동기화를 사용합니다. 스레드 동기화는 멀티스레드 환경에서 여러 스레드가 하나의 공유자원에 동시에 접근하지 못하도록 막는것을 말합니다. 공유데이터가 사용되어 동기화가 필요한 부분을 임계영역(critical section)이라고 부르며, 자바에서는 이 임계영역에 synchronized 키워드를 사용하여 여러 스레드가 동시에 접근하는 것을 금지함으로써 동기화를 할 수 있습니다. 멀티 스레드를 사용하여 개발 중 동기화가 필요해 synchronized를 사용하였는데 어떤 ..