http://www.ggulwiki.com/index.php/유용한_라이브러리_소개
유용한 라이브러리 소개
목차 |
C/C++
Boost
- 홈페이지
- 소개
- - function, regex, lambda, bind 등 훌륭한 라이브러리들이 포함되어 있다.
- - C++ 표준위 멤버들이 참여하고 있으며 차기 표준의 후보격인 라이브러리 모음이라 할 수 있다.
tinyxml
- 홈페이지
- 소개
- - C++ 에서 사용 가능한 xml 파서 중 가장 사용법이 간편한 파서 중 하나다.
- - 게임 프로그래머들에게 가장 인기 있는 파서이다.
- - SAX 방식의 파서이며 아쉽게도 UTF-16 을 지원하지 않는다.
FastFormat
- 홈페이지
- 소개
- - Boost.Format , IOStream 에서 타입 안정성, 유연성, 성능에 불만을 느낀사람을 위한 라이브러리.
- - Boost.Format 보다 5 ~ 17 배 , Loki SafeFormat 보다는 1.5 ~ 5.5 배 빠르다고 소개하고 있다.
libcurl
- 홈페이지
- 소개
- - URL 전송을 도와주는 라이브러리로 C/C++ 뿐 아니라 다양한 언어에서 활용된다.
- - DICT, FILE, FTP, HTTP, HTTPS, IMAP, POP3, SMTP, Telnet 등 다양한 프로토콜을 지원한다.
jsoncpp
- 홈페이지
- 소개
- - 좋다기 보다 이거말고 쓸게 없다.
- - 다른 것들은 또다른 라이브러리를 요구하기 때문에 종속성이 없다는 점이 장점이다.
- 주의점
- - { "abc":"123", } 와 같이 콤마 다음에 } 나 ] 이런 기호로 끝나버리면 오류를 내며 파싱을 못한다.
- - 내부를 약간 수정해야 함.
json spirit
- 홈페이지
- 소개
- - boost 라이브러리를 사용 중이라면 json 파서로 이것을 고려해볼만 하다.
C#
Lidgren networking library
- 홈페이지
- 소개
- 정교한 흐름제어를 지원하는 강력한 네트워크 엔진
- 다양한 네트워크 엔진이 있겠지만 닷넷 계열에선 필자가 본 것중 이게 제일 나은듯 싶다. 요새 뜨고 있는 Unity3D에서도 사용 가능.
Java
프레임워크
- Spring : 전자정부 표준 프레임워크. 의존성 주입(Dependency Injection) 개념이 처음엔 생소하지만 익숙해지면 어떻게 스프링 없이 자바개발을 했는지 기억이 안날 정도. 핵심 기능인 컨테이너로서의 기능 말고도 JDBC, 트랜잭션, Web, AOP, 배치작업 관련 등 엔터프라이즈 어플리케이션 개발에 관련된 여러 모듈을 지원하여 Java EE를 대체하고 있다.
- Guice : 스프링이 너무 방대해지면서 의존성 주입 기능을 간단히 담아 만든 구글의 프레임웍
네트워크
- Netty : 네트워크 라이브러리는 netty가 진리. 오픈소스이며, 한국인 개발자 이희승씨가 재택근무하면서 해외 개발자들과 함께 만드는 것으로 유명하다.
웹, 웹 서비스
- Spring MVC : 스프링 프레임웍과 같이 쓰기에 유용한 MVC 웹 프레임웍. 자바의 기능을 적극 활용하여 커다란 라우팅 테이블 없이
- Struts : 스프링 MVC 이전에 대세였던 MVC 프레임웍. Struts 2에서는 이전 버전의 단점들을 많이 보완했다.
- JAX-RS - Jersey, Restlet, RESTeasy, CXF : RESTful 웹 서비스를 위한 표준으로 레퍼런스 구현인 Jersey와 함께 다른 개발사에서도 구현을 제공한다.
- VertX : 비동기 웹/엔터프라이즈 어플리케이션을 위한 라이브러리. netty와 hazelcast로 구성되어 큰 노력 없이 여러 머신으로 분산시킬 수 있으며, 자바뿐만 아니라 자바스크립트, 루비, 파이썬, 그루비 등을 지원하는 것도 특징
- Jackson : 자바 오브젝트를 JSON, XML 등으로 매핑할 수 있는 라이브러리. 속도도 빠르고 어노테이션이나 XML 설정 같은거 없어도 리플렉션으로 알아서 만들어 줘서 편리하다.
- JSoup : HTML 파서 라이브러리. jQuery처럼 CSS Selector를 이용해서 HTML 문서를 다룰 수 있다.
퍼시스턴스
- Hibernate : DB의 각 엔티티와 대응되는 오브젝트들을 만들면 자동으로 스키마가 만들어지는 ORM(Object Relation Mapper). SQL 대신 Session, Criteria 등의 API를 이용해서 쿼리를 날리거나 SQL을 한단계 더 감싼 HQL(Hibernate Query Language)를 사용한다. 따라서 복잡성은 좀더 높지만, 같은 코드로 여러 데이터베이스에 연결할 수 있는 것이 장점. 테스트는 내장 H2DB로, 배포는 MySQL이나 Oracle에 하는 것이 가능.
- myBatis : iBatis의 기존 개발진들이 아파치 재단에서 독립하여 myBatis로 이름을 바꾸었고 지금은 이 쪽이 주력으로 개발되고 있다. 자바 오브젝트에 대응하는 SQL을 작성하여 사용하는 방식이라 하이버네이트보다 저수준이다.
- ActiveJDBC : 위 두가지보다 좀더 RoR 스러운 Active Record 패턴으로 퍼시스턴스를 작성할 수 있다.
로깅
- SLF4J : JCL(Jakarta Commons Logging), Log4j, Logback, java.util.logging 등의 다양한 로깅 라이브러리를 하나의 API로 사용할 수 있는 인터페이스. 인터페이스이므로 실제 로깅을 수행하는 구현체와 함께 사용해야 한다. 사용해야 하는 라이브러리는 로깅을 JCL로 남기는데 우리 로깅은 logback으로 하고 있다면 jcl-over-slf4j, slf4j, logback을 import하면 JCL로 작성된 로그가 slf4j를 통과해 logback을 통해 작성되는 방식.
- Logback : log4j 의 후신으로, 로그를 보내는 인터페이스인 Logger, 로그를 실제로 기록하는 Appender, 로그 내용 형식을 지정하는 Layout으로 역할 분리가 되어 있어 깔끔하게 각각의 설정이 가능하다.
- Log4j : 좀더 전통적인 자바 로깅 라이브러리. 새로 시작하는 프로젝트라면 Logback 사용을 고려하는 것이 좋다.
테스트
- JUnit : 유닛테스트 라이브러리. 아주 널리 사용되고 있어서 이클립스나 IDEA와 같은 IDE 지원이나 CI 지원이 빵빵하며, Spring 과 같은 프레임웍과 연계한 테스트도 지원이 잘 된다. JUnit 4에 오면서 TestCast 클래스를 상속받는 방법 말고도 어노테이션을 이용해서 테스트를 작성하는 것도 가능해졌다.
Python
Parallel Python
- 홈페이지
- 소개
- - 파이썬으로 멀티코어 활용과 병렬 처리 프로그래밍을 할 수 있도록 도와주는 라이브러리 이다.
PIL
- 파이썬 이미지 라이브러리.
NumPy, SciPy
- 수치해석 패키지, MATLAB 대용. NumPy는 배열과 행렬의 빠른 계산을 위한 기본 기능을, SciPy는 신호/이미지처리, 최적화와 같은 좀더 MATLAB스러운 기능들을 담고 있다.