여러 PC를 사용하는 프로그램에서 PC를 제어하기 위해, TCP 서버로 XML을 교환하려고 했다.

xml문을 전달하려고 하니, xml문서를 버퍼에 저장하고 반대로 버퍼에서 xml문서를 만드는 기능이 필요했다.

다행히 tinyxml2는 버퍼에 xml을 쓰거나, 버퍼의 xml을 읽어서 XMLDocument로 만드는 기능을 지원한다.  

 

아래 예제는 m_ServerInfos에 저장된 정보를 xml로 만들어 const char*로 받고,

반대로 const char*로부터 XMLDocument를 만드는 예제를 보여준다.

 

마지막 세줄을 제외하고는 그냥 xml 문서를 만드는 구문이다.

마지막 세줄이 버퍼에 xml을 출력하는 구문인데, XMLPrinter를 하나 만들어 여기다가 doc를 출력하면 된다.

그 다음 XMLPrinter의 CStr( )을 호출하면 xml문서의 const char* 포인터를 받을 수 있다.

문자열의 길이는 XMLPrinter::CStrSize를 호출하면 알 수 있다.

반대로 버퍼속의 xml문서를 객체로 만들기 위해서는 tinyxml2::XMLDocument::parse를 하면된다.

첫번째 파라미터는 xml문서의 포인터이고 두번째 파라미터는 문서 문자열의 길이다.

파싱된 xml로부터 이전의 IP주소가 정상적으로 출력되는 것을 볼 수 있다.

 

끝!

Posted by 굿쟌
,

컴퓨터 여러대로 동작하는 프로그램에서 다른 서버의 IP 정보를 XML로 저장해 두고 싶었다.

아래와 같이 TestEnvironment라는 Root element아래 서버정보를 기록해서 파일로 만들었다.

위 XML파일을 만드는데 사용한 코드는 아래와 같다.

어려울 것 없다.

새 element를 doc로 만들고, 상위 element의 LinkEndChild를 호출 해 만들어 놓은 element추가하면 된다.

attribute를 추가하고 싶으면 해당 elelment의 setAttribute를 호출 하면 된다.

비슷하게 text를 추가하고 싶으면 setText를 호출하면 된다.

 

XML파일을 파싱 할 때도 거의 비슷하다.

차이점이라면, element의 attribute를 불러 올 때 원하는 자료형으로 가져올 수 있다.

혹은 그냥 text로 받아오는 것도 가능하다.

위 코드에서, for문은 다음 sibling이 없을때 까지, 모든 sibling의 text와 "idx" atrribute를 받아온다.

NextSiblingElement함수를 호출하면 해당 XMLElement와 동일 레벨의 sibling들을 찾아올 수 있다.

만약 현재 xmlElement가 마지막 element라면 NextSiblingElement는 NULL을 반환한다.

 

Posted by 굿쟌
,

https://sourceforge.net/projects/tinyxml/

요기 들어가서 clone or download 눌러서 다운 받자. xinyxml2-master.zip이라는 파일로 다운된다.

최상위 폴더에 CMakeList가 있는걸 봐서 CMake도 지원하나보다.

Makefile이 있으니 리눅스 쓰시는 분들은 그냥 make로 빌드하시면 될듯..

근데 고맙게도 visual studio 2015버전 솔루션으로 바로 라이브러리를 빌드 할 수 있게 해놨다.

tinyxml2 폴더에 들어 가면 visual studio 2015 솔루션 파일이 한개 있다.

근데 내 컴퓨터에 visual studio 2015가 없어서 그냥 2010 솔루션 파일로 보인다.

visual studio 2010으로 열어도 변환 없이 그냥 열린다. 

뭔가 에러도 안나고, 변환도 안하고, 기분좋은 예감에 그냥 빌드하면 아래와 같은 에러를 만날 수 있다.

 

"error MSB8008: 지정된 플랫폼 도구 집합(v140)이 설치되지 않았거나 올바르지 않습니다."

왜냐면 나는 돈이 없어서 vs2015는 없으니까...

빌드하기 전에 아래와 같이 플랫폼 도구 집합을 변경해주자.

난 vs2010에서 코딩할 거라 도구집합을 v100으로 변경해서 빌드했다.

빌드가 다 되면, 메인폴더의 bin폴더 아래 빌드 구성에 따라 라이브러리가 생성된다.

 

빌드 구성은 아래 4개가 있으니까 쓰고 싶은 것 빌드해서 쓰면 된다.

Debug-Dll : 디버깅용 동적라이브러리

Debug-Lib : 디버깅용 정적라이브러리

Release-Dll: 릴리즈용 동적라이브러리

Release-Lib: 릴리즈용 정적라이브러리

 

참고로 솔루션에 프로젝트가 2개 들어가 있다.

한개는 라이브러리 빌드하는 프로젝트고 나머지 한개는 테스트용 프로그램..

둘다 빌드해 놓고 test프로그램을 실행시키면 dll이 없다고 실행이 안된다.

그냥 디버깅할 때, vs디버거가 사용하는 working 디렉토리가 아닌 곳에 dll이 생성되서 그런다.

 

만들어 놓은 test.exe와 dll을 그냥 모두 복사해서 tinyxml2.h 가 있는 폴더에다 옮겨보자.

그리고 test.exe를 실행시켜보자.

뭔가 콘솔이 잠깐 켜졌다가 꺼지는데 resources/out에 아래같이 파일이 생기면 성공한거다.

 

끝!

Posted by 굿쟌
,

면접

잡담 2017. 11. 21. 20:32

면접

그녀를 만난 것은 회사 앞 엘리베이터 앞이었다. 깔끔하게 입은 흰 블라우스와 검은색 정장치마, 그리고 잘 닦인 검정 구두는 그녀가 오늘 면접을 봤다고 말해 주었다. 정장 차림은 말쑥 했고, 뒤로 묶어내린 머리는 단정 했다. 그런데 그 모습이 왠지 그녀와 어울리지 않았다. 아직 후드티와 운동화가 더 어울리는 얼굴을 하고 있었기 때문인 것 같다. 아마 이제 막 면접이 끝난 모양인지, 아직 긴장이 풀리지 않아 보였다. 이제 좀 쌀쌀해진 날씨에 손은 빨갛게 얼어 있었다. 그녀는 지나가는 사람들에게 멋적게 인사를 했다. 그날 따라 그녀에게 엘리베이터는 좀 처럼 빨리 오지 않는 것같이 보였다.

나는 복도 건너 편 사무실로 가는 길이었다. 그녀와 눈이 마주쳤고, 나도 멋적게 목인사를 건냈다. 인사를 하다가 목도리를 놓쳤는지, 다시 눈을 들어 그녀를 보았을 때 그녀는 목도리를 줍고 있었다. 그리고 나는 곧 건너편 사무실로, 그녀는 이내 도착한 엘리베이터로 들어갔다. 그녀와의 짧은 만남은 이것이 전부다. 아무 관련이 없는 사람. 나는 나대로 그녀는 그녀대로 삶을 살다, 잠시 한 점에서 스쳐 지나간 것이다. 하지만 왜 인지, 그 장면이 머리속에서 떠나지 않는다. 왜 기억에서 떠나지 않는 걸까? 그녀가 이성적으로 매력적이었기 때문은 아닌것 같다. 그 만남엔 특별 할 것도 없었다. 그러나 차가운 공기, 추워 보이는 손, 긴장 되어 보이는 어깨, 어색한 표정만이 이상하게도 선명히 머리에 남아있다.

나도 구직자였다. 대학원 졸업을 앞두고 몇몇 회사에 자소서를 쓰기 시작했었다. 내 삶은 면접관이 주목 할 만한 역경이 없었다. 그냥 남들이 공부하기에 공부를 했고, 남들이 대학에 가기에 나도 대학에 갔다. 집에 돈이 부족해서 돈걱정이 좀 있었지만, 대출받은 돈으로 등록금을 내고 운이 좋게 서울로 시집 간 누나네 집에 얹혀 살 수 있었다. 그냥 평범했다. 아마 당시 27살, 내 또래들의 삶 또한 그러 했을 것이라 생각한다. 내 삶에 무슨 역경이라도 있길 바라는 건지 대부분의 회사에서는 자소서에 나의 역경에 대해 물었다. 역경이 부족한 만큼 미사여구가 늘어났다. 자소서가 아니라 자소설이 되기 시작했다.

그렇게 서너군데 회사에 서류전형 지원을 했다. 몇몇 회사에서는 서류전형 이후에 합격한 인원을 대상으로 인적성 시험을 봤는데, 나는 운이 좋게 한두 회사의 시험을 통과 할 수 있었다. “몇월 몇일 몇시까지 어디로 오세요” 인적성 합격과 함께 도착 한 면접 일정 메시지에 마음은 이미 합격한 것 처럼 기뻐던 기억이 난다. 늦은 나이에 얻은 막둥이 아들이 이제 다 자라서 구직도 하고 면접도 보는것이 기쁘셨는지, 누나들 시집갈 때 입었던 양복을 아버지께서 직접 다려 주셨던 기억이 난다. 면접장소는 양재의 어떤 대기업 연구소였다. 양재역에 내려서 한참을 걸어가야 했는데, 한여름의 뙤약볕에 발이 아픈 검정색 구두를 신고 열심히 걸어갔던 기억이 난다.

그렇게 시작한 면접에는 나 말고 다른 사람 둘이 더 들어왔다. 면접장소에서는 기다리는 태도도 평가점수에 들어간다는 말을 어디선가 듣고 대기장소 부터 웃는 얼굴로 기다리느라 얼굴이 좀 얼얼 해 지려던 참이었다. 면접관들은 우리에게 몇가지 질문을 했다. “~했습니다”라고 말하려다 보니 안그래도 긴장되는 분위기에 말은 무지 꼬였다. 사실 긴장되는 것과 별개로 면접관이 나에게 했던 질문에 대한 답을 나는 알지 못했다. 옆 사람은 “~했습니다”로 말하지 않았지만 내가 답하지 못한 질문의 답을 곧 잘 설명했다. 곧 PT면접이 시작되었다. 내 발표에 면접관들은 흥미를 잃었는지 일부는 눈을 감고, 일부는 턱에 손을 괸채 나의 PT면접을 들었다. 딱히 발표에 대해 질문도 없었다.

곧 면접이 끝나고, 면접비를 줄 계좌 번호를 적으라고 해서 면접자 명부에 이름을 적는데, 다른 면접자 정보에 써진 출신 학교들을 보니 기가 죽었다. 그날 집으로 가기 위해 양재역으로 되돌아 나오는 그 길은 무척 길고도 더웠던 것 같다. 구두는 발이 아팠고, 양복이 잘 다려진 만큼 마음이 아팠다. 난 지금까지 뭘 한걸까.. 스무살 때부터 그때까지 나만 바라보고 살던 여자친구에게 미안했고, 또 부모님께 죄송했다. 내가 지금까지 살아온 인생이 낙제라고 평가받은 것 같은 느낌이었다. 더 이상 사회에서 날 받아줄 곳은 없는 것 처럼 느껴졌다. 드라마 였다면, 길건너다 다친 회장 할아버지를 도와 드려서 취직에 성공했을 텐데 아쉽게도 현실에서 그런건 없었다. 예상대로 실패.

어느 회사든 꼭 자소서만 쓰면 물어보는 질문이 있다. “자신이 겪은 역경과 그 역경을 극복한 경험을 쓰시오”. 그런데 사실 사람이 겪어 볼 수 있는 역경 중에 가장 큰 역경은 구직이 아닐까? 이렇게 생존의 문제와 맞닿아 있으면서 자기 자신에 대해 실망하게되고, 실패하면 미래가 보이지 않는 역경이 또 있을까 싶다. 그 역경을 맞이 해 울어가며 살아가는 사람들에게 “역경을 쓰시오” 라고 묻는것이 꼭 “미안한데 취직같은 평범한 고통 말고 좀 더 큰 고통은 없었니?” 라고 물어 보는 것 같아 마음이 미안하다.

아마도 그래서 였던 것 같다. 그 어린 면접자의 얼어있던 손이 이토록 기억에 오래 남는 이유는. 잠시 스쳐지나가는 인연 이었지만, 그 모습에서 몇 년 전 양재역으로 터벅터벅 걸어가던 내 모습을 본 것 같았다. 면접을 잘 보았는지, 아니면 말이 꼬여 면접을 망쳤는지모르겠지만, 잘하고 있다고 어깨 툭툭치며 말해주고 싶었다. 아직 운동화와 후드티가 잘 어울리는 그녀에게, 그리고 양재역을 쓸쓸히 걸어가던 나에게.


'잡담' 카테고리의 다른 글

우물쭈물하다 내 이럴줄 알았다.  (0) 2014.06.29
블로그를 열었다.  (0) 2014.06.21
Posted by 굿쟌
,