개발서적읽기
-
[이펙티브 자바] item 74 - 메서드가 던지는 모든 예외를 문서화하라개발서적읽기/Effective Java - temp 2020. 9. 18. 02:04
■검사 예외 문서화의 중요성 검사 예외는 항상 따로따로 선언하고, 각 예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하자. Exception, Throwable같은 공통 상위 예외로 퉁치지는 말자. 왜냐하면 메서드 사용자에게 각 예외에 대처할 수 있는 힌트를 주지 못한다. 또한 같은 맥락에서 발생할 여지가 있는 다른 예외들까지 포함시켜버릴 수 있어 API 사용성을 크게 떨어뜨린다. main 메서드는 이 규칙에 유일한 예외이다. main은 오직 JVM만이 호출하므로 Exception을 던지도록 선언해도 괜찮다. ■비검사 예외 문서화의 중요성 자바 언어가 요구하는 것은 아니지만 비검사 예외도 문서화해두면 좋다. 비검사 예외는 일반적으로 프로그래밍 오류를 뜻하는데 (item 79)..
-
[스프링 인 액션] Chapter 8 - 비동기 메시지 전송하기 :: 카프카 사용하기개발서적읽기/Spring in Action 제 5판 2020. 9. 18. 01:11
아파치 카프카는 ActiveMQ, Artemis, RabbitMQ와 유사한 메시지 브로커다. 그러나 아파치 카프카만의 특징도 가지고 있다. 카프카는 높은 확작성을 제공하는 클러스터(cluster)로 실행되도록 설계되었다. 그리고 클러스터의 모든 카프카 인스턴스에 걸쳐 토픽을 파티션으로 분할하여 메시지를 관리한다. RabbitMQ가 거래소와 큐를 사용해서 메시지를 처리하는 반면, 카프카는 토픽만 사용한다. 카프카의 토픽은 클러스터의 모든 브로커에 걸쳐 복제된다. 클러스터의 각 노드(브로커)는 하나 이상의 토픽에 대한 리더(leader)로 동작하며 토픽 데이터를 관리하고 클러스터의 다른 노드로 데이터를 복제한다. 각 토픽은 여러 개의 파티션으로 분할될 수 있다. 이 경우 클러스터의 각 노드(브로커)는 한 토..
-
[스프링 인 액션] 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 플랫폼 특화 기능을 활용하려면 네이티브 메서드를 사용해야 한다. 하지만 자바가..
-
[이펙티브 자바] 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로 지..
-
[스프링 인 액션] Chapter 7 - REST 서비스 사용하기 :: RestTemplate으로 REST 엔드포인트 사용하기개발서적읽기/Spring in Action 제 5판 2020. 8. 25. 13:03
이번 장에서는 REST API 클라이언트를 작성하고 사용하는 방법을 알아본다. 그리고 REST API 클라이언트가 추가된 타코 클라우드 애플리케이션을 빌드하고 실행해 볼 것이다. 스프링 애플리케이션은 다음과 같은 방법을 사용해서 REST API를 사용할 수 있다. RestTemplate 스프링에서 제공하는 간단하고 동기화된 REST 클라이언트 Traverson 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트로, 같은 이름의 자바스크립트 라이브러리로부터 비롯됨 WebClient 스프링 5에서 소개된 반응형 비동기 REST 클라이언트 WebClient는 11장 스프링 반응형 웹 프레임워크에서 알아볼 것이다. 지금은 나머지 두 개의 REST 클라이언트부터 알아볼 것이다. 우선..