9. 웹 애플리케이션 프레임워크
(Web application framework)
동적인 웹 페이지나, 웹 애플리케이션, 웹 서비스 개발 보조용으
로 만들어지는 애플리케이션 프레임워크의 일종.
웹 페이지를 개발하는 과정에서 겪는 어려움을 줄이는 것이 주
목적으로 통상 데이터베이스 연동, 템플릿 형태의 표준, 세션 관
리, 코드 재사용 등의 기능을 포함한다.
Lime이란?
출처 : https://ko.wikipedia.org/wiki/웹 애플리케이션 프레임워크
22. 어떻게 시작했을까
Http Server
Socket
Request Response
Finish read
Data
Middleware
Manager
Routeable
Route Mapping Table
Application
Middleware
Middleware
Middleware
Middleware
Trevi 초기 구성
51. 코드에게 물어보기
그 무렵, 경쟁 모델인
IBM-Kitura, Perfect
의 코드를 분석
출처 : https://developer.ibm.com/swift/kitura/
출처 : http://perfect.org/
52. 배운 것을 반영하기
코드를 읽으면 무식하게 만든 것과 확실한
개념적 차이를 이해 할 수 있습니다.
출처 : https://github.com/nodejs/node
54. 배운 것을 반영하기
무작정 만들었을 때
Http Server
Socket
Request Response
Finish read
Data
Middleware
Manager
Routeable
Route Mapping Table
Application
Middleware
Middleware
Middleware
Middleware
55. 배운 것을 반영하기
HTTP
Request
Read
HTTP Parser
OnBody
OnBodyComp
OnHeader
OnHeaderComp
OnInComing
Socket
State
handler
Begin
Besiness Logic
HTTP Server
socket parser
socket parser
socket parser
… …
socket parser
Node.js를 분석 후
57. 배운 것을 반영하기
Query Parser
Middeware manager
OAuth
Multi-Part
Router
error
/index Function
Router
/trevi Function
/d2/fast Routable
/naver Function
무작정 만들었을 때
58. 배운 것을 반영하기
Node.js 분석 후
Lime Layer
Middleware
Router
Application
Protocol
1 N
67. 시스템 라이브러리 적용하기
웹 어플리케이션 서버는 socket, file system,
thread 등 많은 시스템 함수를 호출 합니다.
68. 시스템 라이브러리 적용하기
이와 같은 시스템함수를 호출할 때
서버의 성능을 높이려면 blocking이
발생하지 않도록 해야합니다.
69. 시스템 라이브러리 적용하기
이를 위해 소켓을 non-blocking으로 설정하고
event-driven 방식으로 처리하려면
구현하기 어렵고 프로젝트가 많이 복잡해 집니
다.
70. 시스템 라이브러리 적용하기
또한 OS별로 효율적으로 처리하는 시스템
함수 API가 달라서 이를 일일이 처리하기에는
많은 작업이 필요합니다.
71. 시스템 라이브러리 적용하기
- epoll - kqueueOS
System
Library
GCD, libevent, libuv
Frame
work
Node.js, kitura
72. 시스템 라이브러리 적용하기
Apple runtime system library
출처 : https://developer.apple.com/library/ios/documentation/Performance/Reference/GCD_libdispatch_Ref/
73. 시스템 라이브러리 적용하기
GCD는 어플리케이션을 개발하는 사용자에게
Asynchronous I/O 및 multicore hardware에서
효율적으로 동작하는 환경을 제공합니다.
91. 고급언어에서 c API 사용 시 문제점
class Server {
var clientNumber = 0
var socket: Listener!
func createServer (port: Int) {
socket = Listener(port)
socket.listenClientEvent(){
client in
clientNumber += 1
self.printClientNumber()
}
}
func printClientNumber(){
print(“client number : (clientNumber)”)
}
}
변수 및 함수 참조
클로저를 libuv callback 함수 대입 시 문제
99. 코드에게 배우고 반영하기
• multi-thread model
New eventWork event module
onConnecti
on
onRead
afterWrite onClose
onTimeou
t
onConnecti
on
onRead
afterWrite onClose
onTimeout
Work thread
pool
Thread