BackEnd/Java

Apache Mina (아파치 미나)

철철22 2018. 10. 31. 10:17
반응형

반도체 통신 서버를 유지보수를 하게 되면서 MINA 프레임 워크에 대해 알게 되었습니다.


Apache Mina는 네트워크 어플리케이션 프레임워크로 Java NIO를 기초로 TCP/IP & UDP/IP 같은 전송을 통해서 이벤트 중심 비동기 api를 제공하며, 사용자가 쉽게 네트워크 서버를 구현할 수 있게 도와주는 프레임 워크 입니다.


NIO는 Non-Blocking IO 의 줄임말이라고 합니다. NIO에 대해 좋은 글을 한번 찾아봤습니다.




일단 Mina의 특징에 대해 알아보겠습니다.


  • 다양한 전송 타입을 위한 통합 API:
    • Java NIO를 통한 TCP/IP & UDP/IP
    • RXTX를 통한 Serial communication (RS232)
    • In-VM pipe communication
    • 사용자가 직접 구현 
  • extension point로의 Filter interface; Servlet filters 와 비슷
  • Low-level and high-level API:
    • Low-level: uses ByteBuffers
    • High-level: 사용자 정의 메세지 객체와 코덱 사용 
  • Highly customizable thread model:
    • Single thread
    • One thread pool
    • More than one thread pools (i.e. SEDA)
  • Java 5 SSLEngine를 사용한 즉시 사용할 수 있는 SSL · TLS · StartTLS 지원
  • Overload shielding & traffic throttling
  • Unit testability using mock objects
  • JMX managability
  • Stream-based I/O support via StreamIoHandler
  • PicoContainer and Spring 같은 컨테이너와의 통합
  • MINA 이후 출시한 NETTY의 원할한 마이그레이션 지원




Mina를 통해 만들어진 어플리케이션은 다음과 같은 기본 구조를 가집니다.

출처 : https://mina.apache.org/mina-project/userguide/ch2-basics/application-architecture.html





Mina는 3개의 레이어로 구성되어 있습니다.


  • I/O Service - 실제 I/O 수행

  • I/O Filter Chain - 원하는 데이터 구조 및 그 반대의 데이터를 필터링/변환

  • I/O Handler - 비즈니스 로직 구현 

출처 : https://mina.apache.org/mina-project/userguide/ch2-basics/application-architecture.html






다음은 MINA를 사용한 Server와 Client 구조입니다.





대부분의 구현이 MINA 예제를 기초로 만들 수 있어서
여기에 올리는 것보다 이 URL을 타고 참고하시면 더 좋을 것 같습니다.







Apache Mina :

https://mina.apache.org/


참고 : 

https://wizardee.tistory.com/40,

http://mckdh.net/130

https://homoefficio.github.io/2016/08/06/Java-NIO%EB%8A%94-%EC%83%9D%EA%B0%81%EB%A7%8C%ED%81%BC-non-blocking-%ED%95%98%EC%A7%80-%EC%95%8A%EB%8B%A4/

http://sooin01.tistory.com/entry/%EC%95%84%ED%8C%8C%EC%B9%98-%EB%AF%B8%EB%82%98Apache-MINA-%EC%82%AC%EC%9A%A9%EB%B2%95

반응형