본문 바로가기

전체 글

(55)
c# config 값 저장하기 (process.env?) 사전지식 node.js 에서는 .env 파일에 필요한 환경변수 같은것을 저장하여 소스코드에 노출되지 않게 사용하곤한다. C#에도 당연히 그러한 것이 있다. 근데 조금 장황하게 되어 있어서 그런지 사용법을 가끔식 까먹는다. 준비물 nuget.org Install-Package System.Configuration.ConfigurationManager -Version 6.0.0 OR dotnet add package System.Configuration.ConfigurationManager --version 6.0.0 실습 ※ .net6.0 ( C#10.0 에서는 Main()을 생략한다 ) using System.Configuration; var config = ConfigurationManager.Open..
c# 몽고DB 간단히 CRUD만. 사전지식 닷넷에서 Mongoose 같은것을 원했으나 찾아봐도 자료가 없는것? 같다. 사용언어어 따라서 API의 사용법이 큰폭으로 달라지는 것은 고달프지만, 별수없이 몽고DB측에서 준비한 OFFICIAL한 라이브러리의 사용법을 알아본다. 준비물 nuget.org Install-Package MongoDB.Driver -Version 2.14.1 OR dotnet add package MongoDB.Driver --version 2.14.1 ※필자는 몽고db v5.0.3 에서 테스트함. 실습 ※ .net6.0 ( C#10.0 에서는 Main()을 생략한다 ) using MongoDB.Bson; using MongoDB.Driver; var dbClient = new MongoClient("mongodb://..
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 처럼 예약..