Skip to content
조회 수 23 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

1. 작업 환경 준비

 

작업 환경은 자취방 개인 서버입니다. 개인 노트북에다가 설치해서 돌리고 있습니다만, 가끔 들고 다니기도 해서 

Xfce4에 eclipse cdt, mono develop정도 셋팅해서 가볍게 들고다니죠. 하하.;

 

Node.js의 강점이라면, 프로세서나 배포판에 독립적이기 때문에, 간편합니다.

다만, 네이티브 코드 만큼의 성능이 나오지는 않죠. 그래도 쓰지 못할 그런 쓰레기 같은건 아니고, 유지 보수성이 탁월해서 

실 서비스에 응용한 사례도 많다고 하네요.

 

다만 Javascript 기반이다보니까 코드 자동완성 기능을 활용하기가 쉽지 않다는게 문제라면 문젭니다.

그게 큰 문제가 되는건 아니지만 좀 불편하죠.

 

server.png

 

2. Node.js 설치.

따로 소스코드를 컴파일해서 설치하지 않아도 됩니다만 하고싶은 분들은 하세요.

https://nodejs.org/en/download/ 여기가서 다운받으시면 되요.

 

그러나, 소스 설치는 별로 권장하고 싶지는 않네요.

왜냐하면, npm 모듈들을 필연적으로 활용하게 될건데, 일부 컴파일 옵션을 다르게 주면 동작 결과가 달라질 수 있기 때문이에요.

그렇게 되면 문제를 파악하기 까지 정신적으로 피폐해질거 같네요. 하하

 

Debian 계열 배포판> apt-get install node.js npm

Redhat 계열 배포판> yum install node.js npm

 

 

간단히 패키지 관리자를 통해서 설치하시면 되겠습니다.

 

3. Visual Studio에 Bridge.NET 설치하기.

이건 C#으로 Node.js 백엔드 개발할 때 유용합니다.

https://bridge.net/download/ 여기가서 다운받아 설치하시면 됩니다. vsix파일로 받으시면 되요.

 

4. Bridge.NET의 기본적인 원리

우선 이걸 이해하려면 "컴파일러"에 대해서 정확히 파악해야 합니다.

개발자라면 누구나 아는것 이긴합니다만, 조금 더 정확히 짚고 넘어가죠.

 

1. 소스코드 입력을 받아 Tokenizing (토큰 단위로 쪼개는 과정입니다.)

2. Tokenizing 된 코드를 AST Syntax Tree를 만듭니다. 이 과정에서 Syntax Error를 검출해내죠.

3. AST Syntax Tree를 기반으로 최적화를 수행합니다.

 

4. 최종 Syntax Tree로 타깃 머신에 맞는 오브젝트 파일들을 생성합니다.

5. 생성된 오브젝트 파일을 링킹해서 결과물을 만들어내는데,

   1) Static-library라면 Archiving 까지만 하고 6번 7번은 수행하지 않습니다.

   2) Shared-library 혹은 Executable이라면 중간 Symbol Table을 구성합니다.

6. 생성된 바이너리에서 개별 섹션별로 취합하고 2차 링킹을 수행합니다.

   이 때 출력되는 결과물이 a.out이 되는거죠.

7. 여기서 최적화 옵션에 따라서 Symbol Table에서 불필요한 찌꺼기들을 Stripping합니다.

 

이 순서는 네이티브 바이너리를 컴파일하는 과정이고, C#은 비슷하면서도 조금 달라요.

생성된 결과물, exe나 dll 파일안에 메타 데이터라는게 포함됩니다. 그리고, 네이티브 코드가 아닌 ILVM 코드가 생성되죠.

 

 

-

그래서 Bridge.NET의 원리는?

> 컴파일된 ILVM 코드를 Decompile하여 ILVM 코드를 1:1로 매칭되는 자바스크립트 코드로 컨버팅합니다.

-

 

따라서 실제 동작하게 되는 코드는 Node.js에서 바로 이해할 수 있는 자바스크립트라는 것이죠.

 

PHP & C# 간에 비슷한 동작을 하는 애가 있긴 한데 걔는 Decompile을 하지 않고 컴파일 과정중 4번 단계에 개입해서 php가 타깃 머신인 것 처럼 동작하게 만든다고 하더군요.

그게 어떻게 가능하냐? 라고 질문하실 수도 있지만, MS사에서 그걸 하기 위한 프레임워크랑 라이브러리를(Rosylin Framework) 공개했고, 그걸 활용한다고 합니다. (http://www.cs2php.com/ 참고) 물론, 현재 cs2php 프로젝트 자체는 MS와의 라이선스 문제로 "바이너리"는 배포하고 있지 않습니다만...

 

5. 불편한 점은,...

Bridge.NET이 많이 알려져 있지 않아서 자료가 많지 않아요. 그런데 필수적인 것들은 준비되어 있더군요.

예를들어 jQuery라던가 Html에 대한 브릿지 클래스들이라던가...

 

근데, Node.js를 Bridge.NET으로 개발하는 건 자료가 하나도 없더군요, ㅡㅡ;

브릿지 클래스를 직접 짜야되는데 그렇게 어렵거나 복잡한 과정은 아니므로 그렇게 개발 난이도가 높지는 않습니다.

 

6. Bridge Class? Bridge 패턴을 말하는거냐?

결론부터 말씀드리자면 GoF 깡패들이 정의한 Bridge 패턴을 가르키지 않습니다.

어느정도 관련성은 있지만, Bridge.NET에서는 동작 구조가 완전히 다릅니다.

 

bridge pattern.png

 

이게 원래 Bridge 패턴이죠. 그런데, Bridge.NET의 Bridge Class들은 "자바스크립트 코드"와 1:1로 맵핑되는 클래스를 의미합니다.

C# 코드 상에서는 분명히 존재하는 클래스들이에요. 그런데 실제로 컴파일되고 생성된 자바스크립트 코드엔 그 실체가 없습니다.

왜냐하면, 각각의 Bridge Class들이 실제 자바스크립트 코드와 1:1로 매칭되어 녹아 들어갔기 때문이죠.

 

따라서, Bridge Class의 역할은 "이 객체에는 이런 메서드와 이런 기능들이 있어"라고 알려주는 역할만 할 뿐이기 때문에

모든 메서드가 extern으로 마킹되고 Template Attribute가 지정되죠. 그러면 컴파일 타임에 해당 코드들이 그렇게 변경되죠.

 

결론: Bridge.NET에서 Bridge 클래스는 언어간의 인터페이스입니다.

   1. Abstraction/Refined Abstraction: C#으로 작성된 브릿지 클래스들에 해당됩니다.

   2. Implementor/Concrete Implementer: Javascript 코드들 그 자체에 해당됩니다.

 

   (물론, Abstraction을 먼저 구성하고 Implementor들을 구성하는 브릿지 패턴과 순서가 반대이긴 합니다만)

 

7. Bridge 클래스 샘플

글만으로는 이해가 어려울 수 있다고 생각해서 코드를 준비했습니다.

 

sample.png

 

저 코드들이 어떻게 번역되냐 하면,

 

transition.png

 

이런식으로 번역되는거죠. 좌측은 C# 코드, 우측은 번역된 코드입니다.

 

8. Node.js로 구동하자!

 

qwerqwer.png

 

run.js 파일에 이렇게 쓰고 node run 커맨드를 입력해보세요.

 

C#으로 Node.js 개발, 정말 편합니다. ♡

 

 


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
7 기타등등 다이어그램 그리다 만거 file Jay K 2018.12.07 22
6 아트모음 [ARTSTATION] A Demon Who Became Priest - Jay Choi file Jay K 2018.12.04 61
5 UE4 [플러그인] WebSocket 플러그인 file Jay K 2018.11.28 20
4 기타등등 [잡담] CMS를 개발해볼까... file Jay K 2018.11.28 17
» 코딩 [백엔드] Node.js + Bridge.NET 콜라보 file Jay K 2018.11.25 23
2 기타등등 [취미생활] 유튜브 음악 모음 Jay K 2018.11.17 21
1 코딩 [C#] CefSharp 사용법 (Initialization & Configuration) file Jay K 2018.11.12 24
Board Pagination Prev 1 Next
/ 1

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소