본문 바로가기

C#/근웹 연대기

(29)
c#으로 근본 없는 웹서버 개발기 29 : cshtml - html로 전송 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 cshtml은 최종적으로 html로 변환되어 전송된다. 즉 c#으로 작성된 내용은 클라이언트로 노출되지 않으니 cshtml에 다소 보안에 민감한 내용을 적어도 안심이 될것이다. (페이지 자체가 전송될 일은 없으므로...) 다음 코드는 이전글에서 작성한 Assembly 객체를 이용하여 View 객체를 생성하고 그것이 html을 만든다. public void Render(string name, JO ViewData = null, int? statusCode = null) { Status(statusCode); var className = View.GetClassName("Views/cshtml/" + name + ".csh..
c#으로 근본 없는 웹서버 개발기 28 : cshtml - 빌드 및 dll ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 cshtml 파일을 cs로 만들면 대략... 아래와 같이 된다 (예시는 Layout 페이지로 어떤 페이지가 자리잡기 위한 하나의 프레임이 된다) 변환 전 @ViewData["title"] @{ string p = "Layout Page"; @p @RenderBody() @RenderSection("testsec"); console.log("ㅇㅇ"); } 변환 후 using dotweb; namespace Views; //-------------------------------------------- // // This code was generated by a tool. // //----------------------..
c#으로 근본 없는 웹서버 개발기 27 : cshtml 클래스 파일 만들기 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 점점 대단원 하나가 마무리되고 있는 느낌이다. 이전 글의 내용을 토대로 이번에는 html을 만드는 클래스 파일을 만든다. View클래스를 상속 받음으로, 그전에 View 클래스를 다음과 같이 작성하였다. namespace dotweb; public abstract class View { protected View sub = null; protected Request req; protected Response res; protected TempJO TempData; protected JO ViewData; protected dynamic ViewBag; protected String Layout = null; privat..
c#으로 근본 없는 웹서버 개발기 26 : cshtml 파싱 - 코드 조립 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 이전 글에서 만든 노드가 이번에는 목적 코드(C#)로 변환하는 과정이다. 코드로 들어갈 자리가 딱딱 구분이 되었기 때문에 재귀적으로 간단하게 구현할 수 있는 부분이다. 그런데 또 이것을 가시적으로 하겠다는 집착? 때문에 적잖은 시간을 소비하였다. 화면에 어떻게 뿌리는지에 대한 것은 하나의 프런트엔드의 영역이기 때문에 어떻게 했는지는 따로 언급하지 않겠다. 마음의 여유가 생기면 프론트엔드의 비중이 큰 SPA(Single Page Application)에 대한 연대기도 생각해 볼 예정이다. ... 각각의 노드들이 어떻게 변환 되는지 찬찬히 살펴보자. @ViewData["title"] @{ string p="Layout Pa..
c#으로 근본 없는 웹서버 개발기 25 : cshtml 파싱 - 파스노드(코드) ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 이번 파트는 파싱에서 가장 난해한 부분이다. 단지 코드만을 봐서는 이해하기 어려울 수 있기 때문이다. 그래서 이것을 어떻게 해야 이해가 쉬울지 고민을 하였고 결국 시간이 걸리더라도 가시화가되게 해보자고 결론을 내렸다. 아래는 노드들간의 콜 스택을 가시화한 형태다. @ViewData["title"] @{ string p="Layout Page"; @p @RenderBody() console.log( 123 ); } InTag Need Javascript Enabled. 모든 노드들을 자바스크립트에 다 담기에는 분량이 많기에 중요도가 높은것만을 간추렸다. 몇줄 짜리 코드가 별것아닌 로직이... 사람의 눈에 살갑게 다가서기 ..
c#으로 근본 없는 웹서버 개발기 24 : cshtml 파싱 - 파스노드 공통함수 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 이전 글에서 설명한, 각 노드에서 코드 사이즈를 줄이기 위하여 중첩되는 부분을 최상위 클래스인 ParseNode에 몰아주었다. Razor구문과 C#코드의 분리가 명확하게 된다면 이상적이지만, 서로 간의 의존성이 높아서, 일목요연하고 싶은 마음이 상당히 트레이드오프 돼버렸다. .. 아쉬움이 남지만, 아직은 내공이 많이 부족하다. CsSection : C#의 {}, [], () 처럼 브라켓 구간의 시작과 끝 사이의 영역을 관장한다. BlockSection, IndexSection, ArgsSection : 각각 {}, [], ()을 인수로 CsSection을 호출. BlockStatement : if 또는 for 처럼 예약..
c#으로 근본 없는 웹서버 개발기 23 : cshtml 파싱 - 파스노드 분류 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 근 며칠사이, 환난 속에서 퇴고를 거듭하여 파스노드의 분류작업을 마무리하였다. 중복코드 회피하기와 깔끔한 분류하기 사이에서 밀당 끝에, 15개가 되었다. 흰색인 부분은 추상클래스 OR 개념적인 부분이다. (코드가 없을수도 있을수도 있음) 그럼 사전에 언급했듯이, 3시 방향부터 시계방향으로 소개하겠다. CSS : CSS영역을 관장한다. Tag : 말 그대로 태그의 시작과 끝을 관장한다. Tag String : Html태그의 속성의 값부분. width = "10" 처럼 10에 해당하는 문자열이다. Html - In : Html태그의 자식이 되는 영역을 관장한다. Html - Section : 레이아웃이 분열 될 때, 해당하..
c#으로 근본 없는 웹서버 개발기 22 : cshtml 파싱 - 공통클래스 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 1. 군소리 1-1 영역 구별 이전 글에서 예고했던 파싱 하는 부분을 한방에 만들려고 했지만 분량이 생각보다 많다. 단순히 구분을 지어도 C#, HTML, CSS, JS 그리고 RAZOR 문법이 혼재하고 있다. 그래서 개개의 문법이 적용되는 구간을 정확하게 파악해야 하는데, 각각의 언어?마다 구간의 시작과 끝을 맺는 문자열이 다르다. 여기서 또, 문자열 상수와 문자열 보간 구간은 razor구문이 먹히지 않으니 따로 처리를 해줘야 한다. 까다로운점은 문자열 안에 또 다른 문자열이 있는 경우가 생길 수 있다는 점이다 예를 들면. C# : $"ab\"cd{$"abcd{"abcd"}"}" 처럼 전지적 시점에서 보면 하나의 문자..