[완료]Perl 언어에 대한 문의입니다.
글쓴이: 이소희 / 작성시간: 금, 2008/07/18 - 5:46오후
안녕하세요, 제가 펄에 대해 아는게 없어 문의 드립니다.
[질문1]
아래처럼 (가)DB에 펄 스크립트를 저장하고, 저장된 펄스크립트를 운영중이 서버의 APP로 보내면 APP가 받은 펄 스크립트를 실행시키고 그 결과를 받아서 다시 처리하게 만들 수 있나요?
부연 설명하면, 요금 계산방식이 자주 바뀔뀔때 , 자주 바뀌는 계산을 펄로 만든뒤 DB에 저장한뒤 바뀐내용을 (나)의 APP로 보내주면 APP는 펄스크립트에 계산에 필요한 추가 데이터를
보내주고, 펄에서 추가로 받은 데이터를 이용해 최종 계산한뒤 APP로 다시 전달하면, APP가 최종값을 이용해 최종 세금계산을 하고 마치는 방식입니다.
지금 이방식이 펄을 잘 모르는 사람이 몇일 책보고 구현할 수 있는 난이도 인지요? ^^
-------------------------- ---------------------------------
| (가)DB에 펄 스크립트 저장 | ----------->| (나) APP(C로 요금정산처리서버) |
__________________________| |_________________________________|
[질문 2]
C모듈에서 펄에 구조체 포인터나를 보내 줄 수 있는지요?
반대로 펄에서 C모듈로 구조체포인터를 다시 보내 줄 수 있는지요?
이상입니다.^^
좋은 주말 보내세요.~
Forums:
그런 것은...
할 수만 있다면 몇 일사이에 못하겠습니까?
Perl 을 알기전에 프로그래밍을 안다면 몇 일 사이에 가능하지 않을 까 합니다.
근데 DB에 펄스크립트를 저장한다든가.. 이런 내용은 좀 미묘하네요;
두번째 질문은 XS를 보시면 됩니다.
일단 아래의 WebIRC 로 들어오시면 친절하게 답변해주실 분(a3r0, saillinux, keedi님 등)이 계실겁니다.
http://doc.perl.kr/twiki/bin/view/Wiki/WebIRC
______________________
use perl;
use perl;
그냥 드는 생각...
왠지..."soap으로 하면 딱일것 같은데....." 라는 생각이 듭니다.
perl에 soap모듈도 있고...
--
저도 아직 배우는 입장이라서...
괜한 혼란만 드리는 것은 아닌지.....에공...^^;
인용: [질문1] 지금
말씀하신 방법으로 처리하려면 C에 펄을 넣는 Perl 내장(임베드)기법을 사용하셔야 합니다. 하지만, 기술적이 아니라 구현하시려는 내용 자체로 접근했을 때 굳이 내장 기법을 사용하실 필요가 있는지 하는 의문이 듭니다. 지금 상황에서는 펄 임베드로 했을때의 메리트가 크게 보이지 않기 때문입니다.
단지 펄에게 몇가지 데이터를 보내고 연산만 시켜서 그 결과를 얻으실 계획이시라면 xml-rpc라는 가장 간단한 방법 또는 SOAP이라는 조금 더 많은 기능을 지원하는 방법이 있습니다. 가장 간단한 xml-rpc를 예로 들면 C용 라이브러리가 이미 있으며, 용량또한 매우 작습니다.
즉 간단하게 처리한다면...
1. 펄로 말씀하신 부분을 처리하는 모듈을 작성(기왕이면 객체지향으로 만들어서 추후 변경 부분을 적용하기 쉽게 제작)
2. 펄로 만든 모듈 + xml-rpc 모듈 + 웹서버 모듈을 이용해서 xml-rpc 서버 작성(20줄 미만), 또는 아파치등의 서버와 연동
3. C에서 xml-rpc로 계산 요청 및 반환 결과를 이용 (100~200줄 미만)
정말 간단하죠? 아는 사람은 하루면 제작, 모르는 사람이라도 일주일이면 작성할 수 있을 겁니다.
* 펄에 기본적으로 구조체를 보낼 수 없습니다.
* 펄에 포인터는 보낼 수 있습니다.
* 결국 펄에 구조체 포인터를 보낼 수 있습니다.
* 마찬가지로 펄에서 C로 구조체를 보낼 수는 없습니다.
* 하지만 펄에서 C로 포인터는 보낼 수 있습니다.
* 결국 펄에서 C로 구조체 포인터를 보낼 수 있습니다.
하지만 유념하셔야 하는 것이 C쪽의 포인터는 기본적으로 펄에서 아무 의미가 없습니다. 의미가 없다는 것은 펄 스크립트 차원이고 만약에 C쪽의 구조체 포인터를 넘겨주셨다면, 이것을 바인딩하기 위한 부분을 XS 쪽에서 작성해주셔야지만 펄 스크립트에서 그 값들을 이용할 수 있습니다.
하지만 선행 공부가 좀 많이 필요한 작업이라고 생각하는데, 그이유는 다음과 같습니다:
1. XS를 작성하기 위해서는 기본적으로 Perl의 Internal 자료구조를 알아야 합니다.
2. 펄 스크립트에서 해당 자료구조를 기존 내장 구조처럼 편하게 쓰려면 XS 측에서 모든 부분을 구현해줘야 합니다.
3. C의 메모리 누수 위험을 고려해야 합니다.
보통 XS를 많이 쓰는 경우는 다음과 같은 경우입니다.
1. 특정 연산을 위해 몇개의 파라미터를 넘기고 그 처리 결과를 반환 받는데 시간이 오래 걸리는 경우
2. 이미 존재하는 좋은 라이브러리를 Perl에서 사용하고 싶은 경우
위의 두 경우가 아니면, 여러가지 측면(개발 시간, 및 난이도)을 고려했을때 직접적인 C-Perl 의 바인딩 보다는 C - 중간단계 - Perl 로 처리하는 것이 훨씬 수월할겁니다. 위에서 다른 분들이 말씀해주시는 네트워크 통신 이라든가 SOAP, xml-rpc, xml 등이 그런 중간 단계라고 보시면 됩니다.
물론 꼭 그렇게 하시겠다면 안될것은 없으나 기왕이면 쉽게쉽게 해결하는 것이 좋겠지요.
그런 경우에는 다음과 같은 대안을 고려해볼 수도 있겠습니다.
Perl에서 C쪽의 코드및 라이브러리를 사용하는 더 쉬운 대안:
- Inline 모듈
- Swig 라이브러리
- P5NCI 모듈
- FFI 모듈
C쪽에서 Perl을 사용하는 방법:
- 펄 임베드
좋은 결과 있으시길 바랍니다. :-)
---------------------------
Smashing Watermelons~!!
Whatever Nevermind~!!
Keedi Kim
----
use perl;
Keedi Kim
답변감사합니다.
JEEN님, primewizard님, keedi님 답변 감사 드립니다.
덕분에 고민이 해결 됐습니다.
좋은 하루 보내세요~ ^___^
내 삶속에 던져진 나.
댓글 달기