ASP.NET MVC에서 Knockoutjs를 사용하는 프로젝트에서 UI 컨트롤들을 쉽게 KnockOut와 바인딩이 되도록 Generated 된 코드를 만들어 주는 라이브러리다. 서버의 Model을 기반으로 브라우저에서 사용하는 ViewModel과 View Data를 자동으로 만들어 주고 있다. 사용방법은 아래 코드와 같이 사용하면 된다.
아래 코드는 KnockOutMVC 프레임웍에서 샘플 코드인 HelloWorld이다.
[코드] Model
[코드] Razor
[코드] Controller
[코드] HTML (autogenerated)
이와 같은 HTML의 Knockoutjs에서 사용하는 View데이터와 ViewModel을 서버에서 자도으로 만들어서 내보내 준다. 이제 웬만한 기능을 모델 설계 만으로 브라우저까지 일관되게 내려 받을 수 있게 되었다. ViewModel을 연결 시켜주는 노가다성 작업을 상당부분 줄여 줘 야근모드가 없어 지지 않을까 생각해 본다.
위와 같은 코드의 예제 말고도 다른 예제들이 있다. 관심이 있다면 직접 확인해 보도록 하자.
JSON 타입으로 통신을 하면 Key와 Value로 변환을 해야 한다. 그렇지만 Newton에서는 기본적으로 클래스와 같은 형식으로 대소문자로 Key값을 변환하여 준다. C#에서 객체를 만들때 사용하는 네이밍 규칙과 JSON ( or Javascript) 에서 사용하는 네이밍 규칙이 서로 달라 혼선이 빚어 질 수 있다. 그래서 JSON타입으로 변환 할 때 소문자로 변환 할 수 있는 방안을 적용하면 일괄적으로 적용이 될 것이다. 적용 방법은 아래와 같다.
C# 네이밍 규칙
C#에서는 파스칼식과 카멜식을 적절히 사용할 것을 권장하고 있다. 특별한 명명 규칙이 없다면 암묵적으로 프로퍼티는 파스칼식으로, 내부 필드 변수는 카멜식으로 명명한다.
- 파스칼 식 : PropertyName
- 카멜 식 : propertyName
JSON or Javascript 네이밍 규칙
Javascript는 기본적으로 카멜식으로 명명하여 사용하고 있다.
[코드2] LowercaseContractResolver 클래스 코드
[코드3] 소문자로 변환
위 방법은 '코드1', '코드2' 방법은 세팅 값을 바꿔서 치환하는 방법이고 이와는 다른 방향으로 치환해서 사용하는 방법도 있다.
SignalR Cross browser Compatibility over WebSocket
SignalR은 Microsoft에서 WebSocket을 지원할 수 있도록 해주는 프레임 웍이다. SignalR은 WebSocket 프로토콜 위에서 돌아 가는 방식이며 WebSocket을 지원하지 않는 브라우저에서도 호환될 수 있도록 지원하고 있다. 그냥 단순히 WebSocket을 사용하는 웹 페이지를 만든다면 HTML5를 지원하는 브라우저 여부를 판단하여 그렇지 않은 브라우저는 다른 방식으로 구현을 해야 할 것이다. 그렇지만 SignalR을 사용하여 편리하고 일관되게 하위 호환성을 확보 할 수 있을 것이다.
SignalR을 지원하는 브라우저에 대해서 알아 보자
jQuery는 1.6.4 이상 지원
Microsoft Internet Explorer versions 8, 9 and 10. Desktop, and Mobile 지원.
Mozilla Firefox: current version - 1, both Windows and Mac versions.
Google Chrome: current version - 1, both Windows and Mac versions.
Safari: current version - 1, both Mac and iOS versions.
Opera: current version - 1, Windows only.
Android browser
jQuery 1.6.4이상의 버전과 브라우저만 있으면 SignalR이 제공해주는 일관된 방법으로 개발 할 수 있을 것이다.
WebSocket는 HTML5을 지원하는 브라우저에서만 사용할 수 있는 통신 방식이고, FlashSocket은 Flash가 설치된 브라우저에서 사용할 수 있는 통신 방식이다. WebSocket를 지원하지 않는 브라우저에서 WebSocket과 같은 방식으로 통신을 할 수 있게 지원할 수 있는 방안을 모색하던중 FlashSocket에 대해서 알게되었다. FlashSocket를 이용하여 실시간 반응 웹을 일관성 있게 개발 할 수 있을 것이다.
WebSocket -> FlashSocket -> LongPolling -> Polling과 같은 방식으로 점점 하위 개발 방법으로 지원하여 웹 서버간의 데이터 통신을 지원하는 애플리케이션 프레임웍 개발을 진행하면 될것이다.
위와 같이 특정 하위 브라우저에서는 WebSocket를 사용할 수 없게 된다. 그렇다면 차선책으로 SSE(Server sent events), LongPolling, Polling과 같은 방식으로 서버와 통신을 해야 하는데 프로그램 코딩 방식이 많이 다르게 되어 Client의 코드 복잡도가 증가하게 된다. 그 대신 차선책으로 Flash가 설치된 브라우저에서 사용할 수 있는 FlashSocket를 사용해서 차선책으로 선택할 수 있는 폭을 넓힐 수 있을 것이다.
모바일에서는 최신 모든 브라우저는 HTML5를 지원하므로 WebSocket도 지원하기에 호환성에서도 괜찮을 것으로 예상한다.
만약 node.js 플랫폼에서 개발한다면 통신에 대해서 추상화된 라이브러리가 있다. Socket.IO에서 배포하고 있는 라이브러리는 웹 브라우저의 상태와 관계없이 일관된 방식으로 개발할 수 있도록 하고 있다.
HTML 페이지를 처음부터 설계하고 레이아웃을 잡고, CSS 작업을 하는건 어떤 사람들에게는 중노동이 될 수 있다. 그렇지만 기초 공사가 되어 있는 상태에서 나머지 치장을 조금씩 할 수 있다면 무척 감사할 수 있을 것이다. 지금과 같이 기초 공사가 되어 있는 템플릿을 제공해 주는 사이트가 있어서 소개 하고자 한다.
이번에는 JetStrap 사이트에 대해서만 소개하고자 한다. 나머지는 직접 들어가서 확인해 보면 될 것이다. 아래 '그림1'은 JetStrap 사이트의 메인 화면이다. 이 사이트는 TwitterBootStraper을 이용해서 템플릿을 제공해 주고 있으며 '그림2'에서 보는바와 같이 템플릿을 Drag&Drop로 편집하여 다운 받을 수 있도록 하고 있다. 수정된 템플릿을 다운받아 수정 후 배포를 하면 될 것이다.
[그림1] JetStrap 사이트
[그림2] 템플릿 편집 화면
부디 많은 사람들이 손 쉽게 웹 사이트나 페이지를 만들 수 있었으면 한다. TwitterBootstraper를 이용해 만든 템플릿이라 여러 브라우저에 호환성이 있는 템플릿이다.
이 밖에도 이와 같이 템플릿을 제공해 주는 사이트가 많이 있으니 자신에게 적당한 곳에서 실험해 보면 될 것이다.
이 포스트에 있는 내용이 언제나 확실한 정답은 아닙니다. 진실이라고 생각해 왔던 전제가 시간의 지남에 따라 들어나지 않았던 다른 이면 때문에 좋은 방향으로 이끌어 낼 수 있는 역할로 변환 되는게 역사적으로도 많은 증명 있었습니다. 그렇지만 저는 현재 상황에서 최선의 답을 찾고자 노력하였으며 이 글을 읽는 다른 분들에게 다음 길을 갈 수 있도록 도와주는 디딤돌이 되고자 노력하고자 포스팅을 통해 공유하고자 하는 것입니다. 그리고 프로그래머라는 타이틀을 달고 살아야 한다면 "왜"라는 의문을 항상 가지고 다니면서 자신의 위치에 안주하지 않고 항상 노력하는 모습으로 살아 가고자 합니다. 언제든 지적이나 오류가 있으면 피드백 부탁 드리겠습니다.
ing™
Task<T> 객체를 이용해서 비 동기로 작업을 손 쉽게 수행하도록 프로그램을 개발할 수 있다. 그렇지만 TaskCompletionSource<T>를 사용하면 명시적으로 결과값 리턴을 통제할 수 있게 할 수 있다. 우선 프로그램 화면을 보도록 하자.
[그림1] WPF 테스트 화면
테스트를 해볼 시나리오는 "대기 시작" 버튼을 누르고 대기 종료 버튼을 누르면 그 사이의 대기 시간을 TextBlock 화면에 표시해주는 시나리오를 가지고 프로그램으로 개발해 보도록 하겠다.
소스 코드 자체에 주석과 직관적인 코딩으로 충분히 파악이 가능할 것으로 예상하므로 별도의 설명을 생략하도록 하겠습니다. 포스트의 내용이 장황한 설명 보다는 주석과 소스코드 자체 만으로도 이해할 수 있도록 하기 위해 노력하였습니다. 실 개발에서도 적용할 수 있도록 간단하면서도 현실적인 예제 프로그램을 통해 각 소스를 만들고 이해 시키고자 하였으며 실무에 필요한 개발요구 사항들을 해결 하는데 도움이 되고자 노력하였습니다. 그리고 소스와 같이 있는 주석을 이용해 nDoc이나 별도의 자동 Document 제작 유틸로 API 문서를 만드는 데에도 도움이 되었으면 한다. ※ DOC에 대한 프로그램 정보 Util link