[설문조사 사이트 테스트]
이름 :
점넷(.Net)
분류 전체보기 (176)
점넷공간 (38)
COMPUTER (1)
.NET (29)
DB (36)
SCRIPT (3)
MarkUp & CSS (3)
OS (7)
IT Story (52)
Information (7)
«   2024/03   »
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
31
Visitors up to today!
Today hit, Yesterday hit
daisy rss
tistory 티스토리 가입하기!
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에 대해 간략하게 알아보았습니다.

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