본문 바로가기

728x90

Java

(28)
[DB] 커넥션 풀이란? (Connection pool) 데이터베이스 커넥션을 획득할 때는 다음과 같은 복잡한 과정을 거칩니다.애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회합니다.DB 드라이버는 DB와 TCP/IP 커넥션을 연결합니다. 즉, 3 way handshake 같은 TCP/IP 연결을 위한 네트워크 동작이 발생하게 됩니다.DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달합니다.DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성합니다.DB는 커넥션 생성이 완료되었다는 응답을 보내고, DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환합니다. 이렇게 커넥션을 새로 만드는 것은 과정도 복잡하고 시간도 많이 소모되는 일입니다. DB는 물론이고 애플리케이션 서버에서도 TCP/IP 커넥..
[Multi-Thread] execute() vs submit() execute()와 submit()은 모두 ExecutorService 인터페이스에서 제공되는 메서드로, 작업을 쓰레드 풀에 제출하여 실행하는 데 사용됩니다. 하지만 두 메서드 간에는 몇 가지 차이점이 있습니다. execute(Runnable command) 해당 메소드는 Executor 인터페이스 내부에 아래와 같이 정의되어 있습니다. void execute(Runnable command); execute 메서드의 특징은 아래와 같습니다. Runnable 타입의 작업만 처리 가능합니다. 반환 값이 없습니다. execute() 메서드는 작업이 완료되면 어떠한 결과값도 반환하지 않습니다. 따라서 Future 객체를 통해 작업의 상태를 추적하거나 결과를 얻을 수 없습니다. 작업 실패 시 예외 처리 만약 작업..
[Multi-Thread] ThreadPoolExecutor 사용법 및 주의사항 아래 포스팅에서 멀티 쓰레드 환경에서의 작업을 위한 쓰레드 풀을 생성하기 위한 다양한 인터페이스에 대해서 작성하였습니다. https://silver-programmer.tistory.com/entry/Executor-ExecutorService%EC%99%80-ThreadPoolExecutor [Multi-Thread] Executor, ExecutorService와 ThreadPoolExecutor 자바에서는 다중 쓰레드 환경에서 작업을 비동기적으로 실행하기 위한 다양한 인터페이스와 클래스를 제공하고 있습니다. 대표적으로 Executor 인터페이스가 있고, Executor를 확장한 인터페이스인 silver-programmer.tistory.com 여기에서 ThreadPoolExecutor에 대해서도 간..
[Multi-Thread] Executor, ExecutorService와 ThreadPoolExecutor 자바에서는 다중 쓰레드 환경에서 작업을 비동기적으로 실행하기 위한 다양한 인터페이스와 클래스를 제공하고 있습니다. 대표적으로 Executor 인터페이스가 있고, Executor를 확장한 인터페이스인 ExecutorService 인터페이스, 그리고 ExecutorService 인터페이스를 구현한 클래스 중 하나인 ThreadPoolExecutor 가 있습니다. 이번 포스팅은 각각의 인터페이스 및 클래스에 대해서 작성해 보았습니다. Executor 인터페이스 Executor 인터페이스는 java.util.concurrent 패키지에서 제공하는 인터페이스로, 아래와 같이 단일 추상 메서드 'execute(Runnable command)'를 가지고 있습니다. 이 메서드는 Runnable 객체를 매개변수로 받아서..
[Multi-Thread] 쓰레드 결과 기다리기 (Future, submit(), get()) 최근에 회사에서 멀티 쓰레드로 병렬 처리를 하는 코드를 구현해야 했습니다. Java에서 제공하는 ExecutorService를 이용하여 Thread Pool (쓰레드 풀)을 생성하고, 각 쓰레드들에게 작업을 던진 후, 각 쓰레드의 작업 결과값을 받아서 후처리를 해주어야 하는 코드를 작성해야 했습니다. 그 과정에서 여러 가지 배운 점이 있어 정리하고자 포스팅을 작성하였습니다. 처음에는 아래와 같이 Runnable과 Executor 클래스의 execute()을 이용해 코드를 작성하였습니다. (참고로, ExecutorService는 Executor를 상속하기 때문에 타입이 ExecutorService여도 execute() 메서드 사용이 가능합니다.) public class ThreadTest { void ru..
자바의 직렬화 (Serialization) 직렬화란, 객체를 데이터 스트림으로 만드는 것입니다. 객체에 저장된 데이터를 스트림에 쓰기(write) 위해 연속적인(serial) 데이터로 변환하는 것입니다. 반대로, 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserialization)라고 합니다. 객체를 저장한다는 것은, 객체의 모든 인스턴스변수의 값을 저장한다는 것을 의미합니다. 그리고, 저장했던 객체를 다시 생성하려면, 객체를 생성한 후에 저장했던 값을 읽어서 생성한 객체의 인스턴스변수에 저장하면 됩니다. 인스턴스변수가 단순한 기본형일 때는 인스턴스변수의 값을 저장하는 일은 간단합니다. 하지만, 인스턴스변수의 타입이 참조형일 때는 그냥 저장할 수가 없습니다. 이러한 변수를 저장하기 위해서 자바에서는 ObjectInputStre..
Networking (네트워킹): IP주소와 URL IP주소 컴퓨터(호스트)를 구별하는 주소: 4byte = 32 bit IP 주소는 네트워크 주소와 호스트 주소로 나뉩니다. IP 주소의 네트워크 주소가 같다는 것은 두 호스트가 같은 네트워크에 포함되어 있다는 것을 의미합니다. IP주소와 서브넷 마스크를 비트 연산자 '&'로 연산하면 IP주소에서 네트워크 주소만 뽑아낼 수 있습니다. 즉, 서로 다른 두 호스트의 IP 주소를 서브넷 마스크로 '&' 연산을 수행해서 비교하면 두 호스트가 같은 네트워크 상에 존재하는지 확인할 수 있습니다. 메서드 종류 byte[] getAddress(): IP 주소를 byte 배열로 반환 static InetAddress [] getAllByName(String host): 도메인명(host)에 지정된 모든 호스트의 IP주소를..
자바의 스트림(stream) 많은 수의 데이터를 다룰 때, 보통 컬렉션이나 배열에 데이터를 저장한 후 for문과 Iterator를 이용해서 데이터에 접근할 수 있었습니다. 하지만, 이렇게 작성한 코드는 너무 길기도 하고 재사용성도 떨어진다는 단점이 있습니다. 또한, Colletions.sort()와 Arrays.sort()와 같이 각 컬렉션 클래스에는 같은 기능의 메서드들이 중복해서 정의되어 있는 단점이 있습니다. 즉, 데이터 소스마다 다른 방식으로 다루어야 한다는 점이 불편한 점입니다. 이러한 문제점들을 해결할 수 있는 자료구조가스트림(Stream)입니다. 이번 포스팅은 이 스트림에 관해서 다루어 보았습니다. (날카로운 피드백은 환영입니다~!!) 스트림이란? 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서..

728x90
반응형