Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Python 으로 하는 로우레벨 프로그래밍 - Python Common Library Hacking

Python 으로 하는 로우레벨 프로그래밍 - Python Common Library Hacking

Python Common Library Hacking
Python Korean 2013/05 - 정지오

ziozzang

May 18, 2013
Tweet

Other Decks in Programming

Transcript

  1. 소개 • 정지오 / [email protected] • C/C++ 로된 라이브러리/미들웨어 개발

    • 플랫폼/클라우드 개발 • 클라우드 엔지니어. • http://www.linkedin.com/in/ziozzang
  2. What & Why • 사실 킹왕짱 같은 이야기는 아니었는데… –

    원래 “Python Common Library Hacking” 이었뜸.. – 이게 다 다즐링의 광고 욕심(?) 덕분… ㅋㅋㅋㅋ • 아마 세션 수준은 초중급? 정도… • 저는 현업에서 파이썬을 씁니다. – as a cloud developer. / openstack uses python – 클라우드는 요구조건에 맞게 구축 됨 – 이런저런 잡다한거 만듭니다. 여하튼 많이 만듭니다. • 파이썬으로 서버 짜면서 배웠던 경험을 공유하고 싶어서. – 그래서 서버 개발 했던 이야기 나옵니다…
  3. 서버를 Python으로 만들면? • why not? 기반 시스템인 오픈스택이 파이썬

    기반이다. • 진짜 진짜 빠른 개발. 이번 세션에 나온 서버 개발 테스트 포함 2주만에 개발… • 좋은 유지보수. 일단 간결하고 짧은 코드는 좋은 유지보수 이유가 된다. (머리가 나빠서 그런지, 펄만 아니면 돼!!!) • 생각보다 다른 언어를 막 섞어쓰다보면 컨텍스트 스위치가 일어나 서 머리가 복잡함... A…. Ang…대… • 그냥, 한가지 언어가 좋다.. 짧고, 모듈화가 좋고 간결하고, 디버깅 좋고…. • So, Why not?
  4. 자, 일단 서버를 짜봅시다 • 먼저 DHCP서버를 짠다고 생각해봅시다. –

    프로토콜은 RFC 951, 1530, 2131, …. – UDP 응답을 주고 받는 서버를 짜봅니다. – 어차피 이거 까진 쉽죠…. • 문제의 발생… – 클라우드는 네트워크를 분리해서 사용합니다. 내부망.. 외부망... – eth1 에서 오면 eth1 을 통해서 나가야합니다. – 아? 그런데 UDP는 세션이 없네요? (.....) Listen 해서 세션이 있으면 그걸로 쏴주면 되는데… 안됨. – IP로 바인딩이 안되는 경우도 있어요 – 심지어 들어오는곳과 나가는 포트도 달라요. 유니캐스팅도, 브로드캐스팅을 해야 하는군요? (....) • Python으로 안되네??!??
  5. 그래도, 이해를 돕기위해 • UDP는 TCP와 달리 커넥트해서 양방향으로 데이터

    를 주고 받지 않습니다. • UDP기반의 서버는 야구에서 양쪽에 투수가 각기 한명씩 있는 셈. – A -> B 보냄 / B -> A 보냄 • 보통 IP기반이면 -> IP기반 라우팅으로 가능 • 브로드캐스팅도 해야하고 하니, IP 기반으로할수도 없네요…? – DHCP같은 경우에는 목적지로 IP도 없음. 왜냐? IP를 지정해주는 패킷이거든…. – 그래도 생각보다 많이 씀. PXE / DHCP….
  6. 돌아가서 봅시다 • (지금까지!) C/C++ 로 하던 일들 – 속도가

    아주 빨라야 하는것들 -> 최적화/속도 C/C++! – OS 등 밑단에서 해야 하는 것들 -> 접근 할수 없는 것들. – 어쨌든 아랫단을 건드려야 한다면 => 지금까지 C/C++ 이었음 • 근데 이게 (요즘도) 진리? – 요즘 LLVM으로 OS도 올린다면서요(…?!) – 웹브라우저에서 자바스크립트로 언리얼엔진도 돌리던데 • 사실 C.S. 에서 대놓고 안되는 경우는 별로 없음. – 단지 좀 느리던가, 덩치가 크던가, 돌아가던가, 귀찮은게 문제일 뿐. 그거슨 의지의 차이….
  7. 파이썬 으로 안되는 시나리오 • 파이썬 API가 지원 하지 않아요

    • 파이썬에서는 그런거 안됨 • 그거 구현하는게 느므 복잡함 • 등등등?
  8. Python for Low Level System • 일단 기본 제공 API를

    보자 – 파이썬의 소켓을 생각해보면, 그런거 없ㅋ다ㅋ -> 확실히 없다…. – 실제 파이썬을 보다 보면 common module 의 API 들은 기 존의 OS API 의 래퍼로 동작함 – OS에서 독립적으로 짜기쉽고 통일 되어 있다. – 그리고.. 소켓을 보면, “POSIX” 규격을 따르고 있더라. • 사실 소켓API의 히스토리를 생각한다면야.. • 올ㅋ~~~
  9. digging solution / C++ • 내가 개발하는 환경에서는 리눅스가 기본이기

    때문에, POSIX compliant 하 다. 어쨌든 리눅스에서 돌면 됨(문제 범위 하나 축소…) • 위의 기능은 linux extension. -> C/C++ 로는 충분히 가능하다. (요건 힌트…) • __
  10. digging solution / *googling* • 근데 이미 누군가는 온라인에 해뒀더라.

    • 어쨌든 C/C++ 을 쓰다가 온 사람이라면 파이썬에서 API 는 쉽게 가 능할거 같음 • • --
  11. 비슷한 예제 • Visual Basic 으로도 윈도우 시스템용 툴을 만

    들수 있나? – 물론 가능함. – 생각보다 많은 직접API를 호출하는 툴들이 윈도우에서 비쥬얼베이직 6.0 으로 나왔었음 • 고차원 언어라고 저차원을 컨트롤 할수 없을 리는 없다. • 단, 그거 할려면 저차원을 일부라도 이해해야 할것.
  12. 지나가던 농담... • 궁하면 만들어 쓰지 뭐.... • 기능이 없네,

    못하지 뭐 … • 파이썬 유저는 요 중간쯤? • Glue Language as Python. • 결론은 풀 딱지 라는거요! • 만들어 써도 좋지만, 뭐 굳이 만들건 없고… • 파이썬이잖아요? – 검색도 좀 해봅시다…
  13. 다른 솔루션, C/C++ with Python • ffi solution – http://docs.python.org/2/library/ctypes.html

    ctypes – http://cffi.readthedocs.org/en/release-0.5/ CFFI – 내부적으로 FFI를 쓴다는 점에서 동일. – http://eli.thegreenplace.net/2013/03/09/python-ffi-with-ctypes- and-cffi/ comparison • boost-python – https://github.com/TNG/boost-python-examples • 기타.. – swig, sip, SILOON, ... • Kim Joongi 님 세션?
  14. 한계점 • 파이썬 내부의 특성은 “현재는” 고스란히 남 기는 한다.

    예를들면 쓰레드 라던가. => 그건 인터프리터를 바꾸던가.. • 어차피 언어 자체에서 안되는건 안되는거긴 한데.... => 꼬우면 만들던가(….) / C++ 바인딩… • Socket 처럼 단순 랩핑된건 대략 된다고 보자. => 뭐하면 모듈 소스 grep 해보던가... • 하다 보면, 루트등 특수 권한을 요구할수 있 음. 이건 api 디펜던트한 이슈
  15. 그래서 얻은게 뭔데? • 일단 서버를 Python으로 짜면, 개발 기간이

    엄청 줄어들었음. 애자일하게 테스트가 가능하더라. • 필요한 경우 피처를 추가해서 테스트 머신에서 직 접 돌려볼수 있다. Even with vim! • 테스트도 간단함. 컴파일 할 필요도 없고. • 유지보수가 굉장히 편해짐. • 실제로 프로덕트에 쓸만한 수준의 동작을 보여줌. • 결론: 파이썬 커먼 라이브러리 해킹 생각보다 어렵지 않 아요....