apr : apache portable runtime의 장단점

2015/07/15

시작

대용량 부하를 적은 기계로 처리하기 위해 아파치 모듈로 작성된 부분을 잠시 담당했다. 이제 아무거나 짤 수 있을 것 같다. 크게 나누면 필터 개발과 모듈 개발로 나눌 수 있으며 둘 다 다뤄봤다. 필터를 다루기 위해서는 apache brigade bucket 메모리 구조를 다룰 수 있어야 하며 생각보다는 까다롭다.

뭐냐?

아파치 웹서버를 개발하기 위한 기저 라이브러리 셋트. 요즘 유행어로는 프레임워크... ?...는 아니고 그냥 라이브러리다.

장점

  • C언어임.
  • 왠만한 것 다 있음.

단점.

  • C언어임. ㅋㅋㅋㅋ
  • 있는 거 빼고 없는 거 많음. ㅋㅋㅋㅋ

세부 장점

  • 웹서버 만들때 필요한 어지간한 것이 다 있음.
  • 리퀘스트 - 리스판스 단위로 자원의 해제가 오토매틱임. alloc-free 쌍을 맞출 필요가 없고, 직접 alloc 할 필요가 없음.
  • 문자열 연산을 위해 배열을 잡거나 alloc 할 필요가 없음. apr 함수로 OK
  • 빠름.
  • key-value 자료구조, 스택형(순회 가능) 자료구조 지원 (순회참조, 검색참조 둘 다 성능에 맞게 트릭 가능)

써드파티 라이브러리와 함께 가능한 것들

  • 쓰레드 - pthread
  • json - libjansson
  • http : libcurl 또는 직접 개발 (단, 고성능 시스템에서 이것을 처리하는 것은 넌센스)
  • memcache : 라이브러리 자체지원 또는 libmemcached
  • redis : 라이브러리로
  • DB : 라이브러리로, 역시 이것을 직접 콜하는 것은 넌센스.
  • 고려 순서 : 공유메모리 > mmap > 버클리DB > 멤캐시 > 레디스 > DB 직접 접근
  • xml : libxml
  • 인코딩 : iconv
  • 로깅 : 아파치 사용시 아파치 로깅, 네이티브에서는 lib4c (기억으로... 멀티 프로세싱 원로그 지원 안 됨)
  • mvc 지원 : 비슷하게 흉내낼 수는 있음... 서블릿 형태 만들 수 있음... 그렇게 짠 사람은 못 봤지만... 시간 되면 해보고 싶음.

진입장벽

  • c 언어 숙련자 : 쉬움
  • c 언어 비숙련자 : 거지같음.

속도

  • 외부 연동 줄이면 : 넘사벽
  • 외부 연동 넣으면 : 애써 확보한 속도 다 까먹음.

생산성

초반에 느림. 왠지 한 번 짠 거 건들기 귀찮음.

열개 채우기 힘들다. 끗.