html 공부를 하다가 가장 많이 보는 태그 중 하나인 태그를 따로 정리하려고 한다. 그 이유는 속성이 여러가지인데 이를 다 알아야 나중에 사용할 수 있을것 같았다.

input tag 속성
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<label for="lname">last name : </label>
<input type="text" id="lname" name="lname"><br>
<input type="button" title="tooltip" value="버튼"><br>
<input type="checkbox" value="checkbox">checkbox<br>
<input type="color" id="color1"><br>
<input type="date"><br>
<input type="email"><br>
<input type="file"><br>
<input type="hidden" value="hidden"><br>
<input type="image"><br>
<input type="number" max="12" min="0"><br>
<input type="password"><br>
<input type="radio">radio button <br>
<input type="range"><br>
<input type="reset"><br>
<input type="search"><br>
<input type="tel"><br>
<input type="time"><br>
<input type="url"><br>
<input type="week"><br>
<input type="submit" value="작성 완료">
</body>
</html>

이렇게나 많다. 사실 전부 외울 순 없지만 이렇게 어떤 속성들이 있는지 알고 필요할 때 생각나서 찾아볼 수 있게 하는것이 중요한것 같다.

참고로 <label>태그는 for속성으로 적어둔 아이디와 다른 input태그의 id와 일치하게 작성하면 label태그로 작성해둔 텍스트를 클릭하는 것으로 작성 혹은 선택을 할 수 있다.

예를 들어 속성이 checkbox였다면 체크 할 수 있다. 위 예제에서는 last name의 텍스트를 클릭하면 해당 id와 연결된 text에 작성할 수 있게 마치 텍스트 필트를 클릭한거 같은 효과를 볼 수 있다.

'FRONT > Html' 카테고리의 다른 글

[Front] HTML 작성 가이드  (0) 2020.06.11
[Front] HTML 태그(tag)  (0) 2020.06.10
[Front] HTML 기초  (0) 2020.06.03

지금까지 html로 Layout을 잡았다. 하지만 CSS로 Layout을 잡을 수 있다.

Display

CSS로 Layout을 수정할 수 있는 속성 중 하나로 사용하는 요소(태그)가 block단위인지 inline단위인지 잘 알고 사용해야 한다.

1.block : 블럭 단위로 영역이 형성되는 레이아웃으로 대표적인 요소로 div와 p가 있다.

2.inline : line혹은 작성한 문자열 단위로 영역이 형성된다.

예를 들어보자

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>CSS Layout</title>
</head>
<body>
<div style="color:red">
  이곳은 div영역입니다.
  block단위 요소 입니다.
</div>
<p style="color:blue">
  이곳은 p영역입니다.
  block단위 요소 입니다.
</p>
<span style="color:purple">이곳은 span영역입니다. inline단위 요소입니다.</span>
이곳은 body 영역입니다.
</body>
</html>

이처럼 div와 p는 block 단위의 요소인것을 볼 수 있다. 여백이 남았음에도 불구하고 해당 블럭 밖에 다음 요소가 위치하는것을 볼 수 있다. span은 inline요소이므로 문자열 단위로 영역이 형성되어 다음 문자열이 바로 옆에 위치함을 볼 수 있다.

이러한 속성을 가진 요소들을 수정 해 보면

이러한 block요소들을 제거 해 보자

* {
  border:1px solid blue;
}
div,p{
 display: inline; 
}

span{
  display: block;
}

위 css파일만 적용 시키면 span과 div의 display가 바뀐것을 볼 수 있다.

position

CSS로 영역 말고 위치를 지정해 줄 수 있다.

  1. static : 기본, 쓰지 않아도 자동으로 지정 되어있다.
  2. relative : 가장 상위에 있는 static을 기준으로 위치를 지정할 수 있다.
  3. absolute : static을 제외한 상위 영역을 기준으로 위치를 지정할 수 있다. 상위 영역이 없다면 body를 기준으로 한다.
  4. fixed : 현재 화면의 왼쪽 상단을 기준으로 한다.
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>CSS Layout</title>
</head>
<body>
<div class="pos1">span1</div>
<div class="pos2">span2</div>
<div style="position:relative">
  <span style="background-color:gray">dfdssdfsjsovist nsovisniostisld</span>
  <div class="pos3">span3</div>
</div>
</body>
</html>
* {
  border:1px solid blue;
}

.pos1{
  position:static;
}

.pos2{
  position:relative;
  top:2px;
  bottom:5px;
  left:5px;
  z-index:1;
}

.pos3{
  position:absolute;
  background-color:red;
  left:2px;
  top:5px;
}

.pos4{
  position:fixed;
  color:blue;
}

이처럼 span2는 span1을 기준으로 마진을 둔 것이고 span3는 상위div를 기준으로 마진을 둔 것인데 그 div가 없다면 body를 기준으로 마진을 두었을 것이다.

'FRONT > CSS' 카테고리의 다른 글

[Front] CSS 기초  (0) 2020.06.11

HTML을 작성하는 방법과 정해진 룰이 있는것은 아니다. 하지만 이는 어디까지 가이드라인이고 암묵적으로 행해지는 룰 같은 것이다.

  1. HTML 코드는 대소문자를 구분하지 않지만 소문자로 작성하는것을 권장한다.
  2. HTML 코드의 모든 태그는 시작과 끝을 작성하는 것을 권장한다.
  3. HTML의 속성 값( value )는 “”안에 작성하는 것을 권장한다.
  4. <img> 태그를 사용 할 경우 alt속성을 지정하고 width, height를 통해 크기를 지정하는것을 권장한다.
  5. 태그 내에 속성과 속성 값을 작성할 때 등호 사이에 공백을 쓰지 않는것을 권장한다. ex) <img alt=”공백 없이 작성” src = “공백 있이 작성”>
  6. 긴 코드 라인을 피해라
  7. <title> 요소를 건너뛰지 말고 작성해라
  8. <head>와 <body>태그를 작성하고 안에 정의하는 것을 권장한다.
  9. <meta>에 charset 속성을 통한 인코딩을 정의하는 것을 권장한다.
  10. viewport를 설정하는것을 권장한다.

'FRONT > Html' 카테고리의 다른 글

[Front] HTML input 태그(tag)  (0) 2020.06.13
[Front] HTML 태그(tag)  (0) 2020.06.10
[Front] HTML 기초  (0) 2020.06.03

[Front] CSS 기초

CSS

css는 html을 디자인하는 속성 혹은 문서를 의미한다. 

CSS는 Selector, property, value의 형태를 가지고 있다.

CSS 적용 방법

html코드에 CSS를 적용하는 방법은 3가지가 있다.

 

1.inline : inline방식은 말 그대로 라인에다가 정의하는 방식으로 원하는 태그 내에 style 속성을 사용하여 CSS를 적용하는 것이다.

  • 형식 <태그 style=”속성 값”> *속성값이 여러가지인 경우 큰 따옴표 안에 모두 정의하고 속성 값마다 세미콜론(;)으로 구분해야한다.
  • selector =태그,id,class,   property , value=속성 값
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <div>
    <p style="color:red; font-size:20px;">
      이곳은 문단입니다.
      색은 빨간색이죠.
    </p>
  </div>
</body>
</html>

이런 식으로 디자인 할 수 있다.

 

2. internel : 내부에서 정의 하는 방법으로 해당 html파일의 <head>태그 내에 <style>태그로 정의하면 된다.

  • 형식 : <style> 변경하고자 하는 태그 or id or class{ 속성 값 }
  • selector = 변경하고자 하는 태그, property, value = 속성 값
<!DOCTYPE html>
<html>
<head>
  <style>
    div {
      color:red;
      font-size:20px
    }
  </style>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <div>
    <p>
      이곳은 문단입니다.
      색은 빨간색이죠.
    </p>
  </div>
</body>
</html>

역시 똑같이 나오는것을 알 수 있다.

 

3. externel : 외부에서 정의하는 방법으로 해당 html외에 .css로 확장자가 css인 파일을 만들어 적용하고자 하는 html과 연결하여 사용한다.

  • 형식 : 형식은 internal <style>태그 내부에 정의 하는 방식과 같다. 다만 css는 style을 위한 파일이기 때문에 style태그를 정의 할 필요 없다.
  • 연결 방법 : <link rel=”stylesheet” href=”css파일의 경로” type=”text/css”>태그를 연결 하고자 하는 html의 <head>태그 내에 선언하면 된다.
/* CSS용 주석*/
div {
  color:red;
  font-size:20px
}​
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="css파일이름.css">
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <div>
    <p>
      이곳은 문단입니다.
      색은 빨간색이죠.
    </p>
  </div>
</body>
</html>

결과 역시 셋다 같다.

4.혼합 : 가장 많이 쓰는 경우로 기본적으로 externel로 정의하고 특별한 부분만 inline이나 internel방식을 사용한다.

<!DOCTYPE html>
<html>
<head>
  <style>
    p {
      color:red;
    }
  </style>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <div>
    <p style="font-family:굴림; font-size:20px;">
      이곳은 문단입니다.<br>
      글꼴은 굴림 입니다.<br>
      색은 빨간색이죠.
    </p>
    <p>
      이곳은 정상입니다.
    </p>
  </div>
</body>
</html>​

위와 같이 코드를 작성하면 아래와 같은 결과를 얻는데 모두 적용됨을 알 수 있다.

id와 class

선언과 적용 방법 : 

이처럼 선언하여 아래처럼 적용하면 된다.

 /*클래스*/
 .red{
      color:red;
    }
 /*아이디*/
#blue{
      color:blue;
    }
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <div>
    <p class="red">
      이곳은 클래스의 영역입니다.
    </p>
    <p id="blue">
      이곳은 아이디의 영역입니다.
    </p>
    <p class="red">
      이곳도 클래스의 영역입니다.
    </p>
  </div>
</body>
</html>

얼핏 둘 다 같은 기능을 하는것 처럼 보이지만 class는 여러번 사용할 수 있다. 하지만 id는 의미처럼 한번 사용할 수 있다. 이는 나중에 JS에서 getElementById()메서드를 통해 지정된 ID를 가진 요소에 엑세스 할 수 있다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <h1 id="myId">이것이</h1>
  <button onclick="changeDis()">이걸 누르면</button>
 <script>
   function changeDis(){
     document.getElementById("myId").innerHTML = "이걸로 바뀝니다!"
   } 
 </script>
</body>
</html>

CSS의 적용 우선순위

css는 선언할 수 있는 경우의 수가 많고 겹칠 수 있기 때문에 우선순위를 잘 알고 사용해야한다.

1. inline>internel>externel : 같은 속성의 제어라면 inline의 영향을 받는다.

 

2. 태그 이름으로 속성을 정했다면 세부설정이 더 깊은 쪽으로 영향을 받는다. 이는 이해하기 어려울 것이므로 예를 통해 알아보자.

div{
  font-size:10px;
  color:red;
}

/*div영역 내에 p태그를 의미한다.*/
div > p {
  font-family:바탕체;
  color:blue;
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <div>
    이곳은 div영역입니다.
  </div>
  <div>
    <p>
      이곳은 div영역이면서 p영역입니다.
    </p>
    나는 div영역 입니다.
  </div>
  <p>
    나는 그냥 p 영역입니다.
  </p>
</body>
</html>

이와 같이 작성하면 div안에 있는 p영역 또한 div의 영역이므로 div의 영향을 받지만 div > p 의 보다 세부적인 selector때문에 같은 속성을 가지는 색에 대해서 blue가 나온것을 알 수 있다.

 

3. id>class>element : id와 class의 영향을 동시에 받는다면 id를 우선적으로 받는다.

'FRONT > CSS' 카테고리의 다른 글

[Front] CSS Layout  (0) 2020.06.12
html 태그의 특징
  1. html태그는 대소문자를 구분하지 않는다. 하지만 소문자를 권장하고 있다.
  2. 태그를 작성할때 <태그 속성=속성값(변수)> 형식으로 적는데 속성 값을 작성할 때 큰 따옴표가 필요하지 않는다. 하지만 큰 따옴표를 하는것을 권장한다. 
  3. 작은 따옴표를 사용할 수도 있는데 이는 속성 값에 큰 따옴표를 사용해야 할 경우이다. ex)<p title=”John ‘ShotGun’ Nelson”>
html 태그와 CSS 태그
  1. <a> : 하이퍼 링크를 지원하는 태그 ex)<a href=”링크의 주소”>
  • 하이퍼 링크에 대한 속성이 있는데 
  • _blank : 링크된 문서를 새 창이나 탭에서 연다.
  • _self : 클릭 한 것과 동일한 창/탭에서 문서를 연다.
  • _parent : 부모 프레임에서 문서를 연다.
  • _top : 링크된 문서를 창 전체에서 연다.
  • <a href=”주소” target=”_blank”>이와 같은 형식으로 작성하면 된다.

책갈피 : 하이퍼 링크라고 해서 반드시 웹 주소만 값을 가질 수 있는것은 아니다.

<!DOCTYPE html>
<html>
<body>
<a href="#C4">이것을 누르면</a>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<h2 id="C4">이곳으로 옵니다.</h2>
</body>
</html>

이와 같이 작성하면 href의 주소값과(반드시 #을 주소 가장 앞에 써야한다.)해당 문서의 id값과 일치하는 부분으로 이동 할 수 있다. 마치 웹의 맨위로 같은 버튼과 같은 것이다.

 

2.<p> : 문단을 지원하는 태그

위 코드를 작성하면 아래와 같은 결과를 볼 수 있는데

‘이것’에는 p태그가 없으나 앞뒤로 개행이 되어있는것을 볼 수 있다.

이처럼 p태그는 문자열을 문단으로 만들어주고 해당 태그 앞뒤로 개행문자가 포함되어있다.

  • title : 툴 팁이 표시되게 하는 태그로 <p title=”I’m a tooltip”>This is a paragraph.</p> 와 같이 적으면 title내부 값이 툴팁으로 표시된다.
<!DOCTYPE html>
<html>
<body>
<p title="I'm a tooltip">This is a paragraph.</p>
<p title=about w3schools>this is a ex</p>
이것
<p title="jhon 'sg'">p tag
pp tag
ppp tag</p>
</body>
</html>

 

3.<h1> : 제목을 작성할 때 규격화된 크기로 지정하는 태그로 숫자가 커질수록 크기는 작아진다. 제목인 header를 지정하는 태그이므로 p태그 처럼 앞뒤로 개행 문자가 존재한다.

  • style : CSS 속성중 하나로 꼭 h1태그가 아닌 다른 태그에서 해당 태그에 스타일 즉, 색상(color:blue), 글꼴(font-family:굴림), 크기(font-size:40px) 등과 같은 요소에 스타일을 추가할 때 사용하는 속성이다. h태그는 글자의 크기를 조절 할 수 있다. 여기에 style 속성으로 글씨 크기를 조절 한다면 어떻게 될까? 

<h1 style=”font-size:40px;”>heading</h1> 이와 같이 작성하면 글씨의 기본 크기가 증가하여 더 큰 h1태그를 볼 수 있다. *여기서 px는 픽셀을 의미한다.

 

4.서식 : 문자의 상태를 나타내는 태그

<!DOCTYPE html>
<html>
<body>
<b>굵은체 텍스트</b><br>
<strong>강조 텍스트</strong><br>
<i>이탤릭체 텍스트</i><br>
<em>중요한 텍스트</em><br>
<small> 작은 텍스트</small><br>
<mark> 강조 텍스트</mark><br>
이것은 <del>삭제될</del>텍스트<br>
이것은 <ins>추가될</ins>텍스트<br>
이것은 <sub>아래첨자</sub>텍스트<br>
이것은 <sup>위첨자</sup>텍스트<br>
</body>
</html>

 

 

5.인용

인용구를 표시 해 주는 태그로는 여러개가 있지만 <q>태그를 가장 많이 사용한다.

이와 같이 작성하면 인용구에 큰 따옴표 처리가 된다.

<p>이것은 <q>짧은 인용구 입니다.</q></p>

6.<img> : 웹에 이미지를 올리는 태그이다.

  • img 태그는 속성이 필수적이다.
  • src : 이미지의 경로(url)을 작성하는 속성이다.
  • alt : 이미지가 어떠한 이유던 보여지지 못했을 때 나오는 문구를 작성하는 속성이다.
  • style : 이미지의 크기를 설정하거나 이미지의 위치(글자 좌측, 우측)를 설정하는 속성이다.
  • usemap : 이미지를 클릭시에 작업을 수행할 수 있게 한다.
  • ex) <img src=”경로” alt=”원래 사진이 나와야 하나 불러오지 못했습니다.” style=”float:left; width:42px; height:42px;” usemap=”#map1">

7. <div>, <span> : 영역을 부여하는 태그이다.

어떠한 기능을 하진 않지만 영역을 설정하는 태그로 해당 태그 내에 작성 하게 되면 해당 부분을 하나의 영역으로 관리할 수 있다.

<div>와 <span>태그의 차이점

<!DOCTYPE html>
<html>
<body>
<div style="background-color:blue">영역1<br>여기도 영역1</div>
<div style="background-color:red">영역2</div>
<span style="background-color:purple">영역3</span>
<span style="background-color:yellow">영역4</span>
</body>
</html>

위 코드를 작성하게 되면 아래와 같은 결과를 얻을 수 있다.

<div>태그는 문자열이 작성된 줄 전체에 영역이 할당된다. 따라서 개행 태그가 없음에도 불구하고 저절로 개행이 된다,.

하지만 <span>태그는 해당 문자열이 있는 부분만 영역이 할당되어 연속적으로 쓰게 되면 바로 옆에 오는것을 알 수 있다.

*<div>는 블록 레벨 요소, <span>은 인라인 레벨 요소라고 한다.

 

8.<table> : 표를 그리는 태그

<table> : 해당 태그의 시작과 끝 사이에 있는 태그와 문자열은 표을 그리기 위함이다라는 선언의 태그

<tr> : 표의 행(가로)를 나타내는 태그

<th> : 표의 헤더(세로)를 나타내는 것으로 해당 열이 무슨 정보를 가지는지 나타내는 것이다.

<td> : 해당 칸에 들어가는 정보를 나타내는 태그

<!DOCTYPE html>
<html>
<body>
<table style="width:100%">
	<tr>
    	<th>이름</th>
        <th>성별</th>
        <th>주소</th>
    </tr>
    <tr>
    	<td>홍길동</td>
        <td>남자</td>
        <td>서울</td>
    </tr>
</table>
</body>
</html>

이처럼 테이블이 만들어진다.

  • border : 테두리 설정
  • padding : 패딩 설정
  • colspan : 둘 이상의 열을 합친다.
  • rowspan : 둘 이상의 행을 합친다.
<!DOCTYPE html>
<html>
<body>
<table style="width:100%" padding="15px" border="1">
	<tr>
    	<th>이름</th>
        <th>성별</th>
        <th>주소</th>
    </tr>
    <tr>
    	<td>홍길동</td>
        <td>남자</td>
        <td>서울</td>
    </tr>
    <tr>
    	<td>손오공</td>
        <td rowspan="2">여자</td>
        <td rowspan="2">강원도</td>
    </tr>
    <tr>
    	<td>삼장법사</td>
    </tr>
    <tr>
    	<td colspan="2">남자인 사오정</td>
        <td>경기도</td>
    </tr>
</table>
</body>
</html>

9. 리스트

  • <ul> : unordered list로 순서가 없는 리스트
  • <ol> : ordered list로 순서가 있는 리스트이다.
<!DOCTYPE html>
<html>
<body>

<h2>Unordered List with Square Bullets</h2>

<ul style="list-style-type:square;">
  <li>Coffee</li>
  	<ol>
    	<li>순서가 있는 리스트
    </ol>
  <li>Tea</li>
  <li>Milk</li>
</ul>

</body>
</html>

이처럼 순서가 있는 리스트 순서가 없는 리스트를 적용하면 되고 리스트 안에 리스트를 작성할 수도 있다.

  • <dl> : 설명을 지원하는 리스트
<!DOCTYPE html>
<html>
<body>
<ul style="list-style-type:square;">
<dl>
	<dt>Tea</dt>
    <dd>우려마실 수 있는 것</dd></dl>
</body>
</html>

 

10. <iframe> : 웹 페이지 안에 웹 페이지를 선언할 때 사용한다.

  • name : 해당 iframe과 연겨된 <a>의 target속성과 일치하여 <a>의 href URL이 iframe 안에 나오게 된다.
  • width, height 속성으로 크기를 지정할 수 있다.
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>CSS</title>
</head>
<body>
  <iframe src="웹페이지 안의 웹" name="ifr"></iframe>
  <p><a href="https://<www class="w3schools com" target="ifr">w3schools</www>"></a></p>
</body>
</html>

 

* 이곳 부터 태그는 보여주는 태그 모양을 잡는 물리적 태그의 의미라면 아래에 기재될 태그들은 의미를 갖는 태그들이다.

 

11.<script> : 자바스크립트와 id 값으로 연동하여 사용할 수 있다.

12.<head> : 해당 html의 선언, 설정에 대한 정보가 들어있는 곳이다.

  • <title> : 브라우저 탭에서 제목을 정의한다.
  • <style> : HTML페이지에 대한 스타일 정보를 정의한다.
  • <link> : 외부 스타일시트와 연결하는데 사용한다.
  • <meta> : 구성요소(문자세트, 페이지 설명, 키워드, 작성자 등) 에 대한 데이터를 지정하는데 사용한다. <meta>태그를 통해서 viewport를 제어 할 수 있다.

13. 여기서 viewport란 ? 사용자가 볼 수 있는 영역을 의미한다. 이는 반응형 웹에서 중요한 부분이다.

<meta name=”viewport” content=”width=device-width, initial-scale=1.0">

width=device-width : 사용자의 화면의 크기, initial-scale: 초기 줌 상태

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>html</title>
</head>
<body>
<figure>
  <img src="java.jpg" alt="image">
  <figuration>이것은 ___사진입니다.</figuration>
</figure>
</body>
</html>

이와 같이 반응형 웹에 사용되는 경우 <img>태그 대신에 <picture> 태그를 사용하면 좀 더 유연하게 사용할 수 있다.

 

14. <code> : 컴퓨터 코드를 정의하기 위해사용된다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<p>
  이곳은 앞으로 코드가 작성 될 공간입니다.
  <code>
    <br>
    x=5;<br>
    y=6;<br>
    z = x + y;<br>
  </code>
</p>
</body>
</html>

 

15. <var> : 변수를 정의한다.

 

16. <section> : 섹션은 주로 주제별 콘텐츠를 구분하는 그룹이다. 아래와 같이 <section>태그를 사용하여 작성을 하게 된다면 별다른 개행 문자가 없어도 다른 섹션 끼리는 자동으로 분할되어 구분지어진다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
<section>
 여기는 섹션 1 안이다.
</section>
<section>
  여기는 섹션 2 안이다.
</section>
</body>
</html>

 

17. <article> : 이 태그는 독립적이고 독자적인 컨텐츠를 지정한다. 이 태그를 사용할 수 있는 분야는 포럼 게시물, 블로그 포스트, 신문기사 등이 있다.

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>
<body>
여기는 일반 영역
<article>
  여기서 부터는 article 영역
  <h2>오늘의 주제</h2>
  <p>
    article 태그는 왜 필요한가?
    이 전까지는 주로 보여주는 부분에 의미를
    둔 태그가 많지만 이처럼 해당 부분이 가지는
    의미를 나타내는 태그도 있다.
  </p>
</article>
</body>
</html>

 

18. <header> : 해당 문서의 헤더를 지정한다.

 

19.<footer> : 해당 문서, 영역의 바닥 글을 지정한다. 일반적으로 작정자, 저작권, 연락처 등이 해당 태그 내에 기재된다.

 

20. <figure> : 이미지와 캡션을 그룹화 한다.

이것은 예시로 보는것이 빠르다.

'FRONT > Html' 카테고리의 다른 글

[Front] HTML input 태그(tag)  (0) 2020.06.13
[Front] HTML 작성 가이드  (0) 2020.06.11
[Front] HTML 기초  (0) 2020.06.03
JSP(Java Server Page)

JSP는 웹에서 동적 문서에 해당하는 부분으로 Servlet의 종류 중 하나다.

앞에서 서블릿을 자세히 설명한 이유는 JSP와 동작 원리가 같기 때문이다.

JSP는 클라이언트가 동적페이지를 요청 했을 경우 웹서버에서 WAS에게 제어권을 넘기고 WAS가 서블릿 소스코드로 변환되고 서블리스 클래스로 컴파일 되어 응답하는 구조로 이루어져 있다.

앞서 서블릿을 공부하면서 불편한 부분이 많았을 것이다.

서블릿은 기본적으로 자바를 기본으로 html코드를 out.println()의 형태로 작성하는 구조이지만 JSP는 html코드를 기본으로 html문서 도중 java코드가 삽입 되어있는 형태이다.

따라서 해당 파트가 java문법임을 알려주는 태그(?)가 있다.

  1. <%! — — —  %> : 변수 선언문으로 !와% 사이에 선언하고자 하는 변수를 작성하면 된다.
  2. <% — — —  %> : 스크립트릿으로 %와%사이에 java코드 그대로 작성하면 된다. 주로 연산처리나 반복문 처리에 사용되게 된다.
  3. <% =— — — %> : 표현식으로 html문서 즉 웹에 바로 출력될 내용을 입력한다.

아래 코드 예제를 통해서 자세히 알아보자.

%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<% 
String s = "String";
%>
<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
	<h2>Hello JSP</h2>
	현재 날짜와 시간은 : <%=new java.util.Date() %><br>
	<%= s %> 이러한 형태 또는 <%out.println(s); %>이와 같은 형태로 작성해면 된다.<br>
</body>
</html>

위와 같은 결과를 볼 수 있다. 여기서 소스를 직접 보면 우리가 코딩한것과 다른것을 볼 수 있다. 컴파일 시에 변수는 문자열 처리가 되어 작성 되었고 java코드 또한 바뀌어 컴파일 된것을 볼 수 있다.

<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
	<h2>Hello JSP</h2>
	현재 날짜와 시간은 : Tue Jun 09 18:15:38 KST 2020<br>
	String 이러한 형태 또는 String
이와 같은 형태로 작성해면 된다.<br>
</body>
</html>

그렇다면 하는김에 좀 더 변수를 가지고 놀아보자

기본적으로 변수를 사용하려면 변수를 선언한 후에 사용하게 된다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
	<h2>Hello JSP</h2>
	현재 날짜와 시간은 : <%=new java.util.Date() %><br>
	<%= s %> 이러한 형태 또는 <%out.println(s); %>이와 같은 형태로 작성해면 된다.<br>

<% 
	String s = "String";
%>
</body>
</html>

따라서 위와 같이 코딩하면 빨간 줄과 함께 코드에 문제가 있음을 확인할 수 있다.

하지만 우리는 변수를 선언하는 다른 선언문을 알고있다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>

<html>
<head>
<meta charset="UTF-8">
<title>hello</title>
</head>
<body>
	<h2>Hello JSP</h2>
	현재 날짜와 시간은 : <%=new java.util.Date() %><br>
	<%= s %> 이러한 형태 또는 <%out.println(s); %>이와 같은 형태로 작성해면 된다.<br>

<%!
	String s = "String";
%>
</body>
</html>

이렇게 선언하면 아래와 같이 정상적으로 실행 됨을 알 수있다. 대체 어떻게 가능한 일인가 보자

이클립스 기준으로D:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\myWeb\org\apache\jsp

해당 경로에 가면 JSP파일이 컴파일 된것을 볼 수 있다. 소스코드를 확인해보면 우리가 작성한 JSP파일이 자바의 형태로 바뀐것을 볼 수있다.

package org.apache.jsp.sample;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent,
                 org.apache.jasper.runtime.JspSourceImports {

	//변수 선언문으로 선언한 변수
	String s = "String";

  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private static final java.util.Set<java.lang.String> _jspx_imports_packages;

  private static final java.util.Set<java.lang.String> _jspx_imports_classes;

  static {
    _jspx_imports_packages = new java.util.HashSet<>();
    _jspx_imports_packages.add("javax.servlet");
    _jspx_imports_packages.add("javax.servlet.http");
    _jspx_imports_packages.add("javax.servlet.jsp");
    _jspx_imports_classes = null;
  }

  private volatile javax.el.ExpressionFactory _el_expressionfactory;
  private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> getDependants() {
    return _jspx_dependants;
  }

  public java.util.Set<java.lang.String> getPackageImports() {
    return _jspx_imports_packages;
  }

  public java.util.Set<java.lang.String> getClassImports() {
    return _jspx_imports_classes;
  }

  public javax.el.ExpressionFactory _jsp_getExpressionFactory() {
    if (_el_expressionfactory == null) {
      synchronized (this) {
        if (_el_expressionfactory == null) {
          _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
        }
      }
    }
    return _el_expressionfactory;
  }

  public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() {
    if (_jsp_instancemanager == null) {
      synchronized (this) {
        if (_jsp_instancemanager == null) {
          _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());
        }
      }
    }
    return _jsp_instancemanager;
  }

  public void _jspInit() {
  }

  public void _jspDestroy() {
  }

  public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {

    if (!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
      final java.lang.String _jspx_method = request.getMethod();
      if ("OPTIONS".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        return;
      }
      if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method)) {
        response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
        response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP들은 오직 GET, POST 또는 HEAD 메소드만을 허용합니다. Jasper는 OPTIONS 메소드 또한 허용합니다.");
        return;
      }
    }
    
	//JSP 내장 객체
    final javax.servlet.jsp.PageContext pageContext;
    javax.servlet.http.HttpSession session = null;
    final javax.servlet.ServletContext application;
    final javax.servlet.ServletConfig config;
    javax.servlet.jsp.JspWriter out = null;
    final java.lang.Object page = this;
    javax.servlet.jsp.JspWriter _jspx_out = null;
    javax.servlet.jsp.PageContext _jspx_page_context = null;


    try {
      response.setContentType("text/html; charset=UTF-8");
      pageContext = _jspxFactory.getPageContext(this, request, response,
      			null, true, 8192, true);
      _jspx_page_context = pageContext;
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;

      out.write("\r\n");
      out.write("<!DOCTYPE html>\r\n");
      out.write("\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta charset=\"UTF-8\">\r\n");
      out.write("<title>hello</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t<h2>Hello JSP</h2>\r\n");
      out.write("\t현재 날짜와 시간은 : ");
      out.print(new java.util.Date() );
      out.write("<br>\r\n");
      out.write("\t");
      out.print( s );
      out.write(" 이러한 형태 또는 ");
out.println(s); 
      out.write("이와 같은 형태로 작성해면 된다.<br>\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
          try {
            if (response.isCommitted()) {
              out.flush();
            } else {
              out.clearBuffer();
            }
          } catch (java.io.IOException e) {}
        if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

좀 장황하나 주석을 달아놓은 부분을 자세히 살펴보면 클래스의 시작과 동시에 변수를 선언한것을 볼 수 있다. 변수 선언문을 사용하면 클래스의 가장 위에 선언이 된다. 따라서 어느 위치에서든지 사용할 수 있게 된 것이다.

 

JSP 주석

JSP에는 세 가지 주석이 있다.

  1. <! -- --> : html주석 html에서 사용하는 주석으로 JSP에서도 사용할 수 있다.
  2. <%-- --%> : JSP주석
  3. //, /* */ : JAVA주석

각각의 주석에는 차이가 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP File</title>
</head>
<body>
	<h2>JSP Script 예제</h2>
	<% 
		String scriptlet = "스크립트릿 입니다.";
		String comment = "주석문 입니다.";
		out.println("내장객체를 이용한 출력 : "+declation+"<br></br>");
	%>
	선언문 출력하기(변수) : <%=declation %><br></br>
	<!-- JSP에서 사용하는 HTML 주석부분 -->
	<!--  HTML 주석 : <%=comment%> --><br></br>
	<%-- JSP 주석 : <%=comment%> --%><br></br>
	<%
		//자바 주석
		/*
			자바 여러줄 주석
		*/
	%>
	<%! 
		String declation = "선언문 입니다.";
	%>
	<%!
		public String declationMethod(){
			return declation;
		}
	%>
</body>
</html>

위 코드를 실행시켜보면

주석 처리한 부분이 잘 되어있는것을 확인할 수 있다. 하지만 소스보기를 통해 확인 해 보면 아래와 같이 보임을 알 수 있다.

여기서 알 수 있는 점은

1. html주석은 소스보기를 통해 볼 수 있다.

2. JAVA주석은 소스를 볼 순 없지만 흔적이 남아있는것을 볼 수 있다.

3. JSP주석은 흔적도 소스도 남지 않는것을 볼 수 있다.

'FRONT > JSP' 카테고리의 다른 글

[Front] Servlet(서블릿)의 구조와 동작 원리  (0) 2020.06.04
HTTP(Hyper Text Transfer Protocol)
  • www 서비스를 위한 네트워크 OSI-7Layer 중 응용계층 프로토콜 중 하나이다.
  • 웹 서버와 클라이언트는 HTTP를 통해 통신을 하게 된다.
  • 기본적으로 요청(request)와 응답(respose)로 이루어진 프로토콜로 HTTP 메서드, 요청 URL, 서버에 전달할 정보로 이루어져 있다.
참고(URL과 URI)의 간략한 차이점

URL은 URI의 하위 개념으로 인터넷 상의 자원의 위치이다.

https://news.naver.com/main/main.nhn?mode=LSD&mid=shm&sid1=102

위 주소를예를 들어 설명하자면 위 주소 모두를 URL이라고 한다.

URI는 main부터 102까지를 URI라고 한다.

HTTP 방식의 특징
  1. Stateless(무상태) : Stateless방식의 프로토콜로 요청을 하고 응답을 하게 되면 연결을 끊어 버린다. 이와 같은 특성 때문에 Cookie(쿠키)와 Session(세션)이 생겼다.
  2. 연결을 끊어버리므로 인해 더 많은 클라이언트의 요청을 처리 할 수 있다.

https://denyok.tistory.com/48w

 

[Front] Cookie와 Session의 차이점

Cookie와 Session은 HTTP의 Stateless(무상태) 특징에 의해서 발생하게 된다. 이와 같이 요청을하고 응답을 하면 연결을 바로 해제하고 객체를 소멸시켜버린다. 따라서 매번 요청을 할때마다 데이터가 ��

denyok.tistory.com

전에 작성한 부분을 참고하는것이 좋겠다.

HTTP 메서드
  1. Get : 정보를 요청할 때 사용한다. (Select)
  2. Post : 정보를 추가할 때 사용한다. (Insert)
  3. Put : 정보를 업데이트할 때 사용한다. (Update)
  4. Delete : 정보를 삭제할 때 사용한다. (Delete)
  5. Head : 정보의 헤더 부분만 확인할 때, 해당 자원이 존재하는지 확인할 때 사용한다.
  6. Options : 웹 서버의 메서드의 종류를 확인할 때 사용한다.

'FRONT' 카테고리의 다른 글

[Front] Cookie와 Session의 차이점  (0) 2020.06.04
[Front] 웹(Web)의 구조  (0) 2020.06.04

Cookie와 Session은 HTTP의 Stateless(무상태) 특징에 의해서 발생하게 된다.

이와 같이 요청을하고 응답을 하면 연결을 바로 해제하고 객체를 소멸시켜버린다. 따라서 매번 요청을 할때마다 데이터가 없어 인증해야한다. 인증을 하는 방법이 Cookie와 Session이다.

Cookie

  1. 클라이언트가 key:value형태로 요청을 보내고 서버는 응답과 동시에 클라이언트에 쿠키 생성을 명령한다.
  2. 응답하면서 response, request 객체 소멸.
  3. 이후 추가 작업을 할 때 클라이언트가 가지고 있는 모든 쿠키를 전송한다.
  4. 서버는 해당 서버과 관련된 쿠키만 읽어들이고 요청에 응답하게 된다.

쿠키는 서버와 클라이언트가 연결 되었던 기록이 클라이언트에 남게 된다. 따라서 전송시에 모든 쿠키가 전송되게 된다. 그리고 서버는 클라이언트에 생성명령만 하고 소멸 명령은 할 수 없게 되므로 보안에 문제가 생길 수 있다.

Session

  1. 클라이언트가 key:value형태로 요청을 보내고 서버는 key:value 값을 저장하면서 고유 번호를 생성하고 이를 전달하게 되는데 이것이 세션이다.
  2. 응답하면서 response, request 객체 소멸
  3. 이후 추가 작업을 진행할 때 클라이언트는 세션과 함께 보낸다.
  4. 세션정보가 있으므로 해당 작업을 응답 해 준다.

세션은 서버와 클라이언트가 연결 되었던 기록을 서버의 메모리에 기록하게 된다. 따라서 해당 세션은 서버가 관리하게 되고 세션을 삭제 하는것 또한 서버의 몫이므로 쿠키보다 보안이 좋은것을 알 수 있다.

 

'FRONT' 카테고리의 다른 글

[Front] HTTP Protocol ( http 프로토콜 )  (0) 2020.06.04
[Front] 웹(Web)의 구조  (0) 2020.06.04

+ Recent posts