원래 “Python Common Library Hacking” 이었뜸.. – 이게 다 다즐링의 광고 욕심(?) 덕분… ㅋㅋㅋㅋ • 아마 세션 수준은 초중급? 정도… • 저는 현업에서 파이썬을 씁니다. – as a cloud developer. / openstack uses python – 클라우드는 요구조건에 맞게 구축 됨 – 이런저런 잡다한거 만듭니다. 여하튼 많이 만듭니다. • 파이썬으로 서버 짜면서 배웠던 경험을 공유하고 싶어서. – 그래서 서버 개발 했던 이야기 나옵니다…
기반이다. • 진짜 진짜 빠른 개발. 이번 세션에 나온 서버 개발 테스트 포함 2주만에 개발… • 좋은 유지보수. 일단 간결하고 짧은 코드는 좋은 유지보수 이유가 된다. (머리가 나빠서 그런지, 펄만 아니면 돼!!!) • 생각보다 다른 언어를 막 섞어쓰다보면 컨텍스트 스위치가 일어나 서 머리가 복잡함... A…. Ang…대… • 그냥, 한가지 언어가 좋다.. 짧고, 모듈화가 좋고 간결하고, 디버깅 좋고…. • So, Why not?
프로토콜은 RFC 951, 1530, 2131, …. – UDP 응답을 주고 받는 서버를 짜봅니다. – 어차피 이거 까진 쉽죠…. • 문제의 발생… – 클라우드는 네트워크를 분리해서 사용합니다. 내부망.. 외부망... – eth1 에서 오면 eth1 을 통해서 나가야합니다. – 아? 그런데 UDP는 세션이 없네요? (.....) Listen 해서 세션이 있으면 그걸로 쏴주면 되는데… 안됨. – IP로 바인딩이 안되는 경우도 있어요 – 심지어 들어오는곳과 나가는 포트도 달라요. 유니캐스팅도, 브로드캐스팅을 해야 하는군요? (....) • Python으로 안되네??!??
를 주고 받지 않습니다. • UDP기반의 서버는 야구에서 양쪽에 투수가 각기 한명씩 있는 셈. – A -> B 보냄 / B -> A 보냄 • 보통 IP기반이면 -> IP기반 라우팅으로 가능 • 브로드캐스팅도 해야하고 하니, IP 기반으로할수도 없네요…? – DHCP같은 경우에는 목적지로 IP도 없음. 왜냐? IP를 지정해주는 패킷이거든…. – 그래도 생각보다 많이 씀. PXE / DHCP….
아주 빨라야 하는것들 -> 최적화/속도 C/C++! – OS 등 밑단에서 해야 하는 것들 -> 접근 할수 없는 것들. – 어쨌든 아랫단을 건드려야 한다면 => 지금까지 C/C++ 이었음 • 근데 이게 (요즘도) 진리? – 요즘 LLVM으로 OS도 올린다면서요(…?!) – 웹브라우저에서 자바스크립트로 언리얼엔진도 돌리던데 • 사실 C.S. 에서 대놓고 안되는 경우는 별로 없음. – 단지 좀 느리던가, 덩치가 크던가, 돌아가던가, 귀찮은게 문제일 뿐. 그거슨 의지의 차이….
보자 – 파이썬의 소켓을 생각해보면, 그런거 없ㅋ다ㅋ -> 확실히 없다…. – 실제 파이썬을 보다 보면 common module 의 API 들은 기 존의 OS API 의 래퍼로 동작함 – OS에서 독립적으로 짜기쉽고 통일 되어 있다. – 그리고.. 소켓을 보면, “POSIX” 규격을 따르고 있더라. • 사실 소켓API의 히스토리를 생각한다면야.. • 올ㅋ~~~
예를들면 쓰레드 라던가. => 그건 인터프리터를 바꾸던가.. • 어차피 언어 자체에서 안되는건 안되는거긴 한데.... => 꼬우면 만들던가(….) / C++ 바인딩… • Socket 처럼 단순 랩핑된건 대략 된다고 보자. => 뭐하면 모듈 소스 grep 해보던가... • 하다 보면, 루트등 특수 권한을 요구할수 있 음. 이건 api 디펜던트한 이슈
엄청 줄어들었음. 애자일하게 테스트가 가능하더라. • 필요한 경우 피처를 추가해서 테스트 머신에서 직 접 돌려볼수 있다. Even with vim! • 테스트도 간단함. 컴파일 할 필요도 없고. • 유지보수가 굉장히 편해짐. • 실제로 프로덕트에 쓸만한 수준의 동작을 보여줌. • 결론: 파이썬 커먼 라이브러리 해킹 생각보다 어렵지 않 아요....