자바에서 네트워크를 쉽게 구현해주는 Apache MINA에 대해 알아본다.
MINA는 네트워크 프레임워크으로서 Mina, FtpServer, SSHD, Vysper 4개의 프로젝트를 제공한다.
여기서 Mina에 대해서 확인해본다.
미나(MINA)는 한국인이 창시한 오픈소스 프로젝트로서
자바에서 IO Socket이나 NIO Socket을 쉽게 구현할 수 있는 프레임워크이다.
미나는 3개의 레이어로 구성
1. I/O Service : 실제 I/O수행, Session 존재
2. I/O Filter Chain : 원하는 데이터 구조와 원하지 않는 데이터 구조 바이트를 필터/변형, n개의 필터 존재
3. I/O Handler : 실제 비지니스 로직
<출처> http://mina.apache.org/mina-project/userguide/ch2-basics/application-architecture.html
미나 기반 어플리케이션을 만들기 위한 순서
1. I/O Service 생성
2. Filter Chain 생성
3. I/O Handler 생성 및 비지니스 로직 구현
서버 구조
<출처> http://mina.apache.org/mina-project/userguide/ch2-basics/server-architecture.html
서버 예제
1. NioSocketAcceptor acceptor = new NioSocketAcceptor();
2. acceptor.getFilterChain().addLast("logger", new LoggingFilter());
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));
3. acceptor.setHandler(new IoHandler()); // 핸들러는 구현해줘야 한다.
4. acceptor.bind(new InetSocketAddress(InetAddress.getLocalHost(), 8080));
Filter chain에 codec을 설정안해주면 IoHandler의 messageReceived 메소드의 매개변수 Object message가 IoBuffer 타입이 된다.
클라이언트 구조
<출처> http://mina.apache.org/mina-project/userguide/ch2-basics/client-architecture.html
클라이언트 예제
1. NioSocketConnector connector = new NioSocketConnector();
connector.setConnectTimeoutMillis(15 * 1000);
2. connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(textLineCodecFactory));
connector.setHandler(new IoHandler()); // 핸들러는 구현해줘야 한다.
3. ConnectFuture future = connector.connect(new InetSocketAddress("127.0.0.1", 8080)); // 실제 접속
future.awaitUninterruptibly(); // 접속 기다림
IoSession session = future.getSession(); // 접속되면 세션을 가져옴
session.getCloseFuture().awaitUninterruptibly(); // 세션이 닫힐 때까지 기다림
connector.dispose(); // 접속을 해제함
Filter chain에 codec을 설정안해주면 IoHandler의 messageReceived 메소드의 매개변수 Object message가 IoBuffer 타입이 된다.
끝.
댓글