node.js를 처음 접하는 개발자를 위한 스터디 자료입니다.
실습 위주로, 간단한 웹 페이지를 만들어 보는 것을 목표로 하며,
express를 활용하기에 앞서, node.js 기본 API만으로 GET/POST 처리 방식을 알아봅니다.
내용의 깊이가 있지는 않으며, 단지 node.js의 입문을 위한 가벼운 수준으로 내용이 구성되었습니다.
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
탑크리에듀(www.topcredu.co.kr) 제공 C#, Network 기초강좌 입니다. 이번 강좌는 클라이언트가 서버로 데이터만 전송하는 간단한 TCP 클라이언트 및 서버 작성부터 서버가 다시 클라이언트로 에코우 시키는 예제, 이를 멀티쓰레드로 변경하여 여러 클라이언트를 상대할 수 있도록 소스를 변경하여 적성된 예제 입니다. 동영상으로도 제작될 예정이며 동영상은 http://www.topcredu.co.kr 또는 http://www.facebook.com/topcredu.co.kr, http://ojc.asia 에서 확인하실 수 있습니다.
node.js를 처음 접하는 개발자를 위한 스터디 자료입니다.
실습 위주로, 간단한 웹 페이지를 만들어 보는 것을 목표로 하며,
express를 활용하기에 앞서, node.js 기본 API만으로 GET/POST 처리 방식을 알아봅니다.
내용의 깊이가 있지는 않으며, 단지 node.js의 입문을 위한 가벼운 수준으로 내용이 구성되었습니다.
(C#,네트워크강좌)간단한 TCP 클라이언트/서버 구현, 멀티쓰레드 기반 에코우 클라이언트/서버_C추천#/WPF/자마린실무교육학원탑크리에듀(구로디지털단지역3번출구 2분거리)
탑크리에듀(www.topcredu.co.kr) 제공 C#, Network 기초강좌 입니다. 이번 강좌는 클라이언트가 서버로 데이터만 전송하는 간단한 TCP 클라이언트 및 서버 작성부터 서버가 다시 클라이언트로 에코우 시키는 예제, 이를 멀티쓰레드로 변경하여 여러 클라이언트를 상대할 수 있도록 소스를 변경하여 적성된 예제 입니다. 동영상으로도 제작될 예정이며 동영상은 http://www.topcredu.co.kr 또는 http://www.facebook.com/topcredu.co.kr, http://ojc.asia 에서 확인하실 수 있습니다.
[TechDays Mini]에서 발표한 "ASP.NET Web API를 활용한 RESTful 서비스 개발" 세션의 발표 자료입니다.
※ 이 자료는 업로드 시점 대비 오래전 진행한 내용을 다루고 있습니다. 변경된 부분이 있거나 유용하지 않을 수 있으니 참고하시길 바랍니다.
2Naver Open Android API Translation At DCampJeikei Park
■ 제 목 : Naver 오픈api-android-tran-20160529
■ 주제 : 네이버 오픈API를 활용한 안드로이드 통역앱 만들기
■ 내용 :
- 통역앱 개발을 위한 네이버 오픈API 소개
- 통역앱 안드로이드 화면 구성
- 안드로이드앱에서 각 API 호출 및 처리
- 통역앱 작동을 위한 애플리케이션 처리 노하우
■ 난이도 수준: 초급
■ 발표자 소개: 옥상훈 강사
- 現 표준프레임워크 오픈커뮤니티 에반젤리스트
- 現 네이버 랩스 D2에반젤리스트
- 現 네이버 개발자센터 & 오픈 API 담당
- 前 한국Adobe 시스템즈 컨설턴트
- 前 한국 자바 개발자협의회 회장
■ 일시: 2016. 5. 31(화) 19:00~21:00(120분)
■ 장소: 디캠프 6층 다목적홀 (선정릉역 위치)
This document introduces REST.
Explain about what is REST? and advanced REST feature.
It also introduce REST actual implementation with Jersey and REST infrastructure architecture with ESB based on actual delivery experience.
One more interest thing is that it has REST client stub generator & service contract generator design
3. http 패키지
3
HTTP 클라이언트와 서버를 작성하기 위한 모듈과 상태관리(쿠키)를 지원하는 모듈로 구성.
- httplib(http.client) : 저수준의 클라이언트 모듈 => urllib
- http.server 모듈 : HTTP 서버를 구현하는데 필요한 다양한 클래스 제공
- http.server => BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer
4. http 서버를 구현하기 위한 2개의 클래스로 구성
보통 직접사용하지 않고, 웹서버의 기능을 만드는데 기반으로 사용
- SocketServer.TCPServer 의 서브 클래스
- SocketServer.BaseServer 인터페이스 구현해야한다.
- HTTP 소켓을 열고 기다리고, 요청을 오면 handler 로 dispatch
- 서버로 부터 온 HTTP 요청 처리를 담당.
- 이 클래스 자체에서 처리 X, 서브 클래스 작성해서 각각의 HTTP method 별로 처리
- 서브 클래싱을 위한 여러가지 함수와 변수를 제공.
- 요청과 헤더를 파싱 그에 따른 메소드를 호출.
BaseHTTPServer
4
HTTPServer(server_address, RequestHandlerClass)
BaseHTTPReqeustHandler(request, client_address, server)
7. BaseHTTPServerHandler
7
클래스 변수
server_version
- 서버가 클라이언트에 보고할 서버의 소프트웨어 버전
sys_version
- 시스템 버전
error_message_fotmat
- 클라이언트에게 에러 발생시 보낼 포맷
protocol_version
- HTTP 프로토콜 버전
responses(message, explain)
- HTTP 에러 코드에대한 설명 맵핑
- 404 => (“Not Found”, “Nothing matches the given URI.”)
<head>
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code %(code)d.
<p>Message: %(message)s.
<p>Error code explanation: %(code)s = %(explain)s.
</body>
8. BaseHTTPServerHandler
8
인스턴스 속성
client_address : 클라이언트 주소 (host, port)
command : HTTP method, GET, POST, PUT HEAD, DELETE
path : 요청경로
request_version : HTTP 버전
headers : HTTP Header
rfile : 추가 입력 데이터를 읽기 위한 입력 스트림,
만약 클라이언트가 데이터 업로드를 했다면, rfile 을 통해서 받아올수 있다.
wfile : 클라이언트로 응답 쓰기를 위한 출력 스트림
10. BaseHTTPServerHandler
10
인스턴스 메소드
send_error(code [, message])
- 실패한 요청에 대한 응답 보내기, code 는 HTTP 상태코드
- error_meesage_format 을 이용해서 에러응답을 보냄.
send_response(code [, message])
- 성공한 요청에 대한 응답 보내기
- 응답줄을 보내고 그 다음으로 Server, Date 헤더를 전송
send_header(keyword, value)
- 헤더 쓰기, send_response() 를 호출한 다음에 호출해야 함.
end_headers()
- 헤더의 끝을 알리는 빈줄을 보낸다.
13. SimpleHTTPServer. SimpleHttpRequestHandler
13
SimpleHTTPServer 모듈은 SimpleHttpRequestHandler 가 전부.
- 현재 디렉토리와 그 하위의 디렉토리 파일 제공
- HEAD 와 GET 메서드만 제공
- 모든 IOError 예외는 404 File not found 에러 발생
- 일종의 정적 웹 서버를 만들어 준다.
- 커스텀 하기 위해서는 서브 클래싱해서 사용.
SimpleHTTPServer.SimpleHTTPRequestHandler(request, client_address, server)
15. CGIHTTPServer. CGIHTTPRequestHandler
15
- CGIHTTPServer 모듈은 CGIHttpRequestHandler 가 전부.
- 현재 디렉토리와 그 하위의 디렉토리 파일 제공
- HEAD 와 GET, POST 메서드만 제공
- HTTP redirect(302) 지원하지 않는다.
- 간단한 CGI 응용 프로그램을 위해서만 사용.
기본 GCI 디렉토리 : ‘/cgi-bin’, ‘htbin’
기본 디렉토리 변경 :
handler = CGIHTTPServer.CGIHTTPRequestHandler
handler.cgi_directories = ["/"]
17. WSGI(Web Server Gateway Interface)
17
WSGI ( Web Server Gateway Interface )란 무엇인가 ?
- WSGI 는 web server와 파이썬으로 작성된 web application 또는 framework들간의 인터페이스
를 정의해 놓은 규칙. PEP333
왜 WSGI가 만들어지게 되었는가?
- 파이썬 웹 Application 과 웹 서버 사이에서의 선택의 제한 문제
- A 라는 프레임워크를 사용하면, 아파치를 못쓴다?
- 아파치를 연동하려고 하면, B Framework 를 못쓴다?
- 그러면, 서로 통신하기 위한 인터페이스 스펙을 만들자. => WSGI
18. WSGI(Web Server Gateway Interface)
18
서버도 아니고, 파이썬 모듈도 아니고, API 도 아니고, 프레임워크도 아니다.
Interface Spec
- 웹서버 와 파이썬 웹 어플리케이션간의 통신을 위한 Interface Spec
- 그래서 웹 서버단과 웹 어플리케이션 단의 스펙이 각각 존재
- 웹 서버/프레임워크를 개발하지 않는 이상, WSGI 를 직접 개발할 일은 없다.
- 그러나 이해는 필요.
Client
Web Server
based WSGI
Web Application
based WSGI
request request
responseresponse
tornado
apache
Flask
Django
19. WSGI Application Interface
19
WSGI Application Interface 는 Callable Object 여야 함.
Callable Object(호출가능한 객체)
- 함수, 멤버 메소드, 인스턴스.__call__()
조건 :
1. 두개의 파라미터를 가져야 한다.
- 첫번째, CGI 변수와 유사한 값을 가지고 있는 dict 객체
- 두번째, CallBack 함수
2. list[Response Body(String)] 형을 반드시 리턴.
20. WSGI Application Interface
20
environ
- 클라이언트가 서버에 요청을 보낼때 마다, 서버에서 보내주는 정보
- http method, query
ALLUSERSPROFILE: C:ProgramData
COMPUTERNAME: ¾È¼ºÇö
COMSPEC: C:Windowssystem32cmd.exe
CONTENT_LENGTH:
CONTENT_TYPE: text/plain
HTTP_ACCEPT:
text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.
8
HTTP_ACCEPT_ENCODING: gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4
HTTP_CONNECTION: keep-alive
HTTP_HOST: localhost:8051
HTTP_USER_AGENT: Mozilla/5.0 (Windows NT 6.1; WOW64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153
Safari/537.36
start_response(status, headers)
- 콜백함수
- status : HTTP 상태에 따른 문자열
- headers : 튜플리스트[(),()…]
response_body
- 실제 반환하는 응답 데이터
- [문자열] 형태로 반환
가장 기본적인 형태
28. flask-tornado
28
Client
Web Server
based WSGI
Web Application
based WSGI
localhost:8000
Tornado Flask
WSGIContainer.__call__
Flask.__call__
start_response
environ
[response]
HttpRequest.write(body)
tornado.httprequest
(environ, start_response)
WebBrowser
29. wsgiref
29
만든 WGSI 웹 App을 독립서버에서 테스트 할수 있게해주는WSGI 표준의 서버파트
wgsiref.simple_server 모듈
- 간단히 하나의 WSGI 기반의 독립 HTTP 서버를 구현한다.
make_server(host, port, app) 함수
- host:port 의 HTTP 서버 생성
- APP : WSGI Application Interface를 구현한 함수나 호출가능한 객체
- test_server.serve_forever()
demo_app(environ, start_response) 함수
- “Hello world” 메시지를 출력하는 페이지를 반환하는 WSGI Application Inteface 구현체
32. 정리
32
정적 웹 서버 => SimpleHTTPRequestServerHandler
모든 HTTP methods 구현 => BaseHTTPReqeustHandler 의 서브클래스 이용
do_method(requset) { 구현 }
WSGI 는 서버-웹 어플간의 인터페이스 스펙
웹 프레임워크가 WSGI 기반인지 확인
웹 서버-WSGI 지원 모듈 확인 Apache => mod-wsgi
ngix => uwsgi