-
[스프링 인 액션] Chapter 8 - 비동기 메시지 전송하기 :: RabbitMQ와 AMQP 사용하기개발서적읽기/Spring in Action 제 5판 2020. 9. 16. 02:13
AMQP(Advanced Message Queuing Protocol)의 가장 중요한 구현이라 할 수 있는 RabbitMQ는 JMS보다 더 진보된 메시지 라우팅 전략을 제공한다. JMS 메시지가 수신자가 가져갈 메시지 도착지의 이름을 주소로 사용하는 반면, AMQP 메시지는 수신자가 리스닝하는 큐와 분리된 거래소 이름과 라우팅 키를 주소로 사용한다. 거래소(Exchange)와 큐 간의 관계는 아래와 같다. 메시지가 RabbitMQ 브로커에 도착하면 주소로 지정된 거래소에 들어간다. 거래소는 하나 이상의 큐에 메시지를 전달할 책임이 있다. 이때 거래소 타입, 거래소와 큐 간의 바인딩, 메시지의 라우팅 키 값을 기반으로 처리한다.다음을 포함해서 여러 종류의 거래소가 있다. - 기본(Default) : 브로커..
-
[이펙티브 자바] item 66 - 네이티브 메서드는 신중히 사용하라개발서적읽기/Effective Java - temp 2020. 9. 11. 18:03
■자바 네이티브 인터페이스(Java Native Interface, JNI) 자바 네이티브 인터페이스(Java Native Interface, JNI)는 자바 프로그램이 네이티브 메서드를 호출하는 기술이다. 네이티브 메서드란 C나 C++ 같은 네이티브 프로그래밍 언어로 작성한 메서드를 말한다. 전통적으로 네이티브 메서드의 주요 쓰임은 다음 세 가지다. 1. 레지스트리 같은 플랫폼 특화 기능을 사용한다. 2. 네이티브 코드로 작성된 기존 라이브러리를 사용한다. (레거시 데이터를 사용하는 레거시 라이브러리가 그 예다) 3. 성능 개선을 목적으로 성능에 결정적인 영향을 주는 영역만 따로 네이티브 언어로 작성한다. ■진화하는 Java 플랫폼 특화 기능을 활용하려면 네이티브 메서드를 사용해야 한다. 하지만 자바가..
-
프로세스 Context SwitchingComputer Science 2020. 9. 10. 00:27
■cpu와 프로세스 cpu는 한 번에 하나의 프로세스만 실행할 수 있다. 즉 멀티 프로세스 환경에서 cpu가 하나일 경우에, 다수의 프로세스들은 동시에 실행될 수 없다. ■스케줄러 스케줄러는 다수의 프로세스들 중 어느 프로세스에 cpu를 할당할지 결정하는 역할을 한다. 이 작업을 `스케줄링`이라 한다. 스케줄러는 프로세스들에게 매우 빠른 속도로 cpu를 할당하고 해제한다. (프로세스에게 cpu가 할당된다는 것은 cpu가 그 프로세스를 실행한다는 의미이다.) cpu가 실행하는 프로세스들은 매우 빠른 속도로 교체된다. 그래서 사용자는 멀티 프로세스의 프로세스들이 동시에 실행되는 듯한 느낌을 받는다. ■Context Switching 프로세스들은 스케줄러에 의해 cpu를 할당받기도 하고 cpu를 회수당하기도 ..
-
컴퓨터가 표현하는 시간들 :: EpochComputer Science 2020. 9. 5. 23:17
■컴퓨터가 표현하는 시간들 컴퓨터는 다양한 방법으로 시간을 표현한다. 예를 들면 UTC, GMT, Epoch 등이다. GMT(그리니치 평균시)는 런던을 기점으로 하고, 웰링턴에 종점으로 설정되는 협정 세계시의 기준시간대이다. UTC는 1972년 1월 1일에 시행된, 1970년 1월 1일을 기점으로 하는 국제 표준시이다. UTC는 GMT에 기반하기 때문에 GMT라고도 불리는데, 보통 두 용어가 혼용돼서 사용된다. 기술적인 표기에선 UTC가 사용된다. GMT wiki UTC wiki Epoch는 UTC로부터의 경과 시간을 초로 환산한 정수이다. Epoch wiki ■Epoch의 기원 Epoch time(에포크)는 유닉스 계열 운영체제 등 여러 운영체제와 파일 형식들에서 사용된다. 따라서 Unix time, ..
-
[이펙티브 자바] item 59 - 라이브러리를 익히고 사용하라개발서적읽기/Effective Java - temp 2020. 9. 3. 19:23
■표준 라이브러리의 장점 1 :: 수많은 프로그래머들의 경험이 녹아있다 다음은 무작위 정수 하나를 생성하는 코드이다.static Random rnd = new Random(); static int random(int n) { return Math.abs(rnd.nextInt()) % n; }이 코드는 세 가지 문제점을 가지고 있다. 1. n이 그리 크지 않은 2의 제곱수라면 얼마 지나지 않아 같은 수열이 반복된다. 2. n이 2의 제곱수가 아니라면 몇몇 숫자가 평균적으로 더 자주 반환된다. 3. 지정한 범위 바깥의 수가 종종 생성될 수 있다. 이렇게 직접 작성하는 것은 문제점을 가지고 있을 확률이 크다. 직접 작성하는 방법 대신 라이브러리를 사용하면 안전하게 원하는 기능을 구현할 수 있다. Random...
-
-
[이펙티브 자바] item 52 - 다중정의는 신중히 사용하라개발서적읽기/Effective Java - temp 2020. 8. 28. 21:54
■컴파일타임에 결정되는 다중정의 메서드 다음은 컬렉션을 집합, 리스트, 그 외로 구분하고자 만든 프로그램이다. public class CollectionClassifier { public static String classify(Set s) { return "집합"; } public static String classify(List lst) { return "리스트"; } public static String classify(Collection c) { return "그 외"; } public static void main(String[] args) { Collection[] collections = { new HashSet(), new ArrayList(), new HashMap().values() }..
-
[스프링 인 액션] Chapter 7 - REST 서비스 사용하기 :: Traverson으로 REST API 사용하기개발서적읽기/Spring in Action 제 5판 2020. 8. 25. 16:37
Traverson은 스프링 데이터 HATEOAS에 같이 제공되며 스프링 애플리케이션에서 하이퍼미디어 API를 사용할 수 있는 솔루션이다. 이것은 자바 기반의 라이브러리이며, 같은 이름을 갖는 유사한 기능의 자바스크립트 라이브러리로부터 영감을 얻은 것이다. Traverson은 '돌아다닌다'는 의미로 붙여진 이름이며, 여기서는 관계 이름으로 원하는 API를 이동하며 사용할 것이다. Traverson을 사용할 때는 우선 해당 API의 기본 URI를 갖는 객체를 생성해야 한다.Traverson traverson = new Traverson( URI.create("http://localhost:8080/api"), MediaTypes.HAL_JSON);여기서는 Traverson을 타코 클라우드의 기본 URL로 지..