'2013/03'에 해당되는 글 4건

  1. 2013.03.22 human readable 한 json 출력
  2. 2013.03.21 Shell 에서 FTP uploading check
  3. 2013.03.18 재준이 침대 1
  4. 2013.03.11 종려나무

API 관련 테스팅 프레임워크를 만들면서 json을 출력하게 하는데..
그냥 출력하려니.. 양심에 찔려서 인터넷을 뒤져 봤더니 gson을 이용하면 깔끔하게 출력해 주는 Tip이 있다.

http://stackoverflow.com/questions/8596161/json-string-tidy-formatter-for-java

JsonParser parser = new JsonParser();
Gson gson = new GsonBuilder().setPrettyPrinting().create();

JsonElement el = parser.parse(jsonString);
jsonString = gson.toJson(el);
위와 같이 간단히 해결하고 한동한 있고 있었는데.
오늘 독일팀이 잘 쓰고 있는데 좀 문제가 있네 하면서 보내준 내용을 보니
json 리턴 값에 HTML 태그랑, JavaScript가 있어서 출력값이 깨져서 나오게 된다.

흐미... 내가 왜 HTML이 포함될 수 있다는 걸 까먹고 있었는감...-.-
어쨋든 뭐...JSON 결과를 HTML escaping하면 간단히 해결되지 않을까 싶었는데..
테스트 해보니. JSON 내의 " 까지도 escaping이 되버리는 바람에 formatting 한게 물거품이 되어 버리고 만다.-.-
( formattting 한후 <pre></pre> 태그를 앞 뒤로 붙여 formatting한 결과를 보여 주어서...)

이런 저런 생각을 계속 하다 보니 결국 방법은 JSON 데이터를 Parsing 한 후 Field 를 Traversing 하며 출력해 주면서 Field 값이 문자열일 경우에 HTML escaping을 하면 될 것 같다.

마침 다른 이슈로 recursive 하게 json traversing하는 로직을 만들어 놓은 게 있어서 사용을 했더니 결국 HTML escaping이 깔끔하게 해결되었다.

public String getPrettyHtmlJson(String content){
try {
Object jsonContent = JSONParser.parseJSON(content);
return "<pre>"+getPrettyHtmlJsonElement(jsonContent, 0,false)+"</pre>";

} catch (JSONException e) {
e.printStackTrace();
return content;
}
}

private String getPrettyHtmlJsonElement(Object object, int indent, boolean indentNeed) throws JSONException{
String content = "";
if ( object instanceof JSONArray){
JSONArray jsonArray = (JSONArray) object;
if ( indentNeed)
for(int i = 0; i < indent; i++) content+=" ";
content+= "[ \n";
for(int j = 0; j < jsonArray.length(); j++){
if ( j > 0 ) {
content+=", \n";
//for(int i = 0; i < indent; i++) content+=" ";
}
content += getPrettyHtmlJsonElement(jsonArray.get(j), indent+1, true);
}
content += "\n";
for(int i = 0; i < indent; i++) content+=" ";
content+= "]";
return content;
}
else if ( object instanceof JSONObject){
if ( indentNeed)
for(int i = 0; i < indent; i++) content+=" ";
content+= "{\n";
JSONObject jsonObject = (JSONObject) object;
String[] names = JSONObject.getNames(jsonObject);
for(int j =0 ; j < names.length; j++){
String name = names[j];
for(int i = 0; i <= indent; i++) content+=" ";
content+= "\""+name+"\" :";
Object fieldObject = jsonObject.get(name);
if ( fieldObject instanceof JSONArray)
content += getPrettyHtmlJsonElement(fieldObject, indent+1, false);
else if ( fieldObject instanceof JSONObject)
content += getPrettyHtmlJsonElement(fieldObject, indent+1, false);
else if ( fieldObject instanceof String){
content += "\""+StringEscapeUtils.escapeHtml4(fieldObject.toString())+"\"";
}
else
content += "\""+fieldObject.toString()+"\"";
if ( j + 1 < names.length )
content += ",";
content +=" \n";
}
for(int i = 0; i < indent; i++) content+=" ";
content+= "}";
return content;
}
else{
for(int i = 0; i < indent; i++) content+=" ";
content+= "\""+object.toString()+"\"";
return content;
}
}

잘 되었네.. 하고 접을 까 싶었더니...
Field 순서가 뒤죽 박죽이다.
구글링을 해보니.. JSON은 순서를 보장하지 않는 필드 List라는 문구가 나온다.
흐... 그래서 field ignore 시킬 때 JSON Parsing을 하면 순서가 뒤바뀌어서 나왔었구나...

뭐.. 순서가 바뀌어 출력되도 스펙 내용에 따르면 별 문제는 없는데..
그래도 개발의 양심이라는 것이...
결국은 좀더 조사해보니...
JSONObject map을 HashMap에서 LinkedHashMap으로 바꾸면 해결 된다고 한다.

http://stackoverflow.com/questions/4515676/keep-the-order-of-the-json-keys-during-json-conversion-to-csv

마침...
J
son Assert가 org.json.* 구조를 이용하는데.. 이 library는 마침 JSON.org에서 다운 받은 jar를 사용하고 있어서..
source를 받아서 위에 얘기한 대로 LinkedHashMap으로 바꾸고 나니 문제점 깔끔하게 해결...

덕분에 field ignore 할 때도 필드 순서 보장하게 되고...
HTML escapaing 문제도 해결하고 ... formatting때문에 사용한 gson library도 빼고...

골치아픈 HTML escaping 이슈가 오히려 전화위복이 되어 더 깔끔한 프레임웤이 완성되었다.


Posted by headiron
,

API로는 처리가 안되는 Client issue로
별도 Job을 작성해서 FTP로 정보를 제공해 주는 서비스가 있는데..
얼마전에 해당 Client의 FTP 서버 이슈로 파일이 전송되지 않는 문제가 발생했다.

그쪽에서 문제 해결 한 다음에 FTP 서버에 수동으로 파일을 넘겨 주어 해당 이슈는 해결이 되었는데..

그 쪽 VP가 FTP Uploading 중 문제가 발생할 경우에 1시간 주기로 여러번 Try 할 수 있도록 Script를 수정해 달라는 요청을 해왔다.

마침 몇 일간 다른 이슈가 있어서 조만간 봐주겠다고 메일만 보내놓고 있었는데..
어제 VP가 수정 요청 어떻게 됐냐고 물어 온다.
흑.... 어물쩡 넘어 갈 까 했었는데...

오늘 마침 시간이 나서.. 자료를 찾아 보다가
Matt한테 이슈를 얘기 해 보니 간단한 solution을 준다.

Shell에서 command를 실행 한 후 exit code를 체크해 보면 될꺼라고 한다.
internet에서 예제까지 찾아서..

http://linuxers.org/howto/how-find-exit-code-last-executed-command-bash-using-environment-variable
$? 값을 체크하면 이전에 실행된 command의 return 값을 확인할 수 있다고 ..

흠.... 이런 좋은 TIP을 하고 생각하며 script를 작성하려니...
다른 article에 ftp는 에러가 발생해도 정상(0) 를 return한다는 내용을 찾아서 바로 알려 준다.

http://stackoverflow.com/questions/4899316/getting-exit-status-code-from-ftp-command-in-linux-shell

결국 아래와 같이 FTP 메시지를 Capture 하여 SUCCESS MESSAGE가 있는 지 수동으로 체크해야 한단다.

FTPLOG=/temp/ftplogfile
ftp -inv <<! > $FTPLOG
open server
user ftp pwd
put filename
close
quit
!

FTP_SUCCESS_MSG="226 Transfer complete"
if fgrep "$FTP_SUCCESS_MSG" $FTPLOG ;then
   echo "ftp OK"
else
   echo "ftp Error: "$OUT
fi
exit 0

결국은 위 내용을 응용하여 에러 발생하면 SLEEP 했다가 다시 FTP 파일 올리는 방법으로 해당 SHELL 수정을 완료 했다.

혼자 끙끙 거리면서 해결할라고 했으면 한 참 뒤져도 해결 못했을 텐데
Matt의 TIP 덕분에 1~2시간 만에 해결하였다.

모르는 문제는 너무 혼자서 해결하려 하기 보다는 함께 공유하면 쉽게 해결 될 수 있다는>>..
그리고 Matt이 정말 좋은 동료라는 걸 새삼스럽게 각인하는 하루 였다.

Thanks , Matt.

Posted by headiron
,

재준이 침대

사는이야기 2013. 3. 18. 08:41

보통 토요일은 장 보러 다니다가 하루를 보내는데,
이번 주는 뜬금 없이 눈이 오기에 1월에 사 놓고 모셔놓기만 했던 재준이 침대를 조립했다.
( Ground Hog Day에 Early Spring이라고 했는데..
  정녕 Punxsutawney Phil 님을 믿지 말아야 하는 것일까... )

안방에 재준이 침대를 놓으면 다닐 공간도 없어 질까 걱정했는데..
괜한 기후였다는 걸 알게 되었다.

안방에 넣고 보니..
거실 식탁에서 정면으로 보여서 더 안심이 될 듯 싶다.

Changing Table, Crib 까지 준비가 되었으니...
재준이만 나오면 되는 구나....

킄... 근데 정말 이름 지어야 하는데..


'사는이야기' 카테고리의 다른 글

RIP N1, Good bye OAS  (0) 2015.09.04
부활  (0) 2014.04.21
종려나무  (0) 2013.03.11
생일... 기일.... 출생...  (0) 2013.01.28
신호위반  (1) 2013.01.12
Posted by headiron
,

종려나무

사는이야기 2013. 3. 11. 12:13

요즘 마눌님과 교회 관련 얘기를 하다 보니
문득 예전에 많이 불렀던 성가가 생각났다.




초등학교때 성가대 하면서 많이 불렀던 곡인데.
특히나. 전국대회 지역 예선에 나갈 때
지휘자 선생님의 플룻 반주 소리에 매료되어
플룻을 내가 제일 좋아 하는 악기로 만든 그 곡이다.

집 사람에게 음악을 들려 주면서 그 얘기를 했는데..
멜로디도 별로.... 연주도.. 뭐..

생각해보니... 내가 워낙 많이 불렀기에 기억에 많이 남는 거지 뭐.
다른 사람들에게야...

갑자기 이 음악을 들이니..
예전에 즐겁게 교회를 다니던 생각이 많이 났다.

어려서 부터 같은 학교, 같은 교회, 같은 동네 친구들이라서
함께 어울리고 즐겁게 지냈는데..

이사하면서 학교 옮기고, 얼마 있지 않아 교회까지도 옮기게 하셔서
이제는 앨범을 뒤첫일 때 어렴풋이 기억이 나는 그런 추억 정도가 되버리고 말았다.

요즘은 재준이 때문에라도 교회를 다녀야 하지 않나
하는 생각을 집사람도 하기 시작하는데..

재준이에게도
내가 겪었던 그런 즐거웠던 어린 시절의 기억을 가지게 하고 싶다는 생각이 든다.
물론 아련한 기억이 아닌..
함께 즐겼던 추억을 남겨 줄 수 있었으면 더 좋겠는데...

'사는이야기' 카테고리의 다른 글

부활  (0) 2014.04.21
재준이 침대  (1) 2013.03.18
생일... 기일.... 출생...  (0) 2013.01.28
신호위반  (1) 2013.01.12
E-Book  (0) 2012.04.23
Posted by headiron
,