대용량의 json 처리하기

파이썬은 json데이터를 처리하기 참 편하다. 그런데 기본 방식으로 json을 처리하려면, 전체 json파일을 모두 읽어들인뒤 데이터 객체를 리턴해준다.

즉, 100MB짜리 json파일을 처리하기 위해서는 100MB를 메모리에 올려야 한다는 의미가 되겠다.

나무위키의 덤프파일을 다운로드하면 대략 7GB의 json으로 된 텍스트 문서를 처리해야하는데, 한방에 읽어서 처리하는것은 바보같은 일이다.

python에서는 이를 처리하는 패키지가 있다. ijson 이라고 하는데, json파일을 읽어들이면서 이벤트처리 방식으로 파싱이 가능하다. 다만, 홈페이지가 없는지 문서가 잘 되어 있지는 않다. 적당히 테스트해본뒤 경험에 의해 코딩하면 될듯하다. 어렵지 않으니…

간단히 아래와 같이 코딩하면 namuwiki의 json파일을 읽으면서 순차적으로 파싱해서 출력해준다.

 

예외

나무위키의 문서를 해당 타이틀의 텍스트 파일로 만들었는데… 예를들어 ‘대한민국.txt’. AUX.txt라는 파일은 만들 수 없다. AUX라는 이름의 파일은 윈도우즈에서 생성할 수 없다.

 

참조

워드프레스를 컨텐츠 서버로 활용하기

끄적끄적 싸이트를 하나 만들고 있는데, 컨텐츠를 넣어야 하는 페이지가 있다. 그냥,  http://www.primefaces.org/primeng/#/editor 를 이용하여 기능을 만들고, 테이블을 설계하면 되지만, 뭔가 재미로 만들고 있는데 내가 직접 이것까지 다 만들려니 한 세월이고 헛짓꺼리라는 생각이 들었다.

그런 찰나에 훌륭한 컨텐츠 관리 툴인 WordPress를 사용하고있다는 사실을 기억하고, 이놈을 컨텐츠 서버로 쓰면 좋겠다는 생각이 들었다. 이리저리 조사해보니 가능한듯하다. 워드프레스에 Page를 만들어놓고 그 데이터를 JSON을 이용하여 CI를 통해서 Angular2까지 전달해주는걸로 생각한다. 그래야, CORS문제를 해결하기도 쉽고…(생각해보니 한 사이트에 몰아넣을꺼라 상관이 없긴 한데?) WP REST API V2를 이용하기로 하였고,  테스트 해보니 잘 동작함.

그러던 와중에 그냥 테이블에서 가져와도 되겠다는 생각이 들었다. 굳이 JSON API를 콜해서 가져올 필요가 있을까? 대단한걸 하는것도 아닌지라…

뭐가 나을까.

30분 고민 끝에 WP를 JSON으로 연결하는 것으로 결정. 이유는 JSON이 분석하기 더 쉬워서. 좀 느릴수도 있겠지만, 뭐 사용자가 별로 없을거라서 괜찮을듯.

이라고 생각했는데, 호스팅을 받은 Cafe24의 문제인지 일정 사이즈 이상의 포스트가 JSON으로 읽어지지가 않는다. 속편하게 DB에서 직접 읽도록 하자!!!