본문 바로가기

전체 글

(55)
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"}"}" 처럼 전지적 시점에서 보면 하나의 문자..
c#으로 근본 없는 웹서버 개발기 21 : cshtml 파싱 - tokenize ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 1. 횡설수설(橫說竪說) 머릿속에서 정리되지 않는 것들에 몰두하다 보니. 포스팅을 한 박자 쉬어버렸다. 그러나 두 박자 쉬고 세 박자 마저 쉬더라도 네박자 이상은 건너뛰지 않으려고 한다. 나 자신의 메타인지에 근거하여 네박자 이상 쉬면 글쓰기에 대한 생각이 휘발성 메모리처럼 완전히 날아가버릴 것 같기 때문이다. 그렇다 자기자신을 통제하기 힘들 때는 습관을 만드는 것이 중요하다. 생각이 바뀌면 행동이 바뀌고 행동이 바뀌면 습관이 바뀌고 습관이 바뀌면 인격이 바뀌고 인격이 바뀌면 운명이 바뀐다 윌리엄 제임스 2. 파싱에 대한 심득(心得) 지금까지 행하여 왔던 파싱작업에 비하면 지금 진행하려는 작업은 꽤나 복잡하다. 때때로,..
c#으로 근본 없는 웹서버 개발기 20 : cshtml layout (이론) ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 1. 분석 asp.net MVC의 페이지 레이아웃 구조를 살펴보았는데, 부모 페이지와 자식 페이지의 관계의 구분이 처음 배우는 사람의 입장으로서 조금 혼란스럽게 되어있다. 우선 베이스 페이지가 되는 _Layout.cshtml에 대해 살펴보자. 이미지의 RenderBody라는 인터페이스를 virtual 키워드로 자식 페이지에서 상속받게 되어 있는데 이것을 만약에 연속적으로 상속 받을 경우 손자 페이지가 오버라이드 되어서 아빠 페이지의 내용이 무시 될 텐데, 어쩐지 무사히 아빠 페이지의 내용까지 잘 나온다. 즉 서브페이지 일 때, 같은 이름의 인터페이스를 상속 받는다면 불가능한 경우다. 이것에 대한 메커니즘을 알아보는 것은..
c#으로 근본 없는 웹서버 개발기 19 : cshtml 파리미터 분석(이론) ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 전편에 이어 이번에는 파라미터 대한 자료를 찾아보았다. 이미지처럼 View구조 자체는 다른 서버 페이지와 별반 차이가 없다. 제대로 알려면 교과서라도 하나 구해서 조목조목 알아봐야 하지만 웹의 프레임워크 자체는 10년 전이나 지금이나 크게 다르지 않다. SPA라는 것으로 패러다임 자체는 조금 변했지만, 전통적인 웹에서도 비동기 통신을 이용하여 간간이 이용했던 방법이다. ... 컨트롤러에서 넘겨주는 파라미터. Request, Response 객체 이외에 구현에 필요한 파라미터는 4가지다 Model ViewData ViewBag TempData 1. Model @model List @foreach(var str in Mod..
c#으로 근본 없는 웹서버 개발기 18 : cshtml 구문 분석(이론) ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 전편에서 언급한 내용의 과정 중에 중요한 부분인 .cshtml을 .cs로 변환하는 것은 파싱 작업이다. 파싱 코드를 작성하기 위해서는 일단 그 대상에 대하여 주의 깊게 관찰해야 할 필요가 있다. 저자는 cshtml의 razor에 대한 경험이 없으므로 간단히 몇 가지 문법에 대해서 알아보았다. 일단 구현에 당장 필요할 것 같은 부분을 3가지로 구분 지었다. 인라인 표현식 코드 블록 코드 블록을 가지고 있는 예약어 (for, if, while...) 1. 인라인 표현식 @str.??? //1 @str.aaa //2 오류 @str.### //3 @str?.??? //4 오류 @str??"ss" //5 @str() //6 오류..
c#으로 근본 없는 웹서버 개발기 17 : 서버페이지 렌더링 계획 ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 이번만큼은 글로 쓰려고 한다면 복잡한 내용이 더 복잡해질 것 같아 PPT를 준비했다. (이미지를 클릭하여 보는 것을 추천)
c#으로 근본 없는 웹서버 개발기 16 : node express? ⚠WARNING ASP.NET에 대한 포스팅이 아닙니다 나가실 문은 오른쪽 하단입니다 포스팅 텀이 자꾸 길어지고 있다. 앞으로 더 진행해야 할 부분이 DB 연동과 서버 페이지 랜더링인데, 외부 패키지 없이 진행하려니.. 둘 다 쉽지가 않다. 그래서 중간에 텀 또는 시행착오가 없는 내용을 포스팅을 하기가 힘들 거 같다. DB는 MS의 것을 쓰려고 해도 최소 ado.net을 설치해야 한다. 그러면 외부 패키지를 쓰지 않는다는 조건을 만족할 수 없다. 그렇다 이제 와서 약한척 안된다는 척 뒤로 무를 수는 없다. 그렇다 타인과의 약속은 못 지키더라도 자기 자신과의 약속은 지켜야 한다. 그렇다 나는 이제 나의 한계점에 도전해야 한다. 우선, 숨고르기로. 랜더링 엔진을 만들기에 앞서 지금까지 작성한 소스를 정리하기..