Old Posts226 [Java] 간단한 Netty Client 예제 코드 앞서 '[Java] Netty 프레임워크 소개'에서 Netty 프레임워크에 대해서 간단하게 알아봤다. 백문이 불여일견이라고 실제로 동작하는 Netty 애플리케이션 코드를 보고 눈으로 확인하는게 더 중요할 수도 있다. 이번 포스트에서는 지난번 포스트에서 구현한 서버에 문자열을 전송하는 클라이언트를 Netty 프레임워크로 구현해보겠다. (관련글 : [Java] 간단한 Netty Server 예제) 우선 메인 클래스다 package SimpleNettyServer; import java.net.InetSocketAddress; import java.util.Scanner; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import .. 2021. 5. 16. [Java] 간단한 Netty Server 예제 코드 앞서 '[Java] Netty 프레임워크 소개'에서 Netty 프레임워크에 대해서 간단하게 알아봤다. 백문이 불여일견이라고 실제로 동작하는 Netty 애플리케이션 코드를 보고 눈으로 확인하는게 더 중요할 수도 있다. 이번 포스트에서는 클라이언트의 입력을 그대로 응답으로 돌려주는 에코(Eco) 서버를 Netty 프레임워크로 구현해보겠다. 동작하는 전체 에코서버 코드는 다음과 같다. 우선 메인 클래스다. package SimpleNettyServer; import java.net.InetSocketAddress; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFut.. 2021. 5. 15. [Java] Netty 프레임워크 소개 Netty 프레임워크 소개 Netty 프레임워크는 전세계 개발자들이 사용하는 자바 네트워크 애플리케이션 프레임워크다. Netty의 공식 홈페이지(netty.io)에서는 'Netty는 비동기 이벤트 기반 네트워크 응용프로그램 프레임워크입니다'라고 소개하고 있다. Netty는 아파치 프로젝트의 다양한 오픈소스들은 물론 카카오와 라인, 네이버는 물론 애플, 트위터 등에서도 사용되고 있다. 한국 개발자인 이희승님이 창시자로 알려져있다. (관련자료 : 비동기를 사랑하는 오픈소스 개발자, 이희승 - LINE Engineering) 네티 이전에도 이런 프레임워크들이 있었겠지만 대부분 자바 네트워크 프로그래밍은 Java NIO를 이용해 진행했다. 물론 Java NIO 역시 강력하지만 순수 NIO만을 이용해서 네트워크 .. 2021. 5. 14. [Hadoop] 'Unable to load native-hadoop library for your platform' 에러 하둡 클라이언트를 통해서 데이터노드(Datanode)에 있는 데이터를 읽다보면 로그 파일에 다음과 같은 에러가 찍혀있는 경우가 있다. Unable to load native-hadoop library for your platform ShortCircuit Read라는 기능의 코드리뷰를 하다가 원격 디버거로 들여다볼라고 돌렸는데 이런 에러가 발생했었다. 에러 메시지의 내용은 libhadoop 라이브러리가 로드되지 않았다는 의미다. 하둡 클라이언트의 동작에는 문제가 없다. 다만 ShortCircuit Read 기능이 제대로 돌지 않기 때문에 성능 저하가 발생한다. 해결방법 이 문제를 해결하기 위해 libhadoop 라이브러리를 제대로 로드할 수 있도록 설정을 변경해줘야한다. 일반적으로 libhadoop.so.. 2021. 5. 12. [Java] 원격 디버깅 사용하기 (IntelliJ, Eclipse) 자바로 만들어진 프로그램은 JVM을 통해서 실행이 된다. JVM은 '원격 디버깅(Remote Debugging)'이라는 매우 편리하면서 강력한 기능을 제공한다. 원격 디버깅 기능을 이용해서 로컬 머신이 아닌 서버에서 동작하는 자바 프로그램을 IntelliJ, Eclipase 같은 IDE를 통해 원격으로 디버깅할 수 있다. 이번 포스트에서는 도커(Docker)를 이용해 컨테이너 환경에서 자바 프로그램을 구동한 다음 호스트 머신에서 원격 디버깅으로 도커 컨테이너 안쪽에서 동작하는 자바 프로그램을 원격 디버깅해보겠다. 도커가 아닌 다른 머신에서 구동하는 자바 프로그램에 대한 원격 디버깅도 크게 다르지 않을 것이다. 실행할 자바 프로그램 우선 다음 자바 프로그램을 도커 컨테이너에서 실행해보자. public cl.. 2021. 5. 5. [Java] Iterable을 컬렉션(Collection)으로 바꾸는 방법 자바 라이브러리를 사용하다보면 Iterable 객체를 받아와서 컬렉션(Collection) 객체로 바꿔 쓰고 싶은 경우가 많다. 그냥 일반적인 자바 소스코드로 작성해서 사용하는 방법도 있고, 구아바(Guava), Apache Commons 라이브러리를 이용한 방법이 있다. Plain Java 코드 우선 Java8 이상의 JDK를 사용하는 경우 다음을 사용할 수 있다. List result = new ArrayList(); iterable.forEach(result::add); iterable 객체에서 제공하는 forEach() 메소드를 이용해서 list를 채워서 사용한다. 혹은 Spliterator 클래스를 이용해서 생성할 수도 있다. List result = StreamSupport.stream(ite.. 2021. 4. 29. [Java] 깊은복사(Deep Copy)와 얕은복사(Shallow Copy) 차이점 자바에서 객체를 복사하는데 꼭 알아둬야 할 개념이 '깊은복사(Deep Copy)'와 '얕은복사(Shallow Copy)'의 차이점이다. 이 두 개념의 차이를 명확하게 알고 있어야 예기치 못 한 버그를 발생시키기 않을 수 있다. 우선 깊은복사와 얕은복사의 정의는 다음과 같다. 얕은복사(Shallow Copy) 객체를 복사할 때, 객체가 가지고 있는 필드의 값들을 단순히 복사한다. 기본형(Primitive Type) 값들은 복사가 될 것이고, 참조형 변수는 같은 객체를 가리키게 된다. 깊은복사(Deep Copy) 객체를 복사할 때, 객체가 가지고 있는 필드의 값을 복사해준다. 이 때, 기본형 값들은 그대로 복사가 되며 참조형 변수의 경우 변수가 참조하는 객체에 대해서도 새롭게 복사해서 만들어준다. 깊은 복사.. 2021. 4. 26. [Java] OkHttp 사용법 - Java REST API 예제 OkHttp는 REST API, HTTP 통신을 간편하게 사용할 수 있도록 만들어진 자바 라이브러리다. "Square"라는 회사가 만든 OkHttp 라이브러리는 어쩌면 더 잘 알려져있는 Retrofit이라는 라이브러리의 기본이 된다. OkHttp 라이브러리를 이용하면 간편하게 몇 줄의 코드로 REST API, HTTP 기반의 요청, 응답을 처리할 수 있다. OkHttp 라이브러리는 오픈소스로 공개된 소프트웨어다. (링크 : OkHttp github) 문제가 생기거나 내부 동작이 궁금하면 코드를 열어볼 수 있다. OkHttp 메이븐(Maven) 의존성 설정 아마도 메이븐 프로젝트를 많이 사용할 텐데, 메이븐 프로젝트에서 OkHttp를 사용하기 위해서는 pom.xml 파일에 다음 의존성을 추가하면 된다. 버.. 2021. 4. 25. [Java] 배열 정렬하기 - Arrays.sort() 자바 프로그래밍을 하면서 데이터들을 정렬할 일이 많다. 자바에서 배열 형태로 저장되어 있는 데이터를 Arrays.sort() 메소드를 제공하고 있어 이 메소드를 이용해 따로 정렬 메소드를 구현하지 않고 데이터를 정렬할 수 있다. Arrays 클래스에는 배열에 대한 복사, 정렬, 검색 등의 유틸리티 메소드들이 구현되어 있다. 배열의 정렬 Arrays.sort() 메소드를 이용해 정렬을 수행하면 기본적으로 오름차순으로 정렬된다. 오름차순이란 작은 값이 앞에 오도록 정렬된 순서를 의미한다. 숫자 배열 정렬 숫자에 대한 정렬을 수행하는 예제는 다음과 같다. import java.util.Arrays; public class Example { public static void main(String[] args) .. 2021. 4. 24. 이전 1 ··· 18 19 20 21 22 23 24 ··· 26 다음