[자동차 개발 SW 기록] C++ POCO 라이브러리
poco는 네트워크 중심 프로그래밍을 지원하는 객체지향 언어이다. C언어에서 libcurl과 동등하지만, 그보다 더 많은 기능을 가진다. 이 라이브러리는 JAVA의 SPRING, JSP처럼 서버 프로그래밍을 하는데도 용이하고, 단순히 REST API 클라이언트를 만드는데도 사용할 수 있다.
서버 프로그래밍이 용이한 이유는 동적 HTML(JSP, ASP 등) 작성 기능을 지원하고, MySQL, REDIS처럼 RDB, NoSQL 접속을 지원한다. 그 외에도 BASIC AUTH, JWT와 같은 BEARER TOKEN도 사용할 수 있다.
클라이언트는 HTTP, FTP, ICMP(PING), DNS RESOLVE 등의 프로토콜을 클라이언트 측면에서 프로그래밍 할 수 있고, .ZIP 파일 다운로드 프로그램이나 PING으로 네트워크 연결 상태를 체크하는 기능을 코딩할 수 있다.
찐 객체지향 프로그래밍으로 설계가 되어있어 좋다.
자바로 HttpClient를 짜본 분이라면 익숙한 코드를 보는 느낌으로 만들어져있다.
이제는 C언어 No, 객체지향 언어가 더 편함
(c언어 코드보다보면, 객체지향처럼 만들어진 코드와 구분이 됨)
이 라이브러리 사용 계기는 SPRING BOOT로 자바에 익숙해지니, 객체지향이 아닌 C언어가 지옥처럼 느껴지고 너무 불편해서 벗어나고 싶었다.
특히 객체지향의 경우 ☆☆☆ 기능은 B 클래스에 있을거같아서 해당 객체를 적으면 IDE에서 메서드가 나열되서 찾기 편하다 하지만 C언어는 수만줄로 되어있는 여러 코드의 각 페이지를 다 뒤지다가 하루가 가버린다.
또 다른 단점은 FANCY하지 않다. 싸피에서 자바를 다룰때는 GoF, 객제지향론 등 어떻게 하면 개발을 효율적으로 할지 고민하고 이론도 많아서 주변사람들과 생각공유를 하기 좋았다. 하지만 이 c언어 세계에서는 그런 것도 없고, 솔직히 코드 뒤져보거나 셀프로 다시 원래 있던 기능 코딩 등 시간이 많이 걸려서 그럴 시간이 없는거같더라.
(객체지향이면 find 메서드는 interface 클래스만 정의해놓으면 쭉 쓸수있는데, c언어에서는 그게 어려우니 하나씩 반복해서 코딩한다..ㅎ)
POCO는 Factory method 패턴 등 디자인 패턴이 적용되어있어서, 객체지향 프로그래밍을 하는 기분이 든다.
B사, J사의 자동차의 sw 개발을 위해, 인터넷 접속으로 curl 기능 개발때문에 이걸 알게 되었다.
개떡같이 짜놓고 던져진 코드.. 그리고 .cpp라고 되어있지만 class, 네임스페이스 조차 적용되지 않은 겉무늬만 c++인 c 코드를 머리 쥐뜯어가면서 갈아엎기보다 새로 시작하고 싶었다..기왕 할거면 고객사처럼 찐 객체지향인 c++ 코드를 만들어서 주고 싶었다.
+뭐.. 전달받은 코드가 대학과제 정도 수준이라.. 경력직이 짠 코드 수준은 절대 아니기도 했고 고객사한테 주었다가 내가 안했는데도 내 면전에서 욕을 들으면 진짜 싫을거같았다. 그래서 어찌저찌 코딩하다가 남은 3일만에 실체라도 고객한테 보여줄만큼의 수준으로 완성못할거같아 찾아보다 poco를 발견했는데, 오랜만에 객체지향 코딩해서 좋았다.
참고로 경력 30년 차이나는 분이 내게 '그 코드 고객사한테 오픈했을 때 안쪽팔리면 그 사람이 짠 코드보여줘'라는 질문을 했다.
솔직히 개쪽팔렸다.
경력직이 짠 코드인데 ssl cerificate 관리코드 미구현(아예 설계조차 안함), Http Code 값을 string으로 변환하는 것 등 http connection 기능도 별로 없고, 객체지향론, 쓰레드풀 등 테크닉 조차 없다. 내게 코드가 던져지고 난 후, 그걸 야근하면서 한달 내내 한 거라는게 믿겨지지 않기도 했다..
(그래서 야근하며 개발을 새로 했다는.. 눙물,..)
ps.
학교 다닐때는 멋도 모르는 바보여서, 성능이 c언어보다 낮다는 이율ᆢ 자바를 싫어했는데 한번 익숙해지니 객체지향 언어가 아닌 c언어가 몹시 불편하더라.