본문 바로가기

전체 글

(664)
[자바] Event-Dispatching Thread 이벤트-디스패칭 쓰레드란? GUI 응용 프로그램을 작성할 때에는 이벤트-디스패칭 쓰레드(the event-dispatching thread)를 의식할 필요가 있습니다. GUI 응용 프로그램을 사용할 때 우리들은 버튼을 누른다든지 마우스를 움직인다든지 합니다. 우리들의 그러한 동작에 대응해서 GUI 응용 프로그램 처리가 수행됩니다. "버튼을 누른다" 혹은 "마우스를 움직인다"라고 하는 것은 이벤트(event)라고 부르고 Swing 클래스로서 표현되고 있습니다. 버튼을 누르면 java.awt.event.ActionEvent라는 클래스의 인스턴스가 생성되고 마우스를 움직이면 java.awt.event.MouseEvent라는 클래스의 인스턴스가 생성됩니다. 그리고 각각의 인스턴스는 Swing이 내부에 가지고 있..
[자바] Worker Thread 패턴 worker라는 것은 "일을 하는 사람", "작업자"라는 의미입니다. Worker Thread 패턴에서는 워커 스레드(Worker Thread: 작업자 쓰레드)가 일을 하나씩 가지러 가서 처리를 합니다. 일이 없으면 워커 쓰레드는 새로운 일이 도착할 때까지 기다립니다. Worker Thread를 Background Thread라고 부르는 일도 있습니다. 또한 워커 쓰레드를 여러 개 보유하고 있는 장소에 주목하여 Thread Pool 이라고 부르기도 합니다. ClientThread 클래스의 쓰레드가 Channel 클래스에 일의 request(의뢰)합니다. Channel 클래스의 인스턴스는 워커 쓰레드(WorkerThread) 다섯 명을 맡고 있습니다. 워커 쓰레드는 모두 일의 리퀘스트가 오기를 기다리고 있..
[자바] Guarded-Suspension 패턴 Guarded Suspension 패턴은 쓰레드를 기다리게 하여 인스턴스의 안전성을 지킵니다. 이는 마치 우편 배달원을 현관에서 기다리게 하고 자기의 프라이버시를 지키는 것과 비슷합니다. Guarded Suspension 패턴에는 guarded wait, spin lock 등 여러 가지 명칭이 있습니다. 하나의 쓰레드(ClientThread)가 다른 쓰레드(ServerThread)에 Request 인스턴스를 건네주는 것입니다. 이것은 매우 간단한 쓰레드 간의 통신입니다. 이름 해설 Request 하나의 리퀘스트를 표현한 클래스 RequestQueue 리퀘스트를 순서대로 비축해두는 클래스 ClientThread 리퀘스트를 내주는 클래스 ServerThread 리퀘스트를 받아 해석하는 클래스 Main 동작 ..
[자바] 스트림과 병렬 데이터 처리 스트림 거의 모든 자바 애플리케이션은 컬렉션을 만들고 활용합니다. 하지만 컬렉션으로 모든 문제가 해결되는 것은 아닙니다. 예를 들어 리스트에서 고가의 트랜잭션(Transaction)만 필터링한 다음에 통화로 결과를 그룹화해야 한다고 가정해보겠습니다. 다음 코드처럼 많은 기본 코드를 구현해야 합니다. // 그룹화된 트랜잭션을 더할 Map 생성 Map transactionsByCurrencies = new HashMap(); // 트랜잭션의 리스트를 반복 for (Transaction transcation : transactions) { // 고가의 트랜잭션을 필터링 if (transaction.getPrice() > 1000) { // 트랜잭션의 통화 추출 Currency currency = transac..
[대용량DB] Sharding & Query Off Loading 출처: http://bcho.tistory.com/670 RDBMS는 크게 request 바로 처리하는 트랜잭션 처리용의 OLTP(On-Line Transaction Processing)성과, 데이터를 모아서 분석하고 리포팅하는 OLAP(On-Line Analytical Processing) 두가지로 분리됩니다. 여기서 설명하는 RDBMS는 OLTP성의 데이터베이스입니다. RDBMS는 2차원 테이블 구조의 데이터를 KEY 값을 중심으로 여러개의 컬럼으로 저장되며, 저장된 각각의 로우(행)은 다른 테이블의 로우와 관계를 가질 수 있습니다. RDBMS를 이요한 설계를 하는데, 고려할만한 아키텍쳐는 성능향상을 위한 Query Off Loading과, Sharding이라는 기법이 있습니다. Query Off L..