<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>soso.log</title>
        <link>https://velog.io/</link>
        <description>공부하는 블로그</description>
        <lastBuildDate>Sat, 23 Jul 2022 06:23:27 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>soso.log</title>
            <url>https://images.velog.io/images/so_sa/profile/e6fa7532-0395-4b79-9ec6-0f6b12ca7bb6/KakaoTalk_20201108_130530443.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. soso.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/so_sa" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[2. R 기초 예제 - mtcars 데이터 분석]]></title>
            <link>https://velog.io/@so_sa/2.-R-%EA%B8%B0%EC%B4%88-%EC%98%88%EC%A0%9C-mtcars-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</link>
            <guid>https://velog.io/@so_sa/2.-R-%EA%B8%B0%EC%B4%88-%EC%98%88%EC%A0%9C-mtcars-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%B6%84%EC%84%9D</guid>
            <pubDate>Sat, 23 Jul 2022 06:23:27 GMT</pubDate>
            <description><![CDATA[<h2 id="1-mtcars-데이터-소개">1. mtcars 데이터 소개</h2>
<p>mtcars는 R의 내장데이터 중 하나이다.</p>
<h3 id="1-1-데이터-구조-확인">1-1. 데이터 구조 확인</h3>
<pre><code class="language-c">str(mtcars)</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/82222775-4955-4a1f-a0e5-d008c8ba4cee/image.png" alt=""></p>
<h3 id="1-2-데이터-변수-설명">1-2. 데이터 변수 설명</h3>
<pre><code class="language-c">help(mtcars)</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/133ff8d3-fb70-46ed-9596-c5f4f829f6b7/image.png" alt="">
데이터 변수 설명은 help 창에서 확인할 수 있다.</p>
<h2 id="2-연비mpg의-히스토그램-작성">2. 연비(mpg)의 히스토그램 작성</h2>
<pre><code class="language-c">#패키지 설치
install.packages(&#39;dplyr&#39;)
install.packages(&#39;ggplot2&#39;)

library(dplyr)
library(ggplot2)

  mtcars %&gt;%
    #그래프 형태 생성
    ggplot(aes(mpg)) + 
    #히스토그램 그리기 위해 도수분포표를 그림
    #color 테두리 fill 색채우기 
    geom_histogram(binwidth = 2, color=&#39;black&#39;, fill=&#39;red&#39;,alpha=0.3) + 
    #virtical line 세로 선 hline 가로선 
    #intercept 절편
    geom_vline(aes(xintercept= mean(mpg)),linetype=&#39;dashed&#39;) + 
    labs(title = &quot;Histogram of mpg&quot;, x=&#39;mpg(Miles/(US) gallon&#39;,y=&#39;frequency&#39;) </code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/05f7c983-69d5-4dbc-bf98-adbafdd6a7ff/image.png" alt=""></p>
<blockquote>
<p>분포가 왼/오 이질적인 것을 보아 두개의 그룹이 나뉜 다는 것을 예측해볼 수 있음</p>
</blockquote>
<h2 id="3-기어am-방식에-따른-연비mpg의-평균">3. 기어(am) 방식에 따른 연비(mpg)의 평균</h2>
<pre><code class="language-c">  #데이터 객체 생성
  cars &lt;- mtcars 
  #ifelse(조건,T,F) 
  cars$am &lt;- ifelse(cars$am == 0, &#39;자동&#39;,&#39;수동&#39;) 

  cars %&gt;%
    group_by(am) %&gt;%
    summarise(연비평균 = mean(mpg)) %&gt;% #mpg 평균 계산
    ggplot(aes(am,연비평균)) + #그래프 축 지정 (데이터 삽입 안된 상태)
    geom_col(fill = c(&quot;#FFCC00&quot;,&quot;#FF6600&quot;)) + #막대그래프 함수: geom_col fill == c 색깔 지정해서 채우기
    labs(title = &quot;기어종류에 따른 연비&quot;,x=&quot;기어종류&quot;,y=&quot;연비평균&quot;) #label 재지정</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/3ade0b74-90ac-470b-9892-f58547d490ef/image.png" alt=""></p>
<blockquote>
<p>수동 기어의 연비 평균이 자동 기어의 연비 평균보다 높다는 것을 알 수 있음</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[R 기초]]></title>
            <link>https://velog.io/@so_sa/R-%EA%B8%B0%EC%B4%88</link>
            <guid>https://velog.io/@so_sa/R-%EA%B8%B0%EC%B4%88</guid>
            <pubDate>Tue, 19 Jul 2022 11:23:58 GMT</pubDate>
            <description><![CDATA[<p><em>이 포스팅은 R 기초 특강을 듣고 작성되었으며, 예제는 직접 재구성하였습니다.</em></p>
<p>R은 파이썬과 마찬가지로 <strong>대표적인 데이터분석 언어</strong>입니다. 
아래 예제들을 직접 작성해보면서 R 기초 문법을 익히는데 도움이 되었으면 좋겠습니다.</p>
<h2 id="0-r-설치-및-기본-화면">0. R 설치 및 기본 화면</h2>
<ol>
<li><p>R project 다운
<a href="https://cran.r-project.org/mirrors.html">https://cran.r-project.org/mirrors.html</a>
Korea 미러사이트 중 아무 사이트나 들어가서 Windows / Mac 등 환경에 맞는 파일을 다운 받으면 됩니다.</p>
</li>
<li><p>R studio 다운
<a href="https://www.rstudio.com/products/rstudio/download/">https://www.rstudio.com/products/rstudio/download/</a>
Windows / Mac 등 환경에 맞는 파일을 다운 받으면 됩니다.
<em>설치과정에서 기본값 변경없이 전부 다음을 클릭 후 설치</em></p>
</li>
<li><p>R studio 작업화면 
<img src="https://velog.velcdn.com/images/so_sa/post/cd504621-2399-4b04-aa0a-a310e09e5cb8/image.png" alt=""></p>
</li>
</ol>
<p>1) 스크립트: R 코드를 작성하는 화면 (ctrl+enter로 코드 실행)
2) 콘솔: 실행한 코드 결과가 나타나는 화면 
3) 환경창: 객체 확인 가능
4) 파일경로, plot 확인</p>
<h2 id="1-작업경로-확인-및-설정">1. 작업경로 확인 및 설정</h2>
<pre><code class="language-c">getwd()
setwd(&#39;작업경로&#39;)</code></pre>
<ul>
<li>getwd(): 현재 작업 경로를 확인하는 함수</li>
<li>setwd(&#39;작업경로&#39;): 작업 경로를 새로 지정해 주는 함수</li>
</ul>
<h2 id="2-데이터-유형">2. 데이터 유형</h2>
<pre><code class="language-c">scores &lt;- c(70,80,90,100,65)</code></pre>
<ul>
<li>Scalars 스칼라: 하나의 원소를 가지는 벡터
여기서 70, 80 각 점수가 하나의 스칼라</li>
<li>Vector 벡터: 같은 자료형의 원소가 모인 형태
scores는 수치형 자료가 모인 벡터</li>
<li>Matrix 행렬: 차원을 갖는 벡터
벡터가 모이면 행렬이 됨</li>
<li>List 리스트: 서로 다른 자료형이 모인 벡터</li>
<li>Dataframe 데이터프레임: 열과 형이 존재하는 테이블 구조</li>
</ul>
<h2 id="3-데이터-입력">3. 데이터 입력</h2>
<pre><code class="language-c">students &lt;- c(&#39;Jane&#39;,&#39;Tommy&#39;,&#39;Anna&#39;,&#39;Alex&#39;)

info &lt;- data.frame(name = students,
                   age = c(18,17,19,18),
                   points = c(100,85,70,90))</code></pre>
<ul>
<li>c(): 스칼라를 하나로 묶어주어(combine) 벡터를 생성하는 생성자 함수
<img src="https://velog.velcdn.com/images/so_sa/post/5f39d9b9-7888-4750-8ec2-c4392bd210d3/image.png" alt=""></li>
<li>print(): 객체를 출력해주는 함수</li>
</ul>
<h2 id="4-범주형-변수-기술-통계">4. 범주형 변수 기술 통계</h2>
<h3 id="4-1-빈도표">4-1. 빈도표</h3>
<pre><code class="language-c">data &lt;- c(&#39;good&#39;,&#39;bad&#39;,&#39;soso&#39;,&#39;soso&#39;,&#39;bad&#39;,&#39;good&#39;,&#39;good&#39;,&#39;bad&#39;,&#39;good&#39;)
table(data) #빈도표로 생성
factor(data) #범주형 변수를 집단 구분 요인으로 변경</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/0e7a7c3d-0f70-4e1e-9ca3-f54bf4c2e5a2/image.png" alt=""></p>
<h3 id="4-2-막대그래프">4-2. 막대그래프</h3>
<pre><code class="language-c">barplot(table(data))</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/b938ddbf-d4d3-4fe9-9379-2bc55a15b43b/image.png" alt=""></p>
<h3 id="4-3-파이차트">4-3. 파이차트</h3>
<pre><code class="language-c">pie(table(data), col = c(&#39;blue&#39;,&#39;red&#39;,&#39;black&#39;))</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/c48d9403-9333-46e9-a1d8-2785a710fe0d/image.png" alt=""></p>
<h2 id="5-연속형-변수-기술-통계">5. 연속형 변수 기술 통계</h2>
<h3 id="5-1-통계">5-1. 통계</h3>
<p>(1) 벡터</p>
<pre><code class="language-c">mean(info$points)
sd(info$points)
range(info$points)
summary(info$points)

install.packages(&#39;psych&#39;) #패키지 설치
library(psych)
describe(info, IQR=T) #사분위수범위(IQR) 요청</code></pre>
<ul>
<li>데이터$데이터변수명</li>
<li>mean(): 평균</li>
<li>sd(): 표준편차</li>
<li>range(): 범위</li>
<li>summary(): 기술통계 요약</li>
<li>install.packages(): 패키지 설치</li>
<li>library(): 사용할 패키지 입력</li>
<li>describe(): psych 패키지에 포함되어있는 자세한 기술통계 요약 함수
<img src="https://velog.velcdn.com/images/so_sa/post/9c82414f-a4c3-435e-ad79-8d8ce9f20c92/image.png" alt="">
(2) 데이터프레임<pre><code class="language-c">apply(cars, 2, mean)
apply(cars, 2, range)</code></pre>
<img src="https://velog.velcdn.com/images/so_sa/post/6a1240d8-5f1b-40be-9d33-9dfd410aefdd/image.png" alt="">
cars는 R의 내장데이터 중 하나이다.</li>
<li>R 내장 데이터: cars, iris 등 
data() 함수로 전체 데이터셋 목록 확인 가능</li>
</ul>
<h3 id="5-2-히스토그램">5-2. 히스토그램</h3>
<p>도수분포표를 그래프로 나타낸 것.
※ 도수분포표: 표본의 다양한 산출분포를 보여주는 표</p>
<ul>
<li><strong>히스토그램</strong>은 주로 <strong>연속형</strong> 변수 분석에 사용되고, <strong>막대그래프</strong>는 주로 <strong>범주형</strong> 변수 분석에 사용된다.<pre><code class="language-c">hist(cars$speed)</code></pre>
<img src="https://velog.velcdn.com/images/so_sa/post/778e3f54-1e59-4402-b888-8fbf8c901b2c/image.png" alt=""></li>
</ul>
<h3 id="5-3-상자그림">5-3. 상자그림</h3>
<p> 데이터의 중심과 산포 확인 가능한 데이터 분포를 나타낸 것.</p>
<pre><code class="language-c">boxplot(cars$dist)</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/c008beec-bb5f-4f0e-a7ae-e6199fcb966a/image.png" alt=""></p>
<blockquote>
<p>상자그림을 통해 극단값이 존재함을 알수있다.
<img src="https://velog.velcdn.com/images/so_sa/post/6d286bfd-e439-47b8-88a2-96404519c9dd/image.png" alt=""></p>
</blockquote>
<h3 id="5-4-산점도">5-4. 산점도</h3>
<p>두개의 연속형 변수의 관계를 보여주는 것. </p>
<pre><code class="language-c">plot(cars$speed, cars$dist)</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/19f33c51-6704-4958-852a-f6ddd1abe334/image.png" alt=""></p>
<pre><code class="language-c">model &lt;- lm(dist ~ speed, cars)
plot(cars$speed, cars$dist)
abline(model)</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/7df39a9e-4715-4fef-b93c-f4e68d70d6f4/image.png" alt=""></p>
<blockquote>
<p>속도(speed)가 증가함에 따라 dist(거리)가 증가하는 관계를 가지는 것을 알 수 있다.</p>
</blockquote>
<h3 id="5-5-선-도표">5-5. 선 도표</h3>
<p>시간 경과에 따른 연속형 변수의 변동을 보여주는 것.</p>
<pre><code class="language-c">plot(cars$speed, cars$dist, type=&#39;l&#39;)</code></pre>
<p><img src="https://velog.velcdn.com/images/so_sa/post/4492e40b-d09c-4558-bae7-e6840a4d0b0f/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[ML을 이용한 CPS detector(1)]]></title>
            <link>https://velog.io/@so_sa/ML%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-CPS-detector1</link>
            <guid>https://velog.io/@so_sa/ML%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%9C-CPS-detector1</guid>
            <pubDate>Wed, 27 Jan 2021 05:51:14 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><a href="https://github.com/sosa-p/CPS-detector/blob/main/decision%20tree.ipynb">https://github.com/sosa-p/CPS-detector/blob/main/decision%20tree.ipynb</a>
깃허브에서 전체 코드 확인 가능</p>
</blockquote>
<h1 id="1설계-목적">1.설계 목적</h1>
<p>Decision Tree를 분류 모델로 훈련 세트를 학습시켜서 테스트 세트에서 malware 여부를 판단하고, 잘 학습이 되었는지 정확도를 확인한다. </p>
<h1 id="2데이터-세트">2.데이터 세트</h1>
<p>데이터 세트: <a href="https://www.kaggle.com/ang3loliveira/malware-analysis-datasets-top1000-pe-imports">top_1000_pe_imports.csv</a></p>
<p>본 데이터 세트는 malware와 goodware를 다양한 컬럼 속성으로 분석, 분류해 놓은 데이터 세트이다. 마지막 컬럼인 ‘malware’가 0이면 Goodware이고, 1이면 Malware이다. </p>
<h1 id="3분석-방법">3.분석 방법</h1>
<h2 id="31-decision-tree">3.1 Decision Tree</h2>
<p>나무 구조로 도표화하여 분류와 예측을 수행하는 분석방법이다. Decision Tree는 최종적인 결정에 도달하기 위해서 이진분류에 대한 질문을 이어나가면서 학습한다. 기본적인 학습 방향은 데이터를 나누는 과정을 반복하며 각 노드가 테스트 하나씩을 가진 이진 트리를 만들어 계층적으로 영역을 분할하여 데이터를 학습시킨다. </p>
<h2 id="32-분석-개요">3.2 분석 개요</h2>
<p>1) 데이터 세트를 읽어와서 47580 row와 1002 column을 확인
2) 각 파일 별 다른 값을 갖는 hash값과 목표 노드로 사용할 malware 컬럼을 drop
3) 전체 데이터 세트 중 훈련세트는 70%, 테스트 세트는 30%로 나눔
4) Decision Tree 모델을 적용하여 파라미터 값을 설정
5) 교차검증 적용
6) 예측값에 대한 정확도 계산
7) 학습한 모델 시각화
8) 학습에 사용한 칼럼에 대해 변수 중요도 계산</p>
<h2 id="33-파라미터">3.3 파라미터</h2>
<pre><code class="language-python">x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 101) </code></pre>
<ul>
<li>test_size: 테스트 세트의 크기를 0.3으로 설정하여, 훈련 세트는 전체 데이터 세트의 70%, 테스트 세트는 전체 데이터 세트의 30%로 분리하였다. </li>
<li>random_state: 알고리즘은 실행마다 값이 변하기 때문에 random_state를 설정하여 값을 고정한다. 유사 난수 생성기에 넣을 난수 초기값을 임의로 101으로 설정하여 random_state 매개변수로 전달한다. <pre><code class="language-python">from sklearn.tree import DecisionTreeClassifier
dtree = DecisionTreeClassifier(criterion = &#39;entropy&#39;, max_depth = 5, min_samples_split = 20)</code></pre>
</li>
<li>criterion: 노드의 분리기준으로 ‘gini’와 ‘entropy’를 사용한다. 임의로 entropy를 선택한다.</li>
<li>max_depth: decision tree에서 모델의 복잡도를 조절하는 매개변수로 tree가 완전히 만들어지기 전에 멈추게 하는 사전 가지치기 변수이다. 보통 사전 가지치기 방법인 max_depth, max_leaf_nodes, min_samples_leaf에서 하나만 지정해도 과적합을 막을 수 있다. 이때 max_depth는 tree 모형의 최대 깊이를 의미하여 값이 커질수록 깊어져 과적합이 쉽게 일어난다. 따라서 max_depth를 적절히 5로 설정한다.</li>
<li>min_samples_split: 앞의 파라미터와 마찬가지로 과적합을 방지하기 위해 사용하는 파라미터로 노드를 분할하기 위한 최소한의 샘플 데이터 수를 가리킨다. Default는 2로, 작게 설정할수록 분할 노드가 많아져 과적합 가능성이 증가하기 때문에 적절하게 20으로 설정하였다. <h2 id="34-교차검증">3.4 교차검증</h2>
<pre><code class="language-python"></code></pre>
</li>
</ul>
<p>from sklearn.model_selection import cross_val_score 
score=cross_val_score(dtree, x_train, y_train, cv=5) 
print(&#39;cross validation score : {:.3f}&#39;.format(score.mean()))</p>
<pre><code>
일정한 하나의 테스트 셋으로 계속해서 평가를 진행하거나 하나의 훈련셋으로 학습을 진행하면 과적합이 쉽게 일어나기 때문에 K-Fold 교차검증을 적용한다. fold를 5개로 나누어서 다섯 개의 fold를 다르게 적용하여 테스트 셋으로 사용하여 모델에 대해 교차검증을 수행한다. 

# 4. 탐지 결과
## 4.1 Malware 여부
```python
i = 1
mal =0
good =0
for each in predicties : #예측값이
    if each == 1: #1이라면 malware
        mal +=1
        print(&quot;NO.%d is Malware.&quot; %(i))
    else: #0이라면 goodware
        good +=1
        print(&quot;NO.%d is Goodware.&quot; %(i))
    i+=1</code></pre><p>예측값이 1이면 malware이고, 예측값이 1이 아니면 즉 0이면 goodware로 출력하도록 코드를 작성하였다. 
<img src="https://images.velog.io/images/so_sa/post/5442b2e1-d03d-487c-aed5-d9a45ca9da6e/image.png" alt="">
각각 malware인지 goodware인지 출력한다. 
<img src="https://images.velog.io/images/so_sa/post/84eac10a-c534-42be-a595-0404b7ace86e/image.png" alt="">
테스트 세트의 전체 14275개 중에서 13978개가 malware로 분류되었고, 296개가 goodware로 분류되었다. </p>
<h2 id="42-모델-정확도">4.2 모델 정확도</h2>
<p><img src="https://images.velog.io/images/so_sa/post/b904a6c2-b7e4-40af-b9e6-c74256d3681e/image.png" alt=""></p>
<ul>
<li>Accuracy: 모델이 예측한 것에서 실제로 정답을 맞힌 비율로, 본 학습 모델에서 accuracy는 0.974이 나왔다. </li>
<li>Recall: 실제 true인 것 중에서 모델이 true라고 예측한 것의 비율로, 본 학습 모델에서 recall은 0.996이 나왔다. </li>
<li>Precision: 모델이 true라고 예측한 것 중에서 실제 true를 예측한 것의 비율로, 본 학습 모델에서 precision은 0.977이 나왔다. </li>
<li>F1 score: Precision과 Recall의 조화평균으로, 본 학습 모델에서 F1 score은 0.987이 나왔다. </li>
</ul>
<p>즉, 머신러닝 분류 모델의 성능 평가 지표가 전부 0.9 이상이 나왔으므로 본 학습 모델은 비교적 정확한 확률로 테스트 세트를 분류하였다고 볼 수 있다. </p>
<h2 id="43-시각화">4.3 시각화</h2>
<p><img src="https://images.velog.io/images/so_sa/post/2becc43c-4755-40bb-a134-212ffcb16808/image.png" alt="">
모델이 어떤 방식으로 분류되었는지 가지치기 과정을 시각화하여 살펴볼 수 있다. </p>
<h2 id="44-변수중요도">4.4 변수중요도</h2>
<p><img src="https://images.velog.io/images/so_sa/post/21d69e89-6243-4bbf-9379-1c938da30354/image.png" alt="">
Decision Tree의 학습이 마무리되면, 각 종속 변수 분류에 대해서 각각의 독립 변수가 어느 정도 기여를 했는지 나타내는 변수 중요도를 확인할 수 있다. 본 학습 모델에서는 1000개의 컬럼 중에 22개의 컬럼만 데이터 세트를 학습하는데 유의미하게 작용했다는 것을 알 수 있다. </p>
<h1 id="5-평가-및-고찰">5. 평가 및 고찰</h1>
<p> Decision Tree는 지도 학습의 모델 중 하나로, 다양한 의사결정 경로와 결과를 나타내는 트리구조를 사용하여 이해하기 쉽고, 과정이 명백하다. 하지만, Decision Tree는 학습 데이터에 대한 최적의 트리를 찾기 힘들고, 새로운 데이터에 대한 일반화 성능이 좋지 않아 과적합되기 쉽다. 
 본 학습 모델에서는 과적합을 방지하기 위해서 다양한 파라미터 값을 적용하고, 교차 검증을 적용하였고, 최적의 학습모델을 구축하기 위해 변수들의 값을 지속적으로 변경하며 테스트하였다. 따라서, 1에 가까운 정확도를 갖는 높은 성능의 학습 모델을 구축할 수 있었다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[JS#1 light & dark mode 설정]]></title>
            <link>https://velog.io/@so_sa/JS1-light-dark-mode-%EC%84%A4%EC%A0%95</link>
            <guid>https://velog.io/@so_sa/JS1-light-dark-mode-%EC%84%A4%EC%A0%95</guid>
            <pubDate>Mon, 28 Dec 2020 15:41:10 GMT</pubDate>
            <description><![CDATA[<h1 id="웹-브라우저-light-mode--dark-mode-설정하기">웹 브라우저 light mode &amp; dark mode 설정하기</h1>
<p>최근 라이트 모드와 다크 모드를 지원하는 웹 브라우저가 증가하고 있다. 자바 스크립트를 이용해서 간단하게 구현해보자. </p>
<pre><code class="language-html">&lt;input type=&quot;button&quot; value=&quot;dark mode&quot; onclick=&quot;
 document.querySelector(&#39;body&#39;).style.backgroundColor = &#39;black&#39;; 
 document.querySelector(&#39;body&#39;).style.color = &#39;white&#39;;
&quot;&gt;
&lt;input type=&quot;button&quot; value=&quot;light mode&quot; onclick=&quot;                   
 document.querySelector(&#39;body&#39;).style.backgroundColor = &#39;white&#39;;
 document.querySelector(&#39;body&#39;).style.color = &#39;black&#39;;
&quot;&gt;</code></pre>
<p><img src="https://images.velog.io/images/so_sa/post/a0d20927-bac2-417d-a74b-be76aafce2f6/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/so_sa/post/fcb15a95-427f-40f1-af67-a621fcbd345e/image.png" alt=""></p>
<p>샘플 사진과 같이 각각 light mode와 dark mode로 웹 브라우저를 변환할 수 있다. </p>
<blockquote>
<p><a href="https://github.com/sosa-p/javascript_basic/blob/master/modeSetting.html">https://github.com/sosa-p/javascript_basic/blob/master/modeSetting.html</a>
깃허브에서 테스트 코드(full)를 확인할 수 있습니다. </p>
</blockquote>
<h2 id="queryselector">querySelector()</h2>
<p>선택자(class, id 등)을 반환한다. </p>
<pre><code class="language-html">&lt;body&gt;
  &lt;script&gt; document.querySelector(&#39;body&#39;) &lt;/script&gt;
&lt;/body&gt;</code></pre>
<p>body라는 태그를 직접 입력하여 body 태그를 반환한다. </p>
<ul>
<li>class: querySelector(&quot;.class명&quot;)</li>
<li>id: querySelector(&quot;#id명&quot;)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML #2 시멘틱 태그]]></title>
            <link>https://velog.io/@so_sa/HTML-2-%EC%8B%9C%EB%A9%98%ED%8B%B1-%ED%83%9C%EA%B7%B8</link>
            <guid>https://velog.io/@so_sa/HTML-2-%EC%8B%9C%EB%A9%98%ED%8B%B1-%ED%83%9C%EA%B7%B8</guid>
            <pubDate>Sun, 08 Nov 2020 13:30:56 GMT</pubDate>
            <description><![CDATA[<h1 id="html5의-문서-구조">HTML5의 문서 구조</h1>
<p><img src="https://images.velog.io/images/so_sa/post/7c1f510a-dc74-4b79-95f1-2013fb008ae4/image.png" alt=""></p>
<ul>
<li>header: 사이트 제목, 로고, 검색 창 등 위치</li>
<li>content(sectrion,article): 웹 문서의 내용이 있는 부분</li>
<li>side bar: 본문 이외의 내용을 나타내는 곳</li>
<li>footer: 저작권 정보와 제작자 정보 표시<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;ko&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;title&gt; 사이트 이름 &lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;header&gt;
    &lt;h1&gt; 주제 &lt;/h1&gt;
    &lt;nav&gt;
      ...
    &lt;/nav&gt;
  &lt;/header&gt;
  &lt;section&gt;
    &lt;article&gt;
      &lt;h2&gt; 소주제 &lt;/h2&gt;
      ...
    &lt;/article&gt;
  &lt;/section&gt;
  &lt;footer&gt;
    &lt;p&gt; Copyright 저작권 &lt;/p&gt;
  &lt;/footer&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="1-header">1. header</h2>
머리말, 제목 등을 지정하는 태그이다. 사이트 전체의 제목을 지정할 수 도 있고, &lt;article&gt;의 제목을 지정할 수도 있다. <pre><code class="language-html">&lt;header&gt; 
&lt;h1&gt; 사이트 제목 &lt;/h1&gt;
&lt;/header&gt;</code></pre>
<h2 id="2-nav">2. nav</h2>
내비게이션 태그로 같은 사이트 안의 문서나 다른 사이트의 문서로 연결하는 링크를 지정한다. 다른 태그 내부에 포함시킬 수도 있고, 독립적으로 사용할 수도 있다. <h2 id="3-iframe">3. iframe</h2>
외부 문서를 삽입하는 태그이다.</li>
<li>width: 인라인 프레임의 너비로, 픽셀 값으로 표시</li>
<li>height: 인라인 프레임의 높이로, 픽셀 값으로 표시</li>
<li>name: 인라인 프레임의 이름</li>
<li>seamless: 프레임의 대부를 업애서 본문의 일부처럼 보이게 한다. 속성 값없이 seamless라고 작성. 크롬과 사파리에서만 지원.</li>
<li>scr: 프레임에 표시할 문서의 주소 지정<pre><code class="language-html">&lt;iframe src=&quot;삽입할 문서 주소&quot; 속성=&quot;속성값&quot;&gt; &lt;/iframe&gt;</code></pre>
<h2 id="4-section">4. section</h2>
콘텐츠 영역을 나타내는 태그이다. &lt;section&gt; 태그 안에 다른 &lt;section&gt; 태그를 넣을 수 도 있고, &lt;article&gt; 태그를 넣을 수도 있다. 이외에도 &lt;header&gt;나 &lt;footer&gt; 등 다양한 태그를 넣어 공간을 구분할 수 있다.<pre><code class="language-html">&lt;section&gt; 
&lt;section&gt; ... &lt;/section&gt;
&lt;/section&gt;
</code></pre>
</li>
</ul>
<section>
  <header> ... </header>
</section>
```
## 5. article
실제 콘텐츠 내용을 넣는 태그이다.
```html
<article> 내용 </article>
```
## 6. aside
본문 내용 외에 주변에 표시되는 기타 내용을 나타내는 태그이다. 흔히 블로그에서 왼쪽, 오른쪽, 하단 등에 표시되는 광고나 링크 같은 사이드 바를 표시할 때 사용한다. 
```html
<aside> 내용 </aside>
```
## 7. footer
제작 정보와 저작권 정보를 표시하기 위한 태그이다. <footer\> 태그 안에 <header\>, <section\>, <article\> 등 다른 레이아웃 태그들도 사용할 수 있다.
```html
<footer>
  <section>
    <h3> 제작 정보 </h3>
  </section>
  <p> 저작권 정보 </p>
</footer>
```
## 8. address
사이트의 제작자 정보나 연락처 정보를 나타내는 태그이다. 
```html
<address>
  <p> 전화번호 </p>
</address>
```
## 9. div
콘텐츠를 묶어서 시각적인 효과를 적용할 때, CSS를 적용할 때 사용하는 태그이다.
```html
<head>
<style>
#box{
  width: 600px;
  margin-right: auto;
  margin-left: auto;
  }
</style>
</head>

<body>
  <div id="box">
    <section> ... </section>
  </div>
</body>

<p>```
&lt;head&gt;에서 box라는 이름을 가진 style을 지정하고, &lt;div&gt; 태그를 사용해서 &lt;section&gt; 부분에 box 스타일을 적용한다. </p>
<h1 id="-참고문헌">※ 참고문헌</h1>
<p>DO it! HTML5 + CSS3 웹 표준의 정석, 고경희 저, 이지스퍼블리싱</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML #1 문서 기본 구조]]></title>
            <link>https://velog.io/@so_sa/HTML-1</link>
            <guid>https://velog.io/@so_sa/HTML-1</guid>
            <pubDate>Sun, 08 Nov 2020 04:50:49 GMT</pubDate>
            <description><![CDATA[<h1 id="1-html-문서-기본-구조">1. HTML 문서 기본 구조</h1>
<pre><code class="language-html">&lt;!doctype html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot;&gt;
    &lt;title&gt; HTML 기본 구조 &lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;img scr=&quot;이미지.확장자&quot;&gt;
    &lt;p&gt; 원하는 이미지를 넣으세요 &lt;/p&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<h2 id="1-1-doctype">1-1. !doctype</h2>
<p>문서 유형(document type)을 지정해주는 태그로 웹 문서의 시작을 알리는 html 태그보다 먼저 사용한다. </p>
<p>현재 문서가 HTML5 언어로 작성되었다는 것을 알려준다. </p>
<h2 id="1-2-html">1-2. html</h2>
<p>실제 문서 정보와 내용의 시작과 끝을 알려주는 태그이다. </p>
<ul>
<li>lang: 언어 지정하는 속성<pre><code class="language-html">&lt;html lang=&quot;ko&quot;&gt; #문서에서 사용할 언어를 한국어로 지정
...
&lt;/html&gt;</code></pre>
언어  표기를 제대로 하지 않는다면, 웹 페이지에서 검색 기능을 제대로 이용할 수 없을 것이다. <h2 id="1-3-head">1-3. head</h2>
웹 브라우저 화면에는 보이지 않지만, 웹 브라우저가 알아야할 정보들은 head 부분에 입력한다. </li>
<li>&lt;title&gt;: 웹 브라우저의 제목 표시줄에 표시되는 정보<pre><code class="language-html">&lt;title&gt; 문서 제목 &lt;/title&gt;</code></pre>
</li>
<li>&lt;meta&gt;: 문자 인코딩 방법을 지정<pre><code class="language-html">&lt;meta charset=&quot;utf-8&quot;&gt; #화면에 한글 표시</code></pre>
<h2 id="1-4-body">1-4. body</h2>
실제 브라우저에 표시된 내용을 입력한다. </li>
<li>&lt;h1&gt;~&lt;h6&gt;: 제목 텍스트로, h1이 가장 크고 h6이 가장 작다.</li>
<li>&lt;p&gt;: 텍스트 앞뒤로 빈 줄을 만들어 텍스트 단락 생성</li>
<li>&lt;br&gt;: 줄 바꾸는 태그로, 닫는 태그 없음</li>
<li>&lt;b&gt;: 텍스트 진하게 표시</li>
<li>&lt;i&gt;: 텍스트 이탤릭체로 표시</li>
<li>&lt;img&gt;: 이미지 추가</li>
<li>&lt;a&gt;: 웹 문서나 외부 사이트 연결<pre><code class="language-html">&lt;body&gt;
&lt;h1&gt; 제목 예시 &lt;/h1&gt;
&lt;h2&gt; 제목 예시 &lt;/h2&gt;
&lt;h3&gt; 제목 예시 &lt;/h3&gt;
&lt;h4&gt; 제목 예시 &lt;/h4&gt;
&lt;h5&gt; 제목 예시 &lt;/h5&gt;
&lt;h6&gt; 제목 예시 &lt;/h6&gt;
&lt;p&gt; 텍스트 단락을 만들어 봅시다 &lt;/p&gt;
&lt;p&gt; &lt;b&gt;텍스트&lt;/b&gt; 단락을 &lt;br&gt;
  &lt;i&gt;만들어&lt;/i&gt; 봅시다&lt;/p&gt;
&lt;img scr=&quot;file_name.확장자&quot;&gt;
&lt;a href=&quot;사이트주소&quot;&gt; 사이트 &lt;/a&gt;
</code></pre>
</li>
</ul>
<pre><code># 2. 실습

Notepad++에서 html 코드를 작성하였고, xampp의 Apache 모듈을 이용하여 코드를 확인하였습니다. 

```html
&lt;!doctype html&gt; 
&lt;html lang=&quot;ko&quot;&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot;&gt;
        &lt;title&gt; 원어스 - 붉은 실 &lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt; 눈을 감고 있어 아무도 없는 길 위에서 &lt;/h1&gt;
        &lt;h2&gt; 헤매이고 있어 불어오는 바람마저도 &lt;/h2&gt;
        &lt;h3&gt; 혹시나 들릴까 이름을 불러봐 &lt;/h3&gt;
        &lt;h4&gt; 기억을 걷다 보면 &lt;/h4&gt;
        &lt;h5&gt; 알게 될 거야 다 운명일 테니 &lt;/h5&gt;
        &lt;h6&gt; 실을 따라갈게 미로 속을 헤매 &lt;/h6&gt;
        &lt;p&gt; 조금 시간이 걸려도 널 잡을게 &lt;/p&gt;
        &lt;p&gt; &lt;b&gt; 걱정하지 마 &lt;/b&gt; 너와 나 &lt;br&gt;
        &lt;i&gt; 인연은 닿을 거야 &lt;/i&gt; &lt;/p&gt;
        &lt;img src=&quot;red.png&quot;&gt;
        &lt;p&gt;&lt;a href=&quot;https://vibe.naver.com/search?query=%EC%9B%90%EC%96%B4%EC%8A%A4%20%EB%B6%89%EC%9D%80%EC%8B%A4&quot;&gt; 붉은 실 ♬ &lt;/a&gt;&lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;
</code></pre><p><img src="https://images.velog.io/images/so_sa/post/ad6a6c53-2d95-40f6-871e-054fba49aca9/image.png" alt=""></p>
<p>_요즘 즐겨 듣는 노래 가사로 html 실습을 해 보며 태그와 속성이 어떻게 적용되는지 확인하였습니다. _</p>
<h1 id="-참고문헌">※ 참고문헌</h1>
<p>DO it! HTML5 + CSS3 웹 표준의 정석, 고경희 저, 이지스퍼블리싱</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[XMAPP Control Panel Apache 포트 오류 해결]]></title>
            <link>https://velog.io/@so_sa/XMAPP-Control-Panel-Apache-%ED%8F%AC%ED%8A%B8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0</link>
            <guid>https://velog.io/@so_sa/XMAPP-Control-Panel-Apache-%ED%8F%AC%ED%8A%B8-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0</guid>
            <pubDate>Sun, 08 Nov 2020 04:00:22 GMT</pubDate>
            <description><![CDATA[<h1 id="error">Error</h1>
<blockquote>
<p>Error:Apache shutdown unexpectedly.
This may be due to a blocked port, missing dependencies,
improper prvileges, a crash, or a shutdown by another method.
...</p>
</blockquote>
<p>설치 초기, 혹은 어느 날 갑자기 포트가 막혀버렸다는 오류가 뜨는 경우가 있다. 이는 XAMPP의 Apache에서 기본 셋팅으로 사용하는 80번 포트의 사용이 겹칠 때 발생한다. </p>
<p>이 오류는 생각보다 간단히 해결할 수 있다. </p>
<p>우선 <strong>관리자 권한</strong>으로 xampp control panel을 실행한다. 
<em>관리자 권한으로 실행하지 않으면 config 접근이 거부되어 정상적으로 오류를 해결할 수 없다.</em> </p>
<h2 id="httpdconf">httpd.conf</h2>
<p><img src="https://images.velog.io/images/so_sa/post/ddf42a95-7be0-495b-95bf-3c35476e55eb/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/so_sa/post/916b2113-6c79-41a5-88b9-156c800f5092/image.png" alt=""></p>
<p>Apache config &gt; Apache(httpd.conf) 
txt 파일이 열리면 빨간 박스 부분을 찾아서 80을 8012로 바꿔준 후 저장한다. </p>
<h2 id="httpd-sslconf">httpd-ssl.conf</h2>
<p><img src="https://images.velog.io/images/so_sa/post/f7c6bbcf-a7cd-4d95-a546-6e775a09caae/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/so_sa/post/b8d7325d-17af-414a-8ef4-38255589ae1e/image.png" alt=""></p>
<p>Apache config &gt; Apache(httpd-ssl.conf) 
txt 파일이 열리면 빨간 박스 부분을 찾아서 443을 8013으로 바꿔준다.</p>
<h2 id="config">config</h2>
<p><img src="https://images.velog.io/images/so_sa/post/1e467225-34fb-41c1-9b6f-bff0e536d3f4/image.png" alt=""></p>
<p>config &gt; Service and Port Settings &gt; Main Port: <del>80</del> 8012, SSL Port: <del>443</del> 8013
Save 버튼을 클릭하여 저장해준다.</p>
<h1 id="오류-해결">오류 해결</h1>
<p>XAMPP control panel을 종료 후 다시 시작하면, 정상적으로 Apache 서버가 구동되는 모습을 확인할 수 있다. </p>
]]></description>
        </item>
    </channel>
</rss>