[설문조사 사이트 테스트]
이름 :
점넷(.Net)
분류 전체보기 (176)
점넷공간 (38)
COMPUTER (1)
.NET (29)
DB (36)
SCRIPT (3)
MarkUp & CSS (3)
OS (7)
IT Story (52)
Information (7)
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
2008. 10. 21. 18:24
[DB]
[테이블 전체 복사 ]
SELECT
    *
INTO
    NewTable
FROM
    OldTable


[테이블 컬럼 일부 복사 ]
SELECT
    컬럼1
    , 컬럼2
    , 컬럼3
INTO
    NewTable
FROM
    OldTable


[설명]

OldTalbe의 테이블을 NewTable이라는 테이블 이름으로 복사
스키마와 데이터도 함께 복사됨
2008. 10. 9. 07:00

늘 바쁘다는 핑계로 포스팅을 한달이상 못한 것 같습니다.ㅜㅜ

실제 바쁜것두 있고 약간 게을러진것도 있고.. 에휴~

지난 시간에 언급만 하고 진행하지 못한 ViewState에 대해 이야기 해보려 합니다.

웹에서는 상태를 유지하기위한 여러가지 방법들을 사용합니다.

그 예로는 Application, Session, Cookie, ViewState 등등.. 이외에도 여러가지 방법들이 있습니다.

(김영욱님의 하기1, 하기2 를 참고하시기 바랍니다.)

 

이중에서 ViewState만 다루어보도록 하겠습니다. 이후 다른 상태유지에 대해서는 직접 알아보는 재미를 느껴보시기 바랍니다.^^

 

ViewState에 대해 언급하는 이유는 VisualStudio(이하 VS)에서 사용하는 서버 컨트롤 들은 기본적으로 상태유지를 위해 ViewState를 사용합니다.

 

사용자가 따로 설정하지 않아도 자체적으로 ViewState에 상태값을 저장해두었다가 불러 사용합니다. 이내용은 지난 시간의 이지 실행주기의 내용에 언급되어 있으니 참고하시면 좋을 듯 합니다.

컨트롤 속성에는 ViewSate를 사용하지 않는 옵션(EnableViewState)도 있으니 참고하시기 바랍니다.

 

상태유지란 의미를 모르시는 분들을 위해 간단하게 설명해드리겠습니다.

 

웹페이지는 기본적으로 HTML형식의 문서입니다.

입력을 위한 input태그 빼고는 대부분의 태그들은 표현을 위한 태그들이 대다수 입니다.

Input 태그 또한 새로고침등의 자기 자신을 다시 호출하는 경우에는 input 태그의 text타입에 있던 내용들도 사라지게 됩니다.

 

예제 1 )

<input id="Text1" type="text" />

<input id="Button1" type="button" value="button" />

 input 태그를 이용한 textbox“dnc”를 입력

 

새로 고침(F5)

 textbox에 “dnc”란 글자가 사라짐

 

그러나 서버 컨트롤은 앞에서 언급한 바와 같이 ViewState를 이용한 상태유지를 합니다.

서버컨트롤을 이용해서 예제 1과 같은 예제를 만들어 보겠습니다.

 

예제 2 )

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

<asp:Button ID="Button1" runat="server" Text="Button" />

 

 서버컨트롤 textbox“dnc”를 입력

 새로 고침(F5)

 textbox에 “dnc”란 글자가 사라짐

어라? 서버 컨트롤을 사용해도 다른 변화는 없습니다.

이게 어떻게 된 일일까요? 분명 앞에서는 서버컨트롤은 자체적으로 ViewState를 이용해서 상태유지를 한다고 말했었는데 거짓말을 한 것 일까요?

 

상태유지를 하지 못한 이유는 이전 포스팅의 페이지 실행 주기를 참고하시기 바랍니다.

페이지 실행 주기를 보게 되면 ViewState 복구와 저장을 하는 시점이 있습니다.

ViewState에 저장을 하기위해서는 실행주기를 거쳐야 한다는 말이 되겠죠?

그말은 서버에 갔다와야 한다. PostBack이 발생해야 한다는 말이 되겠습니다.

 

이번에는 예제 2 와 같지만 버튼을 한번눌러 PostBack을 일으켜 서버에 갔다온이후 새로고침을 해보겠습니다.

 

예제 3 )

 서버컨트롤 textbox“dnc”를 입력

 Button을 클릭 (페이지 실행주기가 실행)

 새로 고침(F5)

 textbox에 “dnc”란 글자가 존재함

 

그럼 html 컨트롤들은 Server 컨트롤들처럼 자체적으로 상태유지를 할 수 없는 것인가??

꼭 그렇진 않습니다. Html 컨트롤에 runat="server" 속성을 넣어주면 서버컨트롤처럼 사용할 수 있습니다.

 

지금까지는 컨트롤에서 ViewState를 사용하는 부분에 대해 이야기를 해보았습니다.

이번에는 사용자가 직접 ViewState를 사용하는 이야기를 해보도록 하죠^^

사용은 아주 간단합니다.

 

예제 4 )

// ViewState에 상태값 설정

ViewState["상태유지"] = "상태값";

// ViewState에서 상태값을 가져옴

string str상태유지 = (string)ViewState["상태유지"];

 

예제 4와 같은 형태로 ViewState에 데이터를 설정 및 가져올 수 있습니다.

하지만 보시는 것처럼 Boxing, UnBoxing이 발생하는걸 볼 수 있습니다.

Boxing, UnBoxing이 발생한다는 말은 부하가 심해진다는 말이죠

많이 사용하면 좋지 않다는 말입니다.

 

그리고 ViewState같은 경우 페이지에 input태그의 hidden 형태로 존재하기 때문에 서버와의 통신시 많은량의 데이터 전송이 발생하게 됩니다.

 

예제 5 )

페이지의 소스보기를 하면 다음과 같은 소스를 볼 수 있습니다.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUJMjY4MTkwNDYwZGQINdZC2Y34uVAOpUIXzxBu3ijnGA==" />

ViewState의 값들이 Base64()을 통해 인코딩을 해서 hidden형태로 관리하는걸 볼 수 있습니다.

페이지에 노출이 되기 때문에 보안에 아주 취약합니다. Base64로 인코딩을 하였어도 얼마든지 디코딩을 할 수 있기 때문입니다. 그리고 Base64로 인코딩을 하면서 기존의 값들보다 많은 문자열이 발생하는걸 볼 수 있습니다. ViewState를 많이 사용하면 할수록 서버와의 통신시 많은 데이터를 주고 받아야하는 부하를 가지게 됩니다.

 

이로서 ViewState에 대해 간략하게 알아보았습니다.

다른 상태 관리에 대해서도 꼭 알아보시기 바랍니다.

2008. 8. 21. 07:00

오늘은 ASP.NET 페이지 실행주기에 대해 알아 보겠습니다.

ASP.NET 페이지 실행주기?

페이지 실행주기?

실행주기?

주기?

 

과연 이게 무엇일까요?

먼저 주기란 무엇일까요?

 

네이버 사전을 찾아보았습니다.

진동현상에서 진동 중심 주위로 왕복운동이 한 번 이루어지거나 물리적인 값의 요동이 한 번 일어날 때까지 걸리는 시간을 말한다.

 

네이버 사전에서는 위와 같은 해석을 하는군요..

내용을 보면 이해 할 듯 말 듯 하시죠? (나만 그런가..)

왕복운동이 한번 이루어진다?? 물리적인 값의 요동이 한번??

자세히는 몰라도 반복적인 작업이나 행동의 한 사이클로 보시면 될듯하네요

그럼 사이클은 뭘까요..?

 

이것도 네이버 사전을 찾아봤는데 다음과 같은 해석을 하더군요..

어떤 체계가 처음 상태에서 변화하여 다시 원래의 상태로 되돌아오는 일을 말한다. 변화를 겪어도 같은 과정을 반복하므로 순환하는 과정이다. 순환과정(cyclic process)이라고도 한다.

 

, 원래 상태로 돌아오는 일을 말한다고 하는군요.

서두가 너무 길었군요^^ 계속 진행해보죠^^

 

그럼 실행주기는 실행이란 처리를 시작해서 원래 상태로 돌아오는 일?

 

그럼 페이지 실행주기는 페이지 실행 처리를 시작해서 원래 상태로 돌아오는 일?

 

ASP.NET 페이지 실행주기는?? 대충 아시겠죠? ^^; ASP.NET에서 어쩌구 저쩌구..

 

그럼 ASP.NET 페이지 실행주기에는 어떤일이 일어나는지 알아보겠습니다.

 

일반적으로 다음과 같은 순서대로 이벤트들이 발생합니다.

Init – Load – PostBack – PreRender – Render - Unload

 

사실 더 자세하게 구분이 되지만 현재 나와있는 주기로도 충분히 이해가 되리라 봅니다.

(자세한 실행주기를 원하시면 책을 참고하시면 더욱 좋을 듯 합니다.^^)

근데 왜 우리가 이 페이지 실행주기를 알아야 할까요?

페이지 실행주기를 몰라도 개발은 할 수 있다고 말하는 사람도 있습니다.

하지만 페이지를 실행 하는데 내부적으로 어떤 일들이 일어나는지 알고 접근하는 사람과 모르고 접근하는 사람하고는 큰 차이가 있다고 생각합니다.

문제해결 부분에서도 쉽게 해결할 수 있는 부분도 이해를 못해 어렵게 해결하는 경우도 있죠..

 

예를 들어보겠습니다.

먼저 아래와 같은 태그로 필요한 컨트롤들을 만들겠습니다.

<asp:TextBox ID="TextBox1" runat="server" Text="0"></asp:TextBox><br />

        <asp:Button ID="Button1" runat="server" Text="텍스트박스값1증가" onclick="Button1_Click" /><br />

        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>

 

사용자 삽입 이미지

간단하게 테스트를 설명하자면

버튼 클릭시 텍스트박스의 숫자에 1을 증가시켜 다시 텍스트 박스에 입력합니다.

텍스트 박스의 값을 라벨(Label)에 출력하는 Print()라는 함수가 있습니다.

해당 Print()함수를 Load 이벤트에서 실행 했을 때와

PreRender 이벤트에서 실행 했을 때 차이점을 비교해보도록 하겠습니다.

 

코드는 다음과 같습니다.

protected void Page_Load(object sender, EventArgs e)

    {

        //Print();

    }

    protected void Button1_Click(object sender, EventArgs e)

    {

        // 텍스트 박스이 값을 가져와서 정수형으로 변경

        int nValue = Convert.ToInt32(TextBox1.Text);

        // 정수값을 1증가 nValue = nValue + 1; 과 동일한 코드

        nValue++;

        // 증가된 정수값을 텍스트박스에 대입

        TextBox1.Text = nValue.ToString();

    }

    protected void Page_PreRender(object sender, EventArgs e)

    {

        //Print();

    }

    /// <summary>

    /// 텍스트 박스 텍스트 값을 라벨에 대입하는 메소드

    /// </summary>

    private void Print()

    {

        // 텍스트 박스의 텍스트 값을 라벨에 대입

        Label1.Text = TextBox1.Text;

    }

 

여기서 첫번째 테스트 Page_Load 이벤트의 주석문을 제거하고 테스트를 해보겠습니다.

 

사용자 삽입 이미지

버튼 클릭시 증가된 텍스트 박스의 텍스트가 라벨에 대입된게 아니라 이전 증가값이 대입된걸 확인할수 있습니다.

 

다음은 두번째 테스트 Page_Load 이벤트의 Print()함수 호출 부분은 주석처리하고

Page_PreRender 이벤트의 Print()함수 주석문을 제거한 후 테스트를 해보겠습니다.

 

사용자 삽입 이미지

 

이번에는 텍스트 박스의 텍스트 값과 라벨의 텍스트 값이 일치하는걸 볼 수 있습니다.

 

과연 무슨 차이가 있는걸까요?

앞에서 보여드린 페이지 실행주기를 다시 보여드리겠습니다.

Init – Load – PostBack(버튼 클릭 이벤트) – PreRender – Render – Unload

 

버튼을 눌러서 발생하는 이벤트는 PostBack 부분에서 실행이 되게 됩니다.

PostBack 이벤트시 텍스트박스의 값을 증가시키는 거죠

 

Load 이벤트에서 텍스트 박스의 값을 라벨에 대입하게 되면 아직 PostBack 이벤트가 발생하기 전이라 증가되기 전 값이 대입된 것 입니다.

 

PreRender 이벤트에서 텍스트 박스의 값을 라벨에 대입하게 되면 PostBack 이벤트보다 뒤에서 발생하기 때문에 증가된 값이 대입된 것이죠

 

이런 간단한? 문제도 페이지 실행주기를 모르는 사람한테는 크게 다가올 수도 있는 문제입니다.

 

꼭 이런 문제 때문에 페이지 실행주기를 알아야 한다는 건 아닙니다.

 

Init 이벤트와 Load 이벤트 사이에서 ViewState가 복구되고,

PreRender 이벤트와 Render 이벤트 사이에서 ViewState가 저장되는 내용 또한 중요합니다.

Init이나 Render에서 행해지는 행위들은 ViewSate에 저장이 되지 않는 것이죠

 

브라우저에서 소스보기를 해보면 다음과 같은 코드를 볼 때가 있습니다.

<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTU5MTA2ODYwOQ9kFgICAw9kFgICBQ8PFgIeBFRleHQFATNkZGRT2tautF1ZGqowuiJqY/8O9RsFxg==" />

 

이건 ViewState를 사용하는 페이지에서 나타날 수 있는 태그입니다.

 

간단하게 이야기 하자면 웹에서는 원래 상태값을 가질 수 없습니다.

허나 ViewState 에 상태를 저장해두었다가 로드시 그상태를 그대로 유지 해주는것처럼 복구하는 것이죠 그런 행위가 위에서 이야기한 시점에서 발생하게 되는것이죠

 

ViewState에 대한 자세한 내용은 다음 시간에 자세히 알아 보도록 하겠습니다.

 

이것 말고도 페이지 실행주기는 웹 컨트롤 제작시에도 중요하게 여겨지는 부분이니 잘이해하셨으면 합니다.

2008. 8. 7. 07:00

웹 서버 어플리케이션 기술의 변천사에 대해 장단점 비교 세번째로 ASP에 대해 간략하게 알아보도록 하겠습니다.

 

ASP ( Active Server Pages ) ?

우리나라 말로 해석을 해보면 동적 서버 페이지 라고 표현할 수 있겠죠?

[ ASP.NET이란? ] 강좌에 보시면 동적 웹 페이지에 대한 설명이 나와 있습니다. 참고하시면 될듯합니다. , 동적으로 서버에서 만드는 웹 페이지 라고 보시면 될듯합니다.

 

사용자 삽입 이미지

ASP 처리 구조

Windows NT 4.0의 한 부분이 된 IIS 2.0의 베타 버전 시기에 Microsoft데날리(Denali)라는 코드명으로 ASP를 공개하였습니다.

 

특징을 보면

ASP스크립트 환경입니다.

ASP코드는 표준 HTML과 혼용해서 사용합니다.

- “<%”, “%>이 한쌍의 문자는ASP 페이지에서 시작과 끝 지점의 경계를 나타내 줍니다.

 

사용자 삽입 이미지

ASP 샘플 코드

사용자 삽입 이미지

다른 방식의 ASP 샘플 코드


• 일반적으로 VBScript를 사용하지만 Jscript, JavaScript도 사용할 수 있습니다.

 

장점을 보면

CGI, ISAPI에 비해 복잡한 작업을 단순화 시켰습니다.

ADO ( Microsoft ActiveX Data Object )를 통해서 데이터베이스에 쉽게 연결할 수 있습니다.

 

단점을 보면

HTML 코드 사이사이에  ASP 코드를 입력 하다 보니 코어부분과 프리젠테이션 부분 구분하기가 어려워져서 유지보수 및 코드 재사용성이 힘들어 집니다.

2008. 7. 31. 07:00

웹 서버 어플리케이션 기술의 변천사에 대해 장단점 비교 두번째로 ISAPI에 대해 간략하게 알아보도록 하겠습니다.

 

ISAPI ( Internet Server Application Programming Interface )?

 

CGI가 가지고 있었던 문제점( 이전 강좌 참조 )을 극복하기 위해 ISAPI가 등장하였습니다.

 

특징을 보면

ISAPI실행 프로그램이 아닌 DLL을 사용하므로서 CGI에서 문제가 되었던 부분들을 보안하였습니다.

ISAPI DLL에는 ISAPI extensionISAPI filter 두 형태로 나누어 집니다.

 

ISAPI extension은 이전 시간에 설명해드린 CGI가 수행하는 작업과 비슷하게 클라이언트가 요청한 작업을 처리하고 HTML 형태로 보내줍니다.

 

ISAPI filter는 명시적으로 호출되지는 않고 IIS에 의해 호출되며 이벤트에 대해 호출됩니다.

ISAPI filter의 대표적인 용도로는 인증처리에 많이 사용됩니다.

 

ISAPI 처리 구조


장점을 보면

CGI에서 문제가 되었던 각각의 요청에 대한 프로세스의 생성과 소멸 DLL을 사용 하면서 각각의 프로세스 생성이 아닌 쓰레드를 생성하면서 문제가 되는 부분들을 해결하였습니다.

 

단점을 보면

개발자가 보통 이상의 수준의 실력이 있어야 합니다.(쉽진않다는 말이겠죠)

코어와 프리젠테이션의 상세 부분이 쉽게 나눠질 수 없습니다.(디자이너와 개발자간의 협업이 힘듬)

서비스를 멈추기 전까지 ISAPI 어플래케이션을 교체할 수 없습니다.

 

ASP.NET 개발자가 ISAPI 어플리케이션과 필터들이 제공하는 기능들을 사용하려면 HTTPHandlerHTTPModule을 사용하면 됩니다.


━━━━━━━━━━━━━━━
by
한상국(han3925)
MAIL  han3925@gmail.com
         han3925@hotmail.com
BLOG
pointnet.tistory.com
━━━━━━━━━━━━━━━