VB.NET2011.09.08 16:42
iBatis.net 에서 쿼리 호출을 할때 Mapper.Instance().QueryForList(), Mapper.Instance().QueryForObject() 로 호출을 합니다.

일반적인 예제에는 파라메타 하나 혹은 두개정도로 많이 표현하는데요, 실제 업무에 사용되는 SP는 파라메타가 적게는 한개 부터 많게는 10개 이상도 있을수 있습니다.

이 파라메타를 전달하기가 쉽지 않은데요, 아래 함수로 만들어서 넘기면 보다 쉽게 처리할수 있습니다.

호출 방식은 ...QueryForList("sp명", MakeMappedParams(new { seq = seq, ty_cd = ty_cd, sort_cd = sort_cd }));

이렇게 됩니다. 그러면 앞에서 설명한 DAO 패턴으로 봤을때 실제 DAO객체에서 생성될 함수(다양한 파마메타)에 맞게 원하는 파라메타를 넘기면 됩니다.

        public Hashtable MakeMappedParams(object objParams)
        {
            Hashtable htResult = new Hashtable();
 
            Type t = objParams.GetType();
            foreach (PropertyInfo info in t.GetProperties())
            {
                htResult.Add(info.Name, (info.GetValue(objParams, null) == null ? "" : info.GetValue(objParams, null).ToString()));
            }
            return htResult;
        }
Posted by dotnetpower

댓글을 달아 주세요

  1. 감사합니다. 예전에 보고선 아무 생각없이 쓰다가 이번에 저도 블로그에 몇개 끄적거리다가 감사했던 기억이 나 찾아오게 되었습니다.
    블로그에 주소로 남겨도 될까요?

    2016.08.30 18:27 신고 [ ADDR : EDIT/ DEL : REPLY ]

VB.NET2011.09.08 16:41

iBatis.net 에서 데이터 반환할때 QueryForObject, QueryForList 두가지 방식으로 반환을 하게 되는데, 보통 MSSQL SP 로 만들어진 비지니스 로직은 다중 결과셋을 반환할때가 많습니다.

아래 클래스는 제가 만들어본 클래스 입니다. 언어가 C# 이죠? ^^;

사용법은 다음과 같습니다.

IList resultset = (IList)Mapper.Instance().QueryForList(...)
ListSmart result = (ListSmart)(ArrayList)resultset; 
으로 캐스팅을 하게 되면 다중 결과셋이 같은 형식의 클래스로 묶입니다.
    /// <summary>
    /// iBatis 에서 반환된 1차원 리스트를 같은 데이터 타입끼리 묶어서 2차원 리스트로 반환(캐스팅 사용)
    /// </summary>
    public class ListSmart : IListICollection
    {
        internal List<object> Items = null;
 
        //리스트 갯수 반환
        public int Count { getset; }
        public string Test { getset; }
        public ListSmart(IList currentList)
        {
            Items = new List<object>();
            List<object> subList = null;
            Type oldType = null;
 
            foreach (object o in currentList)
            {
                Type t = o.GetType();
                if (t.Name != "Int32" && t.Name != "String"//숫자, 문자형 이외 추가될 타입은 여기에 추가
                {
                    if (oldType != t)
                    {
                        if (subList != null)
                        {
                            Items.Add(subList);
                            subList = null;
                        }
                        oldType = t;
                        subList = new List<object>();
                        subList.Add(o);
                    }
                    else
                    {
                        if (subList.Count > 0)
                        {
                            subList.Add(o);
                        }
                        else
                        {
                            Items.Add(o);
                        }
                    }
                }
                else
                {
                    Items.Add(o);
                }
 
            }
 
            if (subList != null && subList.Count > 0) Items.Add(subList);
 
            this.Count = Items.Count;
 
        }
       
        public static explicit operator ListSmart(List<object> obj)
        {
            return new ListSmart(obj);
        }
 
 
        public static explicit operator ListSmart(ArrayList obj)
        {
            List<object> lstResult = new List<object>();
 
            foreach (object o in obj)
            {
                lstResult.Add(o);
            }
 
            return new ListSmart(lstResult);
        }
 
 
        #region IList 멤버
 
        public int Add(object value)
        {
            this.Items.Add(value);
            return this.Count;
        }
 
        public void Clear()
        {
            this.Items.Clear();
        }
 
        public bool Contains(object value)
        {
            return this.Items.Contains(value);
        }
 
        public int IndexOf(object value)
        {
            return this.Items.IndexOf(value);
        }
 
        public void Insert(int index, object value)
        {
            this.Items.Insert(index, value);
        }
 
        public bool IsFixedSize
        {
            get { return false; }
        }
 
        public bool IsReadOnly
        {
            get { return false; }
        }
 
        public void Remove(object value)
        {
            this.Items.Remove(value);
        }
 
        public void RemoveAt(int index)
        {
            this.Items.RemoveAt(index);
        }
 
        public object this[int index]
        {
            get
            {
                return this.Items[index];
            }
            set
            {
                this.Items[index] = value;
            }
        }
 
        #endregion
 
        #region ICollection 멤버
 
        public void CopyTo(Array array, int index)
        {
            throw new NotImplementedException();
        }
 
        public bool IsSynchronized
        {
            get { throw new NotImplementedException(); }
        }
 
        public object SyncRoot
        {
            get { throw new NotImplementedException(); }
        }
 
        #endregion
 
        #region IEnumerable 멤버
 
        public IEnumerator GetEnumerator()
        {
            return (IEnumerator)this;
        }
 
        #endregion
    }
Posted by dotnetpower

댓글을 달아 주세요

VB.NET2011.09.08 16:39


DAO 패턴이란 Data Access Object 를 Factory 패턴화 시키는것으로써, 비즈니스 로직을 컴퍼넌트화 하기 좋은 방법입니다.

위키피디아의 정의에 따르면, DAO (Data Access Objects)는 객체 지향적 설계 패턴의 일종입니다. DAO는 어플리케이션에 대하여 하나 이상의 데이터 저장 장치 혹은 관련 소프트웨어에 대한 공통적인 인터페이스를 제공하는 컴포넌트를 의미합니다.

즉, 애플리케이션에 대해서는 일관성 있는 데이터 접근을 확보해주는 것이지요.

DAO를 활용하면 물리적인 저장 장치가 파일에서 관계형 데이터페이스로 변화하더라도 애플리케이션이 영향을 덜 받도록 해줍니다. 물리적인 저장은 모두 관계형 데이터베이스를 활용하는 경우에도 제품의 종류나 데이터 접근 오퍼레이션(CRUD 작업)을 돕는 솔루션을 활용에 따라서 실제 구현은 많이 달라지게 됩니다. DAO와 같은 공통적인 접근 인터페이스를 두지 않는다면, RDBMS 제품이나 활용 솔루션에 변화가 생길 때마다 애플리케이션에도 변경이 필요하게 되니 주의 하여야 합니다.

DAO 패턴에서는 크게 네가지 레이어로 나누게 됩니다.

BusinessObject
BusinessObject 객체는 데이터를 요구하는 클라이언트를 나타낸다. BusinessObject 객체는 데이터 원본에 접근하여 데이터를 얻거나 저장하기를 요구합니다. 일반적으로 서비스 레이어의 객체로 구현하거나, 도메인 객체로 구현합니다.

DataAccessObject
DataAccessObject 객체는 DAO 패턴의 핵심이라고 할수 있습니다. 기반을 이루는 데이터 접근 구현을 추상화시켜서  BusinessObject 객체가 구체적인 데이터 원본을 고려하지 않고도 접근할 수 있게 합니다. 또한, BusinessObject 객체는 DataAccessObject 객체에게 데이터의 로딩 및 저장을 위임할수 있습니다.

DataSource
데이터 원본에 대한 구현을 나타냅니다. 데이터 원본은 RDBMS, OODBMS, XML 저장소, 일반 파일 시스템 등의 데이터베이스입니다.

TransferObject
데이터를 운반하는 객체를 말합니다. DTO 라고도 합니다. DataAccessObject 객체는 BusinessObject 객체에게 데이터를 전달하거나 수정을 위해 데이터를 받기 위해 TransferObject 객체를 사용합니다. 서비스 레이어 중심으로 구현을 하는 경우는 대부분의 도메인 객체가 TransferObject 역할을 합니다.

아래 다이어그램은 Core J2EE 패턴 카다로그(http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html) 에서 가져왔습니다. 다이어그램을 보시면 흐름을 알기 쉬울것 같습니다.



사실 DAO 패턴이라는건 JAVA 쪽에서 개념이 정립되었습니다.
MS쪽에서는 CBD 개발 방법론이라고 하죠. 사실 CBD와 비슷하면서도 다른게 DAO 패턴입니다.

Posted by dotnetpower

댓글을 달아 주세요

Windows Phone 72010.10.28 10:05

윈폰7으로 얼마나 쉽게 트위터 타임라인을 가져올수 있는지 예제를 만들어봤습니다.

Scott Gu 블로그를 참조 했습니다. 원문 : http://weblogs.asp.net/scottgu/archive/2010/03/18/building-a-windows-phone-7-twitter-application-using-silverlight.aspx

환경 설정은 이전 포스팅을 참고 하시기 바랍니다. : Windows Phone 7 Development with VB - Hello World

Visual Studio 2010 을 실행하고 새 프로젝트를 선택합니다.

프로젝트 템플릿에서 Windows Phone Application 을 선택 합니다. 프로젝트 명은 VBTwitter 라고 하였습니다.


StackPanel에 있는 텍스트를 보기 좋게 변경하고, Content Panel에 TextBlock, TextBox, Button 하나씩 두었습니다.
아랫쪽에는 트위터 타임라인을 가져오기 위한 ListBox 를 하나 두었구요.


XAML 에서는 컨트롤별 템플릿이 존재 합니다. 원하는 모양을 마음데로 바꿀수 있지만 우선 다음과 같이 입력 합니다.

이 상태에서 버튼을 더블클릭 하면 소스 편집창이 나타납니다.

이전 블로그 윈도우 폰의 어플리케이션 플랫폼에 대하여. 에 언급한 내용처럼 Silverlight 는 이벤트 드리븐 형태의 개발을 할수 있습니다. 지금처럼 컨트롤을 클릭했을때에 대한 상황에 대처하는 개발 방법을 이벤트 드리븐 이라고 합니다. ;)

자.. 생각해 보면 버튼을 클릭했을때 어떤 액션을 취해야 할까요?

통신이 가능한 어떤 클래스를 이용하여 트위터 특정 URL 에 접속해서 XML 을 받아오는것이죠? 요즘 대세는 JSON 이긴 합니다만, 그냥 XML 로 해 보겠습니다. JSON으로 하시려면 아래 나올 주소에 .xml 대신에 .json 으로 하시면 됩니다. :)

제가 개발한 오픈API도 마찬가지이죠.. 곧 오픈 될테니 기대하세요 ㅎㅎ 인크루트 인맥 Open API 입니다. ^^; 에고 숙쓰러워라...

버튼클릭 이벤트에 대한 코드를 다음처럼 합니다. 한줄한줄 주석을 달아놓았습니다.

보시면 DownloadStringAsync() 라는 메서드가 있습니다. 실버라이트에서 비동기 호출에서 자주 사용되는 메서드 입니다.
http://msdn.microsoft.com/ko-kr/library/ms144203(VS.95).aspx 문서를 보시면 더 도움이 되실듯 합니다.

앗!! 그런데 AddHandler 에 파란 밑줄이 그어져 있죠? 그건 twitter_DownloadStringCompleted 메서드가 생성 되지 않아서 입니다.  해당 메소드를 생성하기 전에 Linq 로 데이터 파싱할 예정이므로 참조 추가를 합니다.

메뉴-프로젝트-참조추가 하시고, 다음처럼 System.Xml.Linq 를 추가 합니다.


추가 하고, 해당 네임스페이스를 사용하려면 임포트 해 줘야 좋겠죠? 소스 제일상단 그러니까 Patial Public Class MainPage 보다 더 위에 Imports System.Xml.Linq 해 줍니다.

그럼 이번에는 이쁜 PONO(Plan Old .Net Object) 하나 만들어 봅시다. 제가 예전에는 VO(Value Object) 라고 언급했던.. 호칭이 뭐든 상관없지만 뭐.. MS Technical Article 에서는 대부분 PONO라 칭하여 저도 바꾸기로 했습니다. 귀가 얇아서... ㅎ


이 클래스는 새로운 클래스 파일에 작성해도 되고, 제일 아랫쪽에 작성해도 됩니다.
VS2010이 나오고 나서 Property 선언하기 편해져서 정말 좋습니다. C#에서 get; set;  하는것도 없고 그냥 이렇게 ㅎㅎ 예전에는 엄청 불편했습니다. 예전 포스팅  http://dotnetpower.tistory.com/48 에 언급한적이 있는데, 흠.. SyntaxHighlight 설정이 깨져서 화면이 이상하게 나오네요.. 조만간 잘 나오도록 고쳐놓겠습니다. ㅡㅡ;

그런 후에 twitter_DownloadStringCompleted 메서드를 만들어줍니다.

보통 C#을 많이 하시는데, VB는 문법적인 차이가 약간 있죠? :)

다 됐습니다. F5 를 쎄게 눌러서 실행해 봅시다. 아래와 같은 시작화면이 뜹니다. 가져오기 버튼을 누르면?



Wow~  어떠세요? 훌륭하지 않습니까?



윈폰만이 살길입니다. 윈폰을 합시다. ㅎㅎㅎ

행복한 개발자 되세요~ :)

twitter : http://twitter.com/dotnetpower
facebook : http://www.facebook.com/dotnetpower
인크루트인맥 : http://nugu.incruit.com/dotnetpower

Posted by dotnetpower

댓글을 달아 주세요

Windows Phone 72010.10.27 09:14

윈도우폰의 기본 플랫폼은 크게 두가지로 나눌수 있습니다.
실버라이트 프레임웍에서 이벤트 드리븐 형태의 어플리케이션과 XNA 프레임웍에서의 loop-based 의 게임 개발 형태.

우선 알아 두셔야 하는건, 실버라이트로의 개발인 경우는 복잡한 UI를 표현하기 위해서 XNA 보다 많은 리소스를 사용하지만, XNA 보다 직관적이고 개발하기가 용이합니다. 또한, 디자이너에게 XAML 를 받아서 그대로 사용할수 있는 장점이 있습니다. XNA의 경우는 게임개발에 최적화된 프레임웍으로써 좀더 세세한 그래칙처리, 사운드 처리등을 지원합니다.

문제는 XNA로 게임을 개발하려 할때 기존의 Native Code 는 사용할수 없는점이 큰 단점입니다. 모두 Managed Code로 재 작성을 해야합니다.!!!

윈도우 폰은 단순한 모바일이 아닙니다. N-Screen 을 위한 배경이 깔려있습니다. 클라우드를 통한 데이터 Exchange 를 반드시 염두 해 두셔야 합니다.

위 사진에서 보는바와 같이 모든 사용자 정보를 동기화 하여 언제 어디서는 같은 서비스를 이용할수 있도록 설계가 되어있습니다.


아키텍처

윈도우폰 어플리케이션 플랫폼은 크게 네가지로 구분할수 있습니다.

1. Runtime - On "Screen" : 실버라이트와 XNA 프레임웍이 풍부한 RIA 를 가능케 합니다.
2. Tools : 기존에 사용하던 Visual Studio 와 같이 접근성이 용이한 도구로 쉽게 개발을 할수 있습니다.
3. Cloud Services : 윈도우애저, XBox Live, 알림, 지역 서비스등의 다양한 플랫폼을 이용하여 다양한 웹서비스 개발이 용이합니다.
4. Portal Services : 개발자는 마켓플레이스에 등록하고 릴리즈 하여 수익을 창출할수 있습니다. 이점은 애플의 정책과 비슷합니다.


윈도우폰 개발 라이프사이클


윈도우폰 어플리케이션을 개발 후 배포는 다음과 같은 방식으로 이루어 집니다.

어플리케이션을 개발하여 판매할 경우 개인개발자는 $99 를 지불하고 개발자 등록을 하여야 합니다.
조금 비싼감이 있지만 이러한 라이프사이클에 투입되는 인건비라 생각하시면 되겠지요.. ^^;

개인적인 생각은 두가지 방법으로 해서 첫째는 등록비가 있는것이고, 둘째는 등록비는 없고 수익 쉐어 하는것도 괜찮을것 같습니다. 생각보다 가난한 개발자가 많아서요 ^^

이 아티클에서 가장 중요한점은 처음 언급했던 클라우드 기반아래 N-Screen 정책 입니다.

어플리케이션을 설계할때 반드시 생각 하셔서 좋은 어플리케이션을 개발하시기 바랍니다.
Posted by dotnetpower

댓글을 달아 주세요

VB.NET2010.10.20 16:22

RTOS 에서 반드시 필요한 프로세스 우선순위 프로그래밍 중 기본이 되는 부분입니다.

보통 긴 시간을 요구하는 배치성 프로그램일 경우에는 우선순위를 가장 낮게 해서 CPU에 부하를 안주게 되지만, 크리티컬한 프로그램인 경우는 우선순위를 조절할 필요성이 있습니다.

단, 주의해야 할점은 가능하면 이 부분은 손대지 않는점이 좋습니다.

이에 관련해 포스팅을 하는 이유는 이런 방법도 있다는걸 알려드리고자 포스팅을 하게 되었습니다.

우선 작업관리자를 실행해서 실행중인 프로세스에 오른쪽 클릭 해서 우선순위 설정을 눌러보면 다음처럼 우선순위가 나옵니다.


이러한 우선순위를 런타임 시작시에 미리 설정하는 방법은 다음과 같습니다.

우선 윈도우 폼 어플리케이션 프로젝트를 생성하고, Form1.Designer.vb 에서 InitializeComponent() 메서드에 형광펜으로 칠한 부분을 넣어보시고,

빌드 후 프로젝트 위치/bin/Debug 위치에 생성된 exe 를 실행해 보면 다음처럼 우선순위가 조정되어 있는걸 알수 있습니다.


폼에서 이러한 방식을 토대로, 클래스 생성할때에도 우선순위를 줄수 있습니다.
한번 해 보시지요!!


Posted by dotnetpower

댓글을 달아 주세요

Windows Phone 72010.10.15 13:33

윈도우 폰 7 개발은 VB, C# 모두 가능합니다.

우선은 개발툴을 설치를 해야 합니다.
http://msdn.microsoft.com/ko-kr/ff380145.aspx

설치는 제 에일리언웨어 노트북(Core i7-720Q, 4G Ram) 기준으로 30분 걸렸습니다.

설치하면 기본적으로 C# 기준으로 되어 있습니다.

VB가 되도록 하려면 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a808a69d-6119-47b7-b858-262be5c49915&displaylang=en 에서 VB for Winphone 도구슬 설치하면 됩니다.

VS 2010 을 실행하고, 새 프로젝트에서 Windows Phone Application 템플릿을 선택하고 확인을 누릅니다.

저는 MainPage.xaml 을 다음처럼 변경 하였습니다.

버튼 하나 놓고, Click Me 라고 변경하고, TextBlock 를 넣고 FontSize를 30 으로 줬습니다.

버튼을 더블클릭 하면 이벤트 처리 메서드가 생성되고, 소스 코드 화면으로 이동합니다.


이때 다음처럼. TextBlock1.Text = "Hello World~" 라고 넣어줍니다.

그리곤.. F5 를 과감하게 누릅니다.
다음처럼 Windows Phone Emulator 가 실행되면서



버튼을 클릭하면 다음처럼 코딩한 내용이 나오게 됩니다.



이처럼 비베따위로도 윈폰 쉽게 개발 가능합니다.

하나씩 해 보면서 계속 포스팅 하도록 하겠습니다.

제가 포스팅 하는 모든 내용은 비베따위를(http://www.mhvb.net) 에도 동시에 포스팅이 됩니다. :)




Posted by dotnetpower

댓글을 달아 주세요

  1. 비베따위를... 이라니. 너무 적나라해서 충격먹었네요. MS에서 소송이라도 거는거 아닌가요? :P
    그나저나. 윈폰 개발이 이렇게 쉬운지 완전 몰랐더랬습니다. 좋은 포스팅 감솨요~

    2011.04.04 10:23 [ ADDR : EDIT/ DEL : REPLY ]

기타2010.09.24 09:38
지금까지 먹어본 최고의 민물 매운탕을 소개 합니다. 제 블로그는 기술 위주의 블로그 인데, 너무 맛있는 숨어있는 맛집을 찾아서 소개 하게 되었습니다.!!!!!
안타깝게도 서울근교가 아니라 울산입니다. 서울에서 찾아가서 드셔도 아깝지 않을만큼 맛있습니다. 택시타고 영생약국(태와로터리 인근) 가자고 하면 갑니다. ^^

울산 사람들이라면 대부분 아는 영생약국 뒷편에 있고, 주 메뉴는 참게와 빠가사리 입니다.

너무 맛있어서, 손님들이 나갈때 사장님 어깨를 주물러 주며 너무 잘 먹고 간다고 하는 사람들도 있네요..
얼마나 맛있길래 그런지 한번 먹어봤습니다.















4인 기준이면 대(大)자를 시켜야 하지만 중(中)자를 시켰습니다. 기본으로 깔리는 반찬만 7가지가 넘고, 하나하나 너무 맛있습니다. 특히 김치가 예술이더라구요..


보글보글 끓이면서 먹음직한 참게 매운탕.


다리 하나 잡아서 쩝~


식당 내부 주방쪽. 사장님 모습 :) 테이블은 9개 정도 되는것 같습니다.

참게는 사장님이 직접 섬진강쪽에서 살아있는 참게를 그대로 사 오신답니다. 수족관도 찍었는데.. 아랫쪽에 넣을께요..
현수막에는 "감칠맛 나고 담백한 참게는 임금님 수라상에 올렸을 만큼 최고급 식품으로 전해오고 있으며 참게는 필수 아미노산이 비교적 고르게 함류되어 있으므로 발육기 어린이나 노약자에게 좋은 식품 이므로 영양가를 챙기는 기회가 되었으면 합니다." 라고 적혀있네요..



참게 집게발이 너무 커서 좀 지저분하지만 숟가락이랑 비교 샷 찍어봤습니다. 근데 이 집게발 말곤 다른건 보통이였어요.


다 먹고 나서 껍데기에 밥 비벼서 ㅎㅎ 이게 바로 밥도둑이죠..
꽃게 보다 훨씬 맛있습니다. 꽃게에서는 맛보지 못한 음... 달걀 노른자가 약간 들어간 느낌이 드는 맛!! 정말 강추!!!


저희는 참게매운탕 중(中)자를 먹었는데, 다음에는 참게와 빠가사리가 환상의 궁합이니 꼭 먹어보라고 합니다.
정말 강추 합니다. 제가 사진을 찍어서 인터넷에 올린다고 했더니 인터넷, 트위터에서 보고 온 사람이라고 말하면 소주, 음료 1병 무료로 주신다고 합니다. 가셔서 꼭 말씀해 주세요..


먹고 나와서 참게를 찍어 봤습니다. 아이폰으로 찍어서 잘 나오지 않았지만, 새끼참게 는 털이 없는데, 큰 참게는 집게발에 털이 달린게 신기하더군요!!!



이 장소를 Daum지도에서 확인해보세요.
울산광역시 남구 신정3동
도움말 Daum 지도
Posted by dotnetpower

댓글을 달아 주세요

Think about it.2010.08.27 14:03

소셜네트워킹 서비스를 개발하면서 여러가지 자료를 많이 찾아 봅니다. 


얼마전 가장 가까운 사람에게서 SNS에 미쳤다 라는 소리를 들었습니다. 미친게 아니라 당연한거라고 생각했고, 그 말을 한 사람이 지금 트위터와 페이스북을 자유롭게 쓰고 있습니다. 


왜 느닷없이 소셜네트워킹 서비스라는게 필요하게 되었을까요? 그리고, 소셜네트워킹 서비스를 사용하면서 달라진 라이프스타일이 무엇일까요? 


저는 요즘 이런생각을 합니다. 인터넷이라는게 생겼을때 이걸로 무엇을 할수 있을까? 그때는 인터넷 자체를 모뎀으로 해야 하니, 인터넷 사용료가 나갔습니다. 그때 홈페이지의 가장 이슈는 이미지 사이즈 줄이고, 텍스트도 필요한것만 나오게 하는것이였죠. 점차 국내 인터넷 환경이 좋아지면서 전용선이 설치가 되고, 인터넷 컨텐츠들이 풍부해 졌습니다. 게다가 매크로미디어 플래쉬가 인터넷의 환경을 확 뒤집어 놨죠. 하지만 한계가 있습니다. 플래쉬로 만든 컨텐츠는 검색이 되지 않는다는 점입니다.


어떤 에이젼시에서는 웹사이트를 플래쉬로만 만드는걸 자랑하는걸 봤는데.. 정말 아니다 싶었습니다. 


인터넷은 모든 사람이 평등하게 어떠한 정보를 주고 받을수 있는 공간입니다. 하루에도 수백억개의 컨텐츠가 쏟아져 나오고 필요한 정보를 찾기가 점점 어려워 지고 있었습니다. 


그때 구글에서 새로운 검색방법론을 내놓았지요. 검색어가 많이 있는 문서의 가치 보다 인터넷의 핵심인 하이퍼텍스트가 서로 많이 엮여져 있는 문서의 가치가 높다는걸 알고 상위에 노출하였습니다. 결국 맞아 떨어졌습니다. 하지만 여기에 오류가 있습니다. 한상기교수님께서 주장하시는것 처럼 초등학생이 검색한 결과와 나의 검색 결과가 같다는건 나에대한 모독이다 라고.. 


"영화를 검색하거나 여행지를 검색해도 나와 소셜 서클(Circle)로 연결된, 소셜 그래프에 결합된 나의 온라인 친구들의 이야기가 더 흥미롭고 때로는 유익한 정보를 담고 있다. 왜냐면 그들의 취향과 글의 가치를 내가 알고 있기 때문이다. 일반 정보나 지식인 정보는 내게는 그저 시간나면 볼 정도의 부차적인 정보일 뿐이다. 네이버 영화의 별점은 나에게 아무 의미 없는 데이타이다. 거기에는 내가 아는 사람이 없기 때문이다. 나는 내 친구의 별점을 알고 싶을 뿐이다."
  - “소셜웹의 핵심: 프로파일과 소셜 그래프” 


맞을수도 있고, 틀릴수도 있는것 같습니다. 네이버 별점에 대해 부정적인 생각을 가지고 계신다고 하셨는데, 제 생각은 좀 다릅니다. 초등학생이 되어서 이제 막 친구를 알고 싶어하는 아이가 인터넷에서 새로나온 만화영화를 보고 싶어서 검색을 했는데, 네이버 별점은 아주 도움이 되겠지요. 


인터넷이라는걸 당연하게 사용하는 지금 세대는 지난 10여년간 인터넷에 흔적을 많이 남겨놓았고, 오프라인 인맥도 많아졌습니다. 우리들에게는 소셜네트워킹이 반드시 필요하게 되었습니다. 수백억개의 문서중에 찾는 내용이 잘 찾아지면 좋겠지만, 해당 문야 전문가가 언급해준 내용을 더 신뢰하게 되겠죠. 


네트웍 속도가 빨라지면서 인터넷의 컨텐츠는 풍부해 집니다. 이제는 모바일 입니다. 스마트폰에서는 소셜네트워킹을 사용하게 됩니다. 예로, 이전에는 친구에게 연락을 할때 전화나 문자로 연락했습니다. 지금은 스마트폰으로 페이스북에 글을 남기거나 인크루트인맥에 글을 남기면 아이폰의 Push 서비스로 마치 문자처럼 날라옵니다. 이건 무료입니다. 문자는 건당 과금이 되지만 Wifi 환경에서의 이러한 액션은 무료 입니다. 또, 페이스북을 기반으로 사용하는 Vonage Free Talk 이라는 앱을 통해서 Wifi 기반에서 Facebook 친구에게 무료전화를 할수 있습니다.


 소셜네트워킹을 하면 이제 전화를 무료로 쓸수 있습니다. 


한국인들은 자신의 정보를 숨기려는 성향이 강합니다. 정부에서 조차 인터넷에서 일어나는 일들을 감시하고 있습니다. 정부에서 감시하니 숨기려고 합니다. 하지만 떳떳하게 나를 알리고 해서는 안되는말(악플) 하면 좋은말을 떳떳하게 해서 인터넷에서 나의 존재를 퍼뜨려야 할것입니다. 


소셜네트워킹에서의 프로파일은 필수입니다. 나의 정보를 숨기고 싶으면 앞으로 인터넷에서 즐길수 있는 정보가 점점 줄어들것입니다. 제가 쓰고 있는 인터넷의 아이디는 닷넷파워(dotnetpower) 입니다. 적어도 저을 아는 사람들은 제가 개발관련 이야기를 하면 관심을 가지고 보는것 같습니다. 또 차니님을 아는 사람들은 그분이 웹2.0, 앞으로의 웹, 웹표준 과 같은 글을 적으면 관심깊게 봅니다. 


이러한 모든 활동이 소셜네트워킹입니다. 서로 인지를 하는 입장에서 서로를 연결시켜주고 쉽게 정보교환을 하게 해 주는것이 페이스북, 트위터, 인크루트인맥 입니다. 


결론적으로 소셜네트워킹은
필수입니다.


http://nugu.incruit.com/dotnetpower

Posted by dotnetpower

댓글을 달아 주세요

기타2010.08.16 18:31

4대 브라우저(IE8, Forefox, Chrome, Safari)에서 잘 동작하는 코드가 IE6에서만 안되는 경우가 생겨서 힘들게 찾아서 해결 했습니다.

var objMovie = "<object ~~ 생략 ~~>"; // 이 부분은 유튜브에서 동영상 퍼가기를 했을때 나오는 코드 입니다.

document.getElementById('divPlayer').innerHTML = objMovie;

이렇게 하면 ie6을 제외한 다른 브라우저에서는 모두 잘 동작합니다.

하지만 ie6에서 원활한 동작을 하게 하려면 다음과 같이 해 주어야 합니다.

//fix ie6 bug
 var fixEmbeddedVideo = function(embedCode) {
  if(embedCode && embedCode.toLowerCase().indexOf('classid') == -1) {
   var objPos = embedCode.toLowerCase().indexOf('object ') + 'object '.length;
   return embedCode.substr(0, objPos) + 'classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ' + embedCode.substr(objPos);
  } else {
   return embedCode;
  }
 }

document.getElementById('divPlayer').innerHTML = fixEmbeddedVideo(objMovie);

Posted by dotnetpower
TAG IE6

댓글을 달아 주세요