원본 출처 : http://www.kim-taesuk.com/11



MySQL 저장 프로시져 ( Stored Procedure ) 내에서, 쿼리 에러 발생시,

그 에러에 대한 HANDLER 가 정의되어 있지 않으면, 에러 발생 위치에서 Stored Procedure 가 종료됨.

이 때, 


1) 에러 처리 구문 실행 후, Stored Procedure 종료 하는 방법

2) 에러 처리 구문 실행 후, 다음 쿼리를 계속 실행 하는 방법

3) DECLARE ... HANDLER 구문 분석

4) DECLARE ... HANDLER 구문 특이사항



- 아 래 - 


1) 에러 처리 구문 실행 후, Stored Procedure 종료 하는 방법


DECLARE EXIT HANDLER FOR SQLEXCEPTION

  BEGIN

    -- 여기에 에러 처리 구문 추가!

  END;



2) 에러 처리 구문 실행 후, 다음 쿼리를 계속 실행 하는 방법


DECLARE CONTINUE HANDLER FOR SQLEXCEPTION

  BEGIN

    -- 여기에 에러 처리 구문 추가!

  END;



3) DECLARE ... HANDLER 구문 분석


구문 : DECLARE [handler_action] HANDLER [condition_value] [statement]


[handler_action]

CONTINUE : 계속 진행

EXIT : 중지, 종료


[condition_value]


mysql_error_code : MySQL 에러 코드 ( number 값 )  [참조Server Error Codes and Messages]


SQLSTATE [VALUE] : 

5 자리의 문자로 정의된, SQL 상태값. 

'00' 으로 시작하는 경우 정상. 

SQLSTATE 는 ODBC 에서 정의된 상태값이므로, mysql의 에러 코드와 100% 매칭되지는 않음.

[참조Server Error Codes and Messages]


condition_name : 미리 정의한 조건의 상수값 [참조DECLARE ... CONDITION Syntax]


예) mysql 에러 코드 1051 발생시의 에러 처리

DECLARE CONTINUE HANDLER FOR 1051

  BEGIN

    -- body of handler

  END;


또는 

DECLARE no_such_table CONDITION FOR 1051;

DECLARE CONTINUE HANDLER FOR no_such_table

  BEGIN

    -- body of handler

  END;



SQLWARNING : SQLSTATE 값이 '01' 로 시작하는 경우


NOT FOUND : SQLSTATE 값이 '02' 로 시작하는 경우


SQLEXCEPTION : SQLSTATE 값이 '00', '01', '02' 로 시작하지 않는 경우.


[statement] : 조건 만족시 실행할 구문



4) DECLARE ... HANDLER 구문 특이사항


[statement] 위치에  ITERATE 또는 LEAVE 구문을 사용할 수 없음.



'프로그래밍 > MySQL' 카테고리의 다른 글

이벤트 스케줄러(Event Scheduler)  (1) 2016.06.21
MySql DB 작성해보기  (1) 2016.03.13
MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)  (0) 2016.02.23
MySql 설치하기  (0) 2016.02.21
Auto Increment란  (0) 2016.02.05
MySql 주석을 달자  (0) 2016.02.01
Posted by GENESIS8

댓글을 달아 주세요

출처 원본 : http://www.homejjang.com/05/layout.php


테이블을 이용한 레이아웃(Layout)

홈페이지를 제작할때 가장 많이 사용되는 태그는 <table>태그입니다.(<tr>,<td>와 함께)

이유는 레이아웃을 잡을때 <table>태그만큼 효율적인 것이 없기 때문입니다.

대부분의 홈페이지는 top 부분과 left 부분에 네비게이션(메뉴)이 위치합니다.

이를 최대한 간단하게 만들어 보겠습니다.

<table width="800" cellpadding="0" cellspacing="0" border="0" align="center">
<tr bgcolor="#8080FF" align="center">
 <td width="100">홈페이지 로고</td>
 <td width="100">메뉴1</td>
 <td width="100">메뉴2</td>
 <td width="100">메뉴3</td>
 <td width="100">메뉴4</td>
 <td width="100">메뉴5</td>
 <td width="200"><!-- 여백 --></td>
</tr>
<tr height="5">
 <td colspan="7"><!-- 여백 --></td>
</tr>
</table>

<table width="800" cellpadding="0" cellspacing="0" border="0" align="center">
<tr>
 <td width="150" valign="top" bgcolor="#8080FF">
  <table width="130" cellpadding="5" cellspacing="0" border="0" align="center">
  <tr>
   <td>하위메뉴1</td>
  </tr>
  <tr>
   <td>하위메뉴2</td>
  </tr>
  <tr>
   <td>하위메뉴3</td>
  </tr>
  <tr>
   <td>하위메뉴4</td>
  </tr>
  <tr>
   <td>하위메뉴5</td>
  </tr>
  </table>
 </td>
 <td width="650" valign="top">
  <table width="600" cellpadding="0" cellspacing="0" border="0" align="center">
  <tr>
   <td>여기에 본문이 옵니다.</td>
  </tr>
  </table>
 </td>
</tr>
</table>

다소 복잡한 테이블이지만 실제로 만들어 보면 크게 어렵지 않습니다.

홈페이지 로고메뉴1메뉴2메뉴3메뉴4메뉴5
하위메뉴1
하위메뉴2
하위메뉴3
하위메뉴4
하위메뉴5
여기에 본문이 옵니다.

너비의 단위는 %를 사용하였지만 100% 레이아웃을 차지하는 홈페이지가 아닌 이상 % 보다는 픽셀을 사용하는 것이 보다 일반적입니다.

그리고 테이블의 셀안에 다시 테이블이 들어가는 것을 볼 수 있습니다.

테이블을 이렇게 중첩시켜 나가면서 복잡한 레이아웃을 구현합니다.

예제에서는 이미지를 전혀 쓰지 않았지만 대부분의 홈페이지 작업은 전체적인 화면의 이미지를 먼저 만들고 이 이미지를 잘라서 테이블을 이용하여 배치를 하는 방식으로 진행됩니다.




아이프레임이란 내부 프레임(inline frame)이라는 의미로 하나의 HTML문서내에서 다른 HTML문서를 보여주고자 할때 사용합니다.

일반적인 프레임(frame)과 비교해보면 아이프레임은 <frameset> 태그 사이에 올 필요가 없으며, 독립적으로 마치 <img> 태그를 사용하듯 문서내의 원하는 위치에 삽입할 수 있습니다.

아이프레임에서 사용할 수 있는 속성도 <img> 태그과 유사합니다.

src 속성

inline frame 내에 불러올 문서의 주소를 적어주면 됩니다.

홈짱 홈페이지를 불러오는 예제를 만들어 보겠습니다.

<iframe src="http://www.homejjang.com">

width와 height 속성

inline frame의 너비와 높이를 지정할 수 있습니다.

<iframe src="http://www.homejjang.com" width="600" height="300">

frameborder 속성

inline frame의 경계선의 두께를 지정할 수 있습니다.

<iframe src="http://www.homejjang.com" frameborder="0" width="600" height="300">

marginwidth와 marginheight

inline frame의 여백을 지정할 수 있습니다.

<iframe src="http://www.homejjang.com" frameborder="0" width="600" height="300" marginwidth="0"marginheight="0">

scrolling

inline frame내에서 스크롤바 사용여부를 지정할 수 있습니다.

<iframe src="http://www.homejjang.com" frameborder="0" width="600" height="300" marginwidth="0" marginheight="0" scrolling="yes">

scrolling 값을 no로 지정하면 스크롤바가 생기지 않습니다.




배경음악 사용하기 Bgsound와 Embed

좀더 분위기 있는 홈페이지를 만들기 위해서 배경 음악을 사용하는 경우가 많습니다. 그러나 방문자가 배경음악을 원하지 않는 경우도 있으므로 배경음악을 사용할때 아래의 내용을 고려해 봐야 합니다.

  1. 꼭 필요한 곳에만 배경 음악이나 배경음을 넣습니다.
  2. 배경음악을 사용자가 직접 제어 할 수 있도록 합니다. 배경음악을 원치 않는 사용자들이 쉽게 소리를 줄이거나 끌 수 있어야 합니다.
  3. 용량이 많은 배경음악은 페이지 로딩을 방해하는 요소로 작용할 수 있기에 페이지 전체적인 용량을 고려해서 배경음악을 선택합니다.

배경음악 사용 방법

① bgsound

<bgsound src="[Abba] Happy New Year.wma" loop="0">


bgsound element는 인터넷 익스플로러에서만 작동합니다. 그리고 화면에 아무런 내용이 출력되지 않으므로 방문자가 음악을 끄기가 힘듭니다.

loop 속성은 배경음악의 반복 횟수를 지정합니다. -1 이나 INFINITE 값으로 지정하면 계속적으로 반복됩니다.

② embed

<embed src="[Abba] Happy New Year.wma">



embed는 익스플로러뿐 아니라 다른 웹브라우저에서도 작동을 합니다. 그리고 웹브라우저상에 미디어 플레이어가 표시됩니다.

embed 엘리먼트에서 사용할 수 있는 속성은 아래와 같습니다.

  • autostart="true/false" : true의 경우 페이지 로딩시 자동실행되고 false로 지정하면 플레이 버튼을 눌러야 음악이 재생됩니다.
  • hidden="true/false" : 미디어 플레이어가 화면에 출력되는지 여부를 지정합니다.
  • loop="true/false" : 음악의 반복여부를 지정합니다.
  • width="수치" height="수치" : 미디어 플레이어의 크기를 지정합니다. 음악 파일인 경우는 상관없지만 동영상 파일을 재생할때 이 값을 적절하게 조절해 주면 좋습니다.
  • Showcontrols="value" : 미디어 플레이어, value 값은 0 , 1
  • VOLUME = "수치값" : 플레이 되는 음악의 소리 크기를 임의로 설정하는 속성입니다.
  • hspace="value" vspace="value" : 미디어 플레이어의 수직/수평 여백값을 조절하는 옵션입니다. IMG element에서 사용되는거와 동일합니다.
  • mute=1 : 음소거



입력양식(form)은 홈페이지에서 사용자에게 정보를 받을때 사용됩니다.

회원가입을 하거나 혹은 쇼핑몰에서 주문을 하는 경우 사용자의 정보를 입력받을 필요가 있습니다. 이때 입력양식(form) 페이지를 제공하여 정보를 입력하게한 다음 이를 처리하는 페이지를 만들어서 DB에 저장을 합니다.

회원가입 입력폼을 member.html 이라고 한다면 member_confirm.php 와같은 페이지를 만들어서 회원가입 처리를 합니다. 이때 member.html 페이지는 <form> 태그를 이용하여 간단하게 만들수 있지만 member_confirm.php 페이지는 입력받은 정보를 DB에 저장하는 역할을 하기 때문에 프로그래밍 처리를 해야 합니다.

그래서 HTML 만으로는 입력양식만을 만들 수 있을뿐 이를 DB에 저장하는 기능은 만들 수가 없습니다.

대부분의 웹프로그램이 사용자의 정보를 받아서 처리하는 프로세스를 가지므로 <form> 태그는 웹프로그램에서 아주 중요한 위치를 차지합니다.

입력양식(form)의 구성

<form> 태그는 입력양식의 범위를 지정할뿐 화면상에는 아무런 내용이 표시되지 않습니다.

<form>과 </form> 사이에 사용자가 실제적으로 값을 넣을수 있는 텍스트 박스나 체크 박스 등이 위치합니다.

회원가입을 하는 경우 이름이나 주소 등을 텍스트로 입력하는 경우도 있지만 성별이나 생년월일 등은 라디오 버튼이나 셀렉트 박스에서 선택하는 경우도 있습니다.

그러므로 <form>과 </form> 사이에 위치하는 다양한 <form> 요소들을 모두 익혀야 상황에 맞는 입력양식을 만들수 있습니다.

<form> 태그의 속성

<form> 태그에서 사용할 수 있는 주요 속성은 method와 action이 있습니다.

<form method="get" action="member_confrim.php">

</form>

(1) method
웹서버와의 통신 방법을 지정합니다. post와 get 두가지 값 중 하나를 사용할 수 있습니다.

(2) action
입력양식에 입력된 값을 받아서 DB에 저장하는 페이지를 지정합니다. 이는 php나 asp와 같은 웹스크립트 언어를 이용하여 제작합니다.


Fieldset과 Legend element

fieldset element는 서로 연관성있는 컨트롤들을 하나로 묶을 수 있도록 해 주며, legend element는 제목을 붙이는 역할을 합니다. 어떻게 보면 legend element를 사용하기 위해서 fieldset element를 사용한다고 볼 수도 있습니다.

<fieldset>
    <legend><b>메일링 리스트</b></legend>
    <input type=checkbox>html
    <input type=checkbox>css
    <input type=checkbox>javascript
</fieldset>

간단한 예제이니 한번 만들어보면 쉽게 이해가 갈겁니다.

메일링 리스트html css javascript



마퀴 엘리먼트(Marquee element) 스크롤 되는 영역을 지정

 marquee element 는 스크롤 되는 영역을 지정합니다. 

<marquee>와 </marquee> 사이에 텍스트나 이미지 등이 위치하면 스크롤이 됩니다. 제한된 공간에서 보다 많은 정보를 보여주기 위한 용도로 사용됩니다.

direction

direction 속성은 움직이는 방향을 지정합니다.

<marquee direction="right">오른쪽 방향으로 흐르는 텍스트...</marquee>
<marquee direction="left">왼쪽 방향으로 흐르는 텍스트...</marquee>
오른쪽 방향으로 흐르는 텍스트...왼쪽 방향으로 흐르는 텍스트...


behavior

behavior 속성은 컨텐츠가 어떻게 스크롤 될것인지를 지정합니다.

  • scroll : 기본값으로 마퀴 영역의 경계에서부터 스크롤됩니다.
  • slide : scroll과 거의 동일하지만 마퀴 영역의 경계에서 더이상 스크롤 되지 않고 멈춥니다. 컨텐츠가 화면상으로 슬라이딩 되면서 출력되는 느낌입니다.
  • alternate : 마퀴 영역의 경계까지 갔다가 다시 돌아옵니다. 왔다 갔다하면서 화면상에 언제나 보이죠.
아래 예제를 보시면 쉽게 이해할 수 있습니다.

<marquee behavior="scroll">behavior="scroll"</marquee>
<marquee behavior="slide">behavior="slide"</marquee>
<marquee behavior="alternate">behavior="alternate"</marquee>
behavior="scroll"behavior="slide"behavior="alternate"



scrollamount

scrollamount 속성은 한번 스크롤될때마다 얼마만큼 스크롤되는지를 지정합니다. 기본값은 1픽셀입니다.

<marquee scrollamount="10">scrollamount 속성을 10픽셀로 지정</marquee>

위와 같이 scrollamount 속성을 10픽셀로 지정하면 한번 스크롤될때마다 10픽셀씩 움직이므로 좀더 빠르게 움직이는 느낌을 받습니다. 그러나 이 값을 지나치게 높이면 자연스럽지 못하므로 적당하게 올려야 합니다.

scrollamount 속성을 10픽셀로 지정



loop

loop 속성은 스크롤되는 횟수를 지정합니다. 기본값은 -1 이며 이는 계속적으로 반복해서 스크롤 된다는 의미입니다.

<marquee loop="1">loop 속성을 1로 지정</marquee>

위와 같이 loop 속성을 1로 지정하면 한번만 스크롤되고 더이상 스크롤되지 않습니다.

loop 속성을 1로 지정

width와 height

marquee element 는 스크롤 되는 영역을 지정하므로 그 영역의 width와 height를 지정할 수 있습니다.

<marquee width="300" height="100" bgcolor="#8080FF">loop 속성을 1로 지정</marquee>
loop 속성을 1로 지정


기타

align, hspace, vspace, transparency 등의 속성을 사용할 수 있습니다.



이미지맵(image map)

이미지맵은 하나의 이미지에 여러개의 링크를 걸때 사용합니다.

이미지맵을 사용하면 HTML 소스가 간단해 지는 장점이 있습니다.

<img src="imgmap.gif" alt="imgmap.gif" usemap="#001" border="0">
<map name="001">
 <area shape="rect" coords="42,41,154,66" href="/01/homepage.php" target="_blank">
 <area shape="rect" coords="42,76,152,100" href="/03/html.php" target="_blank">
 <area shape="rect" coords="40,113,150,138" href="/05/html2.php" target="_blank">
</map>
imgmap.gif 

먼저 이미지맵을 적용할 이미지에 usemap 속성을 사용하여 이미지맵의 이름을 지정해 주어야 합니다.

<img src="imgmap.gif" alt="imgmap.gif" usemap="#001" border="0">

001이라는 이름을 가진 이미지맵을 사용하겠다는 의미이니다. 이때 #을 사용함에 주의를 기울여야 합니다.

그리고 나서는 <map>태그를 사용하여 이미지맵을 만듭니다.

<map name="001">
...
</map>

이미지맵에서 하이퍼링크의 영역을 지정하기 위해서 <area>태그를 사용합니다.

<area>태그의 shape속성은 이미지맵의 형태를 지정합니다. rect(사각형), circle(원형), poly(다각형) 등의 속성값을 가질 수 있습니다.

coords속성은 좌표값을 지정합니다. 이미지의 왼쪽 모서리를 기준으로 하이퍼링크 영역의 시작과 끝 부분을 지정합니다.

이 coords속성값을 지정하기가 까다롭습니다. 그래서 이 부분은 텍스트 에디터에서 직접 코딩하지 않고 이미지맵을 생성하는 유틸리티를 사용하는 것이 좋습니다.

나모나 드림위버를 사용하면 이미지 상에서 영역을 지정하기에 아주 쉽게 이미지맵을 생성할 수 있습니다.

그러나 텍스트 에디터를 사용하는 경우 이 부분이 불편합니다.

이미지맵을 생성하는 프로그램을 이용하면 이미지상에서 바로 영역을 지정하고 이를 HTML 문서로 저장할 수 있어 텍스트 에디터의 단점을 보완해 줄 수 있습니다.


오브젝트 엘리먼트(Object element) HTML 문서에 멀티미디어 삽입

object element 는 문서내에 플래시나 동영상과 같은 개체(Object)를 삽입하는데 사용됩니다.

HTML 문서에 개체를 삽입하는 태그는 여러가지가 있습니다. 동영상과 음악과 같은 멀티미디어를 삽입하는 embed, 자바 애플릿을 삽입하는 applet 엘리먼트 등이 있습니다. 최근의 추세는 object 엘리먼트로 통합되는 방향입니다.

embed 와 object 의 차이점

embed 엘리먼트는 개채삽입으로 자신의 컴퓨터에 해당 미디어파일을 실행할수 있는 프로그램이 없다면 실행이 되지 않습니다. 그러나 object 엘리먼트는 웹에서 개채를 로드해서 재생되므로 프로그램이 없어도 실행이 가능합니다.

HTML 페이지에 멀티미디어를 추가하는데 embed 엘리먼트도 사용할 수 있지만 embed 엘리먼트를 사용하면 보다 다양한 미디어를 사용 가능합니다.

플래시 삽입

<object type="application/x-shockwave-flash" data="images/menu.swf" width="500" height="70">
    <param name="movie" value="menu.swf" />
</object>

슬라이더 삽입

<object classid="clsid:F08DF954-8592-11D1-B16A-00C0F0283628" id="Slider1" width="100" height="50">
    <param name="BorderStyle" value="1" />
    <param name="MousePointer" value="0" />
    <param name="Enabled" value="1" />
    <param name="Min" value="0" />
    <param name="Max" value="10" />
</object>

퀵타임 무비 삽입

<object width="160" height="144" classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab>">
    <param name="src" value="test.mov">
    <param name="autoplay" value="true">
    <param name="controller" value="false">
    <embed src="sample.mov" width="160" height="144" autoplay="true" controller="false" pluginspage="http://www.apple.com/quicktime/download/"></embed>
</object>

리얼 비디오 삽입

<object width="320" height="240" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA">
    <param name="controls" value="ImageWindow" />
    <param name="autostart" value="true" />
    <param name="src" value="test.ram" />
</object>





HTML과 XHTML

XHTML은 HTML의 단점을 보안하기 위해서 만들어진 언어라 할 수 있습니다. 문법적으로 xml을 따랐다고는 하나 대부분 HTML과 큰차이를 보이지 않습니다. 그러므로 HTML을 기본적으로 아는 사람들은 HTML과 XHTML의 차이만 이해하면 XHTML을 어렵지 않게 사용할 수 있습니다.

다음은 HTML과 XHTML의 차이점입니다. 전체적으로 HTML에 비해 문법적으로 엄격해 졌습니다. 두리뭉실한 HTML, 까칠한 XHTML 입니다.^^

종료태그가 반드시 있어야 한다.

HTML 은 종료태그가 없는 것을 허용하였습니다.

<p>문단
<p>문단


이런식으로 종료태그(</p>)를 붙히지 않아도 문제가 생기지 않았습니다. XHTML 의 경우 반드시 종료태그를 사용하여 닫아주어야 합니다.

잘못된 중첩을 허용하지 않는다.

HTML 은 태그가 잘못 중첩되어도 화면표시(렌더링)에 별 영향을 미치지 않았지만 XHTML의 경우 잘못된 중첩은 화면표시(렌더링)에 직접적인 영향을 주기도 합니다.

요소(element)와 속성(Attribute)은 소문자로 표기되어야 한다.

HTML은 요소와 속성에 대소문자를 함께 사용하는 것을 허용하였으나 XHTML은 요소와 속성들을 반드시 소문자로 표기해야 합니다. xml이 대소문자를 구별하기 때문입니다. HTML에서는 대소문자의 구별이 없죠.

속성 ‘값’들은 항상 따옴표로 감싸주어야 합니다.

HTML 의 경우 속성 값들을 따옴표로 감싸지 않는 것을 허용하였지만 XHTML 에서는 반드시 속성값은 따옴표 안에 있어야 한다.

<p align=center>로 하면 안되고 <p align="center">와 같이 반드시 따옴표를 사용해야 합니다.

속성과 값의 단축표기를 허용하지 않는다.

HTML 에서는 속성과 속성 값의 단축표기를 허용하였으나 XHTML 에서는 단축표기 하는 것을 허용하지 않습니다.
<input checked> 는 <input checked="checked"> 와 같이 사용해야 합니다.

비어있는 태그(종료태그가 없는 태그)도 종료 되어야 한다.

HTML 에서 <br>, <hr> 과 같이 콘텐트를 담지 않는 빈 태그들은 <br />, <hr /> 과 같이 표기하여 시작태그에서 곧 종료됨을 표기해 주어야 한다.

XHTML의 필요성?

간단하게 나마 XHTML이 HTML에 비해서 어떤 점이 틀리다는 것을 짚어봤습니다. 서두에서도 말했듯이 문법적으로 좀더 엄격해 졌다고 할 수 있죠. 이런 엄격함으로 인해 보다 다양한 브라우저에서 정확하게 문서가 표시될 수는 있습니다. 예를 들어서 PDA에서 사용되는 웹브라우저에서도 PC의 웹브라우저와 거의 똑같은 화면을 표시할 수 있다는 겁니다. 아무래도 다소 느슨한 HTML로는 웹브라우저가 달라지면 다른 모양으로 보일 여지가 많거든요.

그래도 XHTML은 홈짱닷컴에서 자세하게 다루지 않을 예정입니다.

HTML 보다 분명 장점을 가지고 있지만 현실적으로 HTML을 대체하는 새로운 마크업이 된다는 보장은 없습니다. 아직도 대부분의 홈페이지에서는 아무런 문제없이 HTML을 잘 쓰고 있고 변화의 움직임도 크지 않기 때문이죠. 물론 분위기가 XHTML로 바뀌면 XHTML 강좌도 추가하겠지만요^^;

XHTML에 대한 좀더 자세한 내용은 related link를 참고하시면 됩니다.
































'프로그래밍 > 웹 프로그래밍' 카테고리의 다른 글

php 기초 실습  (0) 2016.03.13
php 입문 사전 지식  (0) 2016.03.13
html 중급?  (0) 2016.02.21
HTML 기초  (0) 2016.02.21
비즈니스 로직(Business logic)?  (0) 2016.02.14
웹서버(Web Server) / 웹 서버 어플리케이션(WSA)  (0) 2016.02.14
Posted by GENESIS8

댓글을 달아 주세요

원본 출처 : http://www.homejjang.com/03/Tag_element_attribute.php
ㄴ 이곳의 내용들을 가져온 것...


요소(Elements)

HTML에서 시작 태그와 종료태그로 이루어진 모든 명령어들을 의미합니다.

태그(Tag)

요소(Elements)의 일부로 시작 태그와 종료 태그 두 종류가 있습니다.

시작 태그는 요소를 시작하며, 종료태그는 요소를 끝내는 기능을 가지고 있습니다.

일부 태그 중에는 종료 태그가 없는 것도 있습니다.

요소와 태그의 개념이 뚜렷이 구별되지 않고 혼용되는 경우가 많은데 HTML을 배우는데는 굳이 요소라는 말을 쓰지 않아도 되지만 CSS나 Javascript를 배울때는 요소라는 말이 아주 중요한 용어가 됩니다.
1<p>하나의 문단내용이 여기에들어 옵니다.</p>
위의 예제에서 요소는 <p>하나의 문단내용이 여기에들어 옵니다.</p> 전체를 의미합니다. 그러나 태그는 <p>와 </p>만을 의미하죠.

속성(Attributes)

요소의 시작 태그 안에서 사용되는 것으로 좀 더 구체화된 명령어 체계를 의미합니다.
1<p align="center">태그에 속성을 부여하면 태그의 성격을 좀더 구체화 시킵니다.</p>
<p>태그안에 align 이라는 속성(Attributes)을 추가적으로 사용하였습니다.

단순히 <p>는 문단을 의미하지만 <p>안에 정렬을 의미하는 align 이라는 속성을 사용하면, 중앙정렬을 하는 문단을 의미합니다.

변수(Arguments)

속성과 관련된 값입니다.

위의 예제에서 align 이라는 속성에 center라는 변수를 지정했습니다.


HTML은 공백(스페이스)과 엔터를 여러번 입력하더라도 하나의 공백으로만 인식합니다.

그래서

홈짱닷컴의
홈페이지 제작강좌는
아주          쉽습니다.

이처럼 엔터와 공백을 여러번 입력하더라도 아래와 같이 한줄로 출력됩니다.

홈짱닷컴의 홈페이지 제작강좌는 아주 쉽습니다.

줄바꾸기 기능을 하는 가장 일반적인 태그는 <p> <br>태그입니다.

하나의 문단을 의미하는 <p> 태그

p는 paragraph의 약자로 문단을 의미합니다.

<p>태그와 </p>태그 사이에 위치하는 내용이 하나의 문단을 구성합니다.

<p>첫번째 문단(paragraph)</p>
<p>두번째 문단(paragraph)</p>

위와 같이 코딩하면 아래와 같이 첫번째 문단과 두번째 문단 사이에 공백라인이 들어갑니다.

첫번째 문단(paragraph)

두번째 문단(paragraph)

한글의 경우에는 문단의 첫글자를 들여쓰기 하지만 영문의 경우에는 문단과 문단 사이에는 한줄의 공백이 있습니다.

강제 줄바꿈을 할때는 <br> 태그

br은 Line Break를 의미하며 우리말로 하면 강제 줄바꿈이라고 할 수 있습니다.

홈짱닷컴의<br>
홈페이지 제작강좌는<br>
아주 쉽습니다.

이렇게 줄바꿈을 할 위치에 <br> 태그를 넣어주면 아래와 같이 줄바꿈이 일어납니다.

홈짱닷컴의
홈페이지 제작강좌는
아주 쉽습니다.

<br> 태그의 남용을 피하자

글이 좌우로 너무 넓게 출력되면 가독성이 떨어지기에 글을 쓰면서 <br> 태그를 습관적으로 사용하는 경우가 많습니다.

그러나 가능한 글의 한문단을 의미하는 <p> 태그를 사용하고 넓게 출력되는 것을 방지하기 위해서 CSS를 함께 사용해 주는 방식이 좋습니다.

<p style="width:400px;">홈짱닷컴의 홈페이지 제작강좌는 초보자를 대상으로 합니다. 그러므로 가능한 쉬운 용어를 일관성 있게 사용할려고 노력하고 있습니다.</p>
<p style="width:400px;">홈짱닷컴의 HTML 강좌는 단순히 화면에 출력되는 문서의 모양만 설명하지 않고 보다 의미있는 HTML 문서를 작성하는 방법을 추구하고 있습니다.</p>

이와 같이 style 속성을 사용하면 문단의 좌우 폭을 지정할 수 있기 때문에 굳이 <br> 태그를 사용하지 않아도 자연스럽게 줄바꿈이 일어나게 할 수 있습니다.

홈짱닷컴의 홈페이지 제작강좌는 초보자를 대상으로 합니다. 그러므로 가능한 쉬운 용어를 일관성 있게 사용할려고 노력하고 있습니다.

홈짱닷컴의 HTML 강좌는 단순히 화면에 출력되는 문서의 모양만 설명하지 않고 보다 의미있는 HTML 문서를 작성하는 방법을 추구하고 있습니다.

style 속성은 CSS 강좌 부분에서 자세하게 다루는 내용이므로 HTML 강좌에서는 설명을 생략하도록 하겠습니다.




<a> 태그를 사용하면 링크를 만들 수 있습니다.

"a"는 앵커(Anchor)를 의미합니다.

href

<a> 태그는 기본적으로 href 속성을 가집니다. 이동할 페이지 주소를 적어주면 되죠.

<a href="http://www.naver.com">네이버</a>

target

<a> 태그에서 사용할 수 있는 또 하나의 중요한 속성은 target입니다.

target 속성은 링크가 걸린 페이지를 어떻게 열것인가를 결정합니다.

<a href="http://www.naver.com" target="_blank">네이버</a>

위와 같이 target 속성의 값을 _blank로 지정하면 새창에서 네이버 홈페이지가 열립니다.

네이버

title

<a>태그에서 살펴볼만한 3번째 속성은 title 속성입니다. 이는 링크의 이름을 지정하는 속성입니다.

<a href="http://www.naver.com" target="_blank" title="네이버 홈페이지 열기">네이버</a>

title을 지정해 주면 링크에 마우스를 올렸을때 타이틀이 표시됩니다. 아래 링크에 마우스를 올려서 확인해 보세요.

네이버




테이블 태그는 HTML 문서에서 가장 많이 사용되는 태그입니다.

테이블 태그에서 가장 기본적인 태그는 <table>, <tr>, <td> 이 3가지 태그입니다.

<table>태그는 테이블의 시작을 알려주는 태그입니다. 테이블의 끝은 </table>태그로 표시합니다.

<tr>태그는 table row의 약자로 행을 정의 합니다.

<td>태그는 table data의 약자로 각 행에 셀을 정의합니다. 즉 행에서 칸(열)을 나누는 기능을 합니다.

이를 이해하기 위해서 가장 간단한 1행, 1열을 가지고 있는 테이블을 만들어 보면 다음과 같습니다.

<table border="1">
<tr>
 <td>1*1 테이블</td>
</tr>
</table>

테이블의 경계선(border)을 지정해주어야 테이블의 모양을 볼 수 있습니다.

1행에 2개의 칸(열)을 가진 테이블은 다음과 같습니다.

<table border="1">
<tr>
 <td>1*1 셀</td>
 <td>1*2 셀</td>
</tr>
</table>

이번에는 행(row)을 확장하여 2*2 테이블을 만들어 보겠습니다.

<table border="1">
<tr>
 <td>1*1 셀</td>
 <td>1*2 셀</td>
</tr>
<tr>
 <td>2*1 셀</td>
 <td>2*2 셀</td>
</tr>
</table>

테이블을 만드는 순서는 먼저 테이블을 정의하고(table), 행(tr)을 지정한 다음, 그 행을 나누어서 셀(td)을 만드는겁니다.





HTML문서에 이미지를 삽입하는 방법

HTML문서에 이미지를 삽입하기 위해서는 <img>태그를 사용합니다.

<img src="이미지경로">

<img>태그의 가장 기본적인 속성은 이미지 경로를 지정하는 src 속성입니다.

만일 이미지 파일과 HTML 파일이 같은 폴더내에 있다면 그냥 이미지 파일명만 입력해 주면 됩니다.

이미지의 너비와 높이를 지정하기 위해서는 width 속성과 height 속성을 사용합니다. 이 속성을 지정해주지 않으면 기본적으로 이미지 자체의 너비와 높이로 삽입됩니다.

<img src="이미지경로" width="100" height="200">

이미지에 링크를 거는 경우 링크가 걸린 이미지라는 것을 표시해주기 위해서 기본적으로 이미지의 경계선이 1픽셀로 표시됩니다. 그래서 이 경계선을 없앨려면 border 속성을 0으로 지정해 줍니다.

<a href="url"><img src="이미지경로" border="0"></a>

위의 예제에서 border 속성을 지우고 테스트 해보면 쉽게 이해할 수 있습니다.

초보자들이 HTML문서에 이미지를 삽입할때 가장 실수를 많이 하는 부분이 바로 이미지 경로입니다.



'프로그래밍 > 웹 프로그래밍' 카테고리의 다른 글

php 입문 사전 지식  (0) 2016.03.13
html 중급?  (0) 2016.02.21
HTML 기초  (0) 2016.02.21
비즈니스 로직(Business logic)?  (0) 2016.02.14
웹서버(Web Server) / 웹 서버 어플리케이션(WSA)  (0) 2016.02.14
웹 프로그래밍 기초  (0) 2016.02.14
Posted by GENESIS8

댓글을 달아 주세요

출처 : http://ddochea.tistory.com/8


ASP.NET을 통해 개발된 페이지를 게시하기 위해선 IIS 가 필요하다. 물론 IIS가 아닌 다른 서비스를 사용할 수 있지만, 정식 Windows엔 기본적으로 포함되어 있으며 구축이 간단하기 때문에  IIS로 구축하는 것이 가장 일반적이라 볼 수 있다. 이전에 해당 포스트를 다음(Daum) 블로그에서 작성한 적이 있어 내용을 조금 보강하여 포스트를 작성하였다. (그래봐짜 기존내용에서 몇 자 추가한게 전부다 -_-;;)

 

1. IIS 설치 과정

 

1) 제어판에서 '제어판->프로그램->Windows 기능 사용/사용안함' 으로 들어간다. Windows 8에선 'Windows 기능 사용/사용안함' 이 'Windows 기능 켜기/끄기'로 명칭이 변경되었다.

[그림 1] 프로그램 및 기능에 있는 Windows 기능 사용/사용안함 화면


 

2) 다음 항목들을 선택한다.
- 보안 (해당 트리노드까지만 선택)
- 응용 프로그램 개발 (해당 트리노드의 하위노드를 모두 선택)
- 일반적인 HTTP 기능 (해당 트리노드까지만 선택)

- 웹 관리 도구 (해당 트리노드까지만 선택)
* 일반적인 ASP.NET 기반 웹서버 구축에 대한 체크항목이므로 실제 필요한 사항과 차이가 있을 수 있다.

[그림 2] 인터넷 정보 서비스 선택항목

 

 

3) http://localhost 로 접속하여 IIS 환영페이지가 나오는지 확인한다. 나온다면 웹서버 설치가 완료된 것이다.

 

2. 외부(동일망 내)에 다른 기기에서 게시한 웹페이지 접근하기

 

1) 제어판 -> 시스템 및 보안 -> Windows 방화벽으로 들어간 뒤, 고급 설정을 선택한다.


[그림 3] Window 방화벽 고급 설정 위치

 

2). 고급 설정란에서 인바운드 규칙을 누른뒤, 새 규칙을 누른다.

[그림 4] 인바운드 규칙에 새 규칙만들기

 

3). 새 인바운드 규칙 마법사가 실행되면 각 단계마다 다음과 같이 진행한다.

1. 규칙종류 단계 : 미리정의됨을 선택한후 World Wide Web 서비스(HTTP)를 찾아 선택.

2. 미리 정의된 규칙 : 항목을 선택하고 (한개 나올 것입니다.) 다음을 클릭.

3. 작업 : 연결 허용상태에서 그대로 마침 클릭

 

[그림 5] 규칙 종류 단계

 

[그림 6] 미리 정의된 규칙 단계

 

[그림 7] 작업 단계

 

설정을 모두 완료한 후 스마트폰이나 태블릿으로 WI-FI에 연결한 후, IIS 를 설치한 PC의 IP로 웹 접속을 시도해본다. IIS 설치완료 후 나타나던 IIS 환영페이지가 나타난다면 보안설정에 성공한 것이다.

 

Note 1. 만일 웹 서버에서 게시하고자 하는 웹의 포트를 기본 HTTP(80) 이 아닌 다른 포트로 설정한다면 규칙 종류 단계에서 포트를 선택하고 포트번호를 직접 입력하는 방법도 있다.

 

Note 2. Windows 7 및 Windows Server 2008의 경우 ASP.NET 4.0이 등록되어있지 않을 수 있다. 따라서 아래와 과정을 거쳐야 한다.

1.cmd 를 관리자 권한으로 실행 후, 해당 경로로 이동
  C:\Windows\Microsoft.NET\Framework\v4.0.30319

2. aspnet_regiis.exe -i 명령어를 치면 설치메시지가 뜸. 기다리면 끝

'프로그래밍 > Network' 카테고리의 다른 글

IIS 외부 게시  (0) 2016.02.21
IIS로 웹페이지를 열어보자.  (0) 2016.02.20
Posted by GENESIS8

댓글을 달아 주세요


원본 출처 : 

http://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-6%ED%8E%B8-WAN-%EC%9D%B4%EB%9E%80-%EC%9B%90%EA%B1%B0%EB%A6%AC-%ED%86%B5%EC%8B%A0%EB%A7%9D




이젠 LAN과 MAN에 대해서 알아봤으니 WAN 에 대해서도 알아봐야 겠죠?

WAN 이란 녀석은 Wide Area Network 로써 " LAN 과 LAN을 연결하는, 즉 서로 멀리 떨어진 지역의 네

트워크를 연결해주게 됩니다"

즉, 우리는 WAN 을 통해 회사와 회사, 나라와 나라, 대륙과 대륙을 연결 해준다 보시면 됩니다

인터넷에 접속 한다라는 말은 WAN을 이용한다 보시면 되겠죠?



본격적으로 WAN에 대해 알아 보겠습니다.


지구촌 시대라는 말, 전 세계의 많은 지역과 인터넷이나 전화를 통해 통신 할 수 있습니다.

바로 네트워크가 가능하기 때문이지요, 한정적인 범위에서 사용 되는 네트워크가 LAN이라면

넓은 범위에서 사용 되는 네트워크가 WAN(Wide Area Network) 입니다.


Communication(통신)은 장비, 기기간에 정보를 네트워크를 통하게 됩니다.  즉 누구라도 네트워크에 

연결 되어 있다라고 하면 통신이 가능하게 되는 것이지요


멀리 떨어진 상대와 통신하기 위한 네트워크를 WAN 또는 광역 네트워크라고 합니다.

하나의 가정, 학교, 회사내의 빌딩에서 장비간에 통신에 사용 되는 네트워크를 LAN ( Local Area Network) 

라 하면, WAN은 학교와 학교, 회사와 회사, 나라와 나라를 연결 하는 네트워크가 WNA 입니다.



LAN과 WAN의 차이점으로는,

LAN은 거리가 비교적 짧기 때문에 고속 전송( 일반적으로 100Mbps 의 속도 )를 가지며

초기 설치 비용이 많으며 유지비용이 적은 LAN은 관리자가 직접 관리하는 만큼, 자유롭게 네트워크를 구축 

할수 있게 됩니다.


WAN은 물리적으로 넓은 범위를 가지기 때문에 고속 전송이 어려우며(수십 Kbps, 전용선 10~100Mbps)

ISP ( Internet Service Provider ) 인터넷 제공업체 에서 관리하며

허가 없이 네트워크를 구축 할수는 없지만 전문 업체( 우리나라에선 대표적인 KT, SK, LG )  관리하기 

문에 관리가 용이하다라고 할수 있습니다.


또한 WAN은 크게 두 종류로 분류할수 있는데, 바로 전용선과 교환회선 방식입니다.

전용선은, 연결 되는 상대를 미리 결정하여 신뢰성이 높고, 향상된 품질로 데이터를 전송 할 수 있으며

고속 전송이 가능하게 됩니다.

교환 회선 방식은 전화망이나 ISDN이 있으며 상대과의 사이에 회선은 연결, Bandwidth(대역폭)을 통해 어떠한 정보라도 전달 가능합니다. 하지만 패킷 교환 방식에 비해 회선 이용도가 낮아 데이터 현재 데이터

통신에는 사용 되지 않습니다.

추가적으로 패킷 교환 방식은 데이터 통신에 사용되는 축적 교환 방식으로, 송신처의 정보를 받아

수신처로 모든 정보를 일정한 길이의 데이터 또는 패킷(Packet)로 나누어 전송하는 방식입니다.



오늘의 정리


  • WAN(Wide Area Network) 는 광대역 네트워크, 광역 종합 통신망, 원거리 통신망 이라 불리우며

한 국가나 한 대륙 또는 전세계에 걸친 넓은 지역의 수많은 컴퓨터들이 연결 되어 있는 통신 망을 나타 낸다.

WAN은 주로 LAN이 모여 그들이 고속 전송 가능한 회선으로 기기 들간에 접속 되는 형태이며

우리가 흔히 말하는 인터넷(INTERNET)도 WAN으로 볼 수 있으며 유무선 통신 이외에 인공위성 같은 무선 

통신 또한 WAN 으로 연결된 네트워크라고 할수 있습니다.


http://gmng.tistory.com/52


LAN

LAN(Local Area Network)는 작은범위의 컴퓨터 네트워크를 말한다.

이더넷으로 구성되어 있어 물리계층(1계층)과 데이터링크 계층(2계층)과 관련있다.

LAN을 구축하는 환경을 만들기 위해서는 UDP케이블, LAN카드, 스위치가 필요하다.

LAN에서는 데이터를 전송할 시에는 브로드캐스트 방식으로 전달한다.

케이블구분

다이렉트 케이블은 PC 단말과 스위치, 스위치와 라우터간 접속용으로 사용된다.

(간단하게 다른 계층간 연결을 위해 사용된다.)


크로스 케이블은 스위치 간이나 라우터와 PC단말을 직접 연결할 때 사용된다.

(같은 계층끼리 혹은 1계층과 3계층을 이을시 사용된다.)



MAN(Metropolitan Area Network)
LAN보다 큰 지역을 지원.
국제 표준안은 DQDB(Distributed Queue Dual Bus)
이 규격은 전송 방향이 다른 두 버스로 모든 호스트를 연결하는 구조.


WAN

WAN이란 멀리 떨어진 LAN이나 내선 전화망을 상호 연결하기 위한 다리역할을 하는 광범위 대규모 네트워크이다.

보통 KT, SK, LG같은 전기 통신업자가 운영하고, 우리는 서비스 요금을 지불하고 WAN회선을 사용한다.

WAN 에서는 데이터를 point to point 방식으로 주고 받는다.


WAN 구성요소





① 엑세스라우터 : WAN에 접속하기 위한 라우터이다.


 회선종단장치 : LAN과 WAN을 구분 짓는 장치이다. 액세스 라우터의 WAN쪽 인터페이스 까지 WAN이다. 

보통 WAN전송방식과 LAN전송방식을 변환시킨다. 

예를 들면 데이터가 광케이블로 들어왔다면 LAN에서 사용하는 UTP케이블 전송 방식으로 바꾸어야 한다.

대표적인 회선종단장치에는 ONU, 모뎀, TA, DSU가 있다.

[ONU?]

 액세스 회선 : WAN 서비스를 이용하기 위해 WAN 중계국까지 접속하는 회선이다.


 WAN중계망 : 출발지와 목적지(액세스 포인트 사이)를 중계해주는 역할을 한다.


IP VPN과 인터넷 VPN

IP VPN은 통신사업자가 독자적으로 구축한 폐쇄 IP망입니다. 중.대규모 크기에 보안성과 품질성이 높습니다.

인터넷 VPN은 인터넷상에서 구현된 VPN(Virtual Private Network,가상 사설망)입니다. 보통 VPN장치 사이가 가상의 암호화 터널로 되어있습니다.

소규모 크기의 네트워크용 으로써 품질은 낮지만 비용도 그만큼 쌉니다.


인터넷

컴퓨터 네트워크를 상호 연결시킨 세계 규모의 일반 공중 네트워크입니다.

ISP(Internet Service Provider,인터넷 서비스 제공자)는 각 ISP간 상호 접속점을 공유하여 인터넷에 접속합니다.







'프로그래밍 > 서버 프로그래밍' 카테고리의 다른 글

WAN과 LAN. MAN  (0) 2016.02.21
쿠키(cookie)와 세션(Session)  (2) 2016.01.29
redis란?  (0) 2016.01.21
Posted by GENESIS8

댓글을 달아 주세요

http://withcoding.com/26


위의 글을 통해서 설치

'프로그래밍 > MySQL' 카테고리의 다른 글

MySql DB 작성해보기  (1) 2016.03.13
MySQL 저장 프로시져 내에서 발생한 에러 처리 (Error Handling)  (0) 2016.02.23
MySql 설치하기  (0) 2016.02.21
Auto Increment란  (0) 2016.02.05
MySql 주석을 달자  (0) 2016.02.01
MY SQL 데이터 타입  (0) 2016.01.21
Posted by GENESIS8

댓글을 달아 주세요

IIS를 먼저 키고 페이지를 만들자..


IIS를 먼저 해보자.


자 이제 눌러서 켜보면.. 오잉?





처음 튜토리얼로 만들어진 곳을 보면 C:\inetpub\wwwroot의 내부에 iisstart.htm이 있는 것을 볼 수 있다. 즉 진입점이 필요하다는 것인데.. 복사해서 내용을 좀 바꿔본다.




"바탕" 이라고 해놓았지만 이 경우 정상적으로 적용이 안되므로, 영어로 작성하자.

추후 background.JPG와 같이 수정하였다.




누르면 블로그로 잘 들어가진다. 

로컬 ip로도 잘 들어가진다. 자 이걸로 접속이 되는 지 확인해보자.




그렇다면 외부에서는?


창이 뜨지 않는다.


이유가 뭘까 하고 보니..



나는 공유기를 쓰고 있었다.


포트 포워딩을 해줘야 했다.


짤막하게 적는다.




등록을 하려고 보면 몇 개의 내역들이 있는 데 다음과 같다.

소스 IP 주소 -> 트래픽을 일으킨 대상의 IP

소스 포트 -> 위의 IP에서 연결할 때 사용한 포트 번호

외부 포트 -> 나에게 던져주는 공유기가 접근 받은 포트 번호

내부 IP 주소 -> 실제 IP가 아니라, '공유기에게' 내가 할당받은 ip 주소.

내부 포트 ->그래서 외부 포트로 부터, 내 어디에 받을 것인지?


범위가 설정 가능하게 [ ] ~ [ ] 로 되어 있는 게 보이는데, 범위로 설정한다면

이를테면

외부 포트 -> 80 ~ 81 

내부 IP -> ~~~~

내부 포트 -> 80 ~ 81


공유기에게 80 포트로 접근한 애들은 내 80 포트에 연결이 들어 올 수 있고

81은 81 포트로 갈 수 있다.


외부 80에서 내부 80, 81로 했을 경우 80 ->80 으로만 연결이 된 것으로 보아.. 설정상의 차이거나 아니면 처음부터 그렇게 되어 있는 것 같다.



여기서 끝이 아니었다.


이렇게 해서 나한테선 잘 되는데, 외부에서는 전혀 먹통일 수가 있다.


이는 방화벽 때문에 일어나는 현상인데

방화벽 -> 고급 으로 간 뒤, 인바운드 규칙을 추가해주어야한다.




80은 기본적으로 잘 작동 될 수도 있다. World Wide Web 때문에 기존에 있을 수 있는 설정이니까.. 그렇지만 새로운 포트를 파고자 할 경우 꼭 인바운드 규칙을 만들어주자.








81 포트로도 아주 원만하게 접속이 잘 된다.



'프로그래밍 > Network' 카테고리의 다른 글

IIS 외부 게시  (0) 2016.02.21
IIS로 웹페이지를 열어보자.  (0) 2016.02.20
Posted by GENESIS8

댓글을 달아 주세요

http://www.tiptech.net/lcture/asp/basic/whatasp.html

http://minsookim.tistory.com/entry/ASP-ASP-%EB%9E%80

http://blog.naver.com/mobilism/70151511306

http://blog.daum.net/ssc1978/13852608


ASP란?

Active Server Page의 약자로, 동적으로 서버에서 작동하는 페이지를 의미. (반응에 의한 변화가 없고 고정적인 HTML은 정적인 페이지에 해당한다.) 


서버 측의 스크립트(Server Side Script)다.

(서버 측에서 작업의 처리를 위해 사용하는 언어다. 반대되는 개념으로 클라이언트 사이드 스크립트로 대표주자 자바 스크립트가 있다. 자바스크립트는 '사용자' 쪽에서 실행되는 반면, ASP 는 서버 측에서 실행된다.)


서로 대화를 주고 받듯이 웹 페이지를 만들 수 있도록 MS사가 제공한 application

NT에 IIS(Internet Information Server)를 설치하므로써 사용 가능

IIS는 MS사에서 제공하는 웹 서버로, ASP는 IIS 3.0 이상에서만 동작

ASP 파일은 *.ASP 형태로 저장되어야 하며, 보통 서버 스크립트 언어를 사용

 서버 스크립트란?

ASP는 기존의 VBScript나 JavaScript와 크게 다를바 없는 스크립트입니다. 다만 '서버사이드 스크립트'라고 해서 서버에서 실행된다는 것이 다릅니다.

ASP에서 서버 스크립트를 구분하는 구분자는 <% 와 %>로, 이 사이에 사용된 스크립트는 서버에서 실행됩니다.

그렇기 때문에 브라우저에서 HTML 보기를 해도 ASP 코드 내용은 보이지 않습니다.

서버에서 실행되고 그 결과만을 가져다 보여주기 때문에 HTML 소스에는 그 결과값만 보이게 됩니다.


PHP와는 다르게 윈도우 운영체제에서만 작동한다는 단점이 있다. 정확하게는 마이크로소프트사의 NT머신 IIS3.0 이상에서만 동작하는 특별한 페이지이다.


작동원리

웹사이트 이용자가 어떠한 ASP페이지에 접속하면 이 ASP페이지는 ASP.DLL을 거처 해석된다음 HTML태그로 바뀌어진다. 그럼 웹브라우저가 이 HTML을 해석하여 화면에 보여주는것이다.



왜 ASP를 사용하나요

나모나 HTML로 홈페이지를 만들어 본 사람들은 어느 정도 시간이 지나면 자기의 생각을 홈페이지에서 마음대로 구현할 수 없다는 것에 실망을 하게 될 것입니다.

자바스크립트도 해 보고 플래쉬도 해 보지만 역시 만족스럽지 못합니다.

이 때 눈을 돌리게 되는 것이 ASP라고 할 수 있지요. 물론 대신에 CGI나 PHP라는 말도 많이 듣게 되겠지만.....그러면 사람들은 왜 ASP를 사용하고 있을까요?

 

1) 사용자와의 동적인 상호작용을 원하기 때문입니다.

HTML은 기본적으로 정보를 보여주기만 합니다. 하이퍼링크를 통해 사용자가 요청을 하면 웹서버가 그 요청에 응답하여 원하는 웹 페이지를 보여주는 방식으로 작업이 진행되지요.

그것도 일종의 상호작용이라고 할 수는 있겠지만 웹 서버를 운영하는 사람과 사용자가 서로 어떤 정보를 주고 받는다든지 아니면 사용자들간에 서로 정보를 주고 받는다든지 하는 일은 기본적으로 불가능합니다. ASP는 HTML로 불가능한 이런 일들을 가능하게 해 줍니다.

 

2) 서버측 자원을 사용해야 하는 경우입니다.

사용자로부터 어떤 내용을 입력받아 데이터베이스에 저장해야 할 경우와 같은 건데 이럴 경우는 반드시 ASP를 사용해야만 합니다.

예를 들어 게시판 작성, 파일 업로드, ID 인증 등과 같이 서버에 어떤 정보를 저장하거나 저장된 정보를 이용해 일을 하는 경우에는 ASP를 사용해야만 합니다.

왜냐하면 HTML은 원칙적으로 클라이언트에서 번역되는 문서이기 때문에 서버의 다른 자원에 접근할 수가 없기 때문입니다

 

3) 스크립트의 안정적인 실행을 위해서입니다.

자바스크립트를 예를 들어 볼까요? 자바스크립트도 날이 갈수록 버전이 높아지고 있습니다. v1.0, v1.1, v1.2, v1.3... 그러다보면 상위 버전의 자바스크립트를 삽입한 HTML문서가 어떤 웹 브라우저에서는 의도하는대로 번역이 되지 않는 사태가 벌어질 수도 있습니다. 이럴 경우 서버에서 실행되는 스크립트라면 서버에서 HTML형태로 번역된 후 넘겨지게 되니까 어떤 웹 브라우저에서라도 잘못될 염려가 없을 것입니다.

 

4) 스크립트 소스를 감추기 위해서입니다.

클라이언트측 스크립트들은 HTML 속에 포함되어 서버에서 클라이언트로 전송된 다음 클라이언트의 웹 브라우저에서 번역됩니다. 따라서 사용자들은 소스보기를 통해 스크립트의 내용을 볼 수가 있습니다.

그러나, 서버측 스크립트를 사용함으로써 개발자는 자신의 독특한 알고리즘을 감출 수가 있습니다. 물론 이런 목적을 위해 ASP를 사용한다는 것을 좋다고 할 수는 없겠지만 이런 기술로 밥먹고 사는 사람들에게는 꼭 필요한 것이 아닐까요?   

 



'프로그래밍 > ASP' 카테고리의 다른 글

ASP란 뭘까..  (0) 2016.06.20
IIS 및 ASP 사용 환경 구성  (0) 2016.06.20
ASP란 무엇인가  (0) 2016.02.20
Posted by GENESIS8

댓글을 달아 주세요

출처 : 위키백과


멀티스레딩(Multithreading) 컴퓨터는 여러 개의 스레드를 효과적으로 실행할 수 있는 하드웨어 지원을 갖추고 있다. 이는 스레드가 모두 같은 주소 공간에서 동작하여 하나의 CPU 캐시 공유 집합과 하나의 변환 색인 버퍼 (TLB)만 있는 멀티프로세서 시스템 (멀티 코어시스템)과는 구별한다. 그러므로 멀티스레딩은 프로그램 안에서 병렬 처리의 이점을 맛볼 수 있지만 멀티프로세싱 시스템은 여러 개의 프로그램들을 병렬로 처리할 수 있다. 멀티프로세싱 시스템이 여러 개의 완전한 처리 장치들을 포함하는 반면 멀티스레딩은 스레드 수준뿐 아니라 명령어 수준의 병렬 처리에까지 신경을 쓰면서 하나의 코어에 대한 이용성을 증가하는 것에 초점을 두고 있다.


장점[편집]

  1. 응답성 : 대화형 프로그램을 멀티스레드화하면, 프로그램의 일부분(스레드)이 중단되거나 긴 작업을 수행하더라도 프로그램의 수행이 계속되어, 사용자에 대한 응답성이 증가된다. 예를 들어, 멀티스레드가 적용된 웹 브라우저 프로그램에서 하나의 스레드가 이미지 파일을 로드하고 있는 동안, 다른 스레드에 사용자와의 상호 작용이 가능하다.
  2. 자원 공유 : 스레드는 자동적으로 그들이 속한 프로세스의 자원들과 메모리를 공유한다. 코드 공유의 이점은, 한 응용 프로그램이 같은 주소 공간 내에 여러 개의 다른 활동성 스레드를 가질 수 있다는 점이다.
  3. 경제성 : 프로세스 생성에 메모리와 자원을 할당하는 것은 비용이 많이 든다. 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에, 스레드를 생성하고 문맥교환을 하는 편이 보다 경제적이다.
  4. 멀티프로세서 활용 : 멀티프로세서 구조에서는 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다. 단일 스레드 프로세스는 CPU가 많아도 CPU 한개에서만 실행된다. 즉, 다중 스레드화를 하면 다중 CPU에서 병렬성이 증가된다.

단점[편집]

  • 다중 스레드는 캐시나 변환 색인 버퍼(TLB)와 같은 하드웨어 리소스를 공유할 때 서로를 간섭할 수 있다.
  • 하나의 스레드만 실행 중인 경우 싱글 스레드의 실행 시간이 개선되지 않고 오히려 지연될 수 있다.
  • 멀티스레딩의 하드웨어 지원을 위해 응용 프로그램과 운영 체제 둘 다 충분한 변화가 필요하다.
  • 스레드 스케줄링은 멀티스레딩의 주요 문제이기도 하다.


멀티스레드 모델[편집]

다-대-일(Many-to-One)[편집]

여러 개의 사용자 수준 스레드들이 하나의 커널 스레드(프로세스)로 매핑되는 방식으로, 사용자 수준에서 스레드 관리가 이루어진다. 주로 커널 스레드를 지원하지 않는 시스템에서 사용하며, 한 번에 하나의 스레드만이 커널에 접근할 수 있다는 단점이 있다. 하나의 스레드가 커널에 시스템 호출을 하면 나머지 스레드들은 대기해야 하기 때문에 진정한 의미의 동시성을 지원하지 못한다. 다시 말해, 여러 개의 스레드가 동시에 시스템 호출을 사용할 수 없다. 또한 커널 입장에서는 프로세스 내부의 스레드들을 인식할 수 없고 하나의 프로세스로만 보이기 때문에 다중처리기 환경이라도 여러 개의 프로세서에 분산하여 수행할 수 없다.

일-대-일(One-to-One)[편집]



사용자 스레드들을 각각 하나의 커널 스레드로 매핑시키는 방식이다. 사용자 스레드가 생성되면 그에 따른 커널 스레드가 생성되는 것이다. 이렇게 하면 다-대-일 방식에서 시스템 호출 시 다른 스레드들이 중단되는 문제를 해결할 수 있으며 여러 개의 스레드를 다중처리기에 분산하여 동시에 수행할 수 있는 장점이 있다. 그러나 커널 스레드도 한정된 자원을 사용하므로 무한정 생성할 수는 없기 때문에, 스레드를 생성할 때 그 개수를 염두에 두어야 한다.

다-대-다(Many-to-Many)[편집]

여러 개의 사용자 스레드를 여러 개의 커널 스레드로 매핑시키는 모이다. 다-대-일 방식과 일-대-일 방식의 문제점을 해결하기 위해 고안되었다. 커널 스레드는 생성된 사용자 스레드와 같은 수 또는 그 이하로 생성되어 스케줄링한다. 다-대-일 방식에서 스레드가 시스템 호출시 다른 스레드가 중단되는 현상일-대-일 방식에서 사용할 스레드의 수에 대해 고민하지 않아도 된다. 커널이 사용자 스레드와 커널 스레드의 매핑을 적절하게 조절한다.







Posted by GENESIS8

댓글을 달아 주세요

Thread-Package Architectures 는 다음의 구조

user-level threads (1-on-N)

kernel supported threads (1-on-1)

multi-level (userland/kernel hybrid) threads (M-on-N)


[User-level threads]

User-Level threads는 응용 프로그램과 Link/Load가 되는 라이브러리로 구현되어집니다. 이 라이브러리에 동기화, 스케줄링 기능을 모두 담고 있습니다. 커널에서는 아무런 지원을 해주지 않으며, 커널이 보기에는 단지 그냥 Single process일 뿐입니다. 프로세스마다 런타임 라이브러리의 Copy가 호출되므로 스케줄링 정책을 프로세스마다 달리 취할 수 있으며, 각 Thread마다 time quantum을 소모할 필요 없고, 런타임 라이브러리가 context를 유지하기때문에 switching을 할 필요가 없습니다. 그래서 User-Level Threads는 빠르고, 매우 효율적입니다. 그러나 장애가 꽤 있습니다.

1. Blocking System Calls
Blocking function이란 처리가 완료되지않으면 return되지 않는 함수인데, 만약 특정 Thread에서 Blocking이 되어 버리면, 전체 process가 Blocking이 되어버립니다. 이런 이유로 운영체제가 제공하는 non-blocking 함수들만 사용해야 하며, 사용 빈도가 높은 함수(read,select,wait,...)들은 해당 함수의 non-blocking 버젼으로 대체해야할 필요가 있습니다. 
2. Shared System Resources
동기화나 Locking없이 Thread끼리 공유하는 변수(드러나지 않고 감춰져 있는 경우)가 있을때, 그 Thread가 thread-safe하지 않으면 Overwrite되는 문제가 생길 수 있습니다. 이 이유로 사용할 함수는 재진입이 가능해야합니다. User-Level뿐만아니라 Kernel-Level 함수까지 모두.
3. signal Handling, Thread Scheduling
User-Level에서 이것을 구현하기란 상당히 어렵습니다. Timeslice를 다루기 위해 Hardware Clock 인터럽트를 보통의 방법으로는 받지 못합니다. 선점형(Preemptive) 스케줄링을 하기 위해서는 커널로 부터 Time Siganl을 받는 함수를 등록해두어야 하며, Timer Alarm Siganl을 다루는것은 다른 시그널을 다루는 것보다 아주 어렵습니다.


4. Multiprocess Utilization
하나의 프로세스에서 Time을 공유하고 있기때문에 여러개의 CPU를 동시에 사용할 수는 없습니다.


정리 - 구현상의 어려움과 복잡성 그리고, 몇가지 장애에도 불구하고, concurrency와 efficiency의 이득을 가져다 줍니다.


[Kernel-level threads]

Kernel-level에 있는 Threads는 독립적으로 스케줄되므로 특정 Thread에서의 Blocking이 process로 전파되지 않습니다. 그래서 Blocking System Calls를 이용할수 있습니다. 또한 각 Threads끼리 Signal을 주고 받을 수 있습니다. 
Kernel-level threads는 특별히 고려할만한 장애를 가지고 있지는 않습니다. 물론 마찬가지로 Thread-Safe해야 하지만, OS 개발자들은 대개의 표준 라이브러리를 Thread-Safe하게(재진입해도 문제없겠끔) 만들기에 User-level threads보다 통상적으로 보다 덜 말썽을 피웁니다.

Kernel-level threads는 안정성에 비해서 너무 느리다는게 큰 단점입니다. 바로 Thread Context-Switch 때문입니다. 마로비치의 연구에 의하면 10배정도 느리다고 합니다.


[multiplexed threads]

User-level threads와 Kernel-level threads를 섞은 방법입니다. User-level thread(줄여서 Thread)는 LWP(가벼워진 프로세스, Lightweight Processes)에 의해 multiplex됩니다. 커널은 LWP를 스케줄링/실행하고, LWP는 대기중인 thread를 골라서 실행합니다. thread는 하나의 LWP에서 실행이 되어지며, Time slice가 바뀔때 LWP도 바뀌어질 수 있습니다. 프로그래머는 thread를 사용할 수도 있고, LWP를 직접 사용할수 있고, 둘 모두를 동시에 사용할 수도 있습니다.

User-level threads처럼 작동하면서 Hardware Parallelism과 Blocking calls에 대처할 수 있으며, Context-Switch을 많이 하지 않습니다.

이것의 장애는, LWP가 Blocking이 되면 이 LWP가 가진 몇개의 Thread도 동시에 Blocking이 됩니다. 또한 LWP의 Context-Switch 비용은 Kernel-level threas보다 결코 싸지 않습니다. 또한 다중 CPU에서 효율적일려면 각 Thread는 각각 다른 LWP에 할당되어 있어야 합니다. 각 Thread의 LWP 할당과 LWP의 CPU 할당은 별개로서 이루어지기 때문에, 각 Thread가 서로다른 CPU에 할당될려면 이렇게 작동하겠끔 하는 매커니즘이 따로 존재하여야합니다.

이러한 이유로 인해 LWP에 의한 multiplexed threads는 궁극의 해결책은 못됩니다. 이상적으로, Kernel-level threads의 결정적인 단점인 Thread Context-Switch를 user-level threds만큼 빠르게만 한다면 그것으로서 모든 장애는 해결됩니다. 물론 이 방법은 있지만 여전히 문제점을 가지고 있습니다. 아래 방법입니다.

[Scheduler Activation(kernel-supported user-level threads)]

이 방법은 User-level threads들을 위한 특별한 지원을 kernel이 해주는겁니다. 그 부분은 Scheduler Activation이라 합니다. User-level threads 라이브러리는 커널에게 프로세스를 요구할때와 양도할때를 알려줍니다. 그러면 커널의 Scheduler Activation은 이것을 커널에 의한 프로세스 주소 공간으로 할당된 Virtual Processor로 표현합니다. 여기서 스케줄링과 Blocking 감지가 이루어지며, Granted processor,Preemptive thread,Blocked,Unblocked등등의 Event를 User-level의 런타임 시스템에게 알려줍니다.

개념적으로 이 방법이 가장 확실합니다만 이것은 단 한가지, 그러나 치명적일 수도 있는, 약점이 있습니다.

커널과 라이브러리 코드가 효율적인 교신을 위해 같은 주소 공간을 공유하기 때문에 예외적으로 높은 신뢰를 가지고 있어야 하며 bug-free이어야합니다. 이 방법은 개념적으로 비정상적인 작동(의도적인 비정상적 작동 포함)과 버그에 대해서 강건함(robust)을 가지지 못합니다.

SunOS는 multiplexed threads를 지원합니다. 그외(WindowsNT,MACH,OS/2)는 Kernel-level threads를 지원합니다. 이 책에서는 MACH가 Kernel-level threads를 지원한다고 되어 있지만 어떤 Web site에 가니 MACH도 LWP도 지원하는걸로 되어 있군요. 이것이 multiplexed threads를 지원한다라는건지 아님 User-level threads의 구현상의 한방법인지는 모르겠습니다. 어쩌면 둘은 말만 다를뿐 별로 차이가 없는 것일지도 모르겠고.

Linux에서 작동되는 User-level threads는 아래와 같습니다.
Bare-Bones Threads,CLthreads,DCEthreads,FSU Pthreads,JKthread,LinuxThreads,LWP,NThreads (Numerical Threads),PCthreads,Provenzano Pthreads,QuickThreads,RexThreads.


http://www.sftw.umac.mo/resource/LDP/FAQ/Threads-FAQ/ThreadLibs.html



https://kldp.org/node/295#comment-764


Quote:
사용자 수준은 문맥교환(context switching)의 오버해드가 없다.

사용자 쓰레드 방식이 커널 쓰레드보다 오버헤드가 적은(없지는 않음) 이유는
쓰레드간 전환할 때마다 커널 스케줄러를 호출할 필요가 없기 때문입니다.
커널 스케줄러로 진입하려면 프로세서 모드를 사용자 모드에서 커널 모드로
전환해야 하는데, 이때 사용자쪽 하드웨어 레지스터를 전부 저장시키고, 커널
레지스터를 복구하고, 기타 등등...의 수많은 작업이 밑에서 일어납니다.
따라서 사용자 모드와 커널 모드를 많이 왔다갔다 할 수록 성능은 급격하게
떨어지는 것이죠. 사용자 쓰레드는 쓰레드 스케줄러가 사용자 모드에만 있기
때문에 그런 오버헤드는 발생하지 않습니다.

Quote:
커널 수준은 사용자 수준 보다 효율적일 수 있다.

그런데 사용자 쓰레드의 결정적인 단점은 프로세스내의 한 쓰레드가 커널로
진입하는 순간 나머지 쓰레드들도 전부 정지된다는 점입니다. 커널이 쓰레드의
존재를 알지 못하므로 불가피한 현상입니다. 쓰레드가 커널로 진입할 때는
write(), read(), ...같은 시스템 호출을 부를 때인데, 시스템 호출 길이가
짧아서 바로 리턴할 때는 문제가 없지만 연산이 길어지면 상당한 문제
됩니다. 전체 프로세스의 응답성이 확~ 떨어지죠.

그리고 커널 쓰레드를 쓰면 멀티프로세서를 활용할 수 있다는 큰 장점
있습니다. 사용자 쓰레드는 CPU가 아무리 많더라도 커널 모드에서 쓰레드
단위로 스케줄이 안되므로 각 CPU에 효율적으로 쓰레드를 배당할 수 없는
문제가 있습니다(프로세스 단위로만 배당이 되므로).

그래서 리눅스, 윈도, 솔라리스를 비롯한 대부분의 운영체제는 사용자 쓰레드를
쓰지 않고 커널 쓰레드, 또는 커널/사용자 쓰레드 혼합 방식을 쓰는 추세입니다.

Quote:
그리고 현재 리눅스에서는 두가지 쓰레드 모델이 모두 지원 되나요?

예, 모두 지원됩니다.

쓰레드 방식은 크게 세가지가 있습니다. 이중 사용자 쓰레드는 요즘들어 
리눅스에서는 별로 쓰는 사람이 없는 것 같고, 1-on-1 커널 쓰레드 방식인
glibc내의 LinuxThreads가 가장 널리 쓰입니다. 최근에는 이걸 더 발전시킨
NPTL(Native POSIX Threading Library)가 활발히 개발중에 있습니다. 
커널/사용자 쓰레드 혼합 방식인 NGPT(Next Generation POSIX Threads)
도 IBM의 지원하에 최근 2.2.0까지 나와 있습니다. 둘간의 차이를 여기서
설명하기엔 좀 긴 것 같고, 전자가 후자보다 훨씬 간단한 반면, 후자의 성능이
전자보다 다소 높은 것으로 알려져 있습니다. 여담입니다만, NPTL이 처음
나왔을 때 우리 것이 NGPT보다도 성능이 훨씬 좋다고 자랑(?)을 했더니
NGPT팀이 자극을 받았나 봅니다. NGPT 홈페이지에 가면 새버전(2.2.0)
성능이 LinuxThreads는 물론 NPTL도 능가한다고 큼지막하게 써놨습니다.

Quote:
kernel thread는 user thread에서 LWP 자료구조를 통해 연결되는데

중요한 것은 아닙니다만...

LWP는 경량 프로세스(lightweight process)의 준말로, 솔라리스에서(그리고
최근의 NetBSD에서) 내부적으로 쓰는 말입니다. 리눅스, 윈도, FreeBSD에선
그냥 thread라고 합니다.


http://mesl.khu.ac.kr/?document_srl=271099


커널쓰레드는 커널단위로 쓰레드가 할당되기 때문에 운영체제가 각 커널 쓰레드 목록을 관리하구요

유저 레벨 쓰레드는 말그대로 프로세스 안에 유저단위로 쓰레드가 움직이는 양상이기때문에 
운영체제입장에서 보면 결국은 하나의 프로세스가 모든 쓰레드를 관리하는 모양이 됩니다.
(운영체제가보면 프로세스는 하나가 돌고있는거라고 볼수 있겠네요)
그렇기 때문에 만일 그 프로세스 내에서 문제가 생겨서 프로세스에러가 생긴다면
유저레벨 쓰레드에서는 프로세스의 망가짐으로 인해 모든 유저가 큰 타격을 받을수가 있습니다. 하지만 커널모드쓰레드는 각 커널이 개별적이라 그런 위험부문에선 안정적이라고 볼 수도 있겠네요

더 붙여 말하자면 user-level thread는 커널자체에서 개념을 바꾸기 힘들기 때문에 임시적으로 사용하는 방법이었고, 추후에 나오는 커널들에서 완벽한 스레드를 지원하는 kernel-level thread로 바뀌었다


http://dakuo.tistory.com/93




유저 영역 : 사용자가 구현한 프로그램 동작시 사용하게 되는 메모리 영역

커널 영역 : 운영체제 동작시 사용하게 되는 메모리 영역


커널 레벨 쓰레드 :

쓰레드를 생성 및 스케줄링하는 주체가 커널


장점 : 안전성과 다양한 기능

단점 : 유저 모드와 커널 모드로의 전환으로 인해 성능이 저하된다.

(참고 : 사용자가 구현한 프로그램은 기본적으로 유저모드에서 동작하다가 Windows 커널이 실행되어야 하는 경우
커널 모드로의 전환이 일어나고 일을 마치면 다시 유저 모드로 전환된다)


유저 레벨 쓰레드 :

커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 활용

(참고 : 스케줄러는 쓰레드를 지원하지 않아 쓰레드의 존재를 모른다. 따라서 프로세스 단에서 스케줄링을 한다
따라서 쓰레드 끼리의 스케줄링은 유저가 구현해야 한다) 

장점 : 유저모드에서 커널모드로의 전환이 필요없다. 성능이 좋다

단점 : 프로그래밍 하기 어렵고 커널 레벨 쓰레드에 비해 결과 예측이 어렵다.



http://hyunbogi.tistory.com/88







Posted by GENESIS8

댓글을 달아 주세요

  1. 2020.06.28 23:33  댓글주소  수정/삭제  댓글쓰기

    비밀댓글입니다