c++용 network library 개발하여 공유해 봤습니다.

kangic의 이미지

안녕하세요.

KLDP를 통해 항상 좋은 정보와 많은 도움들을 얻어가곤 했는데,
이번에 저도 보답 차원(?)에서 공유를 하나 할까 하여 이렇게 포스팅 합니다.

집에서 쉬면서 오픈 소스 하나 만들어보자 했던 막연한 생각으로 이번에 비동기 네트워크 라이브러리 하나 만들어 봤습니다. url은 https://github.com/kangic/eznetpp 입니다.
(처음에는 제가 앞으로 쓰려고 만들기 시작한게 목적이지만, 어디 내놓기 부끄러운 실력이나마 조금의 도움이 된다라면 공개해보자는 생각에 github에 올렸습니다.)
라이센스는 MIT이니 둘러보시고 마음에 드셔서 혹여라도 활용하고자 하시면 마음껏 활용하여 주시면 좋겠습니다.

Linux 기반의 epoll을 사용해서 작업했으며, cmake 통해서 빌드 환경 조성하였으며, event driven 방식의 라이브러리입니다.

한 번 둘러보시면서 좋은 의견이나 지적할 사항들, 눈에 보이는 실수 등 아무 내용이나 피드백 주시는 것 대환영 입니다.
(아직 제 to do list에도 개선해야 할 사항들에 대한 작업 목록이 엄청 많긴 합니다만...ㅎㅎ)

좋은 하루 되세요^^

letsdev의 이미지

저도 HttpServer를 만드느라 비슷한 작업을 한적이 있는데 ㅠ
저보다 인터페이스부터 디자인이 훨씬 좋고 좀 더 프로페셔널 하네요.
어떤 프로젝트나 자료를 참고하셔서 만들었는지 여쭤봐도 될까요?

kangic의 이미지

KLDP에서는 첫 댓글이네요. 관심 감사합니다.
아직 부족한 점이 많은 라이브러리지만 이렇게 좋게 봐주시고 칭찬해주시다니 감사합니다. :-)

질문주신 부분에 대해서 최대한 답변을 드리자면,
일단 저는 라이브러리 개발 시작 단계에서 라이브러리를 사용하는 샘플 코드를 먼저 작성해 놓고 시작하는 편입니다.(당연히(?) 수도 코드 수준으로요..)
그 구조를 기반으로 API 디자인부터 시작하여 클래스 디자인, 내부구조 순으로 틀을 잡아가는 스타일로 작업을 진행했습니다.

참고한 프로젝트나 자료를 말씀드리자면...
경험적으로는 boost asio 혹은 ACE 라이브러리를 썼을 때의 경험 자체가 참고 자료로 활용되었고요,(제 생각에는 boost의 asio보다 한참 모자라지만 boost asio 같은 느낌의 디자인이 나온 듯 싶습니다.)
github에서 네트워크 라이브러리 프로젝트들을 검색하여 훑어보며 디렉토리 구조, 사용 라이센스 등에 대해 참고했습니다.

Have a good day :-)

letsdev의 이미지

Coursera.org에 있는 무료강의 정보 입니다.
이 글을 읽고 관련된 학습을 하시는 분들에게 도움이 될까하여 올려봅니다.

Pattern-Oriented Software Architectures for Concurrent and Networked Software
https://class.coursera.org/posasoftware-001

kangic님께서 말하는 ACE를 만들고 이것에 관련된 연구를 진행한 D. Schmidt라는 교수님이 직접하시는 강좌입니다.

이쪽에 관심가지시고 공부하시는 분들에게 좋은 자료가 될 듯합니다.

혹시나 도움이 되셨다면 강좌라던가 배운 것들을 정리하셔서 여기에 올려주세요! :)