abc abc2
최근 학교에서 그 동안 공부했던 것을 다시 훑어볼 일이 있었다. 공부하는 김에 각 강의에서 어떤 것들을 배웠나 정리해두면 도움이 되지 않을까 싶어서 여러 대학교에서 공통적으로 배울만한 강의명 아래 우리 학교에서는 무엇을 배웠는지 큰 분류상으로 정리해봤다. 세부 내용을 다 정리하자면 너무 복잡해질 것 같아서... 대충 이 강의에서는 저런 내용을 배우는구나 하고 참고할만한 정도로만 썼다. 좀 더 자세히 쓴 부분도 있는데, 그 동안의 경험상 해당 부분을 왜 배우는지 잘 모르는 경우가 많은 것으로 보였던 것에 대해서 약간의 부연 설명을 추가한 것이다. 나름대로 분류를 해서 정리하긴 했는데, 충분히 잘 분류했는지 모르겠다. 소프트웨어 공학 같이 중요하지만 내가 수강하지 않았기 때문에 리스트에 없는 것도 있다. 수..
네이티브에서 직접 작업을 하든, 게임 엔진을 쓰든, 실제 빌드 과정은 동일하다. 하지만 게임 엔진을 쓰는 경우 그 과정이 직접 드러나지 않고 숨겨져 있기 때문에 많은 사람들이 헷갈려 한다. 특히, 게임 개발을 주로 하는 개발자들은 네이티브 애플리케이션 개발 경험이 없다보니 네이티브에 직결되는 기능 개발을 할 때 곤란함을 많이 겪는다. 이 문제 해결을 위해서는 정확히 어떤 과정을 통해 우리가 배포할 애플리케이션이 만들어지고 실행되는지 알아두면 유용하다. 이번 기회에 그 빌드 및 패키징, 실행 과정에 대해 글을 써보려 한다. 이해를 도우려다보니 배경에 대해 설명을 조금씩 덧붙였고, 그 결과 다소 글 내용이 너저분하다. 하지만 소설 읽듯이 읽어보면 나름대로의 재미가 있지 않을까 생각해본다 ^^; Android..
Flask로 개발된 대학교 커뮤니티를 취미삼아 운영중이다. 이전에는 XE로 개발되어 있었는데, Flask로 새로 개발하면서 기존의 글들에 등록되어 있던 첨부 파일들을 이용하지 못하는 문제를 최근에 해결하였다. 그 과정에서 있었던 이야기들을 포스팅해볼까 한다. 혹시나 XE에서 새로운 프레임워크로 직접 개발한 사이트로 마이그레이션하고자 하는 분들에게 참고가 됐으면 한다.Gevent가 들어가는 부분은 content disposition을 직접 변경하는 요청을 보내는 부분인데, 이 부분은 사실 직접 코딩하지 않아도 awscli를 이용하여 처리할 수 있음을 사전에 알린다. 대신 이 글을 통해 gevent를 이용하여 다수 요청을 병렬적으로 보내는 방법을 소개하고자 한다. ## XE에서의 파일 관리 XE에서는 `xe..
최근 cocos2d-x로 작업을 하면서 `JNI`를 좀 알아봐야 했다. 먼저 글에서는 편의상 `C/C++`을 `Native`라고 말함을 알린다. 이에 따라 JNI가 왜 `Java Native Interface`라고 이름지어졌는지 알 수 있을 것이다. 이 글에서는 Java 자체보다는 안드로이드 환경, 그리고 크로스 플랫폼 환경에 대한 설명에 좀 더 초점을 맞춰 썼다. 실행 환경 자체는 맥과 안드로이드이기 때문에 리눅스에 치중되어 있지만, 공유 라이브러리와 빌드 개념 자체에 대한 이해만 있으면 된다. 앞서 cocos2d-x를 언급한 것에서 눈치챘겠지만, 게임 엔진측 코드(C++)에서 안드로이드 플랫폼에 의존성이 있는 부분(Java)을 처리하기 위해 삽질하면서 정리한 것이다. JNI를 쓰는 방법에 대한 자료 ..
`libpng error: CgBI: unhandled critical chunk` iOS에서 libpng 라이브러리를 사용할 때, 위와 같은 에러가 뜨면서 텍스쳐를 잘 불러오지 못하는 문제가 있다. 특이한 것은 시뮬레이터에서는 문제가 없고, 실기기에서만 에러가 발생한다는 점이다. 해결 방법은 Xcode Build Settings에서 "Remove Text Metadata From PNG Files" 옵션을 "No"로 변경하면 된다. 아마 libpng 라이브러리를 사용할 때 시뮬레이터에서는 OSX의 libpng를 바로 사용해서 위 옵션 여부가 영향을 주지 않지만, 실기기에서는 영향을 받아서 그런 것으로 추측된다.
Flask-RESTful 라이브러리에는 Output Fields 라는 기능을 제공하여 response를 만드는 것에 대한 편의를 제공하고 있다. API의 response로는 `application/json`포맷을 자주 사용한다. 일단 flask의 기능을 사용한다고 하면, dictionary를 `jsonify` 함수의 인자로 넣어주면 적절한 response 객체가 만들어지긴 한다. (참고: Flask-RESTful Resource에서는 그냥 dictionary를 return 해도 json 포맷으로 response를 준다.) 그러나 출력하고자 하는 것을 dictionary로 만드는 것부터가 일단 일이다. flask 환경에서는 SQLAlchemy를 이용하는 경우가 많다. 이 때, SQLAlchemy를 어떻게 ..
지금 개발 중인 프로젝트에서는 웹 서버와 API 서버가 분리되어 있다. 웹 서버에서는 페이지마다 필요한 데이터들을 API 서버에 요청을 보내 받아와 사용자가 접근하고자 하는 뷰를 렌더링한다. 이에 따라 API 서버에서는 OAuth 기능이 필연적으로 필요하다. 웹 서버와 API 서버 둘 다 flask로 구현되어 있기 때문에 API 서버에서는 flask와 연동이 잘 되는 OAuth 2.0을 지원하는 라이브러리를 찾았고, Flask-OAuthlib를 사용하고 있다. Flask-OAuthlib를 이용하여 OAuth 2.0을 지원하도록 하는 작업은 다음 링크를 참고하자. 차후 가능하면 추가로 블로깅을 할 생각은 있으나 그게 언제가 될지는.... 웹 서버와 API 서버의 연동을 설명하면 다음과 같다. 가장 우선 로..
파이썬에서는 `raise` statement를 이용하여 예외를 던질 수 있다. 예를 들면 `raise KeyError` 와 같은 식이다. 이렇게 raise한 exception은 인스턴스가 만들어지면서 던져지게 된다. flask에서는 `errorhandler` 데코레이터를 이용하여 에러 핸들러를 등록할 수 있도록 하고, route 함수에서 예외가 raise 되었을 때 등록된 에러 핸들러들 중에 적합한 핸들러가 있는지 찾아 해당 핸들러 루틴을 실행하도록 되어 있다. (Flask 클래스의 handle_http_exception 메소드 참고) flask 문서에서 소개되는 방법은 숫자로만 등록하는 예제를 보여준다. 흔한 에러 코드 400, 401, 404와 같은 것들이 각각 한 가지의 메세지만 전달하는 경우에는 ..
`The Python ssl extension was not compiled. Missing the OpenSSL lib` Ubuntu 13.04에서 pyenv를 이용하여 python을 설치하려고 할 때, 위와 같은 에러 로그가 나타나면서 설치가 안 되는 문제가 있었다. 이는 pyenv의 문제가 아니라 openssl 개발용 패키지를 찾을 수 없어 발생하는 문제다. 해결 방법 : `libssl-dev`을 설치해주면 된다. `sudo apt-get install libssl-dev`를 실행하면 된다.
- Total
- Today
- Yesterday