프로그래밍/Java
-
[Java] Rhino Engine, Nashorn Engine, GraalVM프로그래밍/Java 2024. 3. 27. 16:24
Rhino 엔진, Nashorn 엔진, 그리고 GraalVM은 모두 자바스크립트를 인터프리팅하고 실행하는데 사용되었거나 사용하는 엔진들이다. Java의 버전이 올라감에 따라서 자바스크립트를 인터프리팅하는데 사용하는 엔진들이 바뀌었는데, JDK 버전에 맞추어 각각을 간단히 설명하고자 한다. Rhino Engine (~ Java SE 7) Rhino는 Mozilla Foundation에서 개발한 자바스크립트 인터프리터 엔진이다. 자바 가상 머신(JVM)에서 실행되며, 자바스크립트 코드를 자바 바이트 코드로 변환하여 실행한다. Rhino는 자바 애플리케이션에서 자바스크립트를 사용하는 데 주로 사용되었으나, 성능 면에서 한계가 있어 Java 표준 라이브러리에서 제공하는 공식적인 JavaScript 엔진인 Nas..
-
[Java, Netty] PooledUnsafeDirectByteBuf을 Byte[]로 변환하기프로그래밍/Java 2023. 12. 19. 14:59
PooledUnsafeDirectByteBuf는 Netty에서 제공하는 풀링(pooling) 및 unsafe 메모리 액세스를 통해 성능을 향상시키려는 목적으로 디자인된 바이트 버퍼(ByteBuf) 중 하나이다. Netty의 EchoServer 예제를 살펴보면 EchoServerHandler.java에 아래와 같은 부분이 있다. @Sharable public class EchoServerHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) { ctx.write(msg); } ... } 이때, object msg는 PooledUnsafeDirectB..
-
Apache MINA와 Netty의 차이 및 장단점프로그래밍/Java 2023. 3. 5. 18:04
MINA와 Netty는 모두 네트워크 프로그래밍에 사용되는 Java 기반의 NIO(Non-blocking I/O) 프레임워크이다. 이 두 프레임워크 모두 비동기 I/O를 지원하며, 이를 통해 동시에 많은 클라이언트 요청을 처리할 수 있다. 그러나 MINA와 Netty는 아래와 같은 차이점이 있다. 성능 Netty는 성능면에서 MINA보다 더 높은 성능을 보인다. MINA는 Reactor 스타일의 구현을 사용하여 I/O를 처리하는 반면, Netty는 비동기 I/O 작업 처리를 위해 I/O worker 쓰레드풀을 사용한다. 코드 디자인 MINA는 이벤트 기반의 모델을 사용한 반면, Netty는 Future와 Callback 구현을 사용한다. 개발자 커뮤니티 Netty는 큰 개발자 커뮤니티와 함께 많은 문서와..
-
Apache MINA와 WebSocket으로 SSL통신하기.프로그래밍/Java 2020. 6. 9. 23:36
Apache MINA는 Java에서 흔히 쓰는 비동기 쓰레드 방식의 Server이다. 이전에 작성했던 포스팅에 이어서 작성한다. https://syudal.tistory.com/entry/Apache-MINA와-WebSocket으로-통신하기 Apache MINA와 WebSocket으로 통신하기. Apache MINA는 아래와 같은 구조를 띄고 있다. IoService와 IoHandler사이에 IoFliter들을 추가하여 원하는 스타일의 소켓 통신을 할 수 있다. WebSocket같은 경우에도 HandShake과정과 같은 구현을 IoFliter를.. syudal.tistory.com 대부분의 사이트에서 HTTPS가 강제됨에 따라, 일반 웹소켓 요소(ws://)가 들어가 있으면 ERR_SSL_PROTOCOL..
-
Apache MINA와 WebSocket으로 통신하기.프로그래밍/Java 2019. 5. 28. 14:56
Apache MINA는 아래와 같은 구조를 띄고 있다. IoService와 IoHandler사이에 IoFliter들을 추가하여 원하는 스타일의 소켓 통신을 할 수 있다. WebSocket같은 경우에도 HandShake과정과 같은 구현을 IoFliter를 추가함으로서 쉽게 해결할 수 있다. 하지만, 기본적인 Protocol들은 자체 Fliter로서 구현이 되어 있지만, WebSocket은 자체적으로 구현이 되어 있지 않다. 또한, https://tools.ietf.org/html/rfc6455에 모든 내용이 기록되어 있다. https://github.com/syudal/Apache-Mina-IoFilter-WebSocket syudal/Apache-Mina-IoFilter-WebSocket Apache M..
-
Apache MINA를 이용한 Echo서버 구현하기프로그래밍/Java 2019. 4. 1. 23:53
자바(Java)를 이용해서 서버를 구축하는 방법에는 여러가지가 있겠지만, 아파치 미나(Apache MINA)의 구현 방법인 Nio Socket과 스레드(Thread)를 이용하여 비동기-스레드(Asynchronous-Thread)방식의 서버를 구현할 수 있습니다. https://mina.apache.org/downloads-mina_2_1.html MINA Downloads — Apache MINA Latest MINA Releases Apache MINA 2.1.0 stable (Java 8+) Binaries Sources For people wanting to use the serial package, we don't include the rxtx.jar library in the releases, ..
-
Apache FTP Server에 TLS 인증서 생성하기프로그래밍/Java 2019. 2. 2. 23:05
FTP서버를 구축하는 방법에는 여러가지가 있겠지만, 자신만의 기능이 필요하다면 처음부터 개발하거나 기존의 오픈소스를 이용하여 수정/추가를 해가며 발전 시켜나가는 방법밖에는 없다. APACHE MINA를 이용하여 FTP SERVER를 만든 것이 있다기에 주물럭 거려 보다가 SSL(X.509)기능이 탑재되어있음을 알았지만, SSL(X.509)에서 사용할 TLS 인증서를 어떻게 발급 받아야 하는지는 불친절 하게도 알려주지 않았다. 아파치 ftp서버 프로젝트 주소 : https://mina.apache.org/ftpserver-project/index.html 여러 삽질을 하다가 JAVA의 KEYTOOL을 이용하면 TLS인증서를 발급 받을 수 있음을 구글링을 통해 알아내게 되었다.간단히 .bat파일로 만들어 보..