혹시 Java로 TCP서버를 구축하고 계신가요?
JAVA NIO를 공부하면서 서버 설계에 고민하고 계신가요?
서버 코어 설계 및 개발에 투자할 많은 시간 있다면? 그리고 안정성을 높이고 성능을 높이 끌어낼 자신과 시간이 있다면 직접 개발하세요. 하지만 그렇지 않다면 검증된 Java Network Framework인 Netty나 MINA를 사용해보세요.
이렇게 쓰니 제가 홍보하는 사람 같군요.
하지만 저의 경험입니다. 서버 코어 부분을 설계하고 개발하다보면 프로젝트에서 너무 많은 시간을 할애하게 되어버립니다. 그 후에 안정성이나 성능에 대해서도 고민이 되고 제가 나가면서 다른 사람에게 인수인계 할 때의 유지보수도 문제가 되어 버립니다.
그런 면에서 Netty나 MINA를 추천합니다.
사실 저도 어떻게 더 좋은지 모르겠습니다. 파운더이신 이희승씨가 Netty 사용을 권고하고 성능면에서도 Netty가 훌륭하다고 나왔지만, 역사가 길고 사용자가 많고 MINA를 사용해야 할지요. (어떤 분은 Netty 쓰지 말고 MINA를 써야 성능이 좋다고 하는 분도 있습니다.)
저는 netty를 사용합니다만 둘 다 우수한 프레임워크이니 골라서 사용해보시길 바랍니다.
두 개 모두 한국인 이희승씨가 개발하셨습니다. (아래 인터뷰를 읽어보면 이해가 잘 가실겁니다.)
Netty (JBoss)
자바 네트워크 어플리케이션 프레임워크
- 이벤트 기반이며 비동기 방식
- Interceptor Chain 패턴 방식
- Old, New I/O 지원
- NIO구현 벤더별 최적화
- 과부하 및 Dos 방어 매커니즘 포함
- 제한된 환경 지원(Android, Applet, WebStart)
- 다양한 컨터이너 지원(JbossMc, OSGi, Guice, Spring)
1. 네티 공식 사이트
( http://netty.io/ )
2. netty 한국인 사용자 그룹
( http://groups.google.co.kr/group/netty-ko?hl=ko )
3. Netty, MINA 개발자 이희승님 인터뷰
( http://www.bloter.net/archives/11472 )
4. 한국 미나 사용자께 드리는 네티로의 전환 권고
( http://gleamynode.net/articles/2223/ )
6. Performance Comparison between NIO Frameworks
( http://gleamynode.net/articles/2232/ )
7. Netty 사용에 관한 몇 가지 TIP
8. Netty User Guide
( http://docs.jboss.org/netty/3.2/guide/html_single/ )
9. Netty Zero copy
( http://clotho95.blog.me/140117229649 )
10. DEV 2012 Netty Internal Session
( http://deview.kr/2012/xe/?mid=track&document_srl=379 )
11. Netty Tutorial
( http://seeallhearall.blogspot.de/2012/05/netty-tutorial-part-1-introduction-to.html )
Apache MINA
MINA는 네트워크 어플리케이션 프로그래밍에 대한 지식 없이도 고성능 네트워크 어플리케이션을
쉽게 작성할 수 있도록 돕는 프레임워크
MINA 의 특징
- TCP, UDP 트랜스포트 타입을 모두 지원
- ByteBuffer 단위의 low-level I/O layer 와 Message object 단위의 high-level protocol layer를 모두 지원
- Servlet filter 와 유사한 이벤트 필터링 기능을 제공하여 실시간 퍼포먼스 모니터링 및 이벤트 transformation (e.g. SSL 지원, 권한 검사, 클라이언트 블랙리스팅...) 가능
- 같은 VM 내에 있는 MINA 어플리케이션 간의 통신시 in-VM pipe 를 제공하여 전문의 encode/decode 없이 바로 전달하여 성능을 극대화할 수 있음.
1. MINA
( http://mina.apache.org/ )
2. Javadoc
( http://mina.apache.org/mina-project/apidocs/index.html )
3. 특징
( http://mina.apache.org/mina-project/features.html )
4. Quick start
( http://mina.apache.org/mina-project/quick-start-guide.html )
5. Apache MINA Group
( http://mina.apache.org/mina-project/testimonials.html )
6. Download
( http://mina.apache.org/mina-project/downloads.html )
7. MINA 를 소개합니다. (차세대 Netty) by 이희승 (2004)
( http://www.javaservice.co.kr/~java/bbs/read.cgi?b=news&c=r_p&m=resource&n=1104313609&p=13&s=t )
8. MINA 강좌
Netty vs MINA
1. MINA vs Netty
( http://ellieya.tistory.com/23 )
2. Netty vs Apache MINA stackoverflow
( http://stackoverflow.com/questions/1637752/netty-vs-apache-mina )
'Devlopment > Java' 카테고리의 다른 글
MessageFormat의 숫자 대신 문자열 키값을 이용해서 값을 넣고 싶을 때 (0) | 2018.01.12 |
---|---|
Jackson, ObjectMapper 알지 못하는 프로퍼티도 허용하기 (0) | 2017.08.21 |
Clean Code - Null 리턴 (0) | 2016.02.26 |
[Gradle] Build 오류 - Could not fetch model of type 'EclipseProject' using Gradle distribution (0) | 2014.10.24 |
Java JAR, WAR파일에 버전 심고 확인하기 (0) | 2013.05.25 |
JBoss 설치 및 연동 (0) | 2013.04.19 |
Mavn 및 플러그인 설치 (0) | 2013.04.19 |
Java 이전 버전을 받을 수 있는 URL (0) | 2013.03.28 |
Java 실행 (0) | 2013.01.31 |
Tomcat & Java의 memory leak 분석 (0) | 2012.07.17 |