apr : apache portable runtime의 장단점
2015/07/15
시작
대용량 부하를 적은 기계로 처리하기 위해 아파치 모듈로 작성된 부분을 잠시 담당했다. 이제 아무거나 짤 수 있을 것 같다. 크게 나누면 필터 개발과 모듈 개발로 나눌 수 있으며 둘 다 다뤄봤다. 필터를 다루기 위해서는 apache brigade bucket 메모리 구조를 다룰 수 있어야 하며 생각보다는 까다롭다.
뭐냐?
아파치 웹서버를 개발하기 위한 기저 라이브러리 셋트. 요즘 유행어로는 프레임워크... ?...는 아니고 그냥 라이브러리다.
장점
단점.
- 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 언어 비숙련자 : 거지같음.
속도
- 외부 연동 줄이면 : 넘사벽
- 외부 연동 넣으면 : 애써 확보한 속도 다 까먹음.
생산성
초반에 느림. 왠지 한 번 짠 거 건들기 귀찮음.
열개 채우기 힘들다. 끗.
[t:/] is not "technology - root". dawnsea, rss