프로필 사진
Sojin Park
Frontend Dev

사고思考뭉치를 만들어 보았다
2014. 2. 7.

2월 2일부터 3일까지 개발한 사고(思考)뭉치 웹 애플리케이션이 오늘 서버에서 돌아가기 시작했다. 주소는 note.suhj.in으로, 블로그 주소 앞에 note.만 붙이면 접속할 수 있다. 곧 테마를 조금 수정하여 블로그와 사고뭉치를 잇는 링크를 넣을 생각인데, 그 '곧'이 언제가 될 지는 잘 모르겠다.

사고뭉치의 필요성

지난 3월 이래 블로그에 여러 가지 일들을 기록하면서 한 가지 아쉬움이 있었다. 사용하는 블로그 플랫폼들이 대부분 '줄글로 글을 쓰는 것을 강요한다'는 것이었는데, 이는 여러가지 문제점을 불러일으켰다. 현재로서 말할 수 있는 그 문제점들이란 다음과 같다:

  • 글을 길게 쓰도록 유도하여 글 작성에 많은 시간을 투자하도록 한다.
  • 가벼운 주제의 글을 작성하기 힘들어진다.

이러한 문제점을 해결하기 위해 직접 만들어 본 것이 간단한 생각 기록 웹 애플리케이션인 사고뭉치이다. 개발 기간이 이틀인 것 치고는 생각보다 결과물이 꽤 괜찮게 나온 것 같다.

앞으로 사고뭉치를 어떻게 활용할 것인가?

사고뭉치를 활용할 방법은 여러 가지가 있겠지만 아마 다음과 같은 2개의 방법으로 주로 활용할 것 같다.

가벼운 생각 저장소

침대에 누워서, 길을 가면서, 아니면 책을 읽으면서 생각난 여러 일들을 기록하는 장소로 생각뭉치를 이용할 생각이다. 사고뭉치를 개발할 때 초점을 맞추었던 부분이 바로 '가볍고 일상적인 생각들을 자유로운 형식으로 작성'하는 것이었던 만큼 사고뭉치의 주 이용 목적은 '가벼운 생각의 기록'이 될 것 같다.

블로그에 글을 올리기 전, 과도기적 글감 저장소

블로그에는 너무 분량이 짧거나, 아니면 내용이 가볍거나 해서 올리지 못하는 주제들이 많이 있다. 이들을 사고뭉치에 기록해 놓은 뒤, 나중에 다른 글감들과 모으거나 조합해서 하나의 글로 블로그에 올려 볼 생각이다.

사고뭉치의 개발

작년 여름에 ASP.NET MVC를 배워 두고 활용할 방법이 없어서 지금까지 그 배워둔 것을 썩혀두고 있었는데, 마침 이번에 기회가 나서 처음으로 ASP.NET를 통해 웹 애플리케이션을 개발해 보았다. 첫 앱 개발 소감으로는, ASP.NET이 웹 앱 개발에 있어서 굉장히 편리한 것 같다는 것일까. 총 5~6시간 정도 되는 개발 기간으로도 충분히 좋은 웹 앱 퀄리티를 뽑아낸 것 같다.

구동 방법

사고뭉치가 구동되는 방법은 다음과 같다.

  1. 클라이언트가 서버에 요청을 보낸다.
  2. 사전 등록된 RouteConfig에 따라 요청을 처리할 Controller와 Action을 선택하고 실행한다.
  3. Controller의 Action에서 작업을 수행한 후 View를 렌더링한다.

RouteConfig 등록

RouteConfig 등록이란, ASP.NET에서 RESTful URI를 파싱하는 방법을 등록하는 것이다. 예를 들면, https://note.suhj.in/read/1 이라는 링크 요청이 들어왔을 때 웹 애플리케이션이 'HomeController' 컨트롤러의 'Read' Action을 실행하고, Id 매개변수로는 1로 넘겨주도록 하는 것이 바로 RouteConfig 등록이다. 자세한 내용은 MSDN: ASP.NET 라우팅을 참조.

이번 애플리케이션의 RouteConfig은 다음과 같다.

using RaonNote.Infrastructure;
using System.Web.Mvc;
using System.Web.Routing;

namespace RaonNote { public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRouteLowercase(
            name: "List",
            url: "",
            defaults: new { controller = "Home", action = "List", page = "1" }
        );

        routes.MapRouteLowercase(
            name: "Login",
            url: "login",
            defaults: new { controller = "Account", action = "Login" }
        );

        routes.MapRouteLowercase(
            name: "ReadId",
            url: "{Id}",
            defaults: new { controller = "Home", action = "Read" },
            constraints: new { Id = "\\d+" }
        );

        routes.MapRouteLowercase(
            null,
            url: "page/{Page}",
            defaults: new { controller = "Home", action = "List", Page = "1" },
            constraints: new { page = "\\d+" }
        );

        routes.MapRouteLowercase(
            null,
            url: "{action}/{id}",
            defaults: new { controller = "Home", action = "List" },
            constraints: new { id = "\\d+" }
        );

        routes.MapRouteLowercase(
            name: "Action",
            url: "{action}",
            defaults: new { controller = "Home" },
            constraints: new { action = "\\w+" }
        );
    }
}

}

이번 애플리케이션에서 RouteConfig를 작성할 때 특이한 부분을 하나 발견한다면 아마 MapRouteLowercase라는 확장 메서드를 사용했다는 점일텐데, 이는 ASP.NET의 기본 라우팅 설정이 이해할 수 없는 설정으로 되어 있어서 그렇다.

이게 무슨 말인지 간략히 설명하자면 ASP.NET 웹 앱에서 URL을 출력할 때는 하드코딩된 방법으로도 출력할 수 있지만 미리 제공된 HTML Helper를 통해 URL을 출력할 수도 있다. 예를 들면 Url.Action("Edit", new { id = Model.Id })은 현재 컨트롤러의 Edit Action으로 가는 링크를 생성한다. 이 때 이 HTML 헬퍼가 참조하는 것이 RouteConfig 설정으로, RouteConfig 설정 중 가장 적합한 URL 생성 방법을 찾아 URL을 출력한다. 이 경우 저 헬퍼 호출은 /edit/3과 같은 링크를 생성하게 되겠다.

이 때 이해할 수 없는 ASP.NET 라우트 기본 설정이 무엇인가 하면, URL의 첫 문자가 대문자로 출력되는 것이 기본 설정이라는 것이다. 즉, 위에서 /edit/3과 같은 URL이 출력된다고 했는데 기본 ASP.NET 라우트 설정으로는 /Edit/3과 같은 흉측한 모양의 URL이 출력된다. 이 설정을 변경해 주는 것이 바로 MapRouteLowercase 확장 메서드로, URL 출력 시 문자들을 소문자들로 출력하도록 한다.

컨트롤러

  1. HomeController - List, Read, Edit, Delete
  2. AccountController - Login

Entity Framework

[작성 중]

  • 사고뭉치 개발기
  • 사고뭉치의 배포