<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>sang-eun2.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Sun, 04 Oct 2026 09:03:29 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. sang-eun2.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/sang-eun2" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[JS (1)]]></title>
            <link>https://velog.io/@sang-eun2/JS-1</link>
            <guid>https://velog.io/@sang-eun2/JS-1</guid>
            <pubDate>Sun, 04 Oct 2026 09:03:29 GMT</pubDate>
            <description><![CDATA[<h3 id="코드-위치">코드 위치</h3>
<ul>
<li>HTML 태그의 이벤트 리스너 속성에 작성</li>
<li><script></script>내에 작성</li>
<li>자바스크립트 파일에 작성</li>
<li>URL부분에 작성</li>
</ul>
<pre><code class="language-html">1. onclick=&quot;this.src=&quot;banana.png&quot;
3. &lt;script src=&quot;name.js&quot;&gt;추가 작성&lt;/script&gt;
4. &lt;a href=&quot;javascript:자바스크립트 코드&quot;&gt;링크&lt;/a&gt;</code></pre>
<h2 id="자바스크립트로-html-콘텐츠-출력">자바스크립트로 HTML 콘텐츠 출력</h2>
<pre><code class="language-html">document.write(&quot;&lt;h3&gt;Welcome!&lt;h3&gt;&quot;);</code></pre>
<h2 id="자바스크립트-다이얼로그-사용자-입력-및-메시지-출력">자바스크립트 다이얼로그: 사용자 입력 및 메시지 출력</h2>
<ul>
<li>prompt(”메시지”,”디폴트 입력값”); - return var</li>
<li>confirm(”메시지”) - return true|false</li>
<li>alert(”메시지”);</li>
</ul>
<h3 id="전역변수와-지역변수">전역변수와 지역변수</h3>
<ul>
<li>전역 변수: 함수 밖에서 선언되거나 함수내에서 var키워드 없이 선언</li>
<li>지역 변수: 함수 안에서 var키워드로 선언</li>
</ul>
<h3 id="this로-전역-변수-접근-→-thisx전역-변수--x지역-변수--함수-내">this로 전역 변수 접근 → this.x(전역 변수) / x(지역 변수)  [함수 내]</h3>
<p>상수의 종류 :</p>
<p>8진수 : 0으로 시작 16진수 : 0x로 시작. 문자열 : “” | ‘’ 으로 묶음. NaN==수가 아님을 뜻함(ex.parseInt(”abc”))</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;함수 만들기&lt;/title&gt;
        &lt;script&gt;
            function ggd(n){
                var m=parseInt(n);
                if(isNaN5(m)||m&lt;1||m&gt;9){
                    alert(&quot;잘못입력하셨습니다&quot;);
                    return;
                }
                for(var i=1;i&lt;=9;i++){
                    document.write(m+&#39;x&#39;+i+&#39;=&#39;+m*i+&#39;&lt;br&gt;&#39;);
                }
            }
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;구구단 출력 함수 만들기&lt;/h3&gt;
        &lt;hr&gt;
        &lt;script&gt;
            var n=prompt(&quot;구구단 몇 단을 원하세요&quot;,&quot;&quot;);
            ggd(n);
        &lt;/script&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="-vs--핵심-차이">== vs === 핵심 차이</h2>
<table>
<thead>
<tr>
<th>연산자</th>
<th>이름</th>
<th>비교방식</th>
</tr>
</thead>
<tbody><tr>
<td><code>==</code></td>
<td>동등 연산자</td>
<td>타입이 달라도 자동 형변환에서 값만 비교</td>
</tr>
<tr>
<td><code>===</code></td>
<td>일치 연산자</td>
<td>타입까지 같아야 true, 형변환 없음</td>
</tr>
</tbody></table>
<h3 id="예시로-확인">예시로 확인</h3>
<pre><code class="language-python">console.log(5==&quot;5&quot;); //true
console.log(5===&quot;5&quot;); //false

console.log(0==false); //true
console.log(0===false); //false

console.log(null == underfined); //true
console.log(null === underfined); //false

console.log(&quot;313&quot; == 313); //true
console.log(&quot;313&quot; === 313); //false</code></pre>
<h3 id="자바스크립트-객체의-유형">자바스크립트 객체의 유형</h3>
<ul>
<li>코어 객체<ul>
<li>Array</li>
<li>Date</li>
<li>String</li>
<li>Math</li>
</ul>
</li>
<li>HTML DOM 객체</li>
<li>브라우저 관련 객체(BOM)</li>
</ul>
<h3 id="array">Array</h3>
<p>var plots=[1,2,3,4,5]; 형식으로 만들거나 new Array()로도 만들 수 있음</p>
<ul>
<li>Array에서는 현재 크기의 +1에 해당하는 공간에 변수를 대입하는 경우, 오류가 아닌 공간을 늘려 할당해줌.</li>
<li>여러 타입의 데이터가 섞여 저장 가능</li>
<li>주요 메서드<ul>
<li>concat(arr) 현재 배열에 arr원소를 덧붙여 만듦</li>
<li>join([separator]) 모든 원소를 string화 (공백이면 ,로 구분 but, separator로 인자구분)</li>
<li>reverse() 역순</li>
<li>slice(idxA[,dixB]) : A~B직전까지 부분집합 추출</li>
<li>sort()</li>
<li>toString() ,로 구분</li>
</ul>
</li>
</ul>
<h3 id="math">Math</h3>
<ul>
<li>Math.abs()</li>
<li>Math.sqrt();</li>
<li>Math.PI</li>
<li>Math.random()</li>
</ul>
<h2 id="사용자-객체-만들기">사용자 객체 만들기</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;new Object()로 사용자 객체 만들기&lt;/title&gt;
        &lt;script&gt;
            function inquiry(){return this.balance;}
            function deposit(money){this.balance+=money;}
            function withdraw(money){this.balance-=money;return money;}

            var account=new Object();
            account.owner=&quot;황기태&quot;;
            account.code=&quot;111&quot;;
            account.balance=35000;
            account.inquiry=inquiry;
            account.deposit=deposit;
            account.withdraw=withdraw;
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;new Object()로 사용자 객체 만들기&lt;/h3&gt;
        &lt;hr&gt;
        &lt;script&gt;
            document.write(&quot;account : &quot;);
            document.write(account.owner+&quot;,&quot;);
            document.write(account.code+&quot;,&quot;);
            document.write(account.balance+&quot;&lt;br&gt;&quot;);

            account.deposit(10000); document.write(account.inquiry()+&quot;&lt;br&gt;&quot;);
            account.withdraw(5000); document.write(account.inquiry()+&quot;&lt;br&gt;&quot;);
        &lt;/script&gt;
    &lt;/body&gt;

&lt;/html&gt;</code></pre>
<ul>
<li>리터럴 표기법으로 만들기</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;new Object()로 사용자 객체 만들기&lt;/title&gt;
        &lt;script&gt;
            var account={
                owner:&quot;황기태&quot;,
                code:&quot;111&quot;,
                balance:35000,

                inquiry:function(){return this.balance;},
                deposit:function(money){this.balance+=money;},
                withdraw:function(money){this.balance-=money;return money;}
            };

        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;new Object()로 사용자 객체 만들기&lt;/h3&gt;
        &lt;hr&gt;
        &lt;script&gt;
            document.write(&quot;account : &quot;);
            document.write(account.owner+&quot;,&quot;);
            document.write(account.code+&quot;,&quot;);
            document.write(account.balance+&quot;&lt;br&gt;&quot;);

            account.deposit(10000); document.write(account.inquiry()+&quot;&lt;br&gt;&quot;);
            account.withdraw(5000); document.write(account.inquiry()+&quot;&lt;br&gt;&quot;);
        &lt;/script&gt;
    &lt;/body&gt;

&lt;/html&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS]]></title>
            <link>https://velog.io/@sang-eun2/CSS</link>
            <guid>https://velog.io/@sang-eun2/CSS</guid>
            <pubDate>Sun, 27 Sep 2026 09:23:20 GMT</pubDate>
            <description><![CDATA[<h3 id="프로퍼티--값-">‘프로퍼티 : 값; ‘</h3>
<h3 id="style-태그로-스타일-시트-만들기"><style> 태그로 스타일 시트 만들기</h3>
<ul>
<li>반드시 <head> 태그 내에서만 작성 가능하다</li>
<li>여러 번 작성 가능하며 스타일 시트들이 합쳐 적용된다.</li>
<li>웹 페이지 전체에 적용</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;&amp;lt; style &amp;lt; 태그로 스타일 만들기&lt;/title&gt;
        &lt;style&gt;
            body{
                background-color:linen;
                color:blueviolet;
                margin-left:30px;
                margin-right:30px;
            }
            h3{
                text-align:center;
                color:darkred;
            }
            p{
                color:red; font-size:15px;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;소연재&lt;/h3&gt;
        &lt;hr&gt;
        &lt;p&gt;
            저는 소연재입니다. 음악을 들으면서 책읽기를 좋아합니다. 김치찌개도 좋아합니다.
        &lt;/p&gt;
        &lt;p style=&quot;color:blue&quot;&gt;그리고&lt;/p&gt;
        &lt;p style=&quot;color:magenta;font-size:15px&quot;&gt;마지막으로&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>단. 특정 태그에 대한 꾸미기를 직접 개별적으로도 가능하다.</p>
<h3 id="외부-스타일-시트-파일-불러오기-css확장자">외부 스타일 시트 파일 불러오기 (.css확장자)</h3>
<ul>
<li><link> 태그 이용</li>
<li>@import 이용</li>
</ul>
<p>(CSS3파일에는 <style> 태그없이 CSS3 스타일 시트만 저장해야 한다.</p>
<ul>
<li>type =” text/css”는 불러오는 파일이 CSS언어로 작성된 텍스트 파일임을 알림</li>
<li>rel=”stylesheet”는 불러오는 파일이 스타일 시트임을 알려준다.</li>
<li><link> 태그를 여러 번 사용해 여러 CSS파일을 불러 올 수 있다.

</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;&amp;lt; style &amp;lt; 태그로 스타일 만들기&lt;/title&gt;
        &lt;link type=&quot;&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;2.css&quot;&gt;&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;소연재&lt;/h3&gt;
        &lt;hr&gt;
        &lt;p&gt;
            저는 소연재입니다. 음악을 들으면서 책읽기를 좋아합니다. 김치찌개도 좋아합니다.
        &lt;/p&gt;
        &lt;p style=&quot;color:blue&quot;&gt;그리고&lt;/p&gt;
        &lt;p style=&quot;color:magenta;font-size:15px&quot;&gt;마지막으로&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;&amp;lt; style &amp;lt; 태그로 스타일 만들기&lt;/title&gt;
        &lt;style&gt;
           @import url(2.css);  
           /* @import url(&#39;mystyle.css&#39;) */
           /* @import &quot;mystyle.css&quot; */
        &lt;/style&gt;

    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;소연재&lt;/h3&gt;
        &lt;hr&gt;
        &lt;p&gt;
            저는 소연재입니다. 음악을 들으면서 책읽기를 좋아합니다. 김치찌개도 좋아합니다.
        &lt;/p&gt;
        &lt;p style=&quot;color:blue&quot;&gt;그리고&lt;/p&gt;
        &lt;p style=&quot;color:magenta;font-size:15px&quot;&gt;마지막으로&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>@import문은 <style>안에서만 사용되며 여러번 가능.</p>
<pre><code class="language-css">body{
    background-color:rgb(167, 115, 63);
    color:blueviolet;
    margin-left:30px;
    margin-right:30px;
}
h3{
    text-align:center;
    color:darkred;
}
p{
    color:red; font-size:15px;
}</code></pre>
<p>추가로 CSS3 스타일은 부모 태그로부터 상속된다. 따라서 <p>의 자식 태그는 <em>이 있어, <p>의 스타일에 <em>스타일이 추가되는 구조이다. </p>
<h3 id="스타일-합치기">스타일 합치기</h3>
<ol>
<li>브라우저의 디폴트 스타일</li>
<li>.css 스타일 시트 파일 </li>
<li><style> </style> 태그 </li>
<li>style 속성에 작성된 스타일 </li>
</ol>
<p>1→ 4로 갈수록 우선 순위가 높아진다. </p>
<h2 id="셀렉터">셀렉터</h2>
<pre><code class="language-html">h3, li {color : brown;}
//셀렉터를 &#39; , &#39; 를 이용해 분리시킴</code></pre>
<h3 id="class-셀렉터">class 셀렉터</h3>
<p>셀렉터 앞에 ‘ . ‘을 붙인 경우 class 속성 지정</p>
<pre><code class="language-html">.warning {color:red;}
body.main{background : aliceblue;}

//html 파일

&lt;body class=&quot;main&quot;&gt;
    &lt;div class=&quot;warning&quot;&gt; &lt;/div&gt;

&lt;/body&gt;</code></pre>
<h3 id="id-셀렉터">id 셀렉터</h3>
<p>셀렉터 앞에 ‘#’를 붙인 경우 id 속성 지정</p>
<pre><code class="language-html">#list {background : mistyrose;}

//html
&lt;ul id=&quot;list&quot;&gt;
&lt;/ul&gt;</code></pre>
<p>id 셀렉터는 유일해야 해서 <p> </p>같은데에 사용 x </p>
<div>에서 사용 가능 ⇒ div#id

<h3 id="자식-셀렉터">자식 셀렉터</h3>
<pre><code class="language-html">div &gt; strong {color : dodgerblue;}

div &gt; div &gt; strong { color : dodgerblue;}</code></pre>
<h3 id="자손-셀렉터">자손 셀렉터</h3>
<pre><code class="language-html">ul strong { color: dodgerblue;}</code></pre>
<p>자식 셀렉터는 특정할 수 있게 자식을 지정할 수 있고, 자손 셀렉터는 2개 이상의 태그의 나열로 범주를 지정할 수 있다.</p>
<h3 id="전체-셀렉터">전체 셀렉터</h3>
<pre><code class="language-html">* { color: green;}</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;셀렉터 만들기&lt;/title&gt;
        &lt;style&gt;
            h3,li{
                color:brown;
            }
            div&gt;div&gt;strong{background:yellow;}
            ul strong{
                color:dodgerblue;
            }
            .warning{
                color:red;
            }
            body.main{
                background:aliceblue;
            }
            #list{
                background:mistyrose;
            }
            #list span{
                color:forestgreen;
            }
            h3:first-letter{
                color:red;
            }
            li:hover{
                color:yellowgreen;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body class=&quot;main&quot;&gt;
        &lt;h3&gt;Web Programming&lt;/h3&gt;
        &lt;hr&gt;
        &lt;div&gt;
            &lt;div&gt;2학기 &lt;strong&gt;학습 내용&lt;/strong&gt;입니다.&lt;/div&gt;
            &lt;ul id=&quot;list&quot;&gt;
                &lt;li&gt;&lt;span&gt;HTML&lt;/span&gt;&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;CSS&lt;/strong&gt;&lt;/li&gt;
                &lt;li&gt;JavaScript&lt;/li&gt;
            &lt;/ul&gt;
            &lt;div class=&quot;warning&quot;&gt;60점 이하는 F&lt;/div&gt;
        &lt;/div&gt;

    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="박스-모델">박스 모델</h2>
<ul>
<li>콘텐츠</li>
<li>패딩(padding)</li>
<li>테두리(border)  = “ border : 두께 선스타일 색깔 “ 한 번에 지정가능</li>
<li>여백(margin)</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;박스모델&lt;/title&gt;
        &lt;style&gt;
            div{
                background:yellow;
                padding:20px;
                border:5px dotted red;
                margin:30px;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;박스 모델&lt;/h3&gt;
        &lt;p&gt;margin 30px, padding 20px, border 5px의 빨간색 점선&lt;/p&gt;
        &lt;hr&gt;
        &lt;div&gt;
            &lt;img src=&quot;img.png&quot; alt=&quot;고양이&quot;&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h3 id="마우스-커서-제어">마우스 커서 제어</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;마우스 커서&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;마우스 커서&lt;/h3&gt;
        &lt;hr&gt;
        &lt;p style=&quot;cursor:crosshair&quot;&gt;마우스 커서가 십자 모양으로 바뀝니다.&lt;/p&gt;
        &lt;p style=&quot;cursor:help&quot;&gt;마우스 커서가 물음표 모양으로 바뀝니다.&lt;/p&gt;
        &lt;p style=&quot;cursor:pointer&quot;&gt;마우스 커서가 손 모양으로 바뀝니다.&lt;/p&gt;
        &lt;p style=&quot;cursor:progress&quot;&gt;마우스 커서가 진행 중 모양으로 바뀝니다.&lt;/p&gt;
        &lt;p style=&quot;cursor:n-resize&quot;&gt;마우스 커서가 위쪽으로 화살표 모양으로 바뀝니다.&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code>                              ### display 프로퍼티로 박스 유형 설정</code></pre><ul>
<li>display:none</li>
<li>display:inline</li>
<li>display:inline-block (inline과 같지만 margin설정 가능)</li>
<li>display:block</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;display 프로퍼티&lt;/title&gt;
        &lt;style&gt;
            div{
                color:blue;
                background:aliceblue;
                border:2px solid yellowgreen;
            }
            span{
                border:3px dotted red;
                background:yellow;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;인라인, 인라인 블록, 블록&lt;/h3&gt;
        &lt;hr&gt;
        나는 &lt;div style=&quot;display:none;&quot;&gt;div(none)&lt;/div&gt;입니다.&lt;br&gt;&lt;br&gt;
        나는 &lt;div style=&quot;display:inline;&quot;&gt;div(inlined)&lt;/div&gt;입니다.&lt;br&gt;&lt;br&gt;
        나는 &lt;div style=&quot;display:inline-block;&quot;&gt;div(inline-blocked)&lt;/div&gt;입니다.&lt;br&gt;&lt;br&gt;
        나는 &lt;div&gt;div&lt;span style=&quot;display: block;&quot;&gt;span(block)&lt;/span&gt;입니다.&lt;/div&gt;&lt;br&gt;&lt;br&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="박스의-배치-position">박스의 배치, position</h2>
<p>웹 페이지에 나타난 순서대로 HTML 태그를 배치(normal flow)</p>
<p>원하는 위치에 배치 - position</p>
<p>bottom top left right width height 로 배치</p>
<ul>
<li>정적 배치 - position : static(default)</li>
<li>상대 배치 - postion : relative = 정적 배치(normal flow)에 따른 기본 배치에서 얼마나 다른 곳에 배치</li>
<li>절대 배치 - position : absolute = left top을 이용해 배치 좌표 설정</li>
<li>고정 배치 - position : fixed = 뷰포트에 고정(절대 배치와의 차이)시켜 브라우저에 항상 보이게 함. (글씨가림)</li>
<li>float를 이용한 유동 배치 = 항상 같은 위치에 출력(글씨 안가림)</li>
<li>수직으로 쌓기, z-index = z-index : 정수(n) ;  → n의 값이 클수록 위에 쌓임 ( relative absolute에만 적용)</li>
<li>visibility : 보이지 않게 함</li>
<li>overflow : visible(잘리지 않고 출력) | hidden(콘텐츠 크기만큼 잘라서 출력) | scroll(스크롤바 항상 부착 생성) | auto(height보다 넘치면 스크롤바 자동 생성)</li>
</ul>
<h3 id="리스트-단축-프로퍼티-list-style">리스트 단축 프로퍼티, list-style</h3>
<pre><code class="language-html">list-style : list-style-type list-style-position list-style-image</code></pre>
<ul>
<li>리스트로 메뉴 만들기</li>
</ul>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;리스트로 메뉴 만들기&lt;/title&gt;
        &lt;style&gt;
            nav#menubar{
                background:olive;
            }
            nav#menubar ul{
                margin:0;
                padding:0;
                width:567px;
            }
            nav#menubar ul li{
                display:inline;
                list-style-type:none;
                padding:0px 15px;
            }
            nav#menubar ul li a{
                color:white;
                text-decoration: none;
            }
            nav#menubar ul li a:hover{
                color:violet;
            }
        &lt;/style&gt;

    &lt;/head&gt;
    &lt;body&gt;
        &lt;nav id=&quot;menubar&quot;&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;a href=&quot;https://www.naver.com&quot;&gt;네이버&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;https://www.daum.net&quot;&gt;다음&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;https://www.google.com&quot;&gt;구글&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;https://www.facebook.com&quot;&gt;페이스북&lt;/a&gt;&lt;/li&gt;
                &lt;li&gt;&lt;a href=&quot;https://www.twitter.com&quot;&gt;트위터&lt;/a&gt;&lt;/li&gt;
            &lt;/ul&gt;
        &lt;/nav&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;표 응용1&lt;/title&gt;
        &lt;style&gt;
            table{
                border-collapse:collapse; /* 이중테두리 제거 */
            }
            td,th{
                text-align:left;
                padding:5px;
                height:15px;
                width:100px;
            }
            thead,tfoot{
                background:darkgray;
                color:yellow;
            }
            tbody tr:nth-child(even){
                background:rgb(135, 174, 207);
            }
            tbody tr:hover{
                background:pink;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;2026년 1학기 성적&lt;/h3&gt;
        &lt;hr&gt;
        &lt;table&gt;
            &lt;thead&gt;
                &lt;tr&gt;&lt;th&gt;이름&lt;/th&gt;&lt;th&gt;HTML&lt;/th&gt;&lt;th&gt;CSS&lt;/th&gt;&lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tfoot&gt;
                &lt;tr&gt;&lt;th&gt;합&lt;/th&gt;&lt;th&gt;310&lt;/th&gt;&lt;th&gt;249&lt;/th&gt;&lt;/tr&gt;
            &lt;/tfoot&gt;
            &lt;tbody&gt;
                &lt;tr&gt;&lt;td&gt;활기태&lt;/td&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;/tr&gt;
                &lt;tr&gt;&lt;td&gt;김소연&lt;/td&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;/tr&gt;
                &lt;tr&gt;&lt;td&gt;박재현&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;/tr&gt;
                &lt;tr&gt;&lt;td&gt;김소연&lt;/td&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h3 id="inputtype">input[type=???]</h3>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;폼 스타일 주기&lt;/title&gt;
        &lt;style&gt;
            input[type=text]{
                color:red;
            }
            input:hover, textarea:hover{
                background:aliceblue;
            }
            input[type=text]:focus, input[type=email]:focus{
                font-size:120%;
            }
            label{
                display:block;
                padding:10px;
            }
            label span{
                float:left;
                width:90px;
                text-align:right;
                padding:10px;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;CONTACT US&lt;/h3&gt;
        &lt;hr&gt;
        &lt;form&gt;
            &lt;label&gt;
                &lt;span&gt;Name&lt;/span&gt;&lt;input type=&quot;text&quot; placeholder=&quot;Elvis&quot;&gt;&lt;br&gt;
            &lt;/label&gt;
            &lt;label&gt;
                &lt;span&gt;Email&lt;/span&gt;&lt;input type=&quot;email&quot; placeholder=&quot;elvis@graceland.com&quot;&gt;
            &lt;/label&gt;
            &lt;label&gt;
                &lt;span&gt;Comment&lt;/span&gt;&lt;textarea placeholder=&quot;메시지를 남겨주세요&quot;&gt;&lt;/textarea&gt;
            &lt;/label&gt;
            &lt;label&gt;
                &lt;span&gt;&lt;/span&gt;&lt;input type=&quot;submit&quot; value&quot;submit&quot;&gt;
            &lt;/label&gt;
        &lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML 정리]]></title>
            <link>https://velog.io/@sang-eun2/HTML-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@sang-eun2/HTML-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Sat, 19 Sep 2026 15:10:43 GMT</pubDate>
            <description><![CDATA[<pre><code>&lt;!DOCTYPE html&gt;
&lt;!-- 주석 표시 --&gt;
 &lt;html&gt;
    &lt;head&gt;
        문서 제목, 자바스크립트 코드, CSS 스타일 정의, 메타 데이터 정의
        &lt;title&gt;텍스트 꾸미기&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt; 텍스트 꾸미기&lt;/h3&gt;&lt;hr&gt;
        &lt;p&gt;

            이 문장은 텍스트를 꾸미는 방법을 보여줍니다.
            &lt;b&gt; 진하게&lt;/b&gt;&lt;br&gt;
            &lt;strong&gt; 굵게&lt;/strong&gt;&lt;br&gt;
            &lt;em&gt;강조&lt;/em&gt;&lt;br&gt;

        &lt;/p&gt;
        문서의 본문 텍스트 이미지, 테이블, 자바스크립트 코드, 동영상 등
    &lt;/body&gt;
&lt;/html&gt;
</code></pre><p>블록 태그 사례 : <code>&lt;p&gt; &lt;h1&gt;, &lt;div&gt;, &lt;ul&gt;</code></p>
<ul>
<li>항상 새 라인에서 시작하고 브라우저의 왼쪽 끝에서 오른쪽 끝까지 블록 공간을 차지</li>
</ul>
<p>인라인 태그 사례 : <code>&lt;strong&gt;, &lt;a&gt;, &lt;img&gt; &lt;span&gt;</code></p>
<ul>
<li>블록에 삽입되어 블록 콘텐트의 일부를 표현하는데 이용</li>
</ul>
<p><strong>pre 태그:</strong></p>
<p><code>&lt;pre&gt;안녕
    하세요
        반갑습니다&lt;/pre&gt;</code>
 <pre>안녕
    하세요
        반갑습니다</pre></p>
<p>→ 작성한 모양 그대로:</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;기본 테이블 만들기&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt; 기본 구조를 가진 표&lt;/h3&gt;
        &lt;hr&gt;
        &lt;table border&quot;1&quot;&gt;
            &lt;caption&gt;2026 1학기 성적&lt;/caption&gt;
            &lt;thead&gt;
                &lt;tr&gt;
                    &lt;th&gt;이름&lt;/th&gt;
                    &lt;th&gt;HTML&lt;/th&gt;
                    &lt;th&gt;CSS&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/thead&gt;
            &lt;tfoot&gt;
                &lt;tr&gt;
                    &lt;th&gt;합계&lt;/th&gt;
                    &lt;th&gt;225&lt;/th&gt;
                    &lt;th&gt;230&lt;/th&gt;
                &lt;/tr&gt;
            &lt;/tfoot&gt;
            &lt;tbody&gt;
                &lt;tr&gt;
                    &lt;td&gt;홍길동&lt;/td&gt;
                    &lt;td&gt;90&lt;/td&gt;
                    &lt;td&gt;95&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;김철수&lt;/td&gt;
                    &lt;td&gt;80&lt;/td&gt;
                    &lt;td&gt;85&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/tbody&gt;
        &lt;/table&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><table border"1">
            <caption>2026 1학기 성적</caption>
            <thead>
                <tr>
                    <th>이름</th>
                    <th>HTML</th>
                    <th>CSS</th>
                </tr>
            </thead>
            <tfoot>
                <tr>
                    <th>합계</th>
                    <th>225</th>
                    <th>230</th>
                </tr>
            </tfoot>
            <tbody>
                <tr>
                    <td>홍길동</td>
                    <td>90</td>
                    <td>95</td>
                </tr>
                <tr>
                    <td>김철수</td>
                    <td>80</td>
                    <td>85</td>
                </tr>
            </tbody>
        </table>

<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;&lt;title&gt;링크 만들기
    &lt;/title&gt;&lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt; 링크 만들기 &lt;/h3&gt;
        &lt;a href=&quot;#moving&quot;&gt; 이동&lt;/a&gt;
        &lt;hr&gt;
        포털 사이트
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;https://www.naver.com&quot; target=&quot;_blank&quot;&gt;네이버&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;https://www.daum.net&quot;&gt;다음&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
        &lt;hr&gt;
        &lt;a href=&quot;2.html&quot; id=&quot;moving&quot;&gt;2.html&lt;/a&gt;로 이동

    &lt;/body&gt;
&lt;/html&gt;</code></pre><p>같은 파일내 id값을 설정해 해당 위치로 이동할 수 있게 href할 수 있다.</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;&lt;title&gt;target 속성 활용&lt;/title&gt;
        &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt; target 속성 활용&lt;/h3&gt;
        &lt;hr&gt;
        &lt;iframe src=&quot;https://www.naver.com&quot; width=&quot;400&quot; height=&quot;300&quot; name=&quot;iframe1&quot;&gt;&lt;/iframe&gt;
        &lt;iframe src=&quot;4-1.html&quot; width=&quot;300&quot; height=&quot;200&quot; name=&quot;right&quot;&gt;&lt;/iframe&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><p>한 화면 내에 iframe을 통해 다중 웹을 보일 수 있으며 이중 중첩도 가능하다. 위치를 name으로 정의할 수 있으며 iframe의 내용을 name에 따른 target을 이용해 변경할 수 있다.</p>
<pre><code>&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;&lt;title&gt; 사이트 리스트&lt;/title&gt;&lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt; 사이트 리스트&lt;/h3&gt;
        &lt;hr&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;https://www.naver.com&quot; target=&quot;right&quot;&gt;네이버&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;https://www.daum.net&quot; target=&quot;right&quot;&gt;다음&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;https://www.w3c.org&quot; target=&quot;iframe1&quot;&gt;W3C&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="웹-문서-구조화">웹 문서 구조화</h2>
<p>검색 엔진의 정보 제공을 위한 한계 존재</p>
<p>→ 시맨틱 웹(semantic web) 활용 </p>
<p><code>&lt;header&gt;</code> : 머리말</p>
<p><code>&lt;section&gt;</code>: 문서의 장,절</p>
<p><code>&lt;article&gt;</code>:보조적 기사(블로그 포스트, 댓글이나 독립적인 내용을 담는 영역</p>
<p><code>&lt;aside&gt;</code>:  본문의 흐름에서 약간 벗어난 노트나 팁, 신문 잡지에서 주요 기사 옆 짤막하게 곁들이는 관련 기사</p>
<p><code>&lt;footer&gt;</code>: 꼬리말(저자나 저작권 정보)</p>
<p><code>&lt;figure&gt;</code>: 그림을 블록화 </p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;figure 태그 활용&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;figure 태그 활용&lt;/h3&gt;
        &lt;hr&gt;
        &lt;figure id=&quot;1-1&quot;&gt;
            &lt;figcaption&gt; alert() 함수 활용&lt;/figcaption&gt;
            &lt;pre&gt;
                &lt;code&gt;function f() {alert(&quot;경고합니다&quot;);}&lt;/code&gt;
            &lt;/pre&gt;
            &lt;hr&gt;

            &lt;small&gt; 실행결과 &lt;/small&gt;
            &lt;pre&gt;&lt;img src=&quot;1.png&quot; alt=&quot;실행결과&quot;&gt;&lt;/pre&gt;
        &lt;/figure&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<main> 

<summary> 

<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;&lt;title&gt;detail과 summary&lt;/title&gt;&lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;detail과 summary&lt;/h3&gt;
        Q &amp;amp; A 리스트
        &lt;hr&gt;
        &lt;details&gt;
            &lt;summary&gt;질문 1&lt;/summary&gt;
            &lt;p&gt;
                질문 1에 대한 답변입니다.
            &lt;/p&gt;
        &lt;/details&gt;
        &lt;details&gt;
            &lt;summary&gt;질문 2&lt;/summary&gt;
            &lt;p&gt;
                질문 2에 대한 답변입니다.
            &lt;/p&gt;
        &lt;/details&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><code>&lt;mark&gt;</code> : 중요한 텍스트임을 표시</p>
<p><code>&lt;time&gt;</code>:시간 정보임을 표시</p>
<p><code>&lt;meter&gt;</code> 주어진 범위나 데이터 양 표시</p>
<p><code>&lt;progress&gt;</code> 작업의 진행 정도 표시</p>
<p> 등 </p>
<p>← 시맨틱 태그</p>
<p>section는 문서의 장 ↔ article 보조적 기사</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;HTML5 문서 구조 시맨틱 태그 사용&lt;/title&gt;
            &lt;style&gt;html,body{margin:0;padding:0;height:100%}
            .header{width:100%;height:15%;background-color:gray}
            .nav{width:15%;height:70%;float:left;background:orange}
            .section{width:70%;height:70%;float:left;background:yellow}
            .aside{width:15%;height:70%;float:left;background:green}
            .footer{width:100;height:15%;background-color:plum;clear:both}
            &lt;/style&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;header class=&quot;header&quot;&gt;haeder&lt;/header&gt;
        &lt;nav class=&quot;nav&quot;&gt;nav&lt;/nav&gt;
        &lt;section class=&quot;section&quot;&gt;section&lt;/section&gt;
        &lt;aside class=&quot;aside&quot;&gt;aside&lt;/aside&gt;

        &lt;article class=&quot;article&quot;&gt;article&lt;/article&gt;
        &lt;footer class=&quot;footer&quot;&gt;footer&lt;/footer&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>css에서 영역을 정의해서 활용함. (div로 영역을 정의해서 사용할 수도 있음)</p>
<h2 id="웹-폼">웹 폼</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;&lt;title&gt;로그인 폼&lt;/title&gt;&lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt; 로그인 폼 &lt;/h3&gt;
        &lt;hr&gt;
        &lt;form name=&quot;fo&quot; method=&quot;get&quot;&gt;
            사용자 ID : &lt;input type=&quot;text&quot; size=&quot;15&quot; value=&quot;&quot;&gt;&lt;br&gt;
            비밀 번호 : &lt;input tytpe =&quot;password&quot; size=&quot;15&quot; value=&quot;&quot;&gt;&lt;br&gt;
            &lt;input type=&quot;submit&quot; value=&quot;완료&quot;&gt;
        &lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<form name="fo" method="get">
            사용자 ID : <input type="text" size="15" value=""><br>
            비밀 번호 : <input tytpe ="password" size="15" value=""><br>
            <input type="submit" value="완료">
        </form>


<h3 id="form"><code>&lt;form&gt;</code></h3>
<p>name 속성 : 폼의 이름 지정하는 속성(javascript에서 사용)</p>
<p>action : 웹 서버 응용프로그램 지정 </p>
<p>→ submit시 , action속성에 지정된 웹 서버와 브라우저 연결 → 웹 서버 응용프로그램 실행 지시(with 입력 폼 데이터 전송)</p>
<p>method :  폼 데이터를 웹 서버로 전ㅅ송하는 형식 지시 (GET/POST)</p>
<p>form 요소:</p>
<p><code>&lt;input type=”text||password”&gt; , &lt;textarea&gt;</code></p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;&lt;title&gt;자기 소개서 작성&lt;/title&gt;&lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;자기 소개서 작성&lt;/h3&gt;&lt;hr&gt;
        &lt;form&gt;
            이름 : &lt;input type=&quot;text&quot; value=&quot;&quot;&gt;&lt;br&gt;
            암호 : &lt;input type=&quot;password&quot; value=&quot;&quot; maxlength=&quot;10&quot;&gt;&lt;br&gt;
            자소서 : &lt;textarea cols=&quot;30&quot; rows=&quot;5&quot;&gt;&lt;/textarea&gt;&lt;br&gt;
            &lt;br&gt;&lt;br&gt;
            나라 : &lt;input type=&quot;text&quot; list=&quot;country&quot;&gt;
            &lt;datalist id=&quot;country&quot;&gt;
                &lt;option value=&quot;대한민국&quot;&gt;
                &lt;option value=&quot;미국&quot;&gt;
                &lt;option value=&quot;일본&quot;&gt;
                &lt;option value=&quot;중국&quot;&gt;
            &lt;/datalist&gt;
        &lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<form>
            이름 : <input type="text" value=""><br>
            암호 : <input type="password" value="" maxlength="10"><br>
            자소서 : <textarea cols="30" rows="5"></textarea><br>
            <br><br>
            나라 : <input type="text" list="country">
            <datalist id="country">
                <option value="대한민국">
                <option value="미국">
                <option value="일본">
                <option value="중국">
            </datalist>
        </form>

<p>text에 list값을 추가해서 <code>&lt;datalist id=”해당 값”&gt;</code>을 활용해 datalist를 구현할 수 있다.</p>
<p>input type=”button||submit||reset||image”와 button type=”’’” 의 유사성</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;body&gt;
        &lt;h3&gt; 버튼을 만들자 &lt;/h3&gt;
        &lt;hr&gt;
        &lt;form&gt;
            검색 : &lt;input type=&quot;text&quot; size=&quot;15&quot; value=&quot;&quot;&gt;&lt;br&gt;
            &lt;input type=&quot;submit&quot; value=&quot;Q1&quot;&gt;
            &lt;button type=&quot;submit&quot;&gt;Q2&lt;/button&gt;&lt;br&gt;
            submit 버튼 : &lt;input type=&quot;submit&quot; value=&quot;전송1&quot;&gt;
            &lt;button type=&quot;submit&quot;&gt;전송2&lt;/button&gt;&lt;br&gt;
            reset 버튼 : &lt;input type=&quot;reset&quot; value=&quot;리셋1&quot;&gt;
            &lt;button type=&quot;reset&quot; &gt;리셋2&lt;/button&gt;&lt;br&gt;
            이미지버튼 : &lt;input type=&quot;image&quot; src=&quot;button.png&quot; alt=&quot;이미지 버튼&quot;&gt;
            &lt;button type=&quot;button&quot;&gt;
                &lt;img src=&quot;button.png&quot; alt=&quot;이미지 버튼&quot;&gt;
            &lt;/button&gt;
        &lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;라디오버튼 만들기&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h3&gt;라디오버튼 만들기&lt;/h3&gt;
        &lt;hr&gt;
        &lt;form&gt;
            &lt;input type=&quot;radio&quot; name=&quot;china&quot; value=&quot;1&quot;&gt; 짜장면&lt;img src=&quot;jajang.png&quot; alt=&quot;짜장면&quot;&gt; &lt;br&gt;
            &lt;input type=&quot;radio&quot; name=&quot;china&quot; value=&quot;2&quot; checked&gt; 짬뽕&lt;img src=&quot;jjam.png&quot; alt=&quot;짬뽕&quot;&gt; &lt;br&gt;
            &lt;input type=&quot;radio&quot; name=&quot;china&quot; value=&quot;3&quot;&gt; 탕수육&lt;img src=&quot;tang.png&quot; alt=&quot;탕수육&quot;&gt; &lt;br&gt;
            &lt;br&gt;&lt;br&gt;
            &lt;select name=&quot;china&quot;&gt;
                &lt;option value=&quot;1&quot;&gt;짜장면&lt;/option&gt;
                &lt;option value=&quot;2&quot; selected&gt;짬뽕&lt;/option&gt;
                &lt;option value=&quot;3&quot;&gt;탕수육&lt;/option&gt;
            &lt;/select&gt;
        &lt;/form&gt;
    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>name이 같은 것은 단일 선택만 가능. 추가로 checked를 통해 초기 선택지를 정의할 수 있음.</p>
<p>select로 datalist처럼 사용가능. </p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;body&gt;
        &lt;form&gt;
            &lt;label&gt;사용자 ID: &lt;input type=&quot;text&quot; size=&quot;15&quot; value=&quot;&quot;&gt;&lt;/label&gt;&lt;br&gt;
            &lt;label for=&quot;pass&quot;&gt; 비밀번호 &lt;/label&gt;
            &lt;input type=&quot;password&quot; size=&quot;15&quot; value=&quot;&quot;&gt; &lt;br&gt;
            &lt;input type=&quot;submit&quot; value=&quot;완료&quot;&gt;&lt;hr&gt;
            &lt;label for=&quot;china&quot;&gt;중국음식&lt;/label&gt;
            &lt;input type=&quot;radio&quot; id=&quot;china&quot; name=&quot;china&quot; value=&quot;1&quot;&gt;
            &lt;label&gt;
                &lt;input type=&quot;radio&quot; name=&quot;china&quot; value=&quot;1&quot;&gt;
                &lt;img src=&quot;jajang.png&quot; alt=&quot;짜장면&quot;&gt; 짜장면

            &lt;/label&gt;
            &lt;br&gt;&lt;br&gt;&lt;hr&gt;
            &lt;label&gt;
                색 선택 &lt;input type=&quot;color&quot; value=&quot;#00BFFF&quot; onchange=&quot;document.body.style.color=this.value&quot;&gt;
            &lt;/label&gt;
            &lt;input type =&quot;month&quot; value=&quot;2024-06&quot;&gt;&lt;br&gt;
            &lt;input type=&quot;week&quot; value=&quot;2024-W23&quot;&gt;&lt;br&gt;
            &lt;input type=&quot;date&quot; value=&quot;2024-06-10&quot;&gt;&lt;br&gt;
            &lt;input type=&quot;time&quot; value=&quot;12:00&quot;&gt;&lt;br&gt;
            &lt;input type=&quot;datetime-local&quot; value=&quot;2024-06-10T12:00&quot;&gt;&lt;br&gt;
            지속시간 : &lt;input type=&quot;number&quot; min=&quot;0.0&quot; max=&quot;10.0&quot; step=&quot;0.5&quot; value=&quot;5.0&quot;&gt; &lt;br&gt;&lt;br&gt;
            온도 설정 : &lt;input type=&quot;range&quot; min=&quot;0&quot; max=&quot;100&quot;  value=&quot;50&quot; list=&quot;tem&quot;&gt;&lt;br&gt;&lt;br&gt;
            &lt;datalist id=&quot;tem&quot;&gt;
                &lt;option value=&quot;0&quot;&gt;&lt;/option&gt;
                &lt;option value=&quot;10&quot;&gt;&lt;/option&gt;
                &lt;option value=&quot;20&quot;&gt;&lt;/option&gt;
                &lt;option value=&quot;30&quot;&gt;&lt;/option&gt;
                &lt;option value=&quot;80&quot;&gt;&lt;/option&gt;
                &lt;option value=&quot;90&quot;&gt;&lt;/option&gt;
                &lt;option value=&quot;100&quot;&gt;&lt;/option&gt;
            &lt;/datalist&gt;
        &lt;/form&gt;

    &lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>label을 활용해 선택시 텍스트나 그림을 선택해도 선택될 수 있게 만듦 추가로 라벨에 대한 하는 것을 선택지와 함께 군집가능.</p>
<p><code>&lt;input type = “color”&gt;</code> 를 활용해 색 선택</p>
<p><code>&lt;input type=”시간 관련”&gt;</code>을 통해 활용</p>
<p><code>&lt;input type=”number||range”&gt;</code>를 통해 범위 설정 min max step할 수 있음.</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;형식 유효성 검사&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;form&gt;
            &lt;fieldset&gt;
                &lt;legend&gt;회원정보&lt;/legend&gt;
                &lt;input type=&quot;email&quot; placeholder=&quot;id@host&quot;&gt;
                &lt;input type=&quot;url&quot; placeholder=&quot;https://www&quot;&gt;
                &lt;input type=&quot;tel&quot; placeholder=&quot;010-0000-0000&quot;&gt;
                &lt;input type=&quot;search&quot; placeholder=&quot;검색어&quot;&gt;
                &lt;input type=&quot;submit&quot; value=&quot;전송&quot;&gt;
            &lt;/fieldset&gt;

        &lt;/form&gt;
    &lt;/body&gt;</code></pre>
<form>
            <fieldset>
                <legend>회원정보</legend>
                <input type="email" placeholder="id@host">
                <input type="url" placeholder="https://www">
                <input type="tel" placeholder="010-0000-0000">
                <input type="search" placeholder="검색어">
                <input type="submit" value="전송">
            </fieldset>

<pre><code>    &lt;/form&gt;</code></pre><p>email과 url은 placeholder를 통해 유효성검사를 통과해야 submit이 가능하다.</p>
<p>tel과 search는 형식만 제공해주며 search는 검색창에 x표로 삭제할 수 있게 함.</p>
<p>추가로 fieldset으로 폼 요소들을 그룹핑할 수 있으며 legend를 통해 그룹핑의 제목 출력을 표시해준다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[spring boot]]></title>
            <link>https://velog.io/@sang-eun2/spring-boot</link>
            <guid>https://velog.io/@sang-eun2/spring-boot</guid>
            <pubDate>Sun, 24 May 2026 14:47:27 GMT</pubDate>
            <description><![CDATA[<h3 id="spring-initializr">spring initializr</h3>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/1a8bc991-2333-4ac3-abc1-bffc80cfa92f/image.png" alt=""></p>
<p>GENERATE이후 압축을 푼다.</p>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/be9dc150-6f10-4f10-8282-cd5806b90eec/image.png" alt=""></p>
<p>컴파일 후 <a href="http://localhost">localhost</a> 8080에 에러 페이지가 나온다.</p>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/e70f5f17-9b93-45d7-95ce-73f87df9e3d4/image.png" alt=""></p>
<pre><code class="language-php">&lt;!DOCTYPE HTML&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Hello&lt;/title&gt;
    &lt;meta http_equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
Hello
&lt;a href=&quot;/hello&quot;&gt;hello&lt;/a&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/59c20ba1-247c-4d4c-81c4-55edaff91adc/image.png" alt=""></p>
<p>static에 해당 코드를 입력하면 사이트에 그대로 출력된다.
추가로 hello를 클릭하면 Error Page로 들어가게 된다. </p>
<p>위의 것은 정적엔진이나, thymeleaf 템플릿 엔진을 활용해서 개선해본다.</p>
<p>hello.hello_spring에 controller라는 패키지를 만들어</p>
<pre><code class="language-php">package hello.hello_spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {
    @GetMapping(&quot;hello&quot;)
    public String hello(Model model){
        model.addAttribute(&quot;data&quot;,&quot;hello!!&quot;);
        return &quot;hello&quot;;
    }
    //웹 어플리케이션에서 hello들어오면 해당 메서드 실행
}
</code></pre>
<p>resources에서 templates에서 hello.html을 생성해</p>
<pre><code class="language-php">&lt;!DOCTYPE HTML&gt;
&lt;html xmlns:th=&quot;http://www.thymeleaf.org&quot;&gt;
&lt;head&gt;
    &lt;title&gt;Hello&lt;/title&gt;
    &lt;meta http-equiv=&quot;COntent-Type&quot; content=&quot;text/html; charset=UTF-8&quot;/&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p th:text=&quot;&#39;안녕하세요. &#39; + ${data}&quot;&gt;안녕하세요. 손님&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<p>hello에 반응하여 {data}에 반영된다.</p>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/c8b2c653-fac6-4a14-a270-d6567065f7a1/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JAVA -1]]></title>
            <link>https://velog.io/@sang-eun2/JAVA-1</link>
            <guid>https://velog.io/@sang-eun2/JAVA-1</guid>
            <pubDate>Sun, 10 May 2026 14:47:38 GMT</pubDate>
            <description><![CDATA[<h3 id="systemoutprint와-systemoutprintln의-차이">System.out.print와 System.out.println의 차이</h3>
<pre><code class="language-java">class hello{
    public static void main(String[] args){
        int year=0;
        int age=14;
        System.out.println(year);
        System.out.println(age);

        year=age+2000;
        age=age+1;
        System.out.print(year);
        System.out.print(age);
    }
}
</code></pre>
<p>추가로, c언어와 같이 System.out.printf()형태로 입력가능하다.</p>
<p>단. \n 대신 %n사용</p>
<ul>
<li>[%5d] : [   10] 5칸을 만들고 뒤에 %d만큼 채우기</li>
<li>[%-5d]: [10   ] 5칸을 만들고 앞에서 채우기</li>
<li>[%05d]: [00010] 5칸을 만드는데 뒤에서 채우고, 남은 건 0으로 메꾸기</li>
<li>%#x : 16진수의 0x와 함께 출력, %#X(대문자로 0X)</li>
<li>10진수→2진수 지시자 없으므로. Integer.toBinaryString(binNum)을 통해 바꿔서 %s로 출력</li>
<li>%14.10f : 소수점 앞 14, 뒤 10자리 출력 (float는 소수점 아래 6자리까지 가능. 나머지 0)</li>
<li>%014.10f: f가 13이었다면 0013.0000000000 으로 출력. (소수점 앞 0으로 메꾸기)</li>
<li>[%.8s]: 왼쪽에서 8글자만 출력. 문자열 일부 출력 가능.</li>
</ul>
<h3 id="swap-및-print내-문자변수의-활용">swap 및 print내 문자&amp;변수의 활용</h3>
<pre><code class="language-java">public class Main{
    public static void main(String[] args){
        int x=10, y=20;
        int tmp;
        System.out.println((&quot;x: &quot;+ x +&quot;y: &quot;+y));
        tmp=x;
        x=y;
        y=tmp;
        System.out.println(&quot;x: &quot;+x+&quot;y: &quot;+y);
    }
}</code></pre>
<h2 id="변수의-타입">변수의 타입</h2>
<ul>
<li>기본형<ul>
<li>논리형(boolean)</li>
<li>문자형(char)</li>
<li>정수형(byte,short,int,long)</li>
<li>실수형(float,double)</li>
</ul>
</li>
<li>참조형<ul>
<li>객체의 주소 저장</li>
</ul>
</li>
</ul>
<h3 id="상수와-리터널">상수와 리터널</h3>
<pre><code class="language-java">public static void main(String[] args){
        final int MAX_SPEED=10;

        int octNum=010;//8진수
        int hexNum=0x10;//16진수
        int binNum=0b10;//2진수

        long big=100_000_000_000L;
        long hex=0xFFFF_FFFF_FFFF_FFFFL;
        //정수형인데 10진수면 생략 가능
        float pi=3.14f; //f 대신 F가능
        double rate=1.618d; //d대신 D가능
        double pi1=3.14;
        //실수형은 double만 생략가능
        // float pi=3.14(x)
        char ch=&#39;j&#39; //문자 리터럴
        String s=&quot;n&quot; //문자열 리터럴 

    }</code></pre>
<h3 id="객체와-var지역변수의-타입-추론">객체와 var(지역변수의 타입 추론)</h3>
<pre><code class="language-java">public static void main(String[] args){
        LinkedHashMap map=new LinkedHashMap;
        var map=new LinkedHashMap;
        String str=&quot;&quot;;
        String name=new String(&quot;&quot;);
    }</code></pre>
<p>var은 초기화 내역으로 데이터의 타입을 추론해 직접 타입형을 지정하지 않아도 된다.</p>
<p>추가로, String은 객체이므로 new를 통해 선언 초기화하며, String str처럼 선언할 수도 있다.</p>
<p>String의 특성</p>
<pre><code class="language-java">public static void main(String[] args){
        String name=&quot;ja&quot;+&quot;va&quot;; 
        String str=name+21;
        System.out.println(name); //java
        System.out.println(str); //java21
        System.out.println(&quot; 1&quot;+7); // 17
        System.out.println(7+7+&quot; 1&quot;);//14 1 
        System.out.println(&quot; 1&quot;+7+7);//177
    }</code></pre>
<p>println내 “ “을 통해 string형태가 들어간다면 이후에 들어가는 타입들을 전부 string으로 처리.</p>
<p>“”” “””의 형태로 \n을 사용할 수 있으며, .indet(num)을 통해 들여쓰기 가능. (\t,\n)허용</p>
<pre><code class="language-java">public static void main(String[] args){
        String name= &quot;&quot;&quot;


                Hello
                &quot;&quot;&quot;.indent(2); //indent:들여쓰기
        System.out.println(name);
    }</code></pre>
<h3 id="화면에서-입력받기-scanner">화면에서 입력받기. Scanner</h3>
<pre><code class="language-java">import java.util.*;

public class scanner {
    Scanner scanner=new Scanner(System.in);
    System.out.print(&quot;두자리 정수를 하나 입력해주세요.&gt;&quot;);
    String input=scanner.nextLine();
    int num=Integer.parseInt(input);
    //int num=scaner.nextInt(); (input-&gt;num 과정 획일화)

    System.out.println(&quot;입력내용: &quot;+input);
    System.out.printf(&quot;num=%d%n&quot;,num);
}
</code></pre>
<p>java.util.*을 불러서 scnner를 활용해 next로 입력받고. parse로 변환할 수 있다.</p>
<h2 id="형변환">형변환</h2>
<ul>
<li>2의 보수법<ul>
<li>2진법으로 데이터값을 표현→xor→+1  ⇒ a의 값을 기준으로 -a값 도출</li>
</ul>
</li>
<li>2의 보수법으로 표현된 데이터값을 형변환할 때는 표현된 자료형에 따라 절사 후 저장.<ul>
<li>만약, 절사데이터의 처음이 1로 끝나면 당연히 올림. 0이면 내림.</li>
<li>단, 실수형→정수형인 경우는 반올림 x (소수점을 버리고 남은 정수가 정수형의 저장범위)</li>
</ul>
</li>
<li>자동 형변환<ul>
<li>형변환간에 값의 손실이 없는 경우, ex) float f=1234라고 하면 //(float)1234 내포</li>
<li>double x=y+i; 시, 표현범위가 더 큰 것으로 자동 형변환</li>
</ul>
</li>
</ul>
<aside>
💡

<ol>
<li>boolean을 제외한 나머지 7개의 기본형은 서로 형변환이 가능하다.</li>
<li>기본형과 참조형은 서로 형변환할 수 없다.</li>
<li>서로 다른 타입의 변수 간의 연산은 형변환을 하는 것이 원칙이지만, 값이 범위가 작은 타입에서 큰 타입으로의 형변환은 생략할 수 있다.</aside>
</li>
</ol>
<ul>
<li>타입간의 변환 예제</li>
</ul>
<pre><code class="language-java">   public static void main(String[] args){
        String str=&quot;3&quot;;

        System.out.println(str.charAt(0)-&#39;0&#39;); //문자열의 특정 문자 지정-&gt;정수
        System.out.println(&#39;3&#39;-&#39;0&#39;+1);//문자를 정수로
        System.out.println(Integer.parseInt(&quot;3&quot;+1)); //문자열-&gt;숫자로 변환
        System.out.println(&quot;3&quot;+1); //문자열로 변환
        System.out.println((char)(3+&#39;0&#39;)); //아스키 코드 &#39;0&#39;의 수를 정수 3에 더해서 &quot;3&quot;의 아스키 수변환
    }</code></pre>
<ul>
<li>연산자 우선순위</li>
</ul>
<aside>
👉

<ol>
<li>산술 &gt; 비교 &gt; 논리 &gt; 대입.</li>
<li>단항(1) &gt; 이항(2) &gt; 삼항(3).</li>
<li>단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽.</aside>
</li>
</ol>
<ul>
<li><p>산술연산. ex) ‘+’와 같은 경우. byte(a) + byte(b)의 자료형이 올때 +는 정수로 형변환 후 처리하기에 명시적 형변환(btye) 해야함.</p>
</li>
<li><p>형변환(큰 타입→ 작은 타입)</p>
<ul>
<li>자료형을 초과하는 범위는 버려서 내림을 한다.</li>
<li>만약, 내림을 하지 않고 반올림을 원한다면 0.5를 더하면 된다.</li>
</ul>
</li>
</ul>
<pre><code class="language-java">public static void main(String[] args){
        double pi=3.141592;
        double shortPi=(int)(pi*1000+0.5)/1000.0;
        System.out.println(shortPi);
    }</code></pre>
<ul>
<li>소수점 자료형의 근사<ul>
<li>단. 정수인 경우는 자료형이 달라도 정수값이 제대로 저장되어 있으므로 비교연산 가능.</li>
</ul>
</li>
</ul>
<pre><code class="language-java">    public static void main(String[] args){
        float i=0.01f;
        double j=0.01; 
        //0.1의 근사값을 각 자료형의 변수에 저장.
        System.out.println(i==j); //float과 double은 자료형에 따라 0.01을 정확히 저장 x
    }</code></pre>
<ul>
<li>문자열의 비교(문자열이 같으면 true, 다르면 false)</li>
</ul>
<pre><code class="language-java">    public static void main(String[] args){
        String str= new String(&quot;abs&quot;);
        boolean result=str.equals(&quot;abs&quot;); //대소구분없이 비교(equalsIgnoreCase())사용
    }</code></pre>
<h2 id="switch">switch</h2>
<ol>
<li>조건식을 계산한다.</li>
<li>조건식의 결과와 일치하는 case문으로 이동한다. (else == default)</li>
<li>이후의 문장들을 실행한다.</li>
<li>break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.</li>
</ol>
<aside>
💡

<p>제약 조건</p>
<ol>
<li>swich문의 조건식 결과는 정수 값(long타입 제외) 또는 참조형(객체 주소)만 허용</li>
<li>case문에는 정수 값, 문자열 리터럴 또는 참조형만 가능(중복불가)</aside>

</li>
</ol>
<pre><code class="language-java">import java.util.*;

public class operator {
    public static void main(String[] args){
        int score=0;
        System.out.print(&quot;당신의 점수를 입력하세요&gt;(1~100)&gt;&quot;);
        Scanner scanner=new Scanner(System.in);
        String tmp=scanner.nextLine();
        score=Integer.parseInt(tmp);
        char grade=switch(score/10){
            case 9,10 -&gt;&#39;A&#39;;
            case 8-&gt;&#39;B&#39;;
            case 7-&gt;&#39;C&#39;;
            default -&gt; &#39;F&#39;;
        };
        System.out.println(&quot;당신의 학점은 &quot;+grade+&quot;입니다&quot;);

    }
}
</code></pre>
<ul>
<li>char grade={}; 로 switch의 반환값을 저장가능</li>
<li>case 1 : 과 같이 “:”으로 나누는 것 대신 →으로 처리할 수 있으며 반환값을 필요로 하므로 default가 필수</li>
<li>반환값을 저장하는 변수를 yield ‘A’ 와 같이 대입할 수 있으며, case내부 블록이 길어지는 경우에 {}로 묶어서 처리할 수 있으나, 그런 경우에는 yield ‘A’과 같이 yield가 필수이다.</li>
</ul>
<h3 id="for문">for문</h3>
<ul>
<li>for(초기화;조건식;증감식) 각 조건은 다중 선언가능.</li>
<li>for(타입 변수명 : 배열 또는 컬렉션)으로 선언 가능.</li>
</ul>
<h3 id="do---while문">do - while문</h3>
<ul>
<li>do{} while(조건식)</li>
<li>적어도 한번은 실행된다.  →  실행→ 조건 확인(반복, 종료 판단)</li>
</ul>
<h2 id="이름-붙은-반복문-break-continue활용">이름 붙은 반복문 (break, continue)활용</h2>
<p>이름 명 : for()</p>
<ul>
<li>이름에 해당하는 for문을 break하거나 continue함</li>
</ul>
<pre><code class="language-java">public class Main{
    public static void main(String[] args){
       Loop1:for(int i=2;i&lt;=9;i++){
        for(int j=1;j&lt;=9;j++){
            if(j==5){
                break Loop1; //continue Loop1;
            }
        }
        System.out.println(&quot;pass&quot;);
       }
    }
}</code></pre>
<blockquote>
<p>배열은 같은 타입의 여러 변수를 하나로 묶는 것</p>
</blockquote>
<ul>
<li>int[] score = new int[5];  // 5개의 int값을 저장할 수 있는 배열 생성</li>
<li>이때, score는 메모리의 위치를 나타내는 참조변수.</li>
</ul>
<h3 id="배열이름length">배열이름.length</h3>
<ul>
<li>배열의 크기 반환. [0]~[arr.length-1]의 크기</li>
</ul>
<h3 id="배열의-선언및-초기화">배열의 선언및 초기화</h3>
<pre><code class="language-java">    public static void main(String[] args){
       int[] score=new int[]{50,60,70,80};
       int[] arr={50,60,70};

       int[] arr1;
       arr1=new int[]{50,70};
       //arr1={50,70,80}(x)

        int result=add(new int[]{50,60});
        //int result=add({50,60,70}) (x)

        int[] a=new int[0];
        int[] b=new int[]{};
        int[] c={};
    }</code></pre>
<ul>
<li>선언과 초기화를 동시에 할 경우는 new 생략 가능.</li>
<li>배열의 참조자를 출력하면 타입@주소 반환.</li>
</ul>
<h3 id="배열의-복사">배열의 복사</h3>
<pre><code class="language-java">    public static void main(String[] args){
    //직접 for문을 통해 대입후, 참조 주소 대입.
       int[] arr={10,20,30,40,50};
       int[] tmp=new int[arr.length+2];
       for(int i=0;i&lt;arr.length;i++){
           tmp[i]=arr[i];
       }
       arr=tmp;
    //arraycopy로 tmp에 arr2 배열 저장.
       int[] arr2={10,20,30,40};
       int[] tmp2=new int[arr.length+2];
       System.arraycopy(arr,0,tmp,0,arr.length);
       //기존 참조,시작위치,옮길 참조, 시작위치, 얼만큼
    }</code></pre>
<ul>
<li><p>난수 생성시. math.random() → 0~1사이 랜덤한 수 생성.</p>
</li>
<li><p>초기화와 동시에 출력</p>
</li>
</ul>
<pre><code class="language-java">    System.out.print(numArr[i]=(int)(Math.random()*10));
    //같은 표현
    =&gt; numArr[i]=(int)(Math.random()*10);
       System.out.print(numArr[i]);</code></pre>
<h2 id="string-배열">String 배열</h2>
<aside>
💡

<p>String클래스는 char배열에 기능(메서드)을 추가한 것이다.</p>
</aside>

<pre><code class="language-java">String[] name=new String[3]; //문자열 3개 저장할 수 있는 배열 생성.</code></pre>
<ul>
<li>String클래스의 주요 메서드</li>
</ul>
<pre><code class="language-java">char charAt(int index) // 문자열에 해당 위치 문자 반환
int length() // 문자열 길이
String substring(int fromt,int to) // from~to-1까지 반환
boolean equals(Object obj) // 문자열 내용이 같은 지
char[] toCharArray() //문자열을 문자 배열로 변환
String str=new String(chArr); //문자-&gt; 문자열 변환.</code></pre>
<h2 id="다차원-배열">다차원 배열</h2>
<ul>
<li>2차원 배열의 선언과 인덱스</li>
</ul>
<pre><code class="language-java">int[][] arr; (정석)
int arr[][];  (o)
int[] arr[];  (o)</code></pre>
<pre><code class="language-java">int[][] arr;
for(int i=0;i.lengt;i++){
    for(int j:arr[i]){
    // 2차원 배열은 이렇게 출력
    }
}</code></pre>
<h3 id="가변-배열">가변 배열</h3>
<pre><code class="language-java">int[][] arr= new int[5][];
arr[i]=new int[3]
//이와같이 배열의 세로크기만 정해두고 가로길이는 각각상이하게 가능.</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[ 웹 기술-2 (3주차)]]></title>
            <link>https://velog.io/@sang-eun2/%EC%9B%B9-%EA%B8%B0%EC%88%A0-2-3%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@sang-eun2/%EC%9B%B9-%EA%B8%B0%EC%88%A0-2-3%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 03 May 2026 13:07:31 GMT</pubDate>
            <description><![CDATA[<p>index.php</p>
<pre><code class="language-php">&lt;form action=&quot;loginAction.php&quot; method=&quot;&quot;GET&gt;
ID : &lt;input type=&quot;text&quot; name=&quot;id&quot;&gt;&lt;br&gt;
PW : &lt;input type=&quot;password&quot; name=&quot;pw&quot;&gt;&lt;br&gt;
&lt;input type=&quot;submit&quot; value=&quot;LOGIN&quot;&gt;
&lt;/form&gt;</code></pre>
<p>loginAction.php</p>
<pre><code class="language-php">&lt;?
    $id=$_GET[&quot;id&quot;];
    $pw=$_GET[&quot;pw&quot;];

    echo &quot;ID : {$id}&lt;br&gt;&quot;;
    echo &quot;pw : {$pw}&lt;br&gt;&quot;;
?&gt;</code></pre>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/4156e55d-18d8-469e-81d3-4bb7172b14aa/image.png" alt=""></p>
<h2 id="http-프로토콜">HTTP 프로토콜</h2>
<p>0.9 : just GET</p>
<p>1.0 : 비 연결지향 방식(비효율적)</p>
<p>1.0+ : Keep-Alive 커넥션</p>
<p>1.1 : Keep-Alive 커넥션 패시브.</p>
<p>2.0 : 성능 업그레이드</p>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/a499bf99-581a-4e86-b7e8-49a01b17a201/image.png" alt=""></p>
<h3 id="tcpip-통신">TCP/IP 통신</h3>
<ul>
<li>통신하기 위한 중요한 정보: IP(주소)-물리적 호스트 대상 찾기, Port(구체적 위치)-논리적 대상 찾기</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/d948ccd1-ffff-4800-bde4-e50c69ec6b01/image.png" alt=""></p>
<h3 id="연결-관리-방식">연결 관리 방식</h3>
<ul>
<li>비 지속 연결(옛날)</li>
<li>지속 연결(Keep-Alive)</li>
</ul>
<h3 id="메시지-구조">메시지 구조</h3>
<ul>
<li>시작줄</li>
<li>메시지 헤더</li>
<li>메시지 바디</li>
</ul>
<p>/r(0x0D) /n(0x0A)과 같은 개행 문자로 구분</p>
<h3 id="메시지-헤더">메시지 헤더</h3>
<ul>
<li>메시지를 구성하는 요소로 클라이언트와 서버가 무엇을 할지 결정하고 처리하기 위한 정보들이 들어있으며, 요청 메시지와 응답메시지에는 반드시 메시지 헤더 포함.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/114b3687-b581-4320-bad7-151658c8d432/image.png" alt=""></p>
<h3 id="요청-메시지request-message">요청 메시지(Request Message)</h3>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/5fcec699-3a27-4593-aafd-dbc0829b5113/image.png" alt=""></p>
<h3 id="응답-메시지response-message">응답 메시지(Response Message)</h3>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/bd368b66-379e-4113-867d-1755fbabbdde/image.png" alt=""></p>
<h3 id="http-메서드---getpost-메서드">HTTP 메서드 - GET/POST 메서드</h3>
<ul>
<li>클라이언트에서 서버에 데이터를 전달할 때 사용되는 방식</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/bebf1009-9caa-4aaf-9029-bc43b8c8ce26/image.png" alt=""></p>
<h3 id="http-상태-코드">HTTP 상태 코드</h3>
<ul>
<li>클라이언트 요청 시. 서버의 요청 상세 결과</li>
</ul>
<p>Status Code:</p>
<ul>
<li>1XX: 정보</li>
<li>2XX: 성공</li>
<li>3XX: 리다이렉션</li>
<li>4XX: 클라이언트 에러</li>
<li>5XX: 서버 에러</li>
<li>대표적인 예: 200(OK) 302(Found) 304(Not Modified) 400(Bad Request) 403(Forbidden) 404(Not Found) 505(Internal Server Error)</li>
</ul>
<h2 id="쿠키와-세션">쿠키와 세션</h2>
<ul>
<li>상태 유지 및 관리 필요성 및 사용자 인증 수단을 위한 쿠키 사용</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/a65cf5c3-ade2-4ed2-9425-8ca069329dd2/image.png" alt=""></p>
<p>클라이언트로 쿠키 발급 시 Set-Cookie 헤더로 클라이언트 쿠키 값 세팅 → 상태 관리</p>
<h3 id="지속-쿠키persistent-cookie">지속 쿠키(Persistent Cookie)</h3>
<ul>
<li>웹 서버에서 발급시 클라이언트 하드 디스크에 텍스틓형태 저장(열람 가능)</li>
<li>발급 과정<ul>
<li>if 로그인 시</li>
<li>서버는 응답에 따라 쿠키값을 클라이언트에 대해 세팅</li>
<li>따라서, 홍길동이 재접근시 자동 쿠키 세팅으로 서버는 사용자 식별.</li>
<li>이후, 로그아웃 시. delete</li>
</ul>
</li>
<li>문제점: 쿠키 값을 알고 있으면 재사용 가능성 o</li>
<li>쿠키값이 평문이면 변조 위협이 있기에 관련 암호화 과정과 유효기간 등의 발급 로직을 구현해야 함.</li>
</ul>
<h3 id="세션-쿠키session-cookie">세션 쿠키(Session Cookie)</h3>
<ul>
<li>웹 서버에서 발급 시 웹 브라우저 캐시에 저장</li>
<li>메모리에 저장 시 세션값은 암호화가 아닌 임의의 값</li>
<li>발급 과정:<ul>
<li>지속 쿠키와 동일 하나. 세션 정보자체를 삭제를 해버리기에 폐기 후 재사용 위험x</li>
</ul>
</li>
</ul>
<h3 id="왜-지속-쿠키를-사용할까">왜 지속 쿠키를 사용할까?</h3>
<ul>
<li>대규모 웹 서비스 시 세션 관리에 대한 서버의 부하 극심</li>
<li>→ 웹 서비스 규모와 인프라 구성에 알맞게 사용</li>
</ul>
<h2 id="웹-아키텍쳐">웹 아키텍쳐</h2>
<ul>
<li>클라이언트 웹서버 데이터베이스 형태 → 프론트/백 엔드</li>
</ul>
<h3 id="동작-원리-분석">동작 원리 분석</h3>
<ul>
<li>웹 사이트 접속 - URL 입력</li>
<li>도메인 - IP 변환 작업<ul>
<li>로컬 DNS 캐시 확인</li>
<li>hosts 파일 참조</li>
<li>DNS 서버 질의</li>
</ul>
</li>
<li>HTTP 요청 메시지 제작</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/22237422-25bd-417d-a12a-3f107941de02/image.png" alt=""></p>
<h3 id="웹-사이트-구조-분석">웹 사이트 구조 분석</h3>
<ul>
<li>HTML , CSS</li>
<li>JAVASCRIPT(동적 구성)</li>
<li>form을 활용해 요청 응답</li>
</ul>
<p>⇒ Ajax 기반 웹 사이트 구조</p>
<ul>
<li>자바스크립스를 통해 요청/응답</li>
<li>→ 백엔드의 부하 낮춤(부분만을 요청)</li>
</ul>
<h3 id="웹-서버-동작-원리">웹 서버 동작 원리</h3>
<ul>
<li>웹 서버측으로 요청 메시지를 보내면 서버는 요청된 자원 유/무 검토 후 응답 메시지 보냄.</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/147da34f-681d-4741-ae4c-4244818677d2/image.png" alt=""></p>
<ul>
<li>web application 환경의 ws/was 구성<ul>
<li>Apache + Tomcat</li>
</ul>
</li>
</ul>
<h3 id="웹-서버-웹-어플리케이션-서버-분리-이유">웹 서버 웹 어플리케이션 서버 분리 이유</h3>
<ul>
<li>정적 자원 / 동적 자원 구분</li>
<li>but. was에서 정적 자원 처리 가능</li>
</ul>
<h3 id="데이터베이스">데이터베이스</h3>
<ul>
<li>동적인 컨텐츠를 제공하기 위해 데이터를 저장해두는 저장소</li>
</ul>
<h3 id="server-side--client-side">Server-Side / Client-Side</h3>
<ul>
<li>보안 검증은 서버측에서. → 클라이언트 측에서의 보안 검증 절차는 js인데 js는 변조가 쉽다.</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[웹 기술 -1 (2주차)]]></title>
            <link>https://velog.io/@sang-eun2/%EC%9B%B9-%EA%B8%B0%EC%88%A0-1-2%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@sang-eun2/%EC%9B%B9-%EA%B8%B0%EC%88%A0-1-2%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 12 Apr 2026 13:18:51 GMT</pubDate>
            <description><![CDATA[<p>추가 도서: </p>
<ul>
<li>그림으로 배우는 HTTP&amp;Network Basic</li>
<li>성공과 실패를 결정하는 1%의 네트워크 원리</li>
</ul>
<h3 id="why">WHY?</h3>
<ul>
<li>생태계의 구조 이해 및 취약성 인지</li>
</ul>
<h3 id="웹-탄생-웹-브라우저의-탄생">웹 탄생? 웹 브라우저의 탄생</h3>
<ul>
<li>웹을 사용하면서 웹 서버와의 통신을 요청 응답 주고 받고 클라이언트 언어를 해석하여 GUI제공</li>
</ul>
<h2 id="웹을-구성하는-3대-요소">웹을 구성하는 3대 요소</h2>
<p>웹 브라우저(클라이언트) ——— 서버</p>
<ul>
<li>HTTP Request Message → HTTP Response Message return.</li>
</ul>
<h3 id="html-http-url이-3대-요소">HTML, HTTP, URL이 3대 요소</h3>
<ul>
<li>HTTP: 통신을 할 수 있도록 지원</li>
<li>URL은 웹 클라이언트가 웹 서버로 자원을 요청할 수 있게 함</li>
<li>HTML은 응답을 받으면 이를 해석하여 GUI 출력</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/ab5ff626-f225-4125-9abe-9fa8549d205e/image.png" alt=""></p>
<h2 id="자원을-지정하는-url">자원을 지정하는 URL</h2>
<p>Uniform Resource Locator → 서버 자원 요청할 때 사용.</p>
<h3 id="구조-분석">구조 분석</h3>
<ul>
<li>http : 스키마 부분. 프로토콜 명시 부분</li>
<li>:// 구분</li>
<li><a href="http://www.test">www.test</a> : 서버 주소인 호스트 부분으로 자원을 가진 컴퓨터의 위치 명시</li>
<li>/image: 자원이 존재하는 디렉토리</li>
<li>/ background.png : 요청할 자원 이름</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/eea032ca-79d1-4117-827f-ecda5375a1d0/image.png" alt=""></p>
<h3 id="url-예약-문자">URL 예약 문자</h3>
<ul>
<li>? : 파라미터가 시작된다는 것 알려줌</li>
<li>= : 파라미터 값 대입</li>
<li>&amp; : 다음 파라미터 식별자</li>
<li><ul>
<li>: 공백</li>
</ul>
</li>
</ul>
<h3 id="url-인코딩">URL 인코딩</h3>
<ul>
<li>데이터 전송상 손실 막기위해.</li>
<li>자동으로 인코딩 해주긴 한데 간단한 건 외워두자</li>
<li>&amp; - %26</li>
<li>% - %25</li>
<li><ul>
<li><ul>
<li>%2B</li>
</ul>
</li>
</ul>
</li>
<li>공백 - %20</li>
<li>= - %3D</li>
<li>&#39;#&#39; - %23</li>
<li>‘ - %27</li>
<li>? - %3F</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/33211b78-3492-428f-b765-575035e80f2b/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[네트워크(1주차)]]></title>
            <link>https://velog.io/@sang-eun2/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC1%EC%A3%BC%EC%B0%A8</link>
            <guid>https://velog.io/@sang-eun2/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC1%EC%A3%BC%EC%B0%A8</guid>
            <pubDate>Sun, 05 Apr 2026 13:53:06 GMT</pubDate>
            <description><![CDATA[<h2 id="컴퓨터-네트워크의-구성-요소">컴퓨터 네트워크의 구성 요소</h2>
<ul>
<li>노드</li>
<li>링크</li>
</ul>
<h3 id="기본-용어">기본 용어</h3>
<ul>
<li>네트워크</li>
<li>노드 : 네트워크에 연결된 장치의 집합. (컴퓨터, 서버, 프린터, 라우터, 스위치 등)</li>
<li>프로토콜: 네트워크를 통해 데이터가 전송되는 방식을 제어하는 규칙(규약)</li>
<li>토폴로지: 네트워크에 있는 노드의 물리적, 논리적 배열</li>
<li>IP 주소: 장치간의 통신 식별자(고유 식별자)</li>
<li>MAC 주소(미디어 액세스 제어 주소): 물리적 주소로 고유 식별자.</li>
<li>포트(Port): 애플리케이션과 데이터를 주고받을 수 있는 논리적 채널</li>
<li>소켓: IP조수와 포트 번호의 고유한 조합</li>
<li>DNS: (Domain Name System) 컴퓨터가 알 수 있게 IP주소 변환</li>
<li>방화벽: 네트워크 트래픽을 모니터링하고 제어하는 데 사용되는 보안 장치</li>
</ul>
<h3 id="네트워크의-유형">네트워크의 유형</h3>
<ul>
<li>LAN: 근거리 통신망</li>
<li>WAN: Wide Area Netwrok. WAN은 LAN을 서로 연결하는 데 사용되며 일반적으로 장거리 통신에 사용</li>
<li>클라우드 네트워크</li>
</ul>
<h3 id="아키텍처의-유형">아키텍처의 유형</h3>
<ul>
<li>클라이언트-서버 아키텍쳐: 중간 서버 o</li>
<li>Peer-to-Peer 아키텍쳐: P2P로 중앙서버 x</li>
</ul>
<h3 id="osi-모델">OSI 모델</h3>
<p>개방형 시스템 상호 연결</p>
<ul>
<li>물리층<ul>
<li>한 노드에서 다음 노드로 개별 비트를 전송하는 역할</li>
<li>비트 동기화</li>
<li>비트 종송률 제어</li>
<li>물리적 토폴로지</li>
<li>전송 모드</li>
</ul>
</li>
<li>데이터링크층<ul>
<li>메시지의 노드 간 전달. 오류가 있는가 확인</li>
<li>프레이밍(Framing)</li>
<li>물리적 주소 지정</li>
<li>오류 제어</li>
<li>흐름 제어</li>
<li>액세스 제어</li>
</ul>
</li>
<li>네트워크 계층<ul>
<li>한 호트에서 다른 네트워크의 다른 호스트로 데이터 전송하는데 사용</li>
<li>라우팅</li>
<li>논리적 주소 지정</li>
</ul>
</li>
<li>전송 계층<ul>
<li>애플리케이션 계층에 서비스를 제공하고 네트워크 계층에서 서비스를 가져옴.</li>
<li>분할 및 재조립</li>
<li>서비스 지점 주소 지정</li>
</ul>
</li>
<li>세션 계층<ul>
<li>세션 설정, 유지 및 종료</li>
<li>동기화</li>
<li>대화 컨트롤러</li>
</ul>
</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/52f61f6b-d320-44a0-a341-bf98ec2e4cd4/image.png" alt=""></p>
<pre><code>(전달간의 암호화를 통해 진행)</code></pre><ul>
<li>플리젠테이션 레이어<ul>
<li>번역</li>
<li>암호화/복호화</li>
<li>압축</li>
</ul>
</li>
<li>애플리케이션 계층<ul>
<li>최상위 계층으로 수신된 정보를 창에 제공</li>
<li>네트워크 가상 터미널</li>
<li>FTAM</li>
<li>메일 서비스</li>
<li>디렉토리 서비스
<img src="https://velog.velcdn.com/images/sang-eun2/post/e42306b2-4f8b-4e37-8b4c-811046c1d5d4/image.png" alt=""></li>
</ul>
</li>
</ul>
<h2 id="tcpip-모델">TCP/IP 모델</h2>
<p>? : 컴퓨터의 데이터를 한 장치에서 다른 장치로 전송</p>
<p>IP는 메일의 목적지를 찾아줌 / TCP(전송 제어 프로토콜)은 메일을 보내고 받는 일</p>
<h3 id="작동-방법">작동 방법:</h3>
<p>송신자 측. 데이터 패킷으로 나눠 / 수신자 측. 동일한 패킷을 다시 결합</p>
<h3 id="계층">계층:</h3>
<ul>
<li>애플리케이션 계층</li>
<li>전송 계층(TCP/UDP) : 패킷 오류 없이 도달한 지 확인</li>
<li>네트워크/인터넷 레이어(IP)</li>
<li>데이터 링크 계층(MAC) : 패킷 식별</li>
<li>물리층 : 연결 요청</li>
</ul>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/d2291860-0ee0-41f7-8cb9-01d720d20682/image.png" alt=""></p>
<h3 id="tcpip와-osi의-계층-차이점">TCP/IP와 OSI의 계층 차이점</h3>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/207a8b2c-b88c-4164-ab9b-ff41103888b7/image.png" alt=""></p>
<h2 id="dnsdomain-name-system">DNS(Domain Name System)</h2>
<ul>
<li>DNS 리커서 : 쿼리를 수신하도록 설계된 서버</li>
<li>루트 네임서버: 호스트 이름을 IP 주소로 변환</li>
<li>TLD 네임서버</li>
<li>권위 있는 네임서버</li>
</ul>
<p>재귀 DNS 확인자</p>
<h3 id="dns-조회의-8단계">DNS 조회의 8단계:</h3>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/66d17175-19bd-44f0-b34c-9515271b8e72/image.png" alt=""></p>
<h2 id="http">HTTP</h2>
<p>하이퍼텍스트 전송 프로토콜로 링크를 통해 웹 페이지를 로드하는 규칙</p>
<h3 id="무엇을-할까">무엇을 할까:</h3>
<ul>
<li>HTTP 버전 유형</li>
<li>URL</li>
<li>HTTP 메서드: GET, POS 등 함수</li>
<li>HTTP 요청 헤더: 키값 쌍에 저장된 텍스트 정보.</li>
<li>선택 사항인 HTTP 본문</li>
</ul>
<h3 id="http-응답">HTTP 응답</h3>
<ul>
<li>HTTP 상태 코드<ul>
<li>1xx informational</li>
<li>2xx 성공</li>
<li>3xx 리디렉션</li>
<li>4xx 클라이언트 오류</li>
<li>5xx Server Error</li>
</ul>
</li>
<li>HTTP 응답 헤더</li>
<li>선택 사항인 HTTP 본문</li>
</ul>
<h2 id="sslsecure-sockets-layer">SSL(Secure Sockets Layer)</h2>
<p>암호화 기반 인터넷 보안 프로토콜</p>
<p>SSL 보안 인증서로 SSL/TLS를 사용하는 웹사이트의 URL는 HTTP→HTTPS</p>
<h3 id="가치">가치:</h3>
<ul>
<li>데이터의 중도 탈취에도 정보가 암호화되어 안전성 o.</li>
</ul>
<h3 id="ssl-인증서">SSL 인증서:</h3>
<ul>
<li>단일 도메인</li>
<li>와일드 도메인</li>
<li>멀티 도메인</li>
</ul>
<h2 id="tls-핸드셰이크">TLS 핸드셰이크</h2>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/5ec19e07-def7-4c20-9be8-ecd35702acbe/image.png" alt=""></p>
<ul>
<li>TLS 암호화를 사용하는 통신 세션을 실행하는 프로세스(HTTPS 작동의 근간)</li>
</ul>
<h3 id="과정">과정:</h3>
<ul>
<li>사용할 TLS 버전 지정</li>
<li>사용할 암호 제품군을 결정</li>
<li>서버의 공개 키와 SSL 인증서 기관의 디지털 서명을 통해 서버의 ID 인증</li>
<li>핸드셰이크가 완료된 후에 대칭 암호화를 사용하기 위해 세션 키를 생성</li>
</ul>
<h3 id="단계">단계</h3>
<ul>
<li>클라이언트 헬로 메시지</li>
<li>서버 헬로 메시지</li>
<li>인증</li>
<li>예비 마스터 암호</li>
<li>개인 키 사용</li>
<li>세션 키 생성</li>
<li>클라이언트 준비 완료</li>
<li>서버 준비 완료</li>
<li>안전한 대칭 암호화 성공</li>
</ul>
<h2 id="웹-소켓">웹 소켓</h2>
<p><img src="https://velog.velcdn.com/images/sang-eun2/post/9b3d119f-6c6b-4925-8417-112b35fe4798/image.png" alt=""></p>
<p>HTTP 프로토콜 : 서버가 응답을 보내는 단방향
<img src="https://velog.velcdn.com/images/sang-eun2/post/4b275485-9c00-4c52-9b76-efd6b41f9c51/image.png" alt=""></p>
<h3 id="websocket">WebSocket:</h3>
<p>클라이언트-서버 통신과 동일한 시나리오에서 사용되는 양방향 전이중 프로토콜</p>
<ul>
<li>통신 링크 설정 및 연결이 열리면 클라이언트-서버 간 연결이 지속될 때까지 양방향 모드로 메시지 교환 이루어짐.</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>