분류없음 | Posted by ToString 2009/07/02 00:26

URI와 URL의 차이

Uniform Resource Identifier (URI) consists of a string of characters used to identify or name a resource on the Internet
http://en.wikipedia.org/wiki/URI

URI는 인터넷 상의 자원을 식별하기 위한 문자열의 구성쯤으로 해석 될 수 있겠다.

http://en.wikipedia.org/wiki/URL
URI의 한 형태인 URL은 인터넷 상의 자원 위치를 나타낸다.

URL는 URI의 한 형태로, 바꿔 말하면 URI는 URL을 포함 하는 개념이다.
(URI > URL)

인터넷 상의 자원의 위치와 식별자.
언듯 보면 같은 것을 의미하는 듯 하다.
하지만 '자원의 위치'라는 것은 결국은 '하나의 파일 위치'를 나타내는 것임을 명심하자.

http://img0.gmodules.com/ig/images/korea/logo.gif
이와 같은 형식은 logo.gif라는 인터넷상의 자원 위치를 의미 한다.
이는 URI이면서도 URL라고 말할 수 있다.

다음은 어떠한가.
http://endic.naver.com/endic.nhn?docid=1232950
http://endic.naver.com/란 서버에 위치한 endic.nhn파일은 query string인 docid의 값에 따라 여러가지 결과를 나타낸다.

여기서 URL은 endic.nhn의 위치를 표기한 http://endic.naver.com/endic.nhn 까지이다.
내가 원하는 정보에 도달 하기위해서는 ?docid=1232950라는 식별자(Identifier)가 필요한 것이다.

결국 위의 http://endic.naver.com/endic.nhn?docid=1232950 주소는 URI이긴 하지만 URL은 아니다.

또다른 예를 들면,
http://endic.naver.com/endic.nhn?docid=1232950
http://endic.naver.com/endic.nhn?docid=1232690
위 두 주소는 같은 URL이고 다른 URI라고 할 수 있다.
(이건 좀 억지긴 하지만 개념을 이해하기 바란다.)


결론: 잘 모르겠으면 URI라고 해라.

모 님의 블러그에서

URL(Uniform Resource Locator)은 웹 상에서 서비스를 제공하는 각 서버들에 있는 파일들의 위치를 표시하기 위한 것으로 접속할 서비스의 종류,도메인명,파일의 위치 등을 포함한다.URI(Uniform Resource Identifier)는 존재하는 자원을 식별하기 위한 일반적인 식별자를 규정하기 위한 것으로 URL에서 HTTP프로토콜,호스트명,port 번호를 제외한 것이다.
예를들어 http://127.0.0.1:8180/study/ch04/requestTest1.jsp에서 URL은 http://127.0.0.1:8180/study/ch04/requestTest1.jsp 가 되고 study/ch04/requestTest1.jsp은 URI가 된다.

라는 글을 보고 하도 어의가 없어서 정리 했음을 밝힘. ㅡ_ㅡ);

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/07/01 18:49

Document-Oriented DB가 뭥미?

Oracle이나 Ms SqlServer같은 RDBMS는 대부분 많이들 알고 있겠지만
Document Oriented Database라는 개념은 생소한 분이 많을 것이다.
작년에 처음 Apache 재단의 couchDB를 접하면서 Document-Oriented라는 개념을 처음 접하게 되었는데,
그때 당시 인큐베이팅 프로젝트 이었기 때문에 영글 때(?)만 기다리고 있었더랜다.

그러다 우연히 웹서핑 중 mongoDB라는 녀석을 접했는데..
어랏.. 이녀석도 Document-Oriented DB...



요새 웹 애플리케이션쪽에 심플함을 장점으로 하는 RESTful이 인기를 얻더니,
Document-Oriented DB프로젝트들이 덩달아 인기를 얻나 보다.
이제쯤 Document-Oriented DB를 한 번 정리해줘야 할 필요성을 느낀다.

그렇다면, Document-Oriented DB란 무엇인가..
여기서 말하는 Document란 쉽게 말해 JSON객체를 떠올리면 딱이다.

var doc = {
    title: "글 제목이야"
    body: "이 쪽은 본문이구..."
    create_on: "2009-07-01"
}

이런 형식을 그대로 DB에 집어 넣는다.
기존에 RDBMS를 다루던 사람이라면 Table을 Collection에, Record를 Document에 대응해 생각하면 좀 더 빨리 이해가 될 것 같다.

RDBMS랑 다른게 없어 보이는데?

RDBMS에서는 위와 같은 데이터를 집어 넣기 위해서는 미리 구성되어 있는 테이블이 있어야 하고
title, body, create_on 이라는 필드가 있어야 한다.

하지만 Document-Oriented DB에서 schema-free개념은 그런 정해져 있는 테이블과 필드가 없다.
최초의 문서를 insert하면 그 문서 schema에 해당하는 collection이 자동으로 만들어진다.
그렇기 때문에 create table, drop table 같은 DDL이 없다.

더더욱 황당한 것은 DML(select, insert, update, delete)까지 없다..!! @ㅁ@

DBA가 보면 "이거 뭔 잡.. 우짜라고!!" 소리가 절로 나올터이다.

하지만 애플리케이션 개발자 입장은 어떨까?
Document-Oriented DB들은 DML 대신에 각 언어별로 API를 제공하고 있다.
언어를 불문하고 일반적이 객체를 다루는 문제라 배우기도 무척 간단하다.
(아쉽게도 mongoDB의 경우 현재까지는 .NET의 API는 제공 하지 않고 있지만,
Java, Python, Ruby, PHP 등의 왠만한 언어는 다 지원되고 있는 것으로 보아 조망간 .NET용도 나올 것으로 예상된다.)



간단하게 자바용으로 제작된 API의 Tutorial을 한 번 보면 금방 쉽게 이해가 갈 것이다.
잠깐 보고 오길 바란다.
(나 .NET개발자야... 하며 떨고 있지 말고 냉큼 눌러보자!)
http://www.mongodb.org/display/DOCS/Java+Tutorial

감상이 어떠한가?

Java 개발자: "이거 Hibernate를 써도 비슷하게 구현 가능한거 같은데?"
.NET 개발자: "ADO Entity Framework쓰면 됨."

맞다.
요새 Java고 .NET이고 너나 없는 DB Layer딴의 구성은 ORM이 유행이다.

하지만 드라군Document-Oriented DB가 출격하면 어떻게 될까?
Hibernate, ADO Entity Framework고 나발이고 다 필요 없어지는거다.

n-tier 로 구성된 프레임웍이라면 DB layer는 날로 먹고 들어갈 수 있는거다.
(극단적인 표현이긴 하다.. ^^;;; 위 두 프레임웍이 ORM만을 위해서만 있는 것은 아니니..)

couchDB의 경우는 여기서 한 발 더 나아가 설치시에 웹서버가 같이 설치 되어
Client와 HTTP로 통신하고 Data(Document)를 JSON으로 주고 받는다.

이거 뭔가 RESTful한 냄세가 나지 않나?
그렇다! 바로 그거다..!
couchDB를 쓰면 HTML과 Javascript만으로도 웹 애플리케이션 제작이 가능하다는 소리다.

Document-Oriented DB 를 사용함으로써 프로젝트가 얼마나 유연해지고
잔일손이 줄지 생각하는 것만으로도 짜랏하지 않은가?

애플리케이션 제작의 패러다임이 바뀌고 있다..!!!

Screenshot of CouchDB Futon

그렇다면 성능은?
http://www.snailinaturtleneck.com/blog/?p=74
여기서 보면 전반적으로 erlang으로 만들어진 couchDB보다는 C++로 제작된 mongoDB가 더 나은 성능을 보여주는데
mongoDB의 경우 100만건의 insert처리 시간은 약 18초 이다.

http://www.codeweblog.com/couchdb-vs-mysql-insert-performance-test-data-of-the-speed-test/
이곳에서는 couchDB와 open source DB의 대표주자 mysql의 성능 비교를 보여주는데..
그 결과는 참담하기 이를대 없다. ㅡ,.ㅡ;;

상황이 이쯤되니 Oracle같은 DB와의 비교는 무의미 하려나..
여튼 벤치마크 자료를 찾을 수가 없다.

아직은 couchDB나 mongoDB로 엔터프라이즈 프로젝트를 진행하기에는 성능상 이슈가 클 듯하다.
하지만 아직 이 두 젊은 DB의 버젼은 1.0에도 이르지 못했다.
이는 아직 못다 이룬 성능 향상이 많이 남아 있다는 말일게다.
또 과거에 성능때문에 주저 앉아 버렸던 프로젝트들이 하드웨어의 발전과 함께 빛을 보는 경우도 허다 하지 않은가..
본인은 이 두 DB들이 주는 제작의 편리함 때문에 그에 거는 기대가 사뭇 크다.

끝으로 실제로 RubyOnRails + mongoDB를 사용하여 만들었다는 국내 서비를 소개하며 갈무리 할까 한다.
혹 프로그램에 관심이 없더라도 야구에 관심히 있다면 한 번 찾아가보기 바란다.. ^^
http://basegoo.com/
저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/06/11 11:42

A guide to Silverlight 3 new features


마이크로 소프트에서 실버라이트의 프로그램 매니져를 맡고 있는 TIM
곧 나올 실버라이트 의 새 버젼 3에 대한 포괄적인 가이드를 제공 합니다.

저작자 표시

class LinqJoin

{

        public static void Main()

        {

               List<Item> list1 = new List<Item>();

               List<Item> list2 = new List<Item>();

 

               list1.Add(new Item("1", "LEE"));

               list1.Add(new Item("2", "KIM"));

               list1.Add(new Item("3", "PARK"));

 

               list2.Add(new Item("3", "PARK"));

               list2.Add(new Item("4", "KIL"));

               list2.Add(new Item("5", "GO"));

 

               var arr = (from r in list1

                                 join r2 in list2

                                      on r.Id equals r2.Id into rows

                                 from r3 in rows.DefaultIfEmpty(new Item(r.Id, ""))

                                 select new Item(r3.Id, r3.Name));

 

               arr.ToList().ForEach(

                       row => Console.WriteLine("{0} {1}", row.Id, row.Name)

               );

        }

}

 

위의 예제는 Left outer join 예제이다.

만일 Inner join 을 하고 싶다면 아래와 같이 한다.
(DefaultIfEmpty method를 생략한다.)

 

from r in list1

        join r2 in list2 on r.Id equals r2.Id into rows

        from r3 in rows

select new Item(r3.Id, r3.Name));

 

참고(MSDN)

Enumerable.GroupJoin

Enumerable.DefaultIfEmpty

 

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/05/06 13:19

Windows 7 RC버젼 사용자 공개

Windows 7 RC버젼이 일반에 공개 되었습니다.
아래 주소로 가보시면 다음화면과 같이 key와 함께 다운 받을 수 있습니다.



32bit 버젼: https://www.microsoft.com/betaexperience/productkeys/win7-rc-32/enus/
64bit 버젼: https://www.microsoft.com/betaexperience/productkeys/win7-rc-64/enus/

MSN로그인이 필요하므로 hotmail.com이나 live.com 아이디가 있어야 합니다.

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/04/15 02:25

Windows Vista에 Ruby on Rails 설치


운영체제를 Windows Vista로 바꾸고 Ruby를 설치 했는데 무엇때문인지 Rails가 설치 되질 않는다..

d:\ruby>gem install rails
ERROR:  While executing gem ... (Zlib::BufError)
    buffer error

결국 Rails gem의 source위치를 바꿈으로써 해결했다.
gem install rails --source http://gems.rubyonrails.org


PS. OneClickInstaller로 루비를 설치하신 분은 gem을 업데이트 해야 한다.
gem을 업데이트 하는 방법은 gem update --system 명령을 이용하거나,
http://rubyforge.org/frs/?group_id=126 에서 소스를 다운 받아 압축을 푼 후
ruby setup.rb 명령으로 gem update를 할 수 있다.
저작자 표시
구글이 운영하는 동영상 사이트인 YouTube는 국내의 인터넷 실명제 실시에 대해 거부.

얼마전에 중국이 티벳 소요사태 진압 동영상과 관련해 국가차원에서 유튜브를 차단했다.

인터넷이라는 범국가적인 통신망을 국가에서 차단해 버릴 수 있다는 것에 대해 
역시 공산국가가 국민에게 행사할 수 있는 힘은 대단해! 라고 느낌이었다.(완전 자유의 억압)


최근들어 민주주의 사회에서도 이런 성향은 보여 각종 세계 언론에서 놀림감이 되고 있는 한 나라가 있었으니..
바로 "대한민국".

각종 포탈에 대한 인터넷 실명제, 인터넷 모욕죄 도입, 국가의 사이트에 대한 폐쇄 여부결정권 등..
요즘들어 인터넷에 대한 국가의 영향력은 우리나라도 다른 공산국가 못지 않다.(ㅋㅋ)

이런 우리나라에서 유튜브에 인터넷 실명제를 지시 했는데..
구글의 대답이...
"그래? 그럼 늬네 쓰지마."
 
ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

유투브에서는 한국 접속 이용자들에게 동영상 업로드 및 댓글 쓰기에 금지가 걸렸단다.
아예 차단 된것은 아니고 국가 설정을 바꾸면 정상 이용을 할 수 있지만,
여하간 액면 적으로는 한국이 따 당한 것이다.

요즘 정부에서 하는 짓이 참 가관인데
이런 소식을 접하니 피해를 입은 당국 국민이면서도 이렇게 통쾌 할 수가 없다.
(멋찌다 구글)


인터넷이 진정한 힘을 낼 수 있는 것은 익명성이다.
집단 이기주의 속에서도 바른 소리를 낼 수 있게 하는 것이 익명성이고,
부적절한 무력 앞에서도 바른 소리를 낼 수 있는 것이 익명성 덕이다.

물론 그것에 대한 부작용으로 사기, 모욕 같은 피해를 입을 수도 있지만
그것은 인터넷이 잘못된 것이 아니라 사용자의 인성 문제인 것이다.

인터넷의 익명성을 보장하지 않는 것은 마치
불이 방화의 위험이 있고 전기는 감전의 위험이 있으니
음식을 날로 먹으라는 말과 같다.
 
칼을 들고 강도짓 하는 인간이 없도록 바른 인성교육을 해야지
칼쓰기를 금지한다는 말은 잘못된 말이지 않는가?


세계적으로 실명제를 실시해본적이 없는 구글에서 우리나의 정부명령에 대한 불복종이 어떤 결과로 나타날지 사뭇 흥미진진하다.

우리나라도 중국처럼 YouTube를 국가망에서 차단해 CNN에 보도되어 국제망신 당하게 되려나...
 
 
PS: 우리나라 포털들도 미국으로 본사를 옮겨가는게 낮지 않으려나.....

 
저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/01/28 14:33

게시물 코드에 색깔넣기(Code Coloring)

Visual Studio, Elipse에서 코드를 복사해서 MS Word에 붙여넣기 한 뒤에 그것을 다시 복사하면 클립보드에 html형태로 복사가 되어, wysiwyg게시판등에 붙여넣기 하면 코드의 색상과 들여쓰기가 그대로 반영되어서 글이 써진다.

IDE(복사) -> MS Word(붙여넣기, 복사) -> wysiwyg편집기(붙여넣기)

안타깝게도 NetBeans는 안되는구먼..






저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/01/28 13:08

ASP.NET MVC Framework RC1 Release.

Ruby라는 비주류 언어를 주류 언어로 끌어 올려낸 Ruby on Rails(ROR)라는 걸출한 프레임웍은
Ruby뿐만 아니라 다른 여러 언어들의 프레임웍에 파장을 미쳤다.

같은 스크립트류의 PHP에는 CakePHP라는 Framework이 생겼고,
Java진영에서는 아예 JRuby라는 Java VM에서 돌아가는 ruby를 만들어 rails를 사용 할 수 있게 했다.
.NET도 이런 인기를 비껴 갈 수 없었나본지 MS DLR에서 돌아가는 IronRuby를 지원하는가 싶더니,
기존 ASP.NET에서 Rails를 기본으로한 Framework을 만들었으니..
ASP.NET MVC Framework(이하 MVC)가 그것이다.

기존에 웹폼이 Control과 View가 모호했던 것에 반해 MVC에서는 Control에서 View를 컨트롤 하는 전형적인 MVC디자인 패턴을 구현 할 수 있도록 했다.

개인적으로 ROR을 접하고 나서는 ASP.NET WebForm구조가 참 답답하게 느껴졌었기 때문에,
MVC의 개발 소식이 참 반가웠다.

Beta때 부터 여러 문서들이 나와 있는 관계로 MVC에 대한 자세한 소개는 링크로 남긴다.


잡담: 기존에 MVC Design Pattern이라는 명칭이 있는데 ASP.NET MVC라고 이름을 만들어서 해깔리게 만든다. ASP.NET AJAX로 그러더니.. 프로젝트에 좀 더 멋드러진 이름이 붙으면 좋을텐데...
저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)
분류없음 | Posted by ToString 2009/01/26 21:22

Head First Software Development 리뷰


Head First Software Development(한빛 미디어)

즐겨찾는 MonaC님의 블러그 이벤트를 통해서 책을 한 권 얻게 되었다.
제목은 Head First Software Development.

세상에 바뀌지 않는 진리가 하나 있다.
"공짜는 없다!" ㅋ
책을 하나 얻는대신 꼭 해야하는 숙제가 그 책에 대한 리뷰다.
MonaC님의 말씀대로 'IT서적계의 만화책' 이니만큼 분량에 비해 내용은 그닥 많지 않으지라 진작에 다 읽었지만, 이런 저런 게으름을 피우다 이제야 숙제(?)를 하게 된다.

------------------------------------------------------------

Head First시리즈로는 두번째로 접하게 되는 책인데
처음 읽었던 Design Pattern에서 얻은게 많은지라, 개인적으로 좋아하는 IT서적 Brand이다.

책의 내용은 성공적은 소프트웨어 개발을 위해 도입할 수 있는 프로세스와 툴에 대한 맛배기 이다.
이 책은 하나의 프로젝트가 순조롭게 진행되어야 할 필요충분 조건을 두루두루 다루고 있다.
각각의 주제인 XP개발론, 좋은 설계, ANT와 SVN등의 개발을 돕는 툴들, TDD기법, 디버깅 기법등, 그 각각의 주제를 책으로 만들만큼 방대한 내용들 그 모두를 다루고 있다..!!
(이 모~~든것이 단돈 29,000원!!!)
그 내용이 방대한 만큼 각각의 내용이 깊지 못하다. 그러나~ 흔한 비유로 물고기를 잡아주기 보다는 잡는 법을 가르쳐 주는 책이다. 각각의 내용을 심도있게 공부하기 위해서 어떤 것들을 참고 해야 하는지 잘 가이드 해주고 있다.

이책의 최대 잠정은 가상의 프로젝트를 진행하면서 그에 직면하는 문제에 대해서 적절한 솔루션을 소개해 나간다는 것이다.(난 이때문에 First Head시리즈를 사랑한다.)

프로그램이라는것 자체가 문제해결의 과정이다. 이에 IT기술을 설명할 때 문제의 제시와 그에 대한 솔루션을 제시하는 방법만큼 와닫는 방법이 있을까?!

버젼관리가 뭔지도 모르는 초보 개발자에게 SVN이라는게 있는데 이렇게 이렇게 써.. 라고 설명해주면 대형 프로젝트를 경험해 보지 못한 개발자의 경우 그냥 크게 바뀌는게 있을 때 백업을 받아두는게 편하지.. 라고 생각하는 답답한 개발자 분명히 생긴다. 고백하건데 본인이 그랬다.(ㅋㅋ 혼자 개발 할 때 필요성을 몰랐다.. ^^;;) 이 책에서는 그렇게 획일적인 지식 전달 보다는 실제적으로 일어날만한 상황을 만들고 거기에 대한 솔루션을 제시함으로써 어떤 솔루션에 대한 이해와 더불어 필요성에 대해서 잘 설명해 주고 있다.
그런책들 많지 않냐고? 많다.
그런데 이 책은 유달리 더 이해가 쉽고 공감이 된다.
어려운 주재를 쉽게 전달하기 위해, 필자가 얼마나 많은 연구와 수고를 했는지 느껴지는 책이다.

책의 단점을 하나 뽑으라면 일부 내용이 공상과학(?) 이라는 점이다.
사용자 스토리와 태스크를 나누어 일정을 관리하는 방법을 제시한 부분이 책의 전반부에 있다. 물론 책에서 제시하는 방법이 이상향이긴 하지만, 본인이 접해왔던 프로젝트들을 돌이켜 보건데 적어도 한국에서는 가능한 방법 같지가 않다. 개발자로써 행복한 꿈을 꾸게 해주는 소설 같은 부분이랄까..^^;; 이 부분은 오히려 "도와주세요! 팀장이 됐어요(위키북스 - 신승환 저)" 라는 책이 좀 더 국내 사정에 맞는 방법을 제시하는 것 같다.(이 책도 MonaC님의 추천으로 접한 책ㅋ)

개발론의 대새는 XP와 TDD!!
국내에서 어느정도 이상의 규모를 가진 프로젝트를 진행해 본 사람이라면 대부분 IDE는 필수로 사용하고 있을 것이며, 그것의 명칭을 알든 모르든, IDE에서 제공하는 자동빌드 도구와 버젼 관리 프로그램은 대부분 경험 해 보았을 줄로 안다. 하지만 내가 알기론 XP나 TDD를 도입하는 프로젝트는 - 적어도 내가 알기로는 - 거의 없는 듯 하다. 평소에 개발론에 많은 관심을 가지고 있는터여서 익히 알고는 있었지만, 조금더 구체적이고 적절한 이용 방법을 알게 된것이 개인적으로는 소득이다. 그리고 공상과학이라고 폄하(?)하긴 했지만 이터레이션을 관리하는 부분도 참고해서 국내실정에 맞게 적절히 도입할 수 있는 내용이다.

하나의 소프트웨어를 성공적으로 만들어 내기 위해서 어떤것들이 필요한가?
를 고민해 보았거나, 혹은 고민해 본적이 없는, 그저 자기에게 주어진 코딩 업무에만 충실해온 프로그래머라면.. 그리고 실무를 접해보지 못한, 프로그램을 공부 하고 있는 학생에 꼭 추천해 주고 싶은 책이다.

저작자 표시
이올린에 북마크하기(0) 이올린에 추천하기(0)