일반적으로 filesystem 은 kernel layer 에서 개발하는데, 이 경우 kernel 에 대한 높은 이해가 필요하다.
kernel 에 대한 이해 없이 디버깅의 편리성, 시스템 안정성 향상, 개발 속도 같은 것들을 우선하는 filesystem 을 만들고 싶을 때 사용하는 것이 FUSE 가 되겠다.
즉 FUSE 는 filesystem 을 user layer 에서 개발할 수 있도록 도와주는 framework 이다.
일반적으로 linux, mac 등에서는 FUSE, windows 에서는 dokan 이 fuse 같은 framework 을 제공한다.
FUSE 를 구현하는 법은 간단하다.
예를 들어 user program 으로 read 를 구현하고
그것을 FUSE framework 에 넘기면, 내부적으로 kernel layer 에 read 가 불릴때 user program 에 구현된 read 를 불러준다.
(function pointer 달아가지고 fuse_main 호출하면 끝이다.)
쉽게 생각하면 user program 에서 libfuse 를 가져다쓰는 것이다.
그런데 libfuse 를 가져다 쓰지 않고 구현할 수도 있다.
libfuse 에서 해주는 일은 /dev/fuse 를 열고 주기적으로 해당 노드를 read 하여
(kernel 에서 부터 요청이 온 request 를 읽어서) 적절한 user function 을 호출하는 일을 한다.
(즉, fuse kernel module 이 하는 일은 kernel에 filesystem operation 들을 /dev/fuse 에 써주는 역할이다.)
이 내용을 직접 user program 에서 작성하여 더 빠르게 request 를 처리하도록 설정할 수 있다는 것이다.
(thread 를 여러개 둬서 /dev/fuse 를 마구 읽어서 처리한다던지...)
user filesystem 에 한계는 명확히 존재하지만 libfuse 를 직접 구현하면 mmap 등을 이용해
kernel - user copy를 줄일 여지가 더 생기는 등 괜찮은 filesystem 을 만들 수 있다.
2016년 3월 30일 수요일
2016년 3월 15일 화요일
Android app WebView 의 local html file 에서 CORS(Cross-Origin Resource Sharing) 문제 해결하기
CORS 는 다른 도메인에서 요청을 보내는 것을 말한다. 자세한 내용은 검색하면 무슨 의미인지 금방 알 수 있을 것이다. 정보도 많고... 여튼, 이 요청에 대한 spec에 따라
App REST api 요청을 보낼때 (WebView html 통하여)
App REST api 요청을 보낼때 (WebView html 통하여)
http request header 에 내가 누군지 (origin 이라는 항목에 내용을 http://www.google.com 같은 url 정보로 채우도록) 를 적게 되어있다. 이 정보는 WebView (정확히는 Android Web engine) 이 자동으로 적어준다.
위와 같은 정보를 적어서 보내면 server 에서 http request header 를 열어서 origin 을 확인하고 해당 요청을 허용해 줄 지 말지 결정한다.
그래서 일단 sever (Django) 에 작업을 해야했다.
우선 server 설정을 모든 origin 에 대하여 통과하도록 해두었다.
(https://github.com/ottoyiu/django-cors-headers 을 이용)
우선 server 설정을 모든 origin 에 대하여 통과하도록 해두었다.
(https://github.com/ottoyiu/django-cors-headers 을 이용)
그런데 특정 핸드폰에서는 origin 을 null 로 setting 해서 보낸다.
server 에 origin null 이 들어오면 설정이고 뭐고 그냥 error 가 return 된다.
(local html 파일에서의 요청 경우에 origin 설정에 대한 spec 이 없기 때문이다.)
그래서 명시적으로 WebView 설정을 해주어야 안전하다.
webSettings.setAllowFileAccess(true); webSettings.setAllowContentAccess(true); webSettings.setAllowFileAccessFromFileURLs(true); webSettings.setAllowUniversalAccessFromFileURLs(true);
이렇게 해주면 local html 에서의 CORS 요청에도 origin 값을 설정해서 보내게 되어 어느 폰에서나 정상적인 처리가 가능하다.
(모든 폰을 다 해보지 못했으나, 안되던 기기에서 저 설정 후 되는 것을 확인했다.)
(모든 폰을 다 해보지 못했으나, 안되던 기기에서 저 설정 후 되는 것을 확인했다.)
2016년 3월 11일 금요일
maria DB (mySQL) python 으로 접근하기
maria DB 설정은 다 되어있다고 하고 시작
shell 에서
$pip install MySQL-python
이걸하면 MySQLdb 를 사용할 수 있음.
그리고 아래와 같이 구현
https://github.com/kjunu/hello/blob/master/python/mariaDB.py
shell 에서
$pip install MySQL-python
이걸하면 MySQLdb 를 사용할 수 있음.
그리고 아래와 같이 구현
https://github.com/kjunu/hello/blob/master/python/mariaDB.py
피드 구독하기:
글 (Atom)