ASP.NET 5 베타 요약

최신 순으로 요약하겠다. 새로운 베타 내역이 생길 경우 이 글이 업데이트 된다.
http://blogs.msdn.com/b/webdev/default.aspx?CR_CC=200674120

ASP.NET Beta 8

(2015-10-15)

  • IIS 호스팅 기능개선

이제 더이상 기존 AppPool이 없어도 윈도우 서버에서 구동 가능.
자체 호스팅을 원할 경우 app.config 지원
IIS는 여전히 web.config가 필요함. 아래와 같이 구성하면 됨.

<configuration>
  <system.webServer>
    <handlers>
      <add
        name="httpPlatformHandler"
        path="*"
        verb="*"
        modules="httpPlatformHandler"
        resourceType="Unspecified"/>
    </handlers>
    <httpPlatform
      processPath="%DNX_PATH%"
      arguments="%DNX_ARGS%"
      stdoutLogEnabled="false"
      startupTimeLimit="3600"/>
  </system.webServer>
</configuration>
  • 다국어 기능

이제 다국어 기능은 자체 지원으로 변경.
Startup.cs 에 midleware 추가
app.UseRequestLocalization(options)
서비스 추가
services.AddLocalization(options => options.ResourcesPath = "resources");
MVC와 함께 사용

services
    .AddMvc()
    .AddViewLocalization(options => options.ResourcesPath = "Resources");

컨트롤러별 다국어를 정의할 클래스 예제

private IHtmlLocalizer<HomeController> SR;

public HomeController(IHtmlLocalizer<HomeController> localizer)
{
    _localizer = localizer;
}

public ActionResult Index()
{
    ViewData.Message = SR["Localize me!"];
    return View();
}

뷰에서 다국어 정의 사용

@inject IViewLocalizer SR

<h1> @SR["Localized header"]</h1>

유효성 검사 오류 메시지를 위한 middleware 사용

services
    .AddMvc()
    .AddViewLocalization(options => options.ResourcesPath = "Resources")
    .AddDataAnnotationsLocalization();

이후 유효성 오류 메시지에 대한 다국어 기능 지원

  • DNX 감시 명령

DNX Watch 명령어는 프로젝트 파일의 변경 사항을 모니터링하여 변경 사항 발생 시 상황에 따라 서버를 재시작 하여 별도의 사용자의 터치 없이 바로 반영된 결과물을 볼 수 있는 편리한 개발 기능
설치법
dnu commands install Microsoft.Dnx.Watcher

이후 project.json이 있는 경로로 들어가서 dns-watch 실행하면 됨.

C:\Users\danroth27\Documents\WatchTest\src\WatchTest>dnx-watch web
[DnxWatcher] info: Running dnx with the following arguments: --project "C:\Users\daroth\Documents\WatchTest\src\WatchTest\project.json" web
[DnxWatcher] info: dnx process id: 8348
Hosting environment: Production
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.

기본 About 페이지
before

코드 변경만 한 후,

public IActionResult About()
{
    ViewData["Message"] = "Watch this!";

    return View();
}

브라우저 새로고침만 하면 반영 결과를 볼 수 있음.
After

  • 프레임워크 버전 지정

게시할 때 프레임워크 버전을 명시적으로 지정 가능
dnu publish –framework dnx451
이를 통해 해당 버전에 맞는 필요한 프레임워크와 같이 패키징 후 게시됨.

  • 패키지 복구 시 HTTP 캐시 초기화

실행핼 때마다 캐시가 쌓이는 게 일상이기 때문에 패키지 복구 시 아래 명령어로 캐시 초기화가 가능
dnu clear-http-cache

  • **닷넷 버전을 2.0이나 3.5로 변경 가능

미친 기능… project.json 에서 targetFrameworknet20net35 으로 지정하면 됨.

  • 빌드 상황에 따른 전처리/후처리 지원

DEBUGRELEASE 등에서 각 상황에 맞는 전처리/후처리를 project.json 에서 정의 가능.
전/후처리 스크립트에 %build.Configuration%%build.TargetFramework% 변수 가용.

  • 추가 포함 파일 정의

project.json 에서 사용자가 지정 가능한 추가 파일을 지정할 수 있음 주로 프로젝트 외 경로 참조에 쓸 수 있음.

"packInclude": {
    "destination1/": "source1/**",
    "destination2/": "source2/**",
    "destination2/some_additional_file.txt": "source2a/somefile.txt",
    "destination3/": ["source3/a.txt", "source3/b.txt", "source4/c/**/*.ps1"]
}
  • 패키지나 프로젝트 버전 지정 가능

project.json에 클래스 라이브러리 버전 지정 예제

"dependencies": {
    "ClassLibrary1": { "version": "1.0.0-*", "target": "project" },
    "ClassLibrary2": { "version": "1.0.0-*", "target": "package" }
}
  • DNVM Uninstall

이제 DNX 확장 삭제 가능. 경로는 ~/.dnx/runtimes (사용자 폴더/.dnx/…)

  • Visual Studio 2015 도구 개선사항
    • 프로젝트/솔루션 내 파일 제외 기능을 이제 사용 가능.
    • Nuget package 복구 시 info 바 생성
      info bar
    • 상속 패키지 오류를 이제 package.json이나 솔루션 탐색기에서 볼 수 있음
      1
      2
      3
    • 패키지 상속 구조 개선
      4
      아이콘부터 각 패키지 및 클래스 라이브러리에 필요한 패키지나 라이브러리 구조를 볼 수 있음.

ASP.NET Beta 7

()

  • a

ASP.NET Beta 6

()

  • a

ASP.NET Beta 5

(2015-06-30)

  • DNX
    • Nuget 3.x 패키지 목록 나열 지원
    • DNX에서 포터블 닷넷 실행환경을 제시하고 빌드하는 새로운 닷넷 Target Framework Moniker (TFM) 지원
    • project.json에 Nuget 패키지 정보를 포함할 수 있음
    • JSON.NET 버전 고정 제거
    • 새로운 IRuntimeEnvironment
      즉, 신규 OS에 대한 실행 환경을 정의하는 인터페이스.
  • ASP.NET 5
    • HttpContextConnection 속성을 추가하여 추가적인 접속 정보 수집 가능
    • 다국어 추상 정의 예제
    • ASP.NET 호스팅 시 아무 키를 누르거나 통상적인 Ctrl+C 키로 서버를 종료할 수 있음
  • MVC 6
    • Razor 템플릿 엔진에 C# 6.0 표준 사용 가능
    • MVC 전역 설정 구성 및 단순화 (특히 전역 HTML Helpers)
    • JSON Helper 추가. 사용법 : @Json.Serialize(Model)
    • 라우팅 토큰 기본값을 간편하게 지원
  [Route("Products/[action]", Name = "[actions]Products")]
  public class ProductsController
  {
      public void Add() { }
      public void Buy() { }
  }
  • 이미지 태그 헬퍼에서 캐싱 기능 추가
<img asp-file-version="true" src="~/images/my_cool_image.png" />
  • 태그 헬퍼에서 Dictionary 속성 바인딩 지원
<a asp-action="Edit" asp-route-id="@index">Edit</a>
  • 서버 개발 상황에 맞는 태그 헬퍼 바인딩 지원

여기까지.
베타 5부터 기재하는 이유는 ASP.NET 개발 블로그에서 개별로 집필하는 부분이 Beta 5부터이기 때문이며,
이때부터 크로스 플랫폼에 초점을 맞추기 시작했기 때문이다.

composite / 2015년 10월 16일 / Piss Development / 0 Comments

DB 엔진 순위

왜 쓰냐고? 즐찾을 가장한 순위 소개다!

  1. 오라클 – 입아프고 손아픈 독보적 1위 관계형 DB 솔루션.
  2. MySQL – 오픈소스였는데 오라클이 먹고나서 오픈소스가 맞는지 모르겠지만 어쨌든 오픈소스 1인자인 관계형 DB 솔루션
  3. MS SQL Server – 여러분, 왜 게임회사에서는 동시성 분산 트랜잭션에 오라클을 안쓰고 이 MSSQL 쓰는지 아시는분?
  4. MongoDB – 문서기반 NoSQL 1위. 모든 NoSQL 1위를 달리신다. 그만큼 문서기반의 비즈니스 앱이 많아 정체성을 찾았다는 증거이기도.
  5. PostgreSQL – 오픈소스 SQL 중에 이녀석은 써본 사람이 안다. 오라클 저리가라 할 정도의 분산능력과 트랜잭션 능력은 이놈의 코끼리 로고가 증명한다.
  6. DB2 – 깊은 역사를 자랑하는 비즈니스 시장의 독보적이었던 IBM의 관계형 DB.
  7. Microsoft Access – 시발 오피스 쓰는새끼들 왜케많아…
  8. Cassandra – Wide-column store. 대략적으로 테이블 같은 개념이다. 근데 관계형은 아님. 어쨌든 오픈소스 NoSQL의 2인자이다.
  9. SQLite – 이거 안쓴 응용 프로그램이 있을까? 심지어 모바일에서도. 가볍지. 빠르지…? 일단 임베디드 관계형 DB의 여전한 1인자
  10. Redis – 이걸로 캐시 구성해본 비즈니스 앱이라면 안다. 뒤질듯한 속도감과 씨잘대기 없는 데이터 관리에 효율적이라는 사실을. 키값 NoSQL 시장 1위.

http://db-engines.com/en/ranking

composite / 2015년 9월 22일 / Piss Development / 0 Comments

내가 한번 추천해보는 웹 개발자를 위한 Visual Studio 확장 모음

페북 그룹에 Visual Studio 웹 개발자 추천 확장 모음 링크를 올렸길래 나도 올려본다. 여기에 기재된 확장 도구를 포함하여 내가 쓰고 왜 쓰는지 알리고자 글을 쓴다.
내가 설치한 확장 목록을 이름순으로 볼 수 있다보니 알파벳별로 정렬하는 점 양해 바란다.
아, MS에서 만든 확장은 제외다.

Code Alignment

이름만 봐도 눈치챈 사람도 있을 것이다. 말로 하긴 힘드니 아래 코드로 뭔 프로그램인지 알려주겠다.

    person.HomeTown = "Brisbane"; 
    person.FirstName = "Chris";                
    person.Surname = "McGrath";                
    person.Age = 24;                           
    person.Occupation = "Software Developer";  

=>  person.HomeTown   = "Brisbane";
=>  person.FirstName  = "Chris"; 
=>  person.Surname    = "McGrath"; 
=>  person.Age        = 24; 
=>  person.Occupation = "Software Developer"; 

올드비 개발자들(특히 C/C++ 개발자)에게 단비같은 확장도구인 데다가 무료이다. 도네이션웨어라는 점.
더이상 설명이 필요있나?

ColorSchemeSelector

ColorSchemeSelector

그저 단순한 색상 추출 도구라면 내가 블로그 보다 말았고 그냥 넘어갔겠지만, 이녀석은 그저 단순한 색상 추출기를 뛰어넘어 색상 혼합별로 색상을 추천받아 추출할 수 있다는 점에서 특히 웹 개발자와 디자이너에게 좋은 도구가 될 것이다.
아, 물론 무료다.

Git Diff Margin

Git Diff Margin

Git로 버전관리를 한다면 해당 줄에 바뀐 점을 이렇게 실시간으로 표현해준다는 점이 되겠다. 자주 바뀌는 일이 많은 버전관리 개발자라면 유용할 것이다.
이 확장 또한 링크된 블로그에 소개되어 있으며, 무료이다.

Grunt Launcher

프론트엔드 개발자라면 반드시 한번씩은 들었을 Grunt. 패키징 자동화로 유명한 Grunt와 스케줄별 자동화를 지원하는 Gulp, 프론트엔드의 패키지 매니저인 Bower 명령어까지 지원해준다.
나처럼 node.js를 수동으로 포터블로 설치한 환경이라면 사용 시 세팅에 유의하라.
무료라고. 소개됐다고.

Image Optimizer

프론트 엔드를 위한 확장이 여기 하나 또있다. Visual Studio 자체 지원 이미지 최적화 도구가 있다면 믿겠는가?
같은 이미지에서 이미지 사이즈를 줄여주는데, 자세한 내용은 이미지 최적화 기법 구글 검색 ㄱㄱ.
이미 node.js 등으로 이미지 최적화 확장이 있다면 비교해달라. 난 아직 비교 안해봤다.
무료다.

Mexedge Stylesheet Extension

간단하게 말하면, 스타일시트 소스를 트리구조로 시각화하는 도구다. 프론트엔드 개발자에게는 상당히 편리한 도구다.
확장 링크로 들어가서 스샷을 보면, 그저 단순한 그런 도구가 아니다. 심지어는 파일 내 클래스 목록처럼 표시까지 해준다.
블로그에서도 소개되어 있다. 3명이 기업 운영하고 있는 것으로 보이긴 한데 일단 무료니 그냥 써 주자.

MixEdit

지금 소개하는 확장은 내가 블로그에서도 소개한 바 있으며, 유일하게 무료가 아닌 평가판 확장이다.
Sublime Text를 접하다가 Visual Studio로 개발하다보면 답답하지 않는가? 멀티커서와 멀티셀렉트가 지원되는 확장, 변수를 한꺼번에 바꿀 수 있다면 얼마나 좋을까?
그런 목마름을 Visual Studio에서도 적셔주는 그런 확장 되시겠다.
평가판이긴 하지만 사용기능과 기간에 제한은 없다. 단지, Visual Studio 실행 후 처음 MixEdit 기능을 수행 시 구매 권유 창이 뜰 뿐이다.

Suggested Extensions

얜 좀 재밌는 확장이다. 블로그에 소개되긴 했는데 댓글에 소개된 확장인데, 파일 확장자별로 사용할 수 있는 Visual Studio 확장을 소개시켜주는 확장 되시겠다.
예를 들면 yaml 같은 파일들. IntelliJ IDEA 같은 개발 툴 쓴 사람은 알겠지만 JetBrains 에서는 확장자별로 지가 확장 추천을 해준다. 그런 비슷한 거다.
무료다.

Web Essentials 2015

만약 웹 개발자인 당신이 Visual Studio를 쓰고 있을 때, 이 확장을 쓰고 있다면 이 확장 제작자에게 큰 절을 해야 한다. 블로그에서도 소개도니 웹 개발자 필수 확장!
웹 개발에 모든 것을 제공해주는 확장이다. CSS, HTML, JS 편집에 날개를 달아주며, CoffeeScript, LESS, Sass 같은 확장 언어 편집과 Grunt, npm, bower 등의 설정 편집에 유용한 도구를 제공하는 웹 개발 만능 확장이다.

Visual Studio 2015 사용자에게 주의점은 소스 파일을 Minify하거나 Bundling으로 합치거나, Sass 및 LESS 컴파일 기능을 따로 확장으로 뺐다는 점에 유의해야 한다. 없다고 해매지 말고 내가 링크 소개할 테니 다운 받아라. 이 확장도 무료고 아래 확장도 무료다. 저거 제작자 만나면 반드시 큰 절 해라.

Bundler & Minifier
Web Compiler

나는 여기까지 추천 확장 목록으로 썼다.
여러분의 추천 확장이 있다면, 서슴없이 공유하여 서로 즐거운 개발 세상을 만들어가는 주역이 되길 바란다.
싫어? 싫음 시집가.
끗.

composite / 2015년 9월 9일 / Piss Development / 0 Comments

오픈소스 코딩용 글꼴 Hack 2.0 웹폰트 CDN

자세한 한글 정보는 블로터 – 코딩용 글꼴 ‘핵’, 오픈소스로 공개 기사를 참조하라.

가독성 끝내주는 코딩용 폰트 Hack 이다. 오픈소스로 공개된 만큼 많은 웹 사이트에서 표준 코딩 웹폰트로 이용할 수 있을 것으로 기대된다.
이제 당신 사이트에 적용할 차례다.

Basic Latin + Latin-1 Supplement Character Set

<link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.010/css/hack.min.css">

Full Character Set

<link rel="stylesheet" href="//cdn.jsdelivr.net/font-hack/2.010/css/hack-extended.min.css">

한국 사용자는 첫번째만으로 충분하고, 한글 대체폰트(예:나눔고딕코딩 등)를 통해 차등 적용하면 되겠다.
마지막으로 폰트 적용법을 소개하고 턴을 마치겠다.

code {
    font-family: Hack, NanumGothicCoding, '나눔고딕코딩', monospace;
}

composite / 2015년 9월 1일 / Piss Development / 0 Comments

.NET 개발자의 바이블은 Stack Exchange?

글을 읽기 전에 한가지 짚고 넘어가자.

Stack Exchange는 무슨 언어로 만들었을까?
닷넷 개발자는 눈치 챘겠지만 닷넷으로 만든 사이트다.

엔터프라이즈급의 사이트들을 보면 웹 사이트 언어 3대장은 아래와 같다.
Java, Python, PHP
루비가 빠졌다고? 루비 의외로 적다. 그 중 최고봉은 아직까진 PHP다.

이건 해외 얘기고, 국내에서는 Java가 우위를 점하고 있다.
먼저, 네이버와 다음, 네이트 등이 Java를 사용하고 있다.
근데 호스팅 사이트나 서버 관리를 중점적으로 하는 사이트는 어째서 PHP다.
왜? 왜 Java가 좋은데 라고 자바부심 부리지 말고 이유를 알고 넘어가자.
호스팅 사이트는 서버 관리와 처리가 중점적이기 때문에 서버 처리에 적합한 Perl이나 Python을 돌리기 때문이다.
그러나 아직 당시에는 Perl이나 Python으로 웹 앱을 돌리기엔 환경이 복잡했기 때문에 PHP를 쓴 것이다.
물론 자바로 전향한 업체도 있긴 하지만, 기존 관리 프로세스 때문에 PHP를 계속 쓰고 있는 업체가 대규모 업체에 존속 중이다.

이런 트랜드에 Stack Exchange는 .NET을 선호했다.
왜일까?

직접 물어봐라. 나도 모른다. 공개된 정보가 없어서.
현재 Stack Exchange가 어떤 기술을 쓰고 있는지는 이 링크를 통해 보면 된다.

그렇다면 버전 관리는? 옛날에는 SVN을 썼지만 지금은 Mercurial을 쓰고 있다.
수은 버전관리 시스템은 서버가 반드시 있어야 내역이 저장되고 불러와지는 방법과 달리
Git처럼 로컬에서 변경사항을 적용하거나 되돌리고 최종 변경사항을 서버에 올렸다가 동기화하는 방식이다.

자. 어쨌든, Stack Exchange는 .NET 개발자의 대표 사이트가 됐다. MS? 원래 닷넷 쓰긴 하지만 원제작자는 넘어가자.

그리고 Stack Exchange는 Github에 오픈 소스 도구를 몇가지 배포하고 있는 중이다.
https://github.com/StackExchange

https://github.com/opserver/Opserver
https://github.com/StackExchange/dapper-dot-net

이렇게 닷넷에 열정적이니 바이블이 아닐 수가 없을 것이다.
끝이야. 허무하지?

그럼 이딴 글 왜올렸냐고?
닷넷 무시하지 말라고. ㅋㅋ

composite / 2015년 8월 31일 / Piss Development / 0 Comments

[C#] 명쾌한 abstract 메소드와 virtual 메소드 차이점

왠지 모르게 다들 어렵게 설명한다.
데브피아만 가도 “abstract는 없으면 인스턴스 생성 안되고 virtual 은 없어도 인스턴스 생성된다…”
한국 종특인 돌려말하기인지 모르겠지만, 초보들에게는 더럽게 이해 안되는 답변이다.
심지어 그런거 모르냐, 책을 읽어라, 알게된다. 이지랄까지 하고 있으니…
선배 개발자들 맞는지 의문 투성이다 정말. 먹고살기 빠듯한 건 아는데 그렇게 가르쳐주기 귀찮았냐 하는 생각이 든다.
내가 후배 개발자를 위해 간단명료하게 설명한다.

자. 네가 얻은 새로운 집에 시멘트만 있는 방 내부를 꾸미게 됐어.
이게 abstract class 다.

벽지는 붙여야지? 안그럼 방이냐? 폐가지.
그리고 장판 깔아야지 안그럼 맨발로 방 못들어가잖아.
그래서 벽지와 장판 붙이는 기능을 가진 메소드를 abstract로 선언한다.

좋아. 벽지는 일단 붙였어. 그럼 벽지에 데코를 붙이는 생각도 했을거야.
예를 들면, 벽에 뭐 매달거나, 야광 스티커를 붙이거나 할거야.
근데 이건 안해도 지장 없잖아.
그래서 벽지 데코를 붙이는 메소드를 virtual로 선언한다.

이해했지?

public abstract class 추상인테리어{
    public abstract 벽지 벽지칠하기();
    public abstract 장판 장판붙이기();
    public virtual 데코레이션 데코붙이기(){
        return null; // 기본 데코 안붙일거다.
    }
}

public sealed class 철수인테리어 : 추상인테리어{
    public override 벽지 벽지칠하기(){
        var 벽지칠 = new 벽지();
        var 벽지색 = 벽지색깔.파란색;
        //벽지 칠하는 프로세스 구현
        return 벽지칠;
    }
    public override 장판 장판붙이기(){
        var 장판깔기 = new 장판(장판.흔한거);
        //장판 까는 프로세스 구현
        return 장판깔기;
    }
}

public class 영희인테리어 : 추상인테리어{
    public override 벽지 벽지칠하기(){
        var 벽지칠 = new 벽지();
        var 벽지색 = 벽지색깔.분홍색;
        벽지칠.패턴 = 벽지패턴.꽃무늬;
        //벽지 칠하는 프로세스 구현
        return 벽지칠;
    }
    public override 장판 장판붙이기(){
        var 장판깔기 = new 장판(장판.예쁜거);
        //장판 까는 프로세스 구현
        return 장판깔기;
    }
    public override 데코레이션 데코붙이기(){
        var 데코 = new 데코레이션();
        데코.종류 = 스티커.야광(색깔.초록색);
        //데코 붙이는 프로세스 구현
        return 데코.다붙였다();
    }
}

존나 흔한 이름으로 클래스 붙였다.
끗.

composite / 2015년 8월 21일 / Piss Development / 3 Comments

XP_CMDSHELL 및 sp_OACreate 프로시저 좀 쓰지 마.

MS SQL Server는 Oracle에 비해 정말 편리한 기능을 가지고 있다.
그것도 SQL 상에서 콘솔 명령어 날릴 수 있고 심지어 OLE 라이브러리를 불러다 쓸 수 있다.

는 개뿔 보안에 최악 프로시저 형제 되시겠다.
일단, 왜 쓰지 말아야 하는지 나열하겠다.

1. 이 프로시저가 털리면 DB 서버 자체가 털리는 거나 마찬가지

말 그대로다. SQL Server는 보통 가장 높은 권한(SYSTEM 및 Administrator 등)으로 돌아가며,
기재했던 프로시저는 이 권한 그대로의 명령어와 루틴을 실행한다.
심지어는 자기 편리하려고 프로시저의 권한을 public으로 물리는 미친 새끼들도 있다.
절대 그러지 마라. DB 시스템 다 털린다. 데이터 다 빼가거나 변조, 심지어 삭제나 다운은 시간 문제다.
그리고 일 발생하면 엉뚱한 곳에서부터 분석하게 된다.

참고로 필자 경험인데, 연습삼아 구축한 MSSQL에 이 프로시저 public 열리고 며칠 만에 짱깨한테 어드민 계정 털려 들어가지도 못했다.
다행히도 XenServer로 구축한 가상 OS였고, 연습서버라 다행이지 만약 실서버였으면 사상 최악의 공황이 아닐 수 없을 거다.

2. 이 프로시저에 딸려온 프로세스 망가지면 SQL Server 자체가 다운되버리는 불상사 발생

XP_CMDSHELL 의 경우 딱히 말할 것도 없다. 예외 처리에서 파일명 올바르던 어쩌던 다음 SQL 구문 실행에 큰 영향을 주지는 않는다.
문제는 바로 sp_OACreate 프로시저다. 이 프로시저는 OLE 라이브러리를 SQL Server 엔진에서 직접 구동하고 예외 처리가 안된 상태에서 실행하기 때문에,
만약 예외 처리를 재대로 하지 않거나 예상치 못하게 프로세스 다운이 발생하면 이게 바로 SQL Server 서비스 다운으로 직결이다.

예기치 않게 DB가 다운되면 그다음 시나리오는 더이상 얘기 안해도 알지?

DB는 DB답게 쓰자. 부족하다고 헛짓거리 하다가 털리지 말고.
정 부족함을 채우고 싶다면 CLR을 써라. SQL Server 2005부터 각 버전에 맞게 CLR 인터페이스를 지원한다.
오라클 또한 Java 를 지원하여 SQL의 부족함을 채울 수 있다.

composite / 2015년 7월 27일 / Piss Development / 0 Comments

프록시 자동설정 원리

Weblock 이라는 아이폰 앱이 있다.
이 앱은 광고 사이트나 패턴을 정리해서 프록시 자동설정 파일 (Proxy Auto-config, PAC)을
만들어 적용하여 사파리 등의 웹 브라우저에서 짜증나는 광고를 안띄워주는
고마운 프로그램이다.

필자의 경우 이 Weblock 을 무료일 때 다운받았는데, 이 앱 덕분에 쾌적한 브라우징을 할 수 있었다.
그렇다면 이 원리는 무엇인가?

해답은 바로 Weblock 을 사용하면서 URL을 보면 js URL을 복사하는 부분에서 찾을 수 있다.
이 url 복사 후 붙여넣으면 js 소스가 뜨는데 이게 바로 PAC에서 사용하는 JS다.

운이 좋게도 이 PAC 스크립트를 작성하는 가이드를 한글로 제공한 고마운 분이 있으니,
미꾸라지 PAC (Proxy auto-config) 문법 링크를 참조하라.
이 글에서는 간단한 작성법만 나열하므로 PAC에 대한 전체적인 레퍼런스를 보고 싶으면 위 링크로 가도록.

먼저, 이 스크립트를 처음 작성한다면 먼저 JS에 대한 기초 지식이 요구되며, 단 3가지 문법만 기억하면 된다.

//1. 첫번째 프록시 접속 후 실패 시 두번째 프록시 접속. 세미콜론(;)으로 구분하여 작성하면 된다.
var PROXY_URL = "PROXY proxy1.example.com:8080; PROXY proxy2.example.com:8080";
//2. 프록시를 사용하지 않고 직접 접속하는 키워드이다. 
var DIRECT = "DIRECT";
//3. 이제 적용하기 위해 함수를 작성하는데, 함수명은 FindProxyForURL 이 되시겠다.
//   콘솔 프로그램의 main 함수와 같은 역할을 하는 프록시의 주 실행 함수이다.
function FindProxyForURL(url, host){
    // example.com 및 그 하위 도메인은 직접 접속하도록 한다.
    if (shExpMatch(host, "*.example.com"))
    {
        return "DIRECT";
    }

    // 임의 도메인을 접속 시 아래 지정된 IP와 마스크로 접속했을 경우
    // fastproxy.example.com 포트 8080 이라는 프록시로 접속하도록 한다.
    if (isInNet(host, "10.0.0.0", "255.255.248.0"))
    {
        return "PROXY fastproxy.example.com:8080";
    }

    // 그리고 마지막으로 모든 접속을 proxy.example.com 포트 8080 으로 접속한다.
    // 만약 프록시 응답이 없을 경우 할 수 없이 다이렉트로 접속한다.
    return "PROXY proxy.example.com:8080; DIRECT";
}

끝이다. 어때요. 쉽죠?
위 파일을 js로 저장 후, 각 브라우저에서 프록시 설정에서 자동 프록시 설정할 때 저 스크립트를 작성한 URL을 지정하면 된다.
아이폰이나 안드로이드 같은 모바일 환경에서는 Wi-Fi 연결 시 프록시에서 자동 선택 후, URL을 입력하면 된다.

자. 이제 이 PAC을 응용하여 간단한 Ad-block 스크립트를 작성하도록 하겠다.


//직접 접속 키워드 var PROXY_DIRECT = "DIRECT"; //차단 키워드 //Dummy Proxy로 차단한다. 해당 IP는 구글 DNS IP이다. //즉, 실제 프록시도 아니고 어자피 응답 실패하는 거 알지만 //이걸 이용해서 광고 사이트를 무조건 실패하는 프록시로 강제 접속하는 //마법의 키워드이다. var BLACK = "PROXY 8.8.8.8:53"; function FindProxyForURL(url, host) { var u = url.toLowerCase(); var h = host.toLowerCase(); //광고 호스트 중 하나인 onclickads.net 호스트이거나, 페북에서 사용하는 광고 이미지를 더미 프록시로 차단한다. if (dnsDomainIs(h, "onclickads.net") || shExpMatch(u, "*/fb*akamaihd.net/*image.php*facebook.com*ads*image*")) { return BLACK; } //나머지는 직접 접속으로 정상 접속하도록. return PROXY_DIRECT; }

그리고 이걸 당신의 웹호스팅이다 Github Page에 넣고 자동 프록시 설정 주소에 넣으면 광고차단 효과가 있을 것이다.
이게 끝인가? 맞다. 끝이다.

마지막으로 PAC 스크립트 작성시 주의점을 알려주겠다.

  • 몇몇 브라우저는 PAC 스크립트 파일의 인코딩을 시스템 인코딩에 따른다. 예를 들면 IE는 UTF-8을 인식할 수 없다. 특히 한글 입력은 왠만하면 하지 말자.
  • 크로스 플랫폼 PAC 스크립트를 작성 시 가능하면 옛날식 JScript 시절 표준을 따르는 것이 좋다. 각 브라우저나 OS 자바스크립트 엔진을 따르기 때문이다.

참고자료

composite / 2015년 7월 15일 / Piss Development / 0 Comments

2015년 6월 29일자 NoSQL 오픈소스 임베디드 DB 리스트

이번엔 약속대로 자바 기반의 임베디드 NoSQL DB를 소개한다.
Java 1.6에 내장된 Apache Derby DB(Java DB)는 소개에서 제외한다. SI/SM 개발자들 이거 자바 내장인거 알기나 하는지 내 알바 아니지만.
사족으로 역시 자바가 정말 다양한 방식의 NoSQL DB가 있다. 닷넷에서 아쉬우면 IKVM 써서 쓰는 방법이 있긴 하지만…

1. MapDB

MapDB is embedded database engine. It provides java collections backed by disk or memory database store. MapDB has excellent performance comparable to java.util.HashMap and other collections, but is not limited by GC. It is also very flexible engine with many storage backend, cache algorithms, and so on. And finally MapDB is pure-java single 400K JAR and only depends on JRE 6+ or Android 2.1+.

순수 자바로 만들어진 컬렉션 기반의 키값 DB. 메모리 및 파일 가능.
400kb의 가벼움과 안드로이드 지원으로 특히 안드로이드 개발자에게 사랑받고 있는 DB인 데다가
Apache License 2.0 이라 기업에서도 부담없이 사용 가능.

2. OrientDB

OrientDB is a 2nd Generation Distributed Graph Database with the flexibility of Documents in one product with an Open Source commercial friendly license (Apache 2 license). First generation Graph Databases lack the features that Big Data demands: multi-master replication, sharding and more flexibility for modern complex use cases.

순수 자바로 만들어진 Graph/Document DB. 서버/임베디드 모두 가능. NoSQL 계의 MySQL 같은 존재임.
Graph DB는 NoSQL 중에 Relational Schema를 지원하기 때문에 기존 SQL DB와 유사하게 사용 가능한 장점이 있다.
리플리케이션 및 셰딩이 지원되기 때문에 스케일링이 가능하면서도 Apache License 2.0으로 기업에서도 무료로 사용 가능.
자바를 사용하는 유명 기업에서 채용되기도 하였으며, 유료인 Enterprise Edition은 엔터프라이즈에 필요한 기능을 사용 가능. (개발/테스트 목적으로 무료로 사용가능)

3. Neo4j

Neo4j is used by thousands of organizations, including 50+ of the Global 2000, in mission-critical production applications. Developed by the inventors of the modern graph database, Neo4j is the only graph database on…

순수 자바로 만들어진 Graph DB로 OrientDB와 쌍벽을 이루고 있으나 우세. eBay나 National Geographic 등 세계 유명 기업에서 사랑받는 DB.
Graph DB는 NoSQL 중에 Relational Schema를 지원하기 때문에 기존 SQL DB와 유사하게 사용 가능한 장점이 있다.
리플리케이션 및 셰딩이 지원되기 때문에 스케일링이 가능한데 라이선스가 GPLv3 라 기업의 경우 내부시스템은 무료로 쓸 수 있으나 재배포 판매 시 소스 공개하던가 사던가 해야 함.
유료인 Enterprise Edition은 엔터프라이즈에 필요한 기능을 사용 가능. (30일 체험 사용 가능)

4. Titan

Titan is a scalable graph database optimized for storing and querying graphs containing hundreds of billions of vertices and edges distributed across a multi-machine cluster. Titan is a transactional database that can support thousands of concurrent users executing complex graph traversals in real time.

빅데이터를 위해 태어난 자바 기반의 Graph DB. 다른 NoSQL DB와 연동하는 기능이 특징.
Graph DB는 NoSQL 중에 Relational Schema를 지원하기 때문에 기존 SQL DB와 유사하게 사용 가능한 장점이 있다.
빅데이터 위주의 스케일링에서 강점이 있으며, Apache License 2.0이기 때문에 기업에서도 부담없이 사용 가능.

5. iBoxDB

iBoxDB is a fast transactional table style document NoSQL Application Database, easily store, process objects and documents, traditional table with unstructured data, zero configuration, pure JAVA and .NET engines, no dependencies.

iBoxDB has a well designed interface with great performance and capability for agile development, you can focus on the applications. It can embed into an application and deploy on mobiles, desktops, servers, then help designers to persist objects and documents thread-safely with transaction support.

.NET 과 Java 둘 다 품은 (그것도 IKVM도 아니고 독립적으로 각각 엔진 개발) 특이한 키값 기반 NoSQL DB.
.NET은 2 이상, Java는 6 이상이면 가능. 라이선스는 걍 무료. 오픈소스는 아님 (자바는 오픈되었으나 닷넷만 클로즈드)

6. JasDB

JasDB was designed with easy of use and minimal configuration in mind. JasDB can be installed and configured in almost no time at all. Use JasDB as an embedded DB inside your JVM or you can use it to store your unstructured data in JSON format. If you want to scale JasDB, simply run and use it through the REST webservice.

순수 자바로 만들어진 Document DB. REST 내장으로 서버로도 사용 가능. JSON 형식으로 저장하는 것이 특징.
안드로이드도 지원하며, MIT X11 License로 기업에서도 부담없이 사용 가능

… 자바로 만든 NoSQL DB 드럽게 많아서 더이상 나열 못하겠다.
NoSQL DB를 전문적으로 모은 사이트가 있으니 어느 언어 개발하던 상관없이 부족함을 채우고 싶다면 여기로 가서
http://nosql-database.org/
Key-Value, Document, Graph, Column 등 다양한 DB 종류 구분이 가능하다. 하지만 지원되는 언어는 나도 모르니 해당 공식 사이트 가서 확인하라.

composite / 2015년 6월 29일 / Piss Development / 0 Comments

composite / 2015년 6월 25일 / Piss Development / 0 Comments