<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>vvon_joon.log</title>
        <link>https://velog.io/</link>
        <description>김찬호 화이팅</description>
        <lastBuildDate>Sat, 12 Aug 2023 06:53:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>vvon_joon.log</title>
            <url>https://velog.velcdn.com/images/vvon_joon/profile/d1ff920e-8ac8-457a-b227-052183c80215/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. vvon_joon.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/vvon_joon" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[23 하계 모각코] 6회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 12 Aug 2023 06:53:41 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<blockquote>
</blockquote>
<p>6회차: 23/08/12 13:00~16:00
계획: YOLO 논문 분석 (4)
방향: &#39;A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 AND
BEYOND&#39; 논문 분석</p>
<h1 id="결과">결과</h1>
<h2 id="yolov7">YOLOv7</h2>
<p><em><a href="https://arxiv.org/pdf/2207.02696.pdf">C.-Y. Wang, A. Bochkovskiy, and H.-Y. M. Liao, “Yolov7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors,” arXiv preprint arXiv:2207.02696, 2022</a></em></p>
<ul>
<li><p><strong>Developments(Bag-of-Freesbies)</strong></p>
<ul>
<li>Modified RepVGG: RepVGG에서의 identity 연결이 residual 전달과 concatenate에 악영향을 끼친다고 판단해 이를 제거</li>
<li>Coarse Label Assignment for Auxiliary Head and Fine Label Assignment for the Lead Head: head를 lead head와 auxiliary head로 구분해 label assignment를 수행</li>
</ul>
</li>
<li><p>Architecture</p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/743c1041-c3f2-4262-bc51-ad4cb25a03ad/image.png" alt=""></p>
<ul>
<li>E-ELAN(Extended Efficient Layer Aggregation Network)<ul>
<li>긴 gradient 경로를 제어해 모델이 더 효율적으로 학습할 수 있도록 하는 전략</li>
<li>서로 다른 그룹의 feature를 결합해 gradient 경로를 파괴하지 않음</li>
</ul>
</li>
<li>Model Scaling for Concatenation-Based Models: concatenation 기반의 모델인 YOLOv7의 depth와 width를 같은 비율로 조절해 최적의 모델 구조를 유지</li>
</ul>
</li>
</ul>
<h2 id="yolov8">YOLOv8</h2>
<p><em>G. Jocher, A. Chaurasia, and J. Qiu, “YOLO by Ultralytics.”</em> <a href="https://github.com/ultralytics/ultralytics">https://github.com/ultralytics/ultralytics</a><em>, 2023</em></p>
<ul>
<li><p>YOLOv8-seg</p>
<ul>
<li>Semantic Segmentation을 위한 모델 포함</li>
<li>CSPDarknet53-C2f module-Decoupled 구조</li>
<li>Semantic Segmentation 분야의 SOTA</li>
</ul>
</li>
<li><p><strong>Architecture</strong></p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/e5d62377-bb00-41dd-ae21-b4507b1cc797/image.png" alt=""></p>
<ul>
<li>C2f Module(Cross-Stage Partial Bottleneck with Two Convolutions)<ul>
<li>CSPLayer를 수정한 backbone network</li>
<li>high-level feature를 contextual 정보와 결합</li>
</ul>
</li>
<li>Anchor-Free</li>
<li>Decoupled Head<ul>
<li>objectness, classification, regression를 각각 수행</li>
<li>각 task 집중함으로써 정확도 향상</li>
<li>objectness score 계산을 위해 sigmoid function 사용</li>
<li>class probability 계산을 위해 softmax function 사용</li>
<li>bbox loss 계산을 위해 CIoU와 DFL loss를 사용</li>
<li>classification loss 계산을 위해 binary cross-entropy를 사용<h2 id="conclusion">Conclusion</h2>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Key Features of YOLO</p>
<ul>
<li>Anchors<ul>
<li>YOLOv1에서는 anchor를 도입하지 않음</li>
<li>YOLOv2~YOLOv5에서 anchor를 도입하면서 bbox 예측의 정확도를 향상시킴</li>
<li>YOLOX부터는 anchor-free를 채택해 이후 버전에서도 이 기조가 유지됨</li>
</ul>
</li>
<li>Framework<ul>
<li>초기에는 Darknet 프레임워크에서 개발됨</li>
<li>Darknet에서 개발된 YOLOv3를 Pytorch에서 개발해 재배포를 시작으로 다른 버전들도 Pytorch를 사용해 개발</li>
<li>새로운 프레임워크를 통해 성능 향상에 기여함</li>
</ul>
</li>
<li>Backbone: 버전에 따른 backbone network의 변화<ul>
<li>Darknet: convolutional layer와 max pooling layer로 구성</li>
<li>CSP(Cross-Stage Partial Connections)를 YOLOv4에 도입</li>
<li>Reparameterization(RepVGG)을 YOLOv6, YOLOv7에 도입</li>
</ul>
</li>
<li>Performance<ul>
<li>speed와 accuracy 간의 balance를 유지하면서 성능을 개선시킴</li>
</ul>
</li>
</ul>
</li>
<li><p>Future</p>
<ul>
<li>Incorporation of Latest Techniques</li>
<li>Benchmark Evolution</li>
<li>Proliferation of YOLO Models and Applications</li>
<li>Expansion into New Domains</li>
<li>Adaptiablility to Diverse Hardware</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23 하계 모각코] 5회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 05 Aug 2023 05:42:27 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<blockquote>
</blockquote>
<p>5회차: 23/08/05 13:00~16:00
계획: YOLO 논문 분석 (3)
방향: &#39;A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 AND
BEYOND&#39; 논문 분석</p>
<h1 id="결과">결과</h1>
<h2 id="yolov5">YOLOv5</h2>
<p><em>G. Jocher, “YOLOv5 by Ultralytics.” <a href="https://github.com/ultralytics/yolov5">https://github.com/ultralytics/yolov5</a>, 2020</em></p>
<ul>
<li><p>오픈 소스 기반이며 Pytorch 환경에서 개발</p>
</li>
<li><p>자체 개발한 AutoAnchor 알고리즘, k-means clustering, GE 알고리즘을 활용해 anchor를 예측</p>
</li>
<li><p>Albumentation 패키지를 적용해 다양한 데이터 증강 기법을 이용</p>
<p>  Mosaic, Copy Paste, Random Affine, MixUp, HSV augmentation, Random Horizontal Flip, etc.</p>
</li>
<li><p>여러 크기의 모델을 제공</p>
<p>  YOLOv5n(nano), YOLOv5s(small), YOLOv5m(medium), YOLOv5l(large), YOLOv5x(extra large)</p>
</li>
<li><p>Classification, Instance Segmentation 가능</p>
</li>
<li><p><strong>Architecture</strong></p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/95a45ce3-5247-4446-bb61-ca9f09e2cee3/image.png" alt=""></p>
<table>
<thead>
<tr>
<th>Backbone</th>
<th>Neck</th>
<th>Head</th>
</tr>
</thead>
<tbody><tr>
<td>CSPDarknet53 + Stem Layer</td>
<td>SPPF, CSP-PAN</td>
<td>YOLOv3</td>
</tr>
<tr>
<td>- stem layer를 적용한 CSPDarknet53을 backbone으로 사용</td>
<td></td>
<td></td>
</tr>
<tr>
<td>- Stem Layer: kernel size가 큰 strided convolution layer를 이용해 메모리와 연산량을 줄임</td>
<td></td>
<td></td>
</tr>
<tr>
<td>- SPPF(Spatial Pyramid Pooling Fast): SPP의 빠른 버전으로 이미지 크기에 상관 없이 동일한 크기의 feature를 추출</td>
<td></td>
<td></td>
</tr>
<tr>
<td>- SiLU(Swish, Sigmoid Linear Unit) Activation( $x*σ(x)$) 사용</td>
<td></td>
<td></td>
</tr>
</tbody></table>
</li>
</ul>
<h2 id="yolox">YOLOX</h2>
<p><em><a href="https://arxiv.org/pdf/2107.08430.pdf">Z. Ge, S. Liu, F. Wang, Z. Li, and J. Sun, “Yolox: Exceeding yolo series in 2021,” arXiv preprint
arXiv:2107.08430, 2021</a></em></p>
<p>YOLOv3(Ultralytics, Pytorch)를 기반으로 Pytorch 환경에서 개발</p>
<ul>
<li><p><strong>Developments</strong></p>
<ul>
<li>Anchor-Free: YOLOv2부터 사용되어 오던 anchor를 사용하지 않음으로써 학습 과정을 간단히 함</li>
<li>Multi Positives<ul>
<li>YOLOv3의 방식을 따르는 상태에서 anchor의 부재는 오직 하나의 positive sample만 예측하는데 이는 주변의 다른 sample을 무시하게 됨</li>
<li>이를 막고자 예측한 sample의 중심 좌표를 기준으로 $3 × 3$ 구간 내의 픽셀에 다른 sample의 중심 좌표가 있다면 이를 채택</li>
</ul>
</li>
<li>Decoupled Head: classification과 localization 과정 간의 충돌을 막고자, 이 두 task를 2개의 head로 분리해서 수행</li>
<li>Advanced Label Assignment(SimOTA)<ul>
<li>OT(Optimal Transport) Problem: ground truth label assignment 수행 시 여러 object의 bbox가 겹칠 때 발생하는 문제</li>
<li>OT problem을 해결하기 위해 SimOTA 기법 도입</li>
</ul>
</li>
<li>Strong Augmentations: MixUP, Mosaic 기법의 데이터 증강 도입</li>
</ul>
</li>
<li><p><strong>Architecture</strong></p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/bcf1c068-5243-4740-97dd-f83f33c65759/image.png" alt=""></p>
<p>  Decoupled Head가 적용되어 classification(Cls.과 localization(Reg. + IoU.) 과정을 분리</p>
</li>
</ul>
<h2 id="yolov6">YOLOv6</h2>
<p><em><a href="https://arxiv.org/pdf/2209.02976.pdf">C. Li, L. Li, H. Jiang, K. Weng, Y. Geng, L. Li, Z. Ke, Q. Li, M. Cheng, W. Nie, et al., “Yolov6: A single-stage object detection framework for industrial applications,” arXiv preprint arXiv:2209.02976, 2022</a></em></p>
<p>YOLOv6-N부터 YOLOv6-L6까지 여러 크기의 모델 존재</p>
<ul>
<li><p><strong>Developments</strong></p>
<ul>
<li><p>A New Backbone Based on RepVGG</p>
<ul>
<li><p>RepVGG: training과 inference 시에 구조가 바뀌는(re-parameterized) network</p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/9e1ebf3b-c69f-4dac-af11-b47e2d9f9b41/image.png" alt=""></p>
</li>
</ul>
</li>
<li><p>New Classification and Regression Loss</p>
<ul>
<li>Varifocal Loss: 클래스 불균형 문재를 해결하기 위한 focal loss를 개선한 함수로서 focal loss의 가중치 조정 방식을 개선</li>
<li>SIoU/GIoU Regression Loss: 개선된 형태의 IoU 기반의 loss를 적용</li>
</ul>
</li>
<li><p>Quantization: 양자화를 적용해 더 빠른 모델 제작</p>
</li>
</ul>
</li>
<li><p><strong>Architecture</strong></p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/a5f4d49b-066b-4a36-a7f3-fc3ba9e21ca5/image.png" alt=""></p>
<table>
<thead>
<tr>
<th>Backbone</th>
<th>Neck</th>
<th>Head</th>
</tr>
</thead>
<tbody><tr>
<td>RepVGG blocks</td>
<td>PAN</td>
<td>Decoupled</td>
</tr>
</tbody></table>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23 하계 모각코] 4회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 29 Jul 2023 10:22:44 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<blockquote>
</blockquote>
<p>4회차: 23/07/29 13:00~16:00
계획: YOLO 논문 분석 (2)
방향: &#39;A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 AND
BEYOND&#39; 논문 분석</p>
<h1 id="결과">결과</h1>
<h2 id="yolov3yolov3-spp">YOLOv3(YOLOv3-spp)</h2>
<p><em><a href="https://arxiv.org/pdf/1804.02767.pdf">J. Redmon and A. Farhadi, “Yolov3: An incremental improvement,” arXiv preprint arXiv:1804.02767, 2018</a></em></p>
<ul>
<li><p><strong>Developments</strong></p>
<ul>
<li><p>Bounding Box Prediction</p>
<ul>
<li>이전과 같이 $t_x$, $t_y$(bbox 중심 좌표), $t_w$, $t_h$(bbox의 너비와 높이)를 예측</li>
<li>$t_o$(confidence score) 대신에 objectness score를 도입 → logistic regression을 적용해 계산<ul>
<li>ground truth와 가장 많이 겹치는 bbox에 대해 1, 나머지는 0</li>
<li>각 ground truth에 anchor box를 오직 하나만 배정</li>
</ul>
</li>
</ul>
</li>
<li><p>Class Prediction: softmax 대신에 binary cross-entropy를 적용</p>
<ul>
<li>binary cross-entropy는 multi-label classification을 수행하기 위해 독립적인 logistic classifier를 학습하기 위한 용도로 사용</li>
<li>이로써 같은 bbox에 여러 label을 적용 가능 → e.g. person, man</li>
</ul>
</li>
<li><p>New Backbone: Darknet-53을 backbone으로 사용</p>
</li>
<li><p>Spatial Pyramid Pooling(SPP): 여러 크기의 max pooling layer를 concatenate하는 SPP block을 적용 → receptive field를 늘림</p>
</li>
<li><p>Multi-scale Prediction</p>
<ul>
<li><p>다양한 크기의 feature를 추출해서 이에 대한 예측을 수행</p>
</li>
<li><p>network 중간에서 feature를 추출해 이를 upsample한 후 concatenate하는 방식</p>
</li>
<li><p>다양한 크기의 객체를 detect하고, 적은 물체애 대한 정확도를 개선하는 데 도움</p>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/541391de-45ef-4421-8371-61acc5bd9302/image.png" alt=""></p>
</li>
</ul>
</li>
<li><p>Bounding Box Priors: 이전과 같이 k-means clustering을 적용해 anchor box를 선정하되, 각 grid마다 3개를 선정</p>
</li>
</ul>
</li>
<li><p><strong>Architecture</strong></p>
<ul>
<li><p>Darknet-53을 backbone으로 사용(53개의 conovlutional layer)</p>
</li>
<li><p>max pooling을 strided convolution으로 대체</p>
</li>
<li><p>residual network 추가</p>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/9e040afc-8abd-447e-908d-43b7a83c398c/image.png" alt=""></p>
</li>
</ul>
</li>
</ul>
<h2 id="yolov4">YOLOv4</h2>
<p><em><a href="https://arxiv.org/pdf/2004.10934.pdf">A. Bochkovskiy, C.-Y. Wang, and H.-Y. M. Liao, “Yolov4: Optimal speed and accuracy of object detection,” arXiv preprint arXiv:2004.10934, 2020</a></em></p>
<ul>
<li><p><strong>Developments</strong></p>
<ul>
<li><p>An Enhanced Architecture with Bag-of-Specials(BOS) Integration</p>
<ul>
<li><p>Bag-of-Specials(BOS): 추론 시의 비용을 약간 증가시켜 정확도를 개선하는 기법</p>
<p>  e.g. receptive field 키우기, feature 결합, NMS</p>
</li>
<li><p>CSPNet: Darknet-53에 cross-stage partial connection과 Mish activation function을 결합한 네트워크를 backbone으로 활용</p>
<ul>
<li>Cross-Stage Partial Connection: skip connection 중 하나로 CSP stage에서 두 부분으로 나눠 네트워크를 통과한 뒤에 특정 레이어에서 결합하는 것 → parameter를 효율적으로 사용</li>
<li>Mish Activation Function: sigmoid와 ReLU의 특성을 결합한 activation function</li>
</ul>
</li>
<li><p>PANet(Path Aggregation Network)</p>
<ul>
<li>FPN을 개선한 아키텍처로, FPN에서는 bottom-up pathway의 피라미드 구조를 통해 다양한 해상도에서의 feature를 추출</li>
<li>top-down pathway를 추가로 도입해 high-level feature를 low-level feature와 concatenate</li>
<li>attention module을 추가로 도입해 feature map간의 상호 의존성 강화</li>
</ul>
</li>
<li><p>SPP: 추론 시간에 영향을 주지 않고, receptive field를 키움</p>
</li>
</ul>
</li>
<li><p>Integrating Bag-of-Freesbies(BoF) for an Advanced Training Approach</p>
<ul>
<li><p>Bag-of-Freesbies(BoF): 학습 방법만 변경해 학습 비용은 증가하지만 추론 시간에는 영향을 주지 않으면서 모델의 정확도를 개</p>
<p>  e.g. 데이터 증강</p>
</li>
<li><p>Mosaic Augmentation: 네 개의 이미지를 하나로 결합하는 증강법</p>
</li>
<li><p>DropBlock: dropout을 개선한 regularization 기법</p>
</li>
<li><p>Class Label Smoothing: one-hot encoding labeling을 개선</p>
</li>
<li><p>CIoU Loss: IoU에 ground truth bbox와 예측된 bbox의 중심 간의 거리를 반영하여 개선</p>
</li>
<li><p>CmBN(Cross mini Batch Normalization): 기존의 batch normalization을 개선한 regularization 기법</p>
<ul>
<li>객체 단위 정규화, 배치 크기를 동적으로 조절</li>
</ul>
</li>
</ul>
</li>
<li><p>Self-Adversarial Training(SAT): 모델을 robust하게 만들기 위해 기존 data에 노이즈 추가하거나 변형을 가해 학습시키는 것</p>
</li>
<li><p>Hyperparameter Optimization with Generic Algorithms</p>
</li>
</ul>
</li>
<li><p><strong>Architecture</strong></p>
<p>  <strong>CSPNet-PANet-SPP</strong></p>
<table>
<thead>
<tr>
<th>Backbone</th>
<th>Neck</th>
<th>Head</th>
</tr>
</thead>
<tbody><tr>
<td>CSPDarknet53</td>
<td>SPP, PAN</td>
<td>YOLOv3</td>
</tr>
</tbody></table>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/a72cefc9-10c7-4170-bc28-d70639ebae34/image.png" alt=""></p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23 하계 모각코] 3회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Mon, 24 Jul 2023 05:24:36 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<blockquote>
</blockquote>
<p>3회차: 23/07/22 13:00~16:00
계획: YOLO 논문 분석 (1)
방향: &#39;A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 AND
BEYOND&#39; 논문 분석</p>
<h1 id="결과">결과</h1>
<h1 id="개요">개요</h1>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/ca179601-dc6d-40e9-8db6-3f662c8b43dc/image.png" alt=""></p>
<p>YOLO 모델의 버전별 진화 과정(YOLOv1 ~ YOLOv8)을 분석한 논문입니다. 모델의 버전에 따라 도입된 네트워크 구조 및 학습 기법 등의 소개하고, YOLO 모델의 미래 연구 방향을 제시합니다.</p>
<p>real-time Object Detection의 포문을 연  YOLO는 수많은 Object Detection 알고리즘 중에서 speed와 accuracy 두 측면의 밸런스를 유지했다는 평가를 받습니다. YOLO 모델은 network design, loss function, anchor box, input resolution scaling 등의 변화를 적용해 진화를 거듭했습니다.</p>
<h1 id="본문">본문</h1>
<h2 id="yolov1">YOLOv1</h2>
<p><em><a href="https://arxiv.org/pdf/1506.02640.pdf">J. Redmon, S. Divvala, R. Girshick, and A. Farhadi, “You only look once: Unified, real-time object detection,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2016.</a></em></p>
<ul>
<li><p><strong>You Only Look Once</strong></p>
<p>  Objcet Detection을 네트워크를 한 번 지남으로써 수행할 수 있음 → 1-stage 프로세스</p>
<ul>
<li>이전까지의 모델(Fast R-CNN)에서는 Regional Proposal을 진행한 후 Classification을 진행하는 2-stage 프로세스를 활용</li>
<li>1-stage 프로세스를 진행함으로써 더 빠른 detection을 가능 → real-time</li>
</ul>
</li>
<li><p><strong>Process</strong>
  <img src="https://velog.velcdn.com/images/vvon_joon/post/85fc074c-7bf4-4684-9ae1-dcfcc9f79c25/image.png" alt=""></p>
<p>  bounding box(이하 bbox)를 detect하는 과정을 동시에 진행</p>
<ol>
<li>input image를 $S × S$ 크기의 grid로 나눔</li>
<li>모든 grid에서 $B$개의 bbox와 모든 클래스의 confidece $C$를 각각 예측<ul>
<li>$B$는 하나의 grid에서 detect하는 bbox의 개수<ul>
<li>$P_c$(bbox의 confidence score)와 $b_x$, $b_y$(bbox의 중심 좌표), $b_h$, $b_w$(bbox의 높이와 너비)로 구성됨</li>
</ul>
</li>
<li>$C$는 $c_1$, $c_2$, $...$, $c_n$($n$: 클래스 개수)으로 구성됨</li>
<li>output: $S × S × (B × 5 + C)$ 크기의 tensor</li>
</ul>
</li>
<li>NMS(Non-Maximum Suppression)을 적용해 중복된 bounding box 제거
<img src="https://velog.velcdn.com/images/vvon_joon/post/1bdba120-206a-4961-b950-b98c07894cb4/image.png" alt=""></li>
</ol>
</li>
<li><p><strong>Architecture</strong></p>
<p>  24개의 Conv layer와 2개의 FC layer로 구성</p>
<ul>
<li><p>모든 layer에서 leaky rectified linear unit activation 사용</p>
</li>
<li><p>$1 × 1$ Conv layer를 사용해 feature map과 parameter의 수를 줄임</p>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/9a07809a-b90c-466a-9d67-583b092da126/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/4a3f808a-6249-4c18-96cf-98ef8c404211/image.png" alt=""></p>
</li>
</ul>
</li>
<li><p><strong>Loss Function</strong></p>
<p>  localization, confidence, classification에 대한 loss의 합으로 구성</p>
<p>  detect한 bbox에 object가 없을 시에는 낮은 가중치를 부여</p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/1c1c407e-7bde-415a-8038-2e9e77541cb3/image.png" alt=""></p>
</li>
<li><p><strong>Strengths and Limitations</strong></p>
<ul>
<li>Fast R-CNN과 비교했을 때 speed가 개선되어 real-time detect가 가능</li>
<li>하지만 localization error는 더 높음<ul>
<li>하나의 grid에서 최대 2개의 객체만 탐지를 하게 해서 인접한 물체에 대한 예측 성능이 떨어짐</li>
<li>학습 데이터와 종횡비가 다른 물체에 대해서는 예측 성능이 떨어짐</li>
<li>down-sampling layer을 이용해 추출된 feature의 품질이 떨어짐</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="architecture">Architecture</h2>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/324016d8-45c5-4e98-b7f1-353272417894/image.png" alt=""></p>
<p>CNN 모델은 대체적으로 위와 같은 형태로 구성됨</p>
<ul>
<li>Backbone: feature 추출</li>
<li>Neck: feature 정제 및 강화</li>
<li>Head: 예측 수행</li>
</ul>
<h2 id="yolov2yolo9000">YOLOv2(YOLO9000)</h2>
<p><em>J. Redmon and A. Farhadi, “Yolo9000: better, faster, stronger,” in Proceedings of the IEEE conference on computer vision and pattern recognition, 2017</em></p>
<ul>
<li><p><strong>Developments</strong></p>
<ul>
<li><p>Batch Normalization: 모든 convolutional layer에 도입해 convergence 개선 및 overfitting 감소</p>
</li>
<li><p>High-Resolution Classifier: 더 큰 이미지($448 × 448$)을 이용해 finetune → 큰 이미지에 대한 성능 개선</p>
</li>
<li><p>Fully Convolutional: dense layer를 제거하고, fully convolutional하게 만듦</p>
</li>
<li><p>Use Anchor Boxes to Predict Bbox:  미리 정의된 shape의 anchor box를 각 grid마다 도입해 anchor box의 좌표와 class를 예측</p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/ca084497-92ad-4cad-90f5-d081ddcf79b6/image.png" alt=""></p>
</li>
<li><p>Dimension Clusters: 적절한 shape의 anchor box를 선정하기 위해 k-mean clustering을 이용해 학습해 각 grid마다 5개의 achor box를 선정</p>
</li>
<li><p>Direct Location Prediction: YOLOv1에서와 유사하게 각 grid 별로 예측, 각 grid 내의 bbox마다 $t_x$, $t_y$(bbox 중심 좌표), $t_w$, $t_h$(bbox의 너비와 높이), $t_o$(confidence score)를 예측</p>
<p>  <img src="https://velog.velcdn.com/images/vvon_joon/post/1ed5faa0-4275-4a2b-9201-500e3469e090/image.png" alt=""></p>
</li>
<li><p>Finner-Grained Features: passthrough layer를 사용해 주변 $26 × 26 × 512$ feature map을  $13 × 13 × 2048$ feature map으로 reorganize(인접한 feature를 쌓는 구조) →  subsampling으로 인해 소실되는 feature를 보존</p>
</li>
<li><p>Multi-Scale Training: FC layer를 사용하지 않아 다양한 크기의 이미지를 input으로 사용 가능, 이를 활용해 다양한 크기의 이미지를 활용($320 × 320$ ~ $608 × 608$)해 학습을 진행 → 다양한 크기의 객체를 detect하는 데 도움</p>
</li>
</ul>
</li>
<li><p><strong>Architecture</strong></p>
<ul>
<li><p>Darknet-19를 backbone으로 사용(19개의 convolutional layer와 5개의 pooling layer로 구성)</p>
</li>
<li><p>$1 × 1$ ~ $3 × 3$ convolutional layer를 사용해 parameter 수를 줄임</p>
</li>
<li><p>passthrough layer 도입</p>
</li>
<li><p>마지막에는 1000개의 convolutional layer와 global average pooling layer, 그리고 softmax로 구성</p>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/fb85bc3c-c955-4e3f-834e-7aa8bc748052/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/67bb25aa-b165-4428-8eb5-9f8027b18b9d/image.png" alt=""></p>
</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23 하계 모각코] 2회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 15 Jul 2023 04:37:12 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<blockquote>
</blockquote>
<p>2회차: 23/07/15 13:00~16:00
계획: YOLOv8 모델 학습 (Segmentation)
방향: YOLO 중 가장 최신 모델인 YOLOv8을 이용해 Segmentation 수행</p>
<h1 id="결과">결과</h1>
<h2 id="segmentation">Segmentation</h2>
<h3 id="학습">학습</h3>
<pre><code class="language-python">from ultralytics import YOLO

# Load a model
model = YOLO(&#39;yolov8n-seg.yaml&#39;)  # build a new model from YAML

# Train the model
model.train(data=&#39;coco128-seg.yaml&#39;, epochs=100, imgsz=640)</code></pre>
<ul>
<li><code>yolov8n</code> 모델을 이용해 학습 진행</li>
<li>학습을 위해 <code>coco</code> 데이터셋을 활용</li>
<li><code>train</code>의 인자로 <code>epochs</code>, <code>batch</code>, <code>imgsz</code> 등을 설정할 수 있음</li>
</ul>
<h3 id="모델-구조">모델 구조<img src="https://velog.velcdn.com/images/vvon_joon/post/39e341ee-410e-4306-9ec6-f378a95e84b5/image.png" alt=""></h3>
<h3 id="학습-결과">학습 결과<img src="https://velog.velcdn.com/images/vvon_joon/post/42c4258f-1eb4-421b-885c-90191e992a9a/image.png" alt=""></h3>
<p><img src="https://velog.velcdn.com/images/vvon_joon/post/c5b2887c-208f-4bf1-916f-39041a7d7316/image.png" alt=""><img src="https://velog.velcdn.com/images/vvon_joon/post/481fb1b3-9d2c-4038-bf61-e87d75aa7995/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[23 하계 모각코] 1회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@vvon_joon/23-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Fri, 07 Jul 2023 11:22:47 GMT</pubDate>
            <description><![CDATA[<h1 id="목표">목표</h1>
<blockquote>
</blockquote>
<p>1회차: 23/07/07 20:00~23:00
계획: YOLOv8 모델 학습 (Object Detection)
방향: YOLO 중 가장 최신 모델인 YOLOv8을 이용해 Object Detection 수행</p>
<h1 id="결과">결과</h1>
<h2 id="yolov8">YOLOv8<img src="https://velog.velcdn.com/images/vvon_joon/post/0219ebb6-d84b-4a4d-bb36-1a0da4a83ee4/image.png" alt=""></h2>
<ul>
<li>Ultralytics 사에서 개발한 최신 버전의 YOLO 모델<ul>
<li>[YOLOv8] <a href="https://github.com/ultralytics/ultralytics">https://github.com/ultralytics/ultralytics</a></li>
</ul>
</li>
<li>YOLOv5 모델을 기반으로 생성됨
<img src="https://velog.velcdn.com/images/vvon_joon/post/28d3401d-3280-42bd-b658-6eaa06ce6b6d/image.png" alt=""></li>
<li>세부적으로 모델 크기에 따라 YOLOv8n·YOLOv8s·YOLOv8m·YOLOv8l·YOLOv8x 총 5개 구성됨</li>
<li>이전 버전의 YOLO 모델보다 모델 크기가 적음</li>
<li>더욱 빨라진 모델로 real-time inference가 가능
<img src="https://velog.velcdn.com/images/vvon_joon/post/db5c4501-be19-44d5-8348-879eacb7c8c5/image.png" alt=""></li>
<li>하나의 모델로 Classification, Detection, Segmentation, Tracking, Pose Estimation이 모두 가능</li>
</ul>
<h2 id="object-detection">Object Detection</h2>
<h3 id="설치">설치</h3>
<pre><code class="language-bash">pip install ultralytics</code></pre>
<pre><code class="language-bash">pip install wandb</code></pre>
<ul>
<li>선택적으로 학습 로그를 확인하기 위해 <code>wandb</code>를 설치할 수 있음</li>
</ul>
<h3 id="학습">학습</h3>
<pre><code class="language-python">from ultralytics import YOLO

# Load a model
model = YOLO(&#39;yolov8n.yaml&#39;)  # build a new model from YAML

# Train the model
model.train(data=&#39;coco128.yaml&#39;, epochs=100, imgsz=640)</code></pre>
<ul>
<li><code>yolov8n</code> 모델을 이용해 학습 진행</li>
<li>학습을 위해 <code>coco</code> 데이터셋을 활용</li>
<li><code>train</code>의 인자로 <code>epochs</code>, <code>batch</code>, <code>imgsz</code> 등을 설정할 수 있음</li>
</ul>
<h3 id="모델-구조">모델 구조<img src="https://velog.velcdn.com/images/vvon_joon/post/d6913dc9-0a56-4e7a-8bfb-2bd614066f0b/image.png" alt=""></h3>
<h3 id="학습-결과">학습 결과<img src="https://velog.velcdn.com/images/vvon_joon/post/aafc9869-ed33-4d89-b18d-bccfd1b3a26e/image.png" alt=""><img src="https://velog.velcdn.com/images/vvon_joon/post/1c3933b7-f056-4377-8e7d-1aebe47f11ae/image.png" alt=""></h3>
]]></description>
        </item>
        <item>
            <title><![CDATA[2023 하계 모각코 계획]]></title>
            <link>https://velog.io/@vvon_joon/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@vvon_joon/2023-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Fri, 07 Jul 2023 11:17:08 GMT</pubDate>
            <description><![CDATA[<h2 id="팀명--원래는-종경이가-팀장이었다">팀명 : 원래는 종경이가 팀장이었다</h2>
<h3 id="구성원-">구성원 :</h3>
<ol>
<li><a href="https://iam-han9ry.tistory.com">김현수</a></li>
<li><a href="https://velog.io/@ccocco0609">박광욱</a></li>
<li><a href="https://parkjonggyeong.tistory.com">박종경</a></li>
<li><a href="https://velog.io/@vvon_joon">최원준</a></li>
<li><a href="https://velog.io/@juheon-jeong">정주헌</a></li>
</ol>
<h3 id="목표">목표</h3>
<ul>
<li>Computer Vision 관련 모델 학습</li>
<li>Computer Vision 관련 모델 공부</li>
<li>Computer Vision 관련 논문 리뷰</li>
</ul>
<h3 id="일정">일정</h3>
<blockquote>
</blockquote>
<p>1회차: 23.07.07 20:00 ~ 23:00
목표 : YOLOv8 모델 학습 (Object Detection)</p>
<blockquote>
</blockquote>
<p>2회차: 23.07.15 13:00 ~ 16:00
목표 : YOLOv8 모델 학습 (Segmentation)</p>
<blockquote>
</blockquote>
<p>3회차: 23.07.22 13:00 ~ 16:00
목표 :</p>
<blockquote>
</blockquote>
<p>4회차 : 23.07.29 13:00 ~ 16:00
목표 :</p>
<blockquote>
</blockquote>
<p>5회차: 23.08.05 13:00 ~ 16:00
목표 :</p>
<blockquote>
</blockquote>
<p>6회차: 23.08.12 13:00 ~ 16:00
목표 :</p>
<p>계획은 진행 상황에 따라 변경될 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[CSS 개념 정리]]></title>
            <link>https://velog.io/@vvon_joon/CSS-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@vvon_joon/CSS-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 01 Mar 2023 09:46:38 GMT</pubDate>
            <description><![CDATA[<h1 id="기본-문법">기본 문법</h1>
<h2 id="style-속성">style 속성</h2>
<pre><code class="language-html">&lt;div style=&quot;...&quot;&gt;
  ...
&lt;/div&gt;</code></pre>
<ul>
<li>태그에 CSS를 적용하려면 <code>style</code> 속성을 사용</li>
<li>위와 같이 HTML의 태그에 직접 적용 가능하나, 주로 CSS 파일(<code>.css</code>) 별도로 만들어 적용</li>
</ul>
<h2 id="css-속성-및-css-속성값">CSS 속성 및 CSS 속성값</h2>
<ul>
<li><code>CSS 속성: CSS 속성값</code> 형태로 작성<pre><code class="language-html">&lt;div style=&quot;color: #272928&quot;&gt;
...
&lt;/div&gt;</code></pre>
<pre><code class="language-html">&lt;!-- 속성이 여러 개 --&gt;
&lt;div style=&quot;color: #272928; background-color: #eeeeee&quot;&gt;
...
&lt;/div&gt;</code></pre>
</li>
<li>속성이 여러 개이면 세미콜론(<code>;</code>)으로 구분</li>
</ul>
<h2 id="규칙">규칙</h2>
<pre><code class="language-css">선택자 {
  속성: 속성값;
  속성: 속성값;
}</code></pre>
<ul>
<li>CSS 속성을 각 태그에 넣기보다는 CSS 규칙을 정해 놓고 사용할 것</li>
</ul>
<h2 id="선택자">선택자</h2>
<h3 id="태그-이름">태그 이름</h3>
<pre><code class="language-css">/* h3 태그의 글자 크기를 24px로 설정 */
h3 {
  font-size: 24px;
}</code></pre>
<ul>
<li><code>h1</code> , <code>div</code> 등의 태그에 해당하는 모든 요소에 스타일을 적용</li>
</ul>
<h3 id="아이디id">아이디(id)</h3>
<pre><code class="language-html">&lt;h3&gt;우도&lt;/h3&gt;
&lt;h3 id=&quot;hallasan&quot;&gt;한라산 국립공원&lt;/h3&gt;
&lt;h3&gt;성산 일출봉&lt;/h3&gt;
&lt;h3&gt;군산 오름&lt;/h3&gt;</code></pre>
<pre><code class="language-css">/* 아이디 이름이 hallasan인 태그에 글자색을 넣음 */
#hallasan {
  color: #f56513;
}</code></pre>
<ul>
<li>맨 앞에 <code>#</code>을 붙여서 <code>#아이디_이름</code>과 같은 문법으로 사용</li>
<li>아이디는 한 페이지 내에서 중복으로 쓸 수 없음</li>
</ul>
<h3 id="클래스class">클래스(class)</h3>
<pre><code class="language-html">&lt;h3&gt;우도&lt;/h3&gt;
&lt;h3 id=&quot;hallasan&quot;&gt;한라산 국립공원&lt;/h3&gt;
&lt;h3&gt;성산 일출봉&lt;/h3&gt;
&lt;h3&gt;군산 오름&lt;/h3&gt;</code></pre>
<pre><code class="language-css">/* 클래스 이름이 place인 모든 태그에 글자 크기와 굵기를 적용 */
.place {
  font-size: 16px;
  font-weight: 400;
}</code></pre>
<ul>
<li>아이디는 중복해서 쓸 수 없지만, 클래스는 가능</li>
<li>맨 앞에 <code>.</code>를 붙여 <code>.클래스_이름</code> 형태로 사용</li>
</ul>
<h1 id="기본-단위">기본 단위</h1>
<h2 id="색상">색상</h2>
<h3 id="색상-코드">색상 코드</h3>
<pre><code class="language-css">#FFFF00</code></pre>
<ul>
<li>색상을 16진수로 표현한 값</li>
</ul>
<h3 id="rgb">RGB</h3>
<pre><code class="language-css">rgb(255, 255, 0)</code></pre>
<ul>
<li>빨강, 초록, 파랑 값을 10진수로 써서 색상을 나타냄</li>
<li>0~255의 정수</li>
</ul>
<h3 id="rgba">RGBA</h3>
<pre><code class="language-css">rgba(255, 255, 0, 0.5)</code></pre>
<ul>
<li>RGB에 알파 값을 추가</li>
<li>0~1의 소수</li>
<li>1에 가까울수록 불투명, 0에 가까울수록 투명</li>
</ul>
<h2 id="절대적-크기">절대적 크기</h2>
<h3 id="픽셀px">픽셀(px)</h3>
<ul>
<li>크기의 절대적인 단위</li>
<li>화면을 표시하는 기준이 되는 크기</li>
</ul>
<h2 id="상대적-크기">상대적 크기</h2>
<h3 id="퍼센트">퍼센트</h3>
<pre><code class="language-html">&lt;div id=&quot;parent&quot;&gt;
  높이: 320px
  &lt;div id=&quot;child&quot;&gt;
    높이: 160px
  &lt;/div&gt;
&lt;/div&gt;</code></pre>
<pre><code class="language-css">/* 부모 태그 height의 절반 값 */
#parent {
  height: 320px;
}

#child {
  height: 50%;
}</code></pre>
<ul>
<li><code>%</code>를 이용</li>
<li>부모 태그의 크기에 상대적으로 지정</li>
</ul>
<h3 id="em">em</h3>
<ul>
<li>부모 태그의 <code>font-size</code> 크기<pre><code class="language-html">&lt;div id=&quot;parent&quot;&gt;
크기: 16px
&lt;div id=&quot;child&quot;&gt;
  크기: 64px
&lt;/div&gt;
&lt;/div&gt;</code></pre>
<pre><code class="language-css">#parent {
font-size: 16px;
}
/* 16px * 4 = 64px */
#child {
font-size: 4em;
}</code></pre>
</li>
</ul>
<h3 id="rem">rem</h3>
<ul>
<li>root em</li>
<li><code>&lt;html&gt;</code> 태그의 <code>font-size</code> 크기<pre><code class="language-html">&lt;html&gt;
&lt;body&gt;
      크기: 18px
      &lt;div id=&quot;other&quot;&gt;
        크기: 32px
      &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-css">html {
font-size: 16px;
}
</code></pre>
</li>
</ul>
<p>body {
  font-size: 18px;
}
/* 16px * 2 = 32px */
#other {
  font-size: 2rem;
}</p>
<pre><code>
# 속성
## 텍스트
### 글자색
- `color` 속성
```html
&lt;span class=&quot;red&quot;&gt;빨강&lt;/span&gt;
&lt;span class=&quot;orange&quot;&gt;주황&lt;/span&gt;
&lt;span class=&quot;yellow&quot;&gt;노랑&lt;/span&gt;</code></pre><pre><code class="language-css">.red {
  color: #F23030;
}

.orange {
  color: #F28705;
}

.yellow {
  color: #F2CB05;
}</code></pre>
<h3 id="글꼴">글꼴</h3>
<ul>
<li><code>font-family</code> 속성<pre><code class="language-html">&lt;html&gt;
&lt;head&gt;
&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
&lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin&gt;
&lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;family=Poppins&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;p id=&quot;with-poppins&quot;&gt;Poppins 있는 Noto Sans KR&lt;/p&gt;
&lt;p id=&quot;without-poppins&quot;&gt;Poppins 없는 Noto Sans KR&lt;/p&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-css">/* 영문은 Poppins 글꼴 적용, 한글은 Noto Sans KR 적용 */
#with-poppins {
font-family: Poppins, &quot;Noto Sans KR&quot;, sans-serif;
}
</code></pre>
</li>
</ul>
<p>#without-poppins {
  font-family: &quot;Noto Sans KR&quot;, sans-serif;
}</p>
<pre><code>- 우선적으로 적용할 글꼴 이름부터 쉼표(`,`)로 이어 차례대로 작성
- 웹 브라우저가 차례대로 확인하면서 적용 가능한 글꼴을 적용
- 글꼴 이름에 공백이 있으면 따옴표(`&#39;`)로 감쌈

### 글짜 크기
```css
font-size: 16px</code></pre><h3 id="글짜-굵기">글짜 굵기</h3>
<ul>
<li><code>font-weight</code> 속성<pre><code class="language-html">&lt;span class=&quot;bold&quot;&gt;굵게&lt;/span&gt;
&lt;span class=&quot;regular&quot;&gt;중간&lt;/span&gt;
&lt;span class=&quot;light&quot;&gt;얇게&lt;/span&gt;</code></pre>
<pre><code class="language-css">.bold {
font-weight: 600;
}
</code></pre>
</li>
</ul>
<p>.regular {
  font-weight: 400; 
}</p>
<p>.light {
  font-weight: 200;
}</p>
<pre><code>- `100` ~ `900`에서 `100` 단위로 올라감
- 중간값은 `400`

### 줄 높이
- `line-height` 속성
```html
&lt;p class=&quot;loose&quot;&gt;
  넓게&lt;br&gt;
  넓게&lt;br&gt;
  넓게
&lt;/p&gt;
&lt;p class=&quot;regular&quot;&gt;
  보통&lt;br&gt;
  보통&lt;br&gt;
  보통
&lt;/p&gt;
&lt;p class=&quot;tight&quot;&gt;
  좁게&lt;br&gt;
  좁게&lt;br&gt;
  좁게
&lt;/p&gt;</code></pre><pre><code class="language-css">.loose {
  font-size: 16px;
  line-height: 1.7; /* 16px * 1.7 = 27.2px */
}

.regular {
  font-size: 16px;
  line-height: 1.5; /* 16px * 1.5 = 24px */
}

.tight {
  font-size: 16px;
  line-height: 1; /* 16px * 1 = 16px */
}</code></pre>
<ul>
<li>줄과 줄 사이의 간격을 조절</li>
<li>단위 없이, 글자 크기에 상대적인 값</li>
</ul>
<h3 id="텍스트-꾸미기">텍스트 꾸미기</h3>
<ul>
<li><code>text-decoration</code> 속성<pre><code class="language-html">&lt;a href=&quot;https://codeit.kr&quot;&gt;
링크
&lt;/a&gt;
&lt;br&gt;
&lt;a class=&quot;none&quot; href=&quot;https://codeit.kr&quot;&gt;
밑줄 없는 링크
&lt;/a&gt;
&lt;br&gt;
&lt;span class=&quot;underline&quot;&gt;
밑줄
&lt;/span&gt;
&lt;br&gt;
&lt;span class=&quot;line-through&quot;&gt;
취소선
&lt;/span&gt;</code></pre>
<pre><code class="language-css">.none {
text-decoration: none;
}
</code></pre>
</li>
</ul>
<p>.underline {
  text-decoration: underline;
}</p>
<p>.line-through {
  text-decoration: line-through;
}</p>
<pre><code>- `none` : `&lt;a&gt;` 태그에 기본으로 있는 밑줄을 제거
- `underline` : 밑줄
- `line-through` : 취소선

## 배경
### 배경색
- `background-color` 속성
```css
background-color: #272928</code></pre><h3 id="배경-이미지">배경 이미지</h3>
<ul>
<li><code>background-image</code> 속성<pre><code class="language-css">background-image: url(&#39;a.png&#39;)</code></pre>
</li>
<li><code>url(...)</code>을 이용해 배경 이미지를 넣음<pre><code class="language-css">background-image: /* 위에서부터 a, b, c가 깔림 */
url(&#39;a.png&#39;), /* 제일 위에 보이는 이미지 */
url(&#39;b.png&#39;),
url(&#39;c.png&#39;);  </code></pre>
</li>
<li>배경 이미지 여러 개를 넣을 수 있음</li>
</ul>
<h3 id="배경-위치">배경 위치</h3>
<ul>
<li><code>background-position</code> 속성<pre><code class="language-css">background-position: top; /* 위 */
background-position: right; /* 오른쪽 */
background-position: bottom; /* 아래 */
background-position: left; /* 왼쪽 */
background-position: left top; /* 왼쪽 위 */
background-position: center;</code></pre>
</li>
<li>기본값은 <code>left top</code></li>
</ul>
<h3 id="배경의-반복">배경의 반복</h3>
<ul>
<li><code>background-repeat</code> 속성<pre><code class="language-css">background-repeat: repeat; /* 반복하기 */
background-repeat: no-repeat; /* 반복 안 함 */</code></pre>
</li>
<li>기본값은 <code>repeat</code></li>
</ul>
<h3 id="배경-크기">배경 크기</h3>
<ul>
<li><code>background-size</code> 속성<pre><code class="language-css">background-size: 40px 30px; /* 가로 40px 세로 30px */
background-size: cover; /* 비율 유지하면서 꽉 차게. 이미지 잘릴 수 있음 */
background-size: contain; /* 비율 유지하면서 최대한 크게. 이미지 잘리지 않음 */</code></pre>
</li>
<li>직접 가로 및 세로 크기 지정 가능</li>
<li><code>cover</code> : 비율을 유지하면서 영역에 꽉 차게</li>
<li><code>contain</code> : 영역 안에서 최대한 크게</li>
</ul>
<h2 id="그라디언트">그라디언트</h2>
<ul>
<li><code>linear-gradient()</code><pre><code class="language-css">background-image: linear-gradient(#000000, #ffffff);</code></pre>
</li>
<li>기본적으로 시작 색상, 종료 색상을 사용<pre><code class="language-css">background-image:
linear-gradient(45deg, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.2));</code></pre>
</li>
<li>방향 기본값은 180도(위에서 아래)</li>
<li>방향을 바꾸려면 맨 앞에 각도 넣기, 단위는 <code>deg</code></li>
</ul>
<h2 id="그림자">그림자</h2>
<ul>
<li><code>box-shadow</code> 속성
```css
box-shadow: 5px 10px 15px 8px rgba(0, 0, 0, 0.6);
/*
가로: 5px
세로: 10px
흐린 정도(Blur): 15px
퍼지는 정도(Spread): 8px
색상: rgba(0, 0, 0, 0.6)</li>
<li>/
```</li>
<li>가로, 세로, 흐린 정도(blur), 퍼지는 정도(spread), 색상 순서</li>
</ul>
<h2 id="불투명도">불투명도</h2>
<ul>
<li><code>opacity</code> 속성<pre><code class="language-css">opacity: 0; /* 투명 */
opacity: 0.6;
opacity: 1; /* 불투명 */</code></pre>
</li>
<li>요소 전체의 불투명도를 조절</li>
<li><code>0</code> ~ <code>1</code>의 소수 값, 단위 없음</li>
</ul>
<h2 id="너비">너비</h2>
<pre><code class="language-css">width: 560px</code></pre>
<h2 id="높이">높이</h2>
<pre><code class="language-css">height: 380px</code></pre>
<h2 id="padding">Padding</h2>
<ul>
<li>안쪽 여백<pre><code class="language-css">/* 상하좌우 8px */
padding: 8px</code></pre>
<pre><code class="language-css">/* 상하 16px, 좌우 8px */
padding: 16px 8px</code></pre>
<pre><code class="language-css">/* 상 16px, 좌우 8px, 하 24px */
padding: 16px 8px 24px</code></pre>
<pre><code class="language-css">/* 상 16px, 우 8px, 좌 24px, 하 10px */
padding: 16px 8px 24px 10px</code></pre>
</li>
<li>숫자 순서는 0시부터 시계 방향</li>
</ul>
<h2 id="margin">Margin</h2>
<ul>
<li>바깥쪽 여백<pre><code class="language-css">/* 상하좌우 8px */
margin: 8px</code></pre>
<pre><code class="language-css">/* 상하 16px, 좌우 8px */
margin: 16px 8px</code></pre>
<pre><code class="language-css">/* 상하 16px, 좌우 자동 */
width: 520px
margin: 16px auto</code></pre>
</li>
<li><code>auto</code>는 자동으로 채워주고, <code>margin</code>의 좌우에서만 동작</li>
<li>요소의 <code>width</code> 속성이 정해져있을 때만 <code>auto</code> 사용 가능<pre><code class="language-css">/* 상 16px, 좌우 8px, 하 24px */
margin: 16px 8px 24px</code></pre>
<pre><code class="language-css">/* 상 16px, 우 8px, 하 24px, 좌 10px */
margin: 16px 8px 24px 10px</code></pre>
</li>
<li>마찬가지로 순서는 시계 방향</li>
</ul>
<h1 id="박스-모델box-model">박스 모델(Box Model)</h1>
<p><img src="https://t1.daumcdn.net/cfile/tistory/992B234F5D9B324106" alt="Box Model"></p>
<ul>
<li>HTML/CSS에서 요소는 기본적으로 박스 형태</li>
<li>Content, Padding, Border, Margin으로 구성</li>
<li>요소의 크기는 content를 포함해 border까지</li>
</ul>
<h2 id="border-속성">border 속성</h2>
<pre><code class="language-css">/* 굵기, 테두리 종류, 색상 */
border: 2px solid #ededed;</code></pre>
<h2 id="border-radius-속성">border-radius 속성</h2>
<ul>
<li>박스 모델의 모서리를 둥글게 만들 때 사용</li>
<li><code>border</code> 속성 없이도 사용 가능<pre><code class="language-css">/* 16px만큼 둥글게 */
border-radius: 16px</code></pre>
<pre><code class="language-css">/* 타원 형태 */
border-radius: 16px</code></pre>
<pre><code class="language-css">/* 알약 형태 */
border-radius: 9999px</code></pre>
</li>
</ul>
<h2 id="box-sizing-속성">box-sizing 속성</h2>
<pre><code class="language-css">#box {
  margin: 20px;
  padding: 30px;
  width: 100px;    /* content 영역의 너비 */
}</code></pre>
<ul>
<li><code>#box</code> 요소의 너비 = 100 + 30 + 30 = 160(px)<pre><code class="language-css">#box {
margin: 20px;
padding: 30px;
width: 100px;    /* content 영역의 너비: 40 */
box-sizing: border-box;
}</code></pre>
</li>
<li>직관적으로 크기를 지정</li>
<li><code>box-sizing</code> 속성을 <code>border-box</code>로 지정하면 <code>#box</code> 요소의 너비 = 100(px)</li>
<li>기본값: <code>content-box</code></li>
</ul>
<h2 id="overflow-속성">overflow 속성</h2>
<ul>
<li>박스의 크기를 지정했을 때 안에 있는 내용이 삐져나오는 현상</li>
<li><code>overflow</code> 속성을 통해 이를 방지<pre><code class="language-css">/* 넘치는 것 감추기 */
overflow: hidden;</code></pre>
<pre><code class="language-css">/* 넘치면 스크롤 */
overflow: auto;</code></pre>
<pre><code class="language-css">/* 넘치든말든 스크롤 */
overflow: scroll;</code></pre>
</li>
</ul>
<h2 id="margin-상쇄margin-collapsing">Margin 상쇄(Margin Collapsing)</h2>
<ul>
<li>일반적으로 서로 이웃한 태그의 세로 margin은 겹쳐서 나타남</li>
<li>부모-자식 관계 태그에서도 margin을 겹쳐서 적용<ul>
<li>다만, 부모에 padding이나 border가 있으면 경계가 있다고 생각하고 세로 margin을 겹치지 않음<pre><code class="language-html">&lt;div id=&quot;a&quot;&gt;a&lt;/div&gt;
&lt;div id=&quot;b&quot;&gt;b&lt;/div&gt;</code></pre>
<pre><code class="language-css">#a {
margin: 30px;
}
#b {
margin: 20px;
}</code></pre>
</li>
</ul>
</li>
<li><code>#b</code>의 margin이 <code>#a</code>의 margin에 완전히 겹쳐 둘 사이의 margin은 30px<pre><code class="language-html">&lt;div id=&quot;a&quot;&gt;
a
&lt;/div&gt;
&lt;div id=&quot;b&quot;&gt;
&lt;div id=&quot;c&quot;&gt;
  c
&lt;/div&gt;
b
&lt;/div&gt;</code></pre>
<pre><code class="language-css">#a {
margin: 30px;
}
</code></pre>
</li>
</ul>
<p>#b {
  margin: 20px;
}</p>
<p>#c {
  margin: 40px;
}</p>
<p>```</p>
<ul>
<li><code>#b</code>의 margin이 <code>#c</code>에 완젼히 겹쳐 둘 사이의 margin은 40px</li>
<li><code>#a</code>의 margin이 <code>#b</code>에 완전히 겹쳐 둘 사이의 margin은 40px</li>
</ul>
<h1 id="display">Display</h1>
<ul>
<li>웹 페이지의 레이아웃을 결정하는 CSS의 속성</li>
</ul>
<h2 id="블록block">블록(Block)</h2>
<img src='https://drive.google.com/uc?export=download&id=1x9xvkpsHum66JOJXE1pDbdBVk9S3P3BW' width="" height =""/>

<ul>
<li><code>block</code> : 위에서 아래로 차례대로 배치되는 <code>display</code> 속성</li>
<li>크기를 지정 가능</li>
<li><code>&lt;h1&gt;</code> , <code>&lt;h2&gt;</code> , ... , <code>&lt;h6&gt;</code> , <code>&lt;p&gt;</code> , <code>&lt;div&gt;</code></li>
</ul>
<h2 id="인라인inline">인라인(Inline)</h2>
<img src='https://drive.google.com/uc?export=download&id=1H2FpaIY2RndX6vCK4taOPDXr3kkZDRDH' width="" height ="" />

<ul>
<li><code>inline</code> : 글을 쓰는 방향으로 줄이 바뀌는 <code>display</code> 속성</li>
<li>크기를 지정할 수 없음<ul>
<li>다만 이미지와 같이 외부 데이터를 보여주는 태그는 인라인이지만, 크기를 지정 가능</li>
</ul>
</li>
<li><code>&lt;a&gt;</code> , <code>&lt;br&gt;</code> , <code>&lt;img&gt;</code> , <code>&lt;span&gt;</code></li>
</ul>
<h2 id="인라인-블록inline-block">인라인 블록(Inline-block)</h2>
<img src='https://drive.google.com/uc?export=download&id=1aaBHg7CGtMsIdBzn0Rbr14vu0TNfdPjG' width="" height ="" />

<ul>
<li><code>inline-block</code> : 인라인처럼 배치되지만 블록처럼 크기를 갖는 <code>display</code> 속성</li>
</ul>
<h2 id="float-속성">float 속성</h2>
<img src='https://drive.google.com/uc?export=download&id=1Id0PcnovTVCEuULrhaU3cPbowKhQllst' width="" height ="" />

<ul>
<li><code>float</code> : 요소를 페이지의 왼쪽 혹은 오른쪽에 삽화처럼 배치하고, 그 주변에 인라인 요소를 배치할 수 있는 <code>display</code> 속성</li>
</ul>
<table>
<thead>
<tr>
<th align="center"></th>
<th align="center">블록</th>
<th align="center">인라인 블록</th>
<th align="center">인라인</th>
</tr>
</thead>
<tbody><tr>
<td align="center">기본 크기</td>
<td align="center">좌우로 꽉 참</td>
<td align="center">content에 딱 맞게</td>
<td align="center">content에 딱 맞게</td>
</tr>
<tr>
<td align="center">배치</td>
<td align="center">위에서 아래로</td>
<td align="center">글 쓰는 방향</td>
<td align="center">글 쓰는 방향</td>
</tr>
<tr>
<td align="center">width &amp; height</td>
<td align="center">있음</td>
<td align="center">있음</td>
<td align="center">없음</td>
</tr>
<tr>
<td align="center">margin &amp; padding</td>
<td align="center">있음</td>
<td align="center">있음</td>
<td align="center">인라인 진행 방향(가로)만 사용 가능</td>
</tr>
</tbody></table>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTML 개념 정리]]></title>
            <link>https://velog.io/@vvon_joon/HTML-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@vvon_joon/HTML-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Wed, 01 Mar 2023 09:24:54 GMT</pubDate>
            <description><![CDATA[<h1 id="기본-문법">기본 문법</h1>
<h2 id="태그tag">태그(Tag)</h2>
<ul>
<li>HTML에서 꺾쇠(<code>&lt;</code>, <code>&gt;</code>)를 사용하는 문법</li>
<li>일반적으로 시작 태그와 종료 태그로 내용을 감쌈</li>
<li>시작 태그: <code>&lt;태그 이름&gt;</code></li>
<li>종료 태그: <code>&lt;/태그 이름&gt;</code><pre><code class="language-html">&lt;!-- &lt;p&gt; 태그 --&gt;
&lt;p&gt;
단락
&lt;/p&gt;</code></pre>
<pre><code class="language-html">&lt;!-- &lt;img&gt; 태그 --&gt;
&lt;img src=&quot;이미지의 주소 혹은 디렉토리&quot;&gt;</code></pre>
</li>
</ul>
<h2 id="속성">속성</h2>
<ul>
<li>시작 태그에 <code>속성 이름=&quot;속성 값&quot;</code> 형태로 사용하는 문법</li>
<li>태그의 속성을 결정<pre><code class="language-html">&lt;!-- &lt;a&gt; 태그의 href 속성 --&gt;
&lt;a href=&quot;https://naver.com&quot;&gt;네이버&lt;/a&gt;</code></pre>
<pre><code class="language-html">&lt;!-- &lt;img&gt; 태그의 src 속성 --&gt;
&lt;img src=&quot;이미지의 주소 혹은 디렉토리&quot;&gt;</code></pre>
</li>
</ul>
<h2 id="html-파일의-기본-구조">HTML 파일의 기본 구조</h2>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre>
<ul>
<li><code>&lt;!DOCTYPE html&gt;</code> : 문서 타입(Document Type)이 html</li>
<li>크게 <code>&lt;html&gt;</code> 태그로 감싸고 <code>&lt;head&gt;</code>와 <code>&lt;body&gt;</code> 태그로 나뉨</li>
<li><code>&lt;head&gt;</code> : 페이지에 대한 정보</li>
<li><code>&lt;body&gt;</code> : 페이지에 대한 내용</li>
<li>VSCode에서 <code>!</code>를 입력하고 <code>Enter</code>를 누르면 HTML 코드가 자동으로 생성됨</li>
</ul>
<h1 id="태그-정리">태그 정리</h1>
<h2 id="사이트-이름">사이트 이름</h2>
<pre><code class="language-html">&lt;head&gt;
  &lt;title&gt;네이버&lt;/title&gt;
  ...
&lt;/head&gt;</code></pre>
<ul>
<li>웹 브라우저 탭에 보이는 제목을 설정</li>
<li>페이지 내용이 아니라, 페이지에 대한 정보이므로 <code>&lt;head&gt;</code> 태그에 넣음</li>
</ul>
<h2 id="인코딩-설정">인코딩 설정</h2>
<pre><code class="language-html">&lt;head&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  ...
&lt;/head&gt;</code></pre>
<ul>
<li>UTF-8(한글 지원)을 사용하도록 지정</li>
<li><code>&lt;meta&gt;</code> 태그를 <code>&lt;head&gt;</code> 태그 안에 넣기</li>
</ul>
<h2 id="제목heading">제목(Heading)</h2>
<pre><code class="language-html">&lt;h1&gt;title&lt;/h1&gt;
&lt;h2&gt;subtitle&lt;/h2&gt;</code></pre>
<ul>
<li>제일 큰 것부터 작은 것까지 <code>&lt;h1&gt;</code> , <code>&lt;h1&gt;</code> , ... , <code>&lt;h6&gt;</code> 태그를 사용</li>
<li><code>&lt;title&gt;</code> 태그와 다르므로 유의</li>
</ul>
<h2 id="단락paragraph">단락(Paragraph)</h2>
<pre><code class="language-html">&lt;p&gt;
  Hello
  World
&lt;/p&gt;
&lt;p&gt;
  Hi
&lt;/p&gt;</code></pre>
<ul>
<li>단락은 <code>&lt;p&gt;</code> 태그로 감싸기</li>
<li>코드에서의 줄 바꿈은 화면에 반영되지 않고 붙어서 보임</li>
</ul>
<h2 id="줄-바꿈break-line">줄 바꿈(Break Line)</h2>
<pre><code class="language-html">&lt;p&gt;
  Hello&lt;br&gt;
  World
&lt;/p&gt;</code></pre>
<ul>
<li>줄 바꿈이 필요할 때 사용</li>
<li>시작 태그 <code>&lt;br&gt;</code> 하나만 사용</li>
</ul>
<h2 id="링크">링크</h2>
<pre><code class="language-html">&lt;a href=&quot;https://naver.com&quot;&gt;
  네이버
&lt;/a&gt;</code></pre>
<ul>
<li>링크는 <code>&lt;a&gt;</code> 태그를 사용</li>
<li><code>href</code> 속성으로 이동할 주소나 디렉토리를 기록</li>
</ul>
<h2 id="이미지">이미지</h2>
<ul>
<li><code>&lt;img&gt;</code> 태그를 사용</li>
<li><code>src</code> 속성으로 이미지 파일의 주소 혹은 디렉토리를 기록<pre><code class="language-html">&lt;img src=&quot;이미지의 주소 혹은 디렉토리&quot;&gt;</code></pre>
</li>
</ul>
<h2 id="영역-나누기">영역 나누기</h2>
<ul>
<li><code>&lt;div&gt;</code> 태그로 여러 태그를 감쌈</li>
<li><code>&lt;span&gt;</code> 태그로 텍스트 일부만 감쌈</li>
<li>영역을 구분하는 이유는 CSS에서 스타일을 적용하기 위함<pre><code class="language-html">&lt;div&gt;
&lt;h1&gt;서시&lt;/h1&gt;
&lt;h2&gt;시인 &lt;span&gt;윤동주&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;p&gt;
  죽는 날까지 하늘을 우러러&lt;br&gt;
  한 점 부끄럼이 없기를,&lt;br&gt;
  ...
  걸어가야겠다.
&lt;/p&gt;
&lt;p&gt;
  오늘 밤에도 별이 바람에 스치운다.
&lt;/p&gt;
&lt;/div&gt;</code></pre>
</li>
</ul>
<h2 id="꺾쇠-기호를-넣는-법">꺾쇠 기호를 넣는 법</h2>
<ul>
<li>HTML에서는 꺾쇠를 태그로 인식</li>
<li>꺾쇠를 글자로 입력하려면 <code>&amp;lt;</code>(less than), <code>&amp;gt;</code>(greater than) 사용<pre><code class="language-html">&amp;lt;html&amp;gt;, &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt;</code></pre>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[22-23 동계 모각코] 6회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Wed, 15 Feb 2023 05:28:53 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>6회차: 23/02/15 14:00~18:00
계획: CSS 기본 정리 (3)
목적: React 사용을 위함
방향: CSS의 기본 문법을 정리</p>
<h2 id="결과">결과</h2>
<h3 id="기본-문법">기본 문법</h3>
<h4 id="선택자">선택자</h4>
<pre><code class="language-css">선택자 {
    선언;
    선언;
    선언;
}</code></pre>
<ul>
<li>CSS에서 맨 앞에 적는 것</li>
<li>규칙을 어떤 요소에 적용할지 선택</li>
</ul>
<h4 id="선택자-목록">선택자 목록</h4>
<pre><code class="language-css">선택자1,
선택자2 {
    ...
}</code></pre>
<ul>
<li>콤마(<code>,</code>)로 선택자를 연결하면 여러 선택자에 같은 규칙을 적용</li>
</ul>
<h4 id="선택자-붙여쓰기">선택자 붙여쓰기</h4>
<pre><code class="language-html">&lt;h2 id=&quot;mongolia&quot; class=&quot;large title&quot;&gt;몽골 대자연으로 떠나는 여행&lt;/h2&gt; </code></pre>
<h5 id="아이디--클래스">아이디 + 클래스</h5>
<pre><code class="language-css">#mongolia.title</code></pre>
<h5 id="클래스--클래스">클래스 + 클래스</h5>
<pre><code class="language-css">.large.title</code></pre>
<h5 id="태그--아이디--클래스">태그 + 아이디 + 클래스</h5>
<pre><code class="language-css">h2#mongolia.large.title</code></pre>
<ul>
<li>여러 조건을 동시에 만족하는 요소를 선택할 때 선택자를 붙여서 쓸 수 있음</li>
</ul>
<h4 id="자식-결합자child-combinator">자식 결합자(Child Combinator)</h4>
<pre><code class="language-html">&lt;div class=&quot;article&quot;&gt;
  &lt;img src=&quot;tesla-y-2025.png&quot;&gt;
  ...
&lt;/div&gt;</code></pre>
<pre><code class="language-css">.article &gt; img {
  width: 100%;
}</code></pre>
<ul>
<li>오른쪽 꺾쇠(<code>&gt;</code>)로 선택자를 이어 줌</li>
<li>코드가 많아지면 나중에 혼동될 수 있어 선호되지는 않음</li>
</ul>
<h4 id="자손-결합자descendant-combinator">자손 결합자(Descendant Combinator)</h4>
<pre><code class="language-html">&lt;div class=&quot;article&quot;&gt;
    &lt;p&gt; 이번에 리뷰해 볼 차량은 테슬라 모델 W 입니다.
      &lt;img src=&quot;tesla-w-2025.png&quot;&gt;
  &lt;/p&gt;
  ...
&lt;/div&gt;</code></pre>
<pre><code class="language-css">.article img {
  width: 100%;
}</code></pre>
<ul>
<li>스페이스(띄어쓰기)로 선택자를 이어 줌</li>
<li>코드가 많아지면 나중에 혼동될 수 있어 선호되지는 않음</li>
</ul>
<h4 id="가상-클래스pseudo-class">가상 클래스(Pseudo-class)</h4>
<pre><code class="language-css">a {
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}</code></pre>
<ul>
<li>요소의 상태를 선택할 때 사용하는 클래스</li>
<li>선택자 뒤에 콜론(<code>:</code>)을 붙여 사용</li>
<li><code>:hover</code>: 마우스를 올렸을 때 밑줄이 생김</li>
<li><code>:active</code>: 클릭한 상태</li>
<li><code>:visited</code>: 방문한 적이 있는 링크</li>
<li><code>:focus</code>: 포커싱 됐을 때</li>
</ul>
<h4 id="전체-선택자universal-selector">전체 선택자(Universal Selector)</h4>
<pre><code class="language-css">* {
  box-sizing: border-box;
}</code></pre>
<ul>
<li><code>*</code>: 모든 요소를 선택<pre><code class="language-css">.gallery &gt; * {
width: 120px;
height: 90px;
}</code></pre>
</li>
<li><code>.gallery</code>의 모든 자식 요소를 선택</li>
</ul>
<h4 id="캐스케이드cascade">캐스케이드(Cascade)</h4>
<ul>
<li>계단식 폭포처럼 CSS 규칙을 순서에 따라 합쳐서 적용</li>
<li>종속이라고도 함</li>
<li>우선순위가 높은 규칙일수록 우선적으로 속성을 적용</li>
<li>브라우저에서 기본으로 제공하는 스타일 시트(User Agent Stylesheet)는 작성된 코드보다 우선순위가 낮음</li>
<li>코드에서 아래 쪽에 쓴 코드일수록 우선순위가 높음</li>
<li>선택자는 명시도(선택자마다 우선순위를 매기기 위한 점수로 아이디 개수, 클래수 개수, 태그 개수로 구성됨) 점수를 비교해서 우선순위를 매김</li>
<li>가까운 조상에게서 물려받은 속성일수록 우선순위가 높음</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[22-23 동계 모각코] 5회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Thu, 09 Feb 2023 05:18:43 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>5회차: 23/02/09 14:00~18:00
계획: CSS 기본 정리 (2)
목적: React 사용을 위함
방향: CSS의 기본 문법을 정리</p>
<h2 id="결과">결과</h2>
<h3 id="기본-문법">기본 문법</h3>
<h4 id="글자-색">글자 색</h4>
<pre><code class="language-html">  &lt;span class=&quot;red&quot;&gt;빨강&lt;/span&gt;
  &lt;span class=&quot;orange&quot;&gt;주황&lt;/span&gt;
  &lt;span class=&quot;yellow&quot;&gt;노랑&lt;/span&gt;</code></pre>
<pre><code class="language-css">  .red {
    color: #F23030;
  }

  .orange {
    color: #F28705;
  }

  .yellow {
    color: #F2CB05;
  }</code></pre>
<h4 id="글자-크기">글자 크기</h4>
<pre><code class="language-html">  &lt;span class=&quot;large&quot;&gt;크게&lt;/span&gt;
  &lt;span class=&quot;medium&quot;&gt;중간&lt;/span&gt;
  &lt;span class=&quot;small&quot;&gt;작게&lt;/span&gt;</code></pre>
<pre><code class="language-css">  .large {
    font-size: 24px;
  }

  .medium {
    font-size:  16px; 
  }

  .small {
    font-size: 8px;
  }</code></pre>
<h4 id="글꼴">글꼴</h4>
<pre><code class="language-html">  &lt;html&gt;
  &lt;head&gt;
    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
    &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin&gt;
    &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR&amp;family=Poppins&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;p id=&quot;with-poppins&quot;&gt;Poppins 있는 노토 산스 케이알&lt;/p&gt;
    &lt;p id=&quot;without-poppins&quot;&gt;Poppins 없는 노토 산스 케이알&lt;/p&gt;
  &lt;/body&gt;
  &lt;/html&gt;</code></pre>
<pre><code class="language-css">  #with-poppins {
    font-family: Poppins, &quot;Noto Sans KR&quot;, sans-serif;
  }

  #without-poppins {
    font-family: &quot;Noto Sans KR&quot;, sans-serif;
  }</code></pre>
<ul>
<li>font-family는 웹 브라우저가 font를 차례대로 확인하면서 적용 가능한 글꼴을 적용</li>
</ul>
<h4 id="글짜-굵기">글짜 굵기</h4>
<pre><code class="language-html">  &lt;span class=&quot;bold&quot;&gt;굵게&lt;/span&gt;
  &lt;span class=&quot;regular&quot;&gt;중간&lt;/span&gt;
  &lt;span class=&quot;light&quot;&gt;얇게&lt;/span&gt;</code></pre>
<pre><code class="language-css">  .bold {
    font-weight: 600;
  }

  .regular {
    font-weight: 400; 
  }

  .light {
    font-weight: 200;
  }</code></pre>
<h4 id="줄-높이">줄 높이</h4>
<pre><code class="language-html">  &lt;p class=&quot;loose&quot;&gt;
    넓게&lt;br&gt;
    넓게&lt;br&gt;
    넓게
  &lt;/p&gt;
  &lt;p class=&quot;regular&quot;&gt;
    보통&lt;br&gt;
    보통&lt;br&gt;
    보통
  &lt;/p&gt;
  &lt;p class=&quot;tight&quot;&gt;
    좁게&lt;br&gt;
    좁게&lt;br&gt;
    좁게
  &lt;/p&gt;</code></pre>
<pre><code class="language-css">  .loose {
    font-size: 16px;
    line-height: 1.7; /* 16px * 1.7 = 27.2px */
  }

  .regular {
    font-size: 16px;
    line-height: 1.5; /* 16px * 1.5 = 24px */
  }

  .tight {
    font-size: 16px;
    line-height: 1; /* 16px * 1 = 16px */
  }</code></pre>
<ul>
<li>line height는 글짜 크기에 상대적(비례)으로 적용</li>
</ul>
<h4 id="텍스트-꾸미기">텍스트 꾸미기</h4>
<pre><code class="language-html">  &lt;a href=&quot;https://naver.com&quot;&gt;
    링크
  &lt;/a&gt;
  &lt;br&gt;
  &lt;a class=&quot;none&quot; href=&quot;https://naver.com&quot;&gt;
    밑줄 없는 링크
  &lt;/a&gt;
  &lt;br&gt;
  &lt;span class=&quot;underline&quot;&gt;
    밑줄
  &lt;/span&gt;
  &lt;br&gt;
  &lt;span class=&quot;line-through&quot;&gt;
    취소선
  &lt;/span&gt;</code></pre>
<pre><code class="language-css">.none {
    text-decoration: none;
  }

  .underline {
    text-decoration: underline;
  }

  .line-through {
    text-decoration: line-through;
  }</code></pre>
<ul>
<li>밑줄 -&gt; underline</li>
<li>취소선 -&gt; line-through</li>
</ul>
<h4 id="배경-이미지">배경 이미지</h4>
<pre><code class="language-css">background-image: url(&#39;flowers.png&#39;);</code></pre>
<pre><code class="language-css">background-image:
  url(&#39;a.png&#39;), /* 제일 위에 보이는 이미지 */
  url(&#39;b.png&#39;),
  url(&#39;c.png&#39;);</code></pre>
<ul>
<li>배경 이미지는 여러 개 넣을 수 있음(위에서부터 쌓임)</li>
</ul>
<h4 id="배경-위치">배경 위치</h4>
<pre><code class="language-css">background-position: top; /* 위 */
background-position: right; /* 오른쪽 */
background-position: bottom; /* 아래 */
background-position: left; /* 왼쪽 */
background-position: left top; /* 왼쪽 위 (지정하지 않았을 때 기본값) */
background-position: center;</code></pre>
<ul>
<li>default 값은 left top</li>
</ul>
<h4 id="배경-반복">배경 반복</h4>
<pre><code class="language-css">background-repeat: repeat; /* 반복하기 (지정하지 않았을 때 기본값) */
background-repeat: no-repeat; /* 반복 안 함 */</code></pre>
<ul>
<li>default 값은 repeat</li>
</ul>
<h4 id="배경-크기">배경 크기</h4>
<pre><code class="language-css">background-size: cover; /* 비율 유지하면서 꽉 차게. 이미지 잘릴 수 있음 */
background-size: contain; /* 비율 유지하면서 최대한 크게. 이지미 잘리지 않음 */
background-size: 40px 30px; /* 가로 40px 세로 30px */</code></pre>
<h4 id="그라디언트">그라디언트</h4>
<pre><code class="language-css"> background-image: linear-gradient(#000000, #ffffff);</code></pre>
<pre><code class="language-css">background-image:
  linear-gradient(45deg, rgba(0, 0, 0, 0.8), rgba(0, 0, 0, 0.2));</code></pre>
<ul>
<li>default 방향 각도는 180도(위에서 아래로)</li>
<li><a href="https://cssgradient.io/">CSS Gradient Generator</a>에서 Gradient 코드를 얻을 수 있음</li>
</ul>
<h4 id="그림자">그림자</h4>
<pre><code class="language-css">box-shadow: 5px 10px 15px 8px rgba(0, 0, 0, 0.6);
/*
  가로: 5px
  세로: 10px
  흐린 정도(Blur): 15px
  퍼지는 정도(Spread): 8px
  색상: rgba(0, 0, 0, 0.6)
*/</code></pre>
<h4 id="불투명도">불투명도</h4>
<pre><code class="language-css">box-shadow: 5px 10px 15px 8px rgba(0, 0, 0, 0.6);
/*
  가로: 5px
  세로: 10px
  흐린 정도(Blur): 15px
  퍼지는 정도(Spread): 8px
  색상: rgba(0, 0, 0, 0.6)
*/v</code></pre>
<h4 id="padding">Padding</h4>
<ul>
<li>영역 안쪽에 여백을 넣을 때 사용<pre><code class="language-css">padding: 8px;</code></pre>
</li>
<li>상하좌우 한 번에<pre><code class="language-css">padding: 16px 8px;</code></pre>
</li>
<li>상하, 좌우 각각<pre><code class="language-css">padding: 16px 8px 24px;</code></pre>
</li>
<li>상, 좌우, 하 각각<pre><code class="language-css">padding: 16px 8px 24px 10px;</code></pre>
</li>
<li>상, 하, 좌, 우 각각</li>
<li>순서는 0시부터 시계 방향으로</li>
</ul>
<h4 id="margin">Margin</h4>
<ul>
<li>영역 바깥쪽에 여백을 넣을 때 사용</li>
<li>좌우 바깥 여백에는 <code>auto</code>를 적용하면 자동으로 채움(<code>width</code> 속성이 정해져 있어야 자동으로 채워짐)</li>
<li>순서는 Padding과 똑같이 0시부터 시계 방향으로<pre><code class="language-css">margin: 8px;
</code></pre>
</li>
</ul>
<p>margin: 16px 8px;</p>
<p>width: 520px; /* 반드시 너비가 정해져 있어야 자동으로 채울 수 있음 */
margin: 16px auto;</p>
<p>margin: 16px 8px 24px;</p>
<p>margin: 16px 8px 24px 10px;
```</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[22-23 동계 모각코] 4회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Mon, 06 Feb 2023 06:16:19 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>4회차: 23/02/06 15:00 ~ 19:00
계획: CSS 기본 정리 (1)
목적: React 사용을 위함
방향: CSS의 기본 문법을 정리</p>
<h2 id="결과">결과</h2>
<h3 id="기본-문법">기본 문법</h3>
<h4 id="규칙">규칙</h4>
<p><code>선택자 {    속성: 속성값; ...}</code></p>
<h4 id="선택자">선택자</h4>
<ul>
<li>규칙에서 요소를 선택하는데 사용<pre><code class="language-html">&lt;h3&gt;우도&lt;/h3&gt;
&lt;h3 id=&quot;hallasan&quot;&gt;한라산 국립공원&lt;/h3&gt;
&lt;h3&gt;성산 일출봉&lt;/h3&gt;
&lt;h3&gt;군산 오름&lt;/h3&gt;</code></pre>
<pre><code class="language-css">h1 {
  font-size: 24px;
}</code></pre>
</li>
<li>h1 태그의 글자 크기를 24px로 설정<pre><code class="language-css">#hallasan {
color: #f56513;
}</code></pre>
</li>
<li>&#39;hallasan&#39;이라는 id에 글자색을 적용<pre><code class="language-css">.place {
font-size: 16px;
font-weight: 400;
}</code></pre>
</li>
<li>&#39;place&#39;라는 클래스에 글자 크기 및 굵기를 적용</li>
</ul>
<h4 id="색상">색상</h4>
<pre><code class="language-css">#ffff00
rgb(255, 255, 0)
rgba(255, 255, 0, 0.5)</code></pre>
<ol>
<li>색상 코드</li>
<li>RGB</li>
<li>RGBA: 마지막 인자는 투명도</li>
</ol>
<h4 id="크기">크기</h4>
<h5 id="픽셀px">픽셀(px)</h5>
<ul>
<li>절대적인 단위</li>
</ul>
<h5 id="퍼센트">퍼센트(%)</h5>
<ul>
<li>상대적인 단위<pre><code class="language-html">&lt;div id=&quot;parent&quot;&gt;
저는 높이가 320px입니다.
&lt;div id=&quot;child&quot;&gt;
  저는 높이가 160px이에요!
&lt;/div&gt;
&lt;/div&gt;</code></pre>
<pre><code class="language-css">#parent {
background-color: #A655ED;
height: 320px;
}
</code></pre>
</li>
</ul>
<p>#child {
  background-color: #6942D6;
  height: 50%;
}</p>
<pre><code>- 부모 태그의 크기에 상대적으로 지정
- 여기서는 부모 태그 크기의 절반인 160px을 적용

##### em
- 부모 태그의 font-size 크기
```html
&lt;div id=&quot;parent&quot;&gt;
  저는 16px입니다.
  &lt;div id=&quot;child&quot;&gt;
    저는 64px이에요!
  &lt;/div&gt;
&lt;/div&gt;</code></pre><pre><code class="language-css">#parent {
  font-size: 16px;
}

#child {
  font-size: 4em;
}</code></pre>
<ul>
<li>4em = 16px * 4 = 64px</li>
</ul>
<h5 id="rem">rem</h5>
<ul>
<li>root의 em</li>
<li>최상위 태그인 <code>&lt;html&gt;</code> 태그의 font-size 크기<pre><code class="language-html">&lt;html&gt;
&lt;body&gt;
      저는 18px 입니다.
      &lt;div id=&quot;other&quot;&gt;
    저는 32px이에요!
      &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
<pre><code class="language-css">html {
font-size: 16px;
}
</code></pre>
</li>
</ul>
<p>body {
  font-size: 18px;
}</p>
<p>#other {
  font-size: 2rem;
}</p>
<pre><code>- 2rem = 16px * 2 = 32px
</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[[22-23 동계 모각코] 3회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Thu, 02 Feb 2023 06:55:34 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>3회차: 23/02/02 16:00 ~ 20:00
계획: HTML 기본 정리
목적: React 사용을 위함
방향: HTML의 기본 문법을 정리하고 간단한 웹페이지를 만들어보기</p>
<h2 id="결과">결과</h2>
<h3 id="기본-문법">기본 문법</h3>
<h4 id="태그tag">태그(Tag)</h4>
<ul>
<li>HTML에서 꺾쇠(&lt;&gt;)를 사용하는 문법</li>
<li>시작 태그<code>&lt;tag name&gt;</code>, 종료 태그<code>&lt;/tag name&gt;</code> 형태로 내용을 감쌈</li>
<li>e.g.<pre><code class="language-html">&lt;p&gt;
paragraph
&lt;/p&gt;</code></pre>
<pre><code class="language-html">&lt;img src=&quot;img address or directory&quot;&gt;</code></pre>
</li>
</ul>
<h4 id="속성">속성</h4>
<ul>
<li>시작 태그에 <code>속성 이름=&quot;속성 값&quot;</code> 형태로 사용</li>
<li>태그의 속성을 지정</li>
<li>e.g.<pre><code class="language-html">&lt;a href=&quot;https://naver.com&quot;&gt;네이버&lt;/a&gt;</code></pre>
</li>
</ul>
<h4 id="html-기본-형태">HTML 기본 형태</h4>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Document&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;</code></pre>
<ul>
<li>(<code>!</code>를 입력하고 enter 치면 위와 같은 기본 코드가 생성됨)</li>
<li><code>&lt;!DOCTYPE html&gt;</code>: document type</li>
<li><code>&lt;html&gt;</code>: html 태그</li>
<li><code>&lt;head&gt;</code>: head 태그, 페이지의 정보를 담음(웹페이지 상에는 그 내용이 거의 드러나지 않음)</li>
<li><code>&lt;body&gt;</code>: body 태그, 페이지의 내용이 들어감</li>
<li><code>meta charset=&quot;UTF-8</code>: 한글을 지원하는 UTF-8 인코딩을 사용하도록 설정</li>
</ul>
<h4 id="사이트-이름">사이트 이름</h4>
<pre><code class="language-html">&lt;head&gt;
  &lt;title&gt;Title&lt;/title&gt;
  ...
&lt;/head&gt;</code></pre>
<ul>
<li>head 안에 작성</li>
<li>head의 내용 중 표면에 드러나는 정보</li>
</ul>
<h4 id="제목">제목</h4>
<pre><code class="language-html">&lt;body&gt;
  &lt;h1&gt;1st_head&lt;/h1&gt;
  &lt;h2&gt;2nd_head&lt;/h2&gt;
  ...
&lt;/body&gt;</code></pre>
<ul>
<li>제목 내용을 작성</li>
<li><code>&lt;h1&gt;</code>부터 <code>&lt;h6&gt;</code>까지 글씨 크기 순으로 있음</li>
</ul>
<h4 id="단락paragraph">단락(Paragraph)</h4>
<pre><code class="language-html">&lt;body&gt;
  &lt;p&gt;
    paragraph
    ...&lt;br&gt;
    ...
  &lt;/p&gt;
  ...
&lt;/body&gt;</code></pre>
<ul>
<li>단락을 나타냄</li>
<li>코드에서의 줄 바꿈은 기본적으로 웹페이지에 반영되지 않음</li>
<li>줄 바꿈(Break Line)은 <code>&lt;br&gt;</code>로</li>
</ul>
<h4 id="링크">링크</h4>
<pre><code class="language-html">&lt;a href=&quot;https://naver.com&quot;&gt;네이버&lt;/a&gt;</code></pre>
<ul>
<li>이동할 주소 설정</li>
<li>태그 안의 내용은 하이퍼링크 처리 됨</li>
</ul>
<h4 id="이미지">이미지</h4>
<pre><code class="language-html">&lt;img src=&quot;img web address or directory&quot;&gt;</code></pre>
<ul>
<li>이미지의 웹 주소 혹은 디렉토리를 통해 설정</li>
</ul>
<h4 id="영역-나누기">영역 나누기</h4>
<pre><code class="language-html">&lt;div&gt;
  &lt;h1&gt;서시&lt;/h1&gt;
  &lt;h2&gt;시인 &lt;span&gt;윤동주&lt;/span&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;div&gt;
  &lt;p&gt;
    죽는 날까지 하늘을 우러러&lt;br&gt;
    한 점 부끄럼이 없기를,&lt;br&gt;
    잎새에 이는 바람에도&lt;br&gt;
    나는 괴로워했다.&lt;br&gt;
    별을 노래하는 마음으로&lt;br&gt;
    모든 죽어가는 것을 사랑해야지&lt;br&gt;
    그리고 나한테 주어진 길을&lt;br&gt;
    걸어가야겠다.
  &lt;/p&gt;
  &lt;p&gt;
    오늘 밤에도 별이 바람에 스치운다.
  &lt;/p&gt;</code></pre>
<ul>
<li>기본적으로 <code>&lt;div&gt;</code> 태그 사용</li>
<li>부분적으로 텍스트 일부를 감쌀 때는 <code>&lt;span&gt;</code> 태그 사용</li>
<li>영역을 나눠놓으면 CSS로 스타일링 할 때 용이</li>
</ul>
<h3 id="newsletter-웹페이지-만들어보기">Newsletter 웹페이지 만들어보기</h3>
<h4 id="코드">코드</h4>
<ul>
<li><p>CSS를 HTML 파일과 같이 적용</p>
</li>
<li><p>다음 글에서 CSS에 대해 정리하고, 따로 CSS 파일을 만든 웹페이지를 만들어볼 예정</p>
<pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
  &lt;title&gt;Weekly News&lt;/title&gt;
  &lt;meta charset=&quot;utf-8&quot;&gt;
  &lt;meta name=&quot;description&quot; content=&quot;금요일에 만나는 뉴스&quot;&gt;
  &lt;meta property=&quot;og:title&quot; content=&quot;Weekly News&quot;&gt;
  &lt;meta property=&quot;og:url&quot; content=&quot;https://weekly-newsletter.netlify.app/&quot;&gt;
  &lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&gt;
  &lt;meta property=&quot;og:image&quot; content=&quot;&quot;&gt;
  &lt;meta property=&quot;og:description&quot; content=&quot;유닉스 명령어, 추천 시스템, 그리고 HTML 코드 꿀팁들을 공유합니다.&quot;&gt;
  &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.googleapis.com&quot;&gt;
  &lt;link rel=&quot;preconnect&quot; href=&quot;https://fonts.gstatic.com&quot; crossorigin&gt;
  &lt;link href=&quot;https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;700&amp;family=Poppins:wght@400;600&amp;display=swap&quot; rel=&quot;stylesheet&quot;&gt;
  &lt;!-- Google tag (gtag.js) --&gt;
  &lt;script async src=&quot;https://www.googletagmanager.com/gtag/js?id=G-HQ9HBSCZ3H&quot;&gt;&lt;/script&gt;
  &lt;script&gt;
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag(&#39;js&#39;, new Date());

    gtag(&#39;config&#39;, &#39;G-HQ9HBSCZ3H&#39;);
  &lt;/script&gt;
&lt;/head&gt;
&lt;body style=&quot;color: #737373; font-family: &#39;Poppins&#39;, &#39;Noto Sans KR&#39;, sans-serif; margin: 0&quot;&gt;
  &lt;div style=&quot;background-color: #7542e0; text-align: center; padding: 20px&quot;&gt;
    &lt;h1 style=&quot;color: #ffffff; font-weight: 300&quot;&gt;Weekly &lt;span style=&quot;font-weight: 700&quot;&gt;News&lt;/span&gt;&lt;/h1&gt;
    &lt;p style=&quot;color: #c1b7ff&quot;&gt;금요일에 만나는 뉴스&lt;/p&gt;      
  &lt;/div&gt;
  &lt;div style=&quot;padding: 40px 20px&quot;&gt;
    &lt;div style=&quot;width: 560px; margin: 0 auto&quot;&gt;
      &lt;img src=&quot;thumbnail-unix.png&quot; style=&quot;width: 100%&quot;&gt;
      &lt;h2 style=&quot;color: #2e2e2e; font-size: 20px&quot;&gt;생산성을 높여줄 유닉스 커멘드 꿀팁&lt;/h2&gt;
      &lt;p&gt;
        생각만 하면 모든 게 이루어진다! 꿈 같은 이야기죠? 하지만 
        유닉스 커멘드를 사용하면 더 이상 꿈이 아니랍니다. 마우스 
        대신에 유닉스 명령어들을 사용하면 복잡한 일도 한 번에 
        뚝딱하거든요.
      &lt;/p&gt;
      &lt;p&gt;
        유닉스 커멘드를 사용할 때 알아두면 좋은, 작업 효율성을 
        UP!UP! 시켜주는 꿀팁 몇 가지를 준비해봤으니까, 한 번 
        살펴보세요!
      &lt;/p&gt;
      &lt;a href=&quot;https://naver.com&quot;&gt;자세히 보기&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;background-color: #fbfbff; padding: 40px 20px&quot;&gt;
    &lt;div style=&quot;width: 560px; margin: 0 auto&quot;&gt;
      &lt;img src=&quot;thumbnail-machine-learning.png&quot; style=&quot;width: 100%&quot;&gt;
      &lt;h2 style=&quot;color: #2e2e2e; font-size: 20px&quot;&gt;머신 러닝을 통한 추천 시스템 (내용 기반, 협업 필터링)&lt;/h2&gt;
      &lt;p&gt;
        넷플릭스나 애플 뮤직은 어떻게 영화나 음악을 추천해주는 걸까요? 일단 추천 
        시스템이란 유저에게 유저가 좋아하거나 구매할 만한 상품을 추천해 주는 
        프로그램을 의미합니다.
      &lt;/p&gt;
      &lt;p&gt;
        내가 평소에 쓰는 서비스들은 이미 추천 서비스를 사용하고 있을지도 모릅니다.
        (놀랍죠?) 유저 별로 아마존이나 쿠팡에서 물건들을, 넷플릭스에서 
        영화들을, 애플 뮤직에서 노래를 보여주는 것. 모두 추천 시스템을 사용해서 첫 
        화면에 보여주기 때문이죠.
      &lt;/p&gt;
      &lt;a href=&quot;https://naver.com&quot;&gt;자세히 보기&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;padding: 40px 20px&quot;&gt;
    &lt;div style=&quot;width: 560px; margin: 0 auto&quot;&gt;
      &lt;img src=&quot;thumbnail-emmet.png&quot; style=&quot;width: 100%&quot;&gt;
      &lt;h2 style=&quot;color: #2e2e2e; font-size: 20px&quot;&gt;Tips &amp; Tricks: HTML 코드 편하게 입력하는 법&lt;/h2&gt;
      &lt;p&gt;
        HTML 파일을 작성하려면 DOCTYPE, &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt; ... 적어야 할 것이 참 
        많습니다. 이럴 때 유용하게 쓸 수 있는 기능이 있는데요. VS Code에서는 
        !(느낌표)를 입력하고 Tab 키나 Enter 키를 누르면 HTML 코드를 한번에 입력할 
        수 있답니다!
      &lt;/p&gt;
      &lt;p&gt;
        이건 Emmet이라고 부르는 문법의 일부인데요. Emmet은 개미라는 
        뜻이랍니다. 개미는 자기 몸집의 50배나 넘는 물건을 옮길 수 있다는데요. 
        개미처럼 Emmet의 문법도 짧은 단어만 입력하면 긴 HTML 코드를 뚝딱 만들어 낼 
        수 있으니까 한 번 살펴보시는 것도 좋을 거 같네요.
      &lt;/p&gt;
      &lt;a href=&quot;https://naver.com&quot;&gt;자세히 보기&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;background-color: #fbfbff; text-align: center; padding: 40px 20px&quot;&gt;
    &lt;div style=&quot;width: 560px; margin: 0 auto&quot;&gt;
      &lt;h2 style=&quot;color: #2e2e2e; font-size: 20px&quot;&gt;퀴즈&lt;/h2&gt;
      &lt;p style=&quot;background-color: #f6f1ff; color: #7844e8; padding: 16px; margin: 32px&quot;&gt;
        머신 러닝에서 유저에게 유저가 좋아하거나&lt;br&gt;
        구매할만할 상품을 추천해 주는 프로그램을&lt;br&gt;
        □□ □□□(이)라고 부른다.
      &lt;/p&gt;
      &lt;p&gt;
        빈 칸에 들어갈 다섯 글자를 답장으로 보내주세요.&lt;br&gt;
        선착순 200분께 굿즈를 보내드려요.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div style=&quot;background-color:#46415a; color: #ffffff; text-align: center; padding: 40px 20px&quot;&gt;
    &lt;p&gt;Weekly &lt;span style=&quot;font-weight: 700&quot;&gt;News&lt;/span&gt;&lt;/p&gt;
    &lt;p&gt;Weekly News를 아직 구독하지 않으셨다면? &lt;a href=&quot;subscribe.html&quot; style=&quot;color: #ffffff&quot;&gt;구독 신청하기&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;수신 거부 Unsubscribe&lt;/p&gt;
  &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</code></pre>
</li>
</ul>
<h4 id="결과-1">결과</h4>
<p><a href="https://weekly-newsletter.netlify.app/" title="Weekly Newsletter">Weekly Newsletter</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[22-23 동계 모각코] 2회차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-2%ED%9A%8C%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Mon, 30 Jan 2023 06:56:44 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>2회차: 23/01/30 16:00 ~ 20:00
계획: Javascript 기본 문법 정리 (2)
목적: React 사용을 위함
방향: 기존의 프로그래밍 언어의 개념(e.g. 변수, 함수, 조건문, 반복문 등)이 Javascript에서는 어떻게 사용되는지 코드로 간단하게 확인</p>
<h2 id="결과">결과</h2>
<h4 id="객체">객체</h4>
<pre><code class="language-javascript">let ironman = {         // Property(속성)
  name: &#39;Tony&#39;,         // key - value
  age: 35,
  &#39;born year&#39;: 1988,
  isMan: true,
  movie: {              // nested
    title: &#39;Avengers&#39;,
    isHero: true
  }
}
console.log(ironman);
console.log(typeof ironman);
console.log(ironman.name);
console.log(ironman[&#39;born year&#39;]);
console.log(ironman.movie.title);
console.log(ironman.machine);       // undefined
ironman.name = &#39;Stark&#39;;             // property 변경
ironman.weapon = &#39;missile&#39;;         // property 추가
delete ironman.isMan;               // property 삭제
console.log(&#39;name&#39; in ironman);     // key 값 존재 확인</code></pre>
<h4 id="메소드">메소드</h4>
<pre><code class="language-javascript">/**
 * 메소드
 */
let greetings = {
  sayHello: function(name) {
    console.log(`Hello! ${name}!`);
  },
  sayBye: function() {
    console.log(&#39;Bye!&#39;);
  }
}
greetings.sayHello(&#39;Mark&#39;);
greetings[&#39;sayHello&#39;](&#39;Mark&#39;);
let triangle = {
  width: 15,
  height: 40,
  getArea: function() {
    return triangle.width * triangle.height / 2;
  }
}</code></pre>
<h4 id="for-in">FOR IN</h4>
<pre><code class="language-javascript">for (let key in ironman) {
  console.log(key);
}
for (let key in triangle) {
  console.log(key);
}</code></pre>
<ul>
<li>key에 접근</li>
<li>key값이 int일 때는 오름차순으로 접근</li>
</ul>
<h4 id="date">DATE</h4>
<pre><code class="language-javascript">let myDate = new Date();
console.log(myDate);
console.log(new Date());
console.log(new Date(1000));                    // millisec
console.log(new Date(&#39;2017-02-10&#39;));
console.log(new Date(&#39;2017-02-10T19:11:14&#39;));
console.log(new Date(2018, 4));                 // year, month까지 필수
console.log(new Date(2018, 4, 18, 19, 11, 16)); // 4 -&gt; May
console.log(myDate.getTime());
myDate = new Date(2018, 3, 24, 19, 10, 11);
console.log(myDate.getFullYear());
console.log(myDate.getMonth());             // 0 ~ 11
console.log(myDate.getDate());
console.log(myDate.getDay());               // 0 ~ 6
console.log(myDate.getHours());
console.log(myDate.getMinutes());
console.log(myDate.getSeconds());
myDate.setFullYear(2002);
myDate.setMonth(6);
myDate.setDate(20);
myDate.setHours(11);
myDate.setMinutes(20);
myDate.setSeconds(30);
// 사용자 브라우저에 설정된 국가의 표기에 맞춘 날짜와 시간
myDate = new Date();
console.log(myDate.toLocaleDateString());
console.log(myDate.toLocaleTimeString());
console.log(myDate.toLocaleString());
// 현재 시간 (getTime)
console.log(Date.now());
// 연산 가능
console.log(typeof myDate);
console.log(String(myDate));
console.log(Number(myDate));
console.log(new Date(2017, 4, 19) - new Date(2017,4, 18));  // millisec</code></pre>
<ul>
<li>time stamp: 1970.01.01 00:00:00으로부터 얼마나 지났는지(milisecond)</li>
</ul>
<h4 id="배열">배열</h4>
<pre><code class="language-javascript">let arr = [1, 2, 3, 4];
console.log(arr[0]);
console.log(typeof(arr));   // type : object
console.log(arr.length);
console.log(arr[&#39;length&#39;]);
console.log(arr[4]);    // Undefined
arr[4] = 5;   // 추가 -&gt; 중간을 비우고 추가할 수도 있음
console.log(arr[4]);
arr[4] = 6;   // 수정
console.log(arr[4]);
delete arr[4];    // 삭제 -&gt; 완벽한 삭제는 아님 -&gt; empty 존재
console.log(arr);
arr = [[1, 2], [3, 4]];   // 2차원 배열
console.log(arr);</code></pre>
<h4 id="splice">SPLICE</h4>
<pre><code class="language-javascript">arr.splice(4);
console.log(arr);
arr.splice(1);
console.log(arr);
arr = [1, 2, 3, 4];
arr.splice(1, 2);   // 1번 인덱스부터 2개 삭제
console.log(arr);
arr = [1, 2, 3, 4];
arr.splice(1, 2, 5);    // 1번 인덱스부터 2개 삭제하고 5로 대체
console.log(arr);
arr = [1, 2, 3, 4];
arr.splice(1, 0, 5);    // 원하는 위치에 추가
console.log(arr);
arr = [1, 2, 3, 4];   // 홀수인 것만 삭제
for (let i = 0; i &lt; arr.length; i++) {
  if (arr[i] % 2 === 1) {
    arr.splice(i, 1);
    i--;
  }
}
console.log(arr);</code></pre>
<ul>
<li>splice(start, count, item) 형태</li>
<li>완벽한 삭제</li>
</ul>
<h4 id="shift">SHIFT</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
arr.shift();
console.log(arr);</code></pre>
<ul>
<li>배열의 첫 요소를 삭제</li>
</ul>
<h4 id="pop">POP</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
arr.pop();
console.log(arr);</code></pre>
<ul>
<li>배열의 마지막 요소를 삭제</li>
</ul>
<h4 id="unshift">UNSHIFT</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
arr.unshift(0);
console.log(arr);</code></pre>
<ul>
<li>첫 요소로 값을 추가</li>
</ul>
<h4 id="push">PUSH</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
arr.push(5);
console.log(arr);</code></pre>
<ul>
<li>마지막 요소로 값을 추가</li>
</ul>
<h4 id="indexof-lastindexof">INDEXOF, LASTINDEXOF</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4, 3];
console.log(arr.indexOf(3));
console.log(arr.lastIndexOf(3));
console.log(arr.indexOf(5));    // 없으면 -1</code></pre>
<ul>
<li>index 리턴</li>
</ul>
<h4 id="includes">INCLUDES</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
console.log(arr.includes(3));
console.log(arr.includes(0));</code></pre>
<ul>
<li>특정 값이 있는지 확인</li>
<li>true or false 리턴</li>
</ul>
<h4 id="reverse">REVERSE</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
arr.reverse();
console.log(arr);</code></pre>
<ul>
<li>배열 뒤집기</li>
</ul>
<h4 id="for-of">FOR OF</h4>
<pre><code class="language-javascript">arr = [1, 2, 3, 4];
for (let item of arr) {
  console.log(item);
}
for (let s of &quot;abcd&quot;) {   // string에도 적용 가능
  console.log(s);
}</code></pre>
<ul>
<li>요소 자체에 접근(for in 과의 차이)</li>
<li>파이썬에서의 for item in lst 느낌</li>
</ul>
<h4 id="지수-및-진수-표기법">지수 및 진수 표기법</h4>
<pre><code class="language-javascript">console.log(25e5);    // 25 * 10^5
console.log(-6.1e8);    // -6.1 * 10^8
console.log(16e-5);   // 16 * e^(-5)
console.log(0xFF);
console.log(0o377);
console.log(0b11111111);    // 255</code></pre>
<ul>
<li>aen 형태 -&gt; a * 10^n</li>
<li>0x...(16), 0o...(8), 0b...(2)</li>
</ul>
<h4 id="tofixedn">toFixed(n)</h4>
<pre><code class="language-javascript">console.log(0.3591.toFixed(3));   // 0.359
console.log(0.3591.toFixed(5));   // 0.35910
console.log(typeof(0.3591.toFixed(3)));   // string 형태로
console.log(typeof(Number(0.3591.toFixed(3))));   // 형 변환 필요
console.log(typeof(+0.3591.toFixed(3)));   // +로 대체 가능</code></pre>
<ul>
<li>소수점 아래 n자리수까지 표기</li>
<li>숫자도 객체로 취급</li>
<li>초과하면 0으로 채움</li>
<li>주의: 리턴값은 string</li>
</ul>
<h4 id="tostringn">toString(n)</h4>
<pre><code class="language-javascript">let n = 255;
console.log(n.toString(2));
console.log(typeof(n));
console.log(255..toString(2));
console.log((255).toString(2));</code></pre>
<ul>
<li>이름에서 유추할 수 있듯이 문자열로 변환하는 것 외에</li>
<li>십진수를 n진법 수의 string 형을 리턴하기도 함</li>
</ul>
<h4 id="math">MATH</h4>
<pre><code class="language-javascript">console.log(Math.abs(-10));   // 10
console.log(Math.max(1, 2, 3));   // 3
console.log(Math.min(1, 2, 3));   // 1
console.log(Math.pow(2, 3));    // 2 ^ 3 = 8
console.log(Math.sqrt(25));   // 제곱 -&gt; 5
console.log(Math.round(2.5));   // 반올림 -&gt; 3
console.log(Math.floor(2.9));   // 버림 -&gt; 2
console.log(Math.ceil(2.1));    // 올림 -&gt; 3
console.log(Math.random());   // 0 ~ 1 중 난수</code></pre>
<h4 id="문자열-관련-메소드">문자열 관련 메소드</h4>
<pre><code class="language-javascript">let s = &quot; abcDEfabc  &quot;;
console.log(s.length);
console.log(s[3]);
console.log(s.charAt(3));
console.log(s.indexOf(&#39;a&#39;));
console.log(s.indexOf(&#39;g&#39;));
console.log(s.lastIndexOf(&#39;a&#39;));
console.log(s.indexOf(&quot;abc&quot;));    // 1
console.log(s.toLowerCase());
console.log(s.toUpperCase());
console.log(s.trim());
console.log(s.slice(1));
console.log(s.slice(2, 4));</code></pre>
<ul>
<li>length</li>
<li>charAt: index로 접근</li>
<li>indexOf, lastIndexOf: 없으면 -1</li>
<li>toUpperCase, toLowerCase</li>
<li>trim: 공백 제거 (파이썬의 strip 느낌)</li>
<li>slice(start, end) -&gt; slicing</li>
</ul>
<h4 id="기본형primitive-type">기본형(Primitive Type)</h4>
<pre><code class="language-javascript">let x = 1;
let y = x;
console.log(x, y);
y = 2;
console.log(x, y);</code></pre>
<ul>
<li>변수에 값을 저장</li>
<li>Number, String, Boolean</li>
</ul>
<h4 id="참조형reference-type">참조형(Reference Type)</h4>
<pre><code class="language-javascript">let car_1 = {
  name : &#39;abc&#39;
}
let car_2 = car_1
console.log(car_1, car_2);
car_2.engine = &#39;def&#39;;
console.log(car_1, car_2);</code></pre>
<ul>
<li>변수에 주소를 저장</li>
<li>Object, Array</li>
</ul>
<h4 id="reference-type-copy">Reference Type Copy</h4>
<pre><code class="language-javascript">let arr1 = [1, 2, 3];
let arr2 = arr1.slice();    // copy
arr2.push(4);
console.log(arr1, arr2);
let obj1 = {
  name : &quot;Jake&quot;
};
let obj2 = Object.assign({}, obj1);   // copy
obj2.age = 25;
console.log(obj1, obj2);</code></pre>
<ul>
<li>Object.assign 이용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[[22-23 동계 모각코] 1회차 목표 및 결과
 ]]></title>
            <link>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/22-23-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-1%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Sat, 28 Jan 2023 05:13:07 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>1회차: 23/01/28 14:00 ~ 18:00
계획: Javascript 기본 문법 정리 (1)
목적: React 사용을 위함
방향: 기존의 프로그래밍 언어의 개념(e.g. 변수, 함수, 조건문, 반복문 등)이 Javascript에서는 어떻게 사용되는지 코드로 간단하게 확인</p>
<h2 id="결과">결과</h2>
<h3 id="javascript-기본-문법-정리">Javascript 기본 문법 정리</h3>
<h4 id="출력">출력</h4>
<pre><code class="language-javascript">console.log(&quot;Hello&quot;);</code></pre>
<h4 id="변수-선언">변수 선언</h4>
<pre><code class="language-javascript">let a;
let b = 1;
console.log(a);
console.log(b);</code></pre>
<ul>
<li>기본적으로는 let이지만 실전에서는 const를 변수로 많이 사용</li>
</ul>
<h4 id="함수-선언">함수 선언</h4>
<pre><code class="language-javascript">function add(a, b) {
  return a + b;
}
console.log(add(1, 2));</code></pre>
<h4 id="비교-연산">비교 연산</h4>
<pre><code class="language-javascript">console.log(3 === 3);
console.log(3 !== 3);
console.log(&#39;abcd&#39; === &#39;abcd&#39;);</code></pre>
<h4 id="and-or-not">AND, OR, NOT</h4>
<pre><code class="language-javascript">console.log(true &amp;&amp; false);
console.log(false || true);
console.log(!true);</code></pre>
<h4 id="typeof-연산자">typeof 연산자</h4>
<pre><code class="language-javascript">console.log(typeof 123);
console.log(typeof 1.23);
console.log(typeof &quot;abc&quot;);
console.log(typeof true);
console.log(typeof add);
console.log(typeof 1 - 2);
console.log(typeof (1 - 2));</code></pre>
<ul>
<li>우선순위가 높은 연산자</li>
</ul>
<h4 id="형-변환">형 변환</h4>
<pre><code class="language-javascript">console.log(Number(&#39;10&#39;) + Number(&#39;2&#39;));
console.log(String(10) + String(2));
console.log(Number(true));
console.log(Boolean(&quot;abc&quot;));
console.log(Boolean(3));
console.log(Boolean(0));
console.log(Boolean(&#39;&#39;));
console.log(Boolean(NaN));              // 0, &#39;&#39;, NaN -&gt; falsy
console.log(Boolean(typeof false));</code></pre>
<h4 id="산술연산자에-대한-형-변환">산술연산자에 대한 형 변환</h4>
<pre><code class="language-javascript">console.log(4 + &#39;2&#39;);      // + -&gt; 문자열 연결을 우선시
console.log(4 + true);
console.log(4 - true);
console.log(4 * false);
console.log(4 / &#39;2&#39;);
console.log(&#39;4&#39; ** true);
console.log(4 % &#39;two&#39;);    // NaN과의 연산 -&gt; NaN</code></pre>
<h4 id="관계연산자에-대한-형-변환">관계연산자에 대한 형 변환</h4>
<pre><code class="language-javascript">console.log(2 &lt; &#39;3&#39;);
console.log(2 &gt; true);
console.log(&#39;2&#39; &lt;= false);
console.log(&#39;two&#39; &gt;= 1);    // NaN -&gt; 비교가 불가능할 때 false</code></pre>
<h4 id="비교연산자에-대한-형-변환">비교연산자에 대한 형 변환</h4>
<pre><code class="language-javascript">console.log(1 === &#39;1&#39;);   // === -&gt; 일치 -&gt; type까지 고려
console.log(1 === true);
console.log(1 == &#39;1&#39;);    // == -&gt; 동등 -&gt; type 달라도 형 변환 통해 같다면
console.log(1 == true);</code></pre>
<h4 id="템플릿-문자열">템플릿 문자열</h4>
<pre><code class="language-javascript">let year = 2018;
let month = 3;
let day = 11;
console.log(`생년월일은 ${year}년 ${month}월 ${day}일입니다.`)
let num = 3;
function getTwice(num) {
  return 2 * num;
}
console.log(`${num}의 두 배는 ${getTwice(num)}입니다`);</code></pre>
<ul>
<li>``, ${} 활용</li>
</ul>
<h4 id="null--undefined">NULL &amp; UNDEFINED</h4>
<pre><code class="language-javascript">let c;
console.log(c);                   // undefined -&gt; 처음부터 없음
c = null;
console.log(c);                   // null -&gt; 의도적으로 없음
console.log(null == undefined);
console.log(null === undefined);
function square(x) {
  console.log(` 결과는 ${x * x}`);
}
console.log(square(2));           // 함수에 return 문이 없을 때도 undefined</code></pre>
<h4 id="optional-parameter">Optional Parameter</h4>
<pre><code class="language-javascript">function introduce(name, age, nationality=&#39;한국&#39;) {
  console.log(`제 이름은 ${name}입니다.`);
  console.log(`나이는 ${age}살이고,`);
  console.log(`국적은 ${nationality}입니다.`);
}
introduce(&quot;Mark&quot;, 24, &quot;미국&quot;);
introduce(&quot;철수&quot;, 25);</code></pre>
<ul>
<li>함수의 parameter 중 맨 뒤에 선언</li>
</ul>
<h4 id="상수">상수</h4>
<pre><code class="language-javascript">const PI = 3.14;
// const PI;      error
// PI = 3;        error
const MY_NUMBER = 3;
const f = {
  name : &quot;Jake&quot;
};
f.age = 25;   // 이렇게는 변할 수 있음
console.log(f);
let g = [1, 2, 3];
const h = g;
g.splice(2, 1, 4);    // 이렇게도 변할 수 있음
console.log(h);</code></pre>
<ul>
<li>상수의 변수명은 대문자로 표기</li>
<li>실전에서는 const로 변수를 (소문자로) 쓰는 것을 권장</li>
</ul>
<h4 id="if">IF</h4>
<pre><code class="language-javascript">let t = 0;
if (t &lt;= 0) {
  console.log(&quot;물이 업니다.&quot;);
} else if (t &gt; 100) {
  console.log(&quot;물이 끓습니다.&quot;);
} else {
  console.log(&quot;물이 얼지도 끓지도 없습니다.&quot;);
}</code></pre>
<ul>
<li>조건 비교는 === 이용</li>
</ul>
<h4 id="switch">SWITCH</h4>
<pre><code class="language-javascript">let choice = 1;
switch (choice) {
  case 1:
    console.log(&quot;토끼를 선택한 당신, ...&quot;);
    break;
  case 2:
    console.log(&quot;고양이를 선택한 당신, ...&quot;);
    break;
  case 3:
    console.log(&quot;코알라를 선택한 당신, ...&quot;);
    break;
  case 4:
    console.log(&quot;강아지를 선택한 당신, ...&quot;);
    break;
  default:    // else 느낌
    console.log(&quot;1~4의 숫자를 선택해주세요.&quot;);
}</code></pre>
<h4 id="for">FOR</h4>
<pre><code class="language-javascript">for (let i = 0; i &lt; 5; i++) {
  console.log(`${i} abc`);
}</code></pre>
<h4 id="while">WHILE</h4>
<pre><code class="language-javascript">let i = 0;
while (i &lt; 5) {
  console.log(`${i} abc`);
  i++;
}</code></pre>
<h4 id="break">BREAK</h4>
<pre><code class="language-javascript">i = 1;
while (i &lt; 5) {
  if (i === 3) {
    break;
  }
  console.log(i);
  i++;
}</code></pre>
<ul>
<li>반복문(for, while)을 끝냄</li>
</ul>
<h4 id="continue">CONTINUE</h4>
<pre><code class="language-javascript">i = 1;
while (i &lt; 5) {
  if (i === 2) {
    i++;
    continue;
    // console.log(i)    unreachable
  }
  console.log(i);
  i++;
}</code></pre>
<ul>
<li>반복문에서 특정 부분을 건너 뜀</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022 동계 모각코 계획]]></title>
            <link>https://velog.io/@vvon_joon/2022-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EA%B3%84%ED%9A%8D</link>
            <guid>https://velog.io/@vvon_joon/2022-%EB%8F%99%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-%EA%B3%84%ED%9A%8D</guid>
            <pubDate>Fri, 30 Dec 2022 14:11:23 GMT</pubDate>
            <description><![CDATA[<h2 id="팀명--검머외">팀명 : 검머외</h2>
<h3 id="구성원-">구성원 :</h3>
<ol>
<li><a href="https://velog.io/@pro_sapziller">김현수</a></li>
<li><a href="https://velog.io/@ccocco0609">박광욱</a></li>
<li><a href="https://parkjonggyeong.tistory.com">박종경</a></li>
<li><a href="https://velog.io/@vvon_joon">최원준</a></li>
</ol>
<h3 id="목표">목표</h3>
<p>Frontend 정복
HTML, CSS, JavaScript 언어를 공부해서 React까지
남는 시간에는 코테 연습</p>
<h3 id="일정">일정</h3>
<blockquote>
</blockquote>
<p>1회차: 23.01.21 13:00 ~ 16:00
목표 : HTML, CSS 공부</p>
<blockquote>
</blockquote>
<p>2회차: 23.01.28 13:00 ~ 16:00
목표 : JavaScript 공부 (1)</p>
<blockquote>
</blockquote>
<p>3회차: 23.01.31 13:00 ~ 16:00
목표 : JavaScript 공부 (2)</p>
<blockquote>
</blockquote>
<p>4회차 : 23.02.03 13:00 ~ 16:00
목표 : React 공부 (1)</p>
<blockquote>
</blockquote>
<p>5회차: 23.02.07 13:00 ~ 16:00
목표 : React 공부 (2)</p>
<blockquote>
</blockquote>
<p>6회차: 23.02.10 13:00 ~ 16:00
목표 : 전체 마무리 및 프로젝트 결과물 소개</p>
<p>계획은 진행 상황에 따라 변경될 수 있습니다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2022 하계 모각코] 6주차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-6%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Thu, 04 Aug 2022 07:56:18 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>6회차: 8/4 14:00 ~ 17:00
계획: 딥러닝 교재 Chapter6 학습, (시간이 남을 시 파이썬 복습)</p>
<h2 id="결과">결과</h2>
<h2 id="6-1-군집-알고리즘">6-1. 군집 알고리즘</h2>
<h3 id="개념정리">개념정리</h3>
<h4 id="비지도-학습">비지도 학습</h4>
<ul>
<li>머신러닝의 한 종류로 훈련 데이터에 타깃이 없음</li>
<li>타깃이 없으므로 외부 도움 없이 스스로 유용한 무언가를 학습 필요</li>
<li>e.g. 군집, 차원 축소</li>
</ul>
<h4 id="히스토그램">히스토그램</h4>
<ul>
<li>구간별로 값이 발생한 빈도를 그래프로 표시</li>
<li>x축: 값의 구간(계급), y축: 발생 빈도(도수)</li>
</ul>
<h4 id="군집">군집</h4>
<ul>
<li>비슷한 샘플끼리 하나의 그룹으로 모으는 대표적인 비지도 학습 작업</li>
<li>클러스터: 군집 알고리즘으로 모은 샘플</li>
</ul>
<h3 id="실습">실습</h3>
<p><a href="https://bit.ly/3vzWDW6" title="Cluster Algorithm">Practice 6-1</a></p>
<h2 id="6-2-k-평균">6-2. k-평균</h2>
<h3 id="개념정리-1">개념정리</h3>
<h4 id="k-평균">k-평균</h4>
<ul>
<li>랜덤하게 클러스터 중심을 정하고 클러스터를 만든 후 클러스터 중심을 이동해 다시 클러스터를 만드는 식으로 반복해서 최적의 클러스터를 구성하는 알고리즘</li>
</ul>
<h4 id="클러스터-중심">클러스터 중심</h4>
<ul>
<li>k-평균 알고리즘이 만든 클러스터에 속한 샘플의 특성 평균값</li>
<li>센트로이드(centroid)</li>
<li>가장 가까운 클러스터 중심을 샘플의 또 다른 특성으로 사용하거나 새로운 샘플에 대한 예측으로 활용 가능</li>
</ul>
<h4 id="엘보우-방법">엘보우 방법</h4>
<ul>
<li>최적의 클러스터 개수를 정하는 방법</li>
<li>이너셔: 클러스터 중심과 샘플 사이 거리의 제곱 합</li>
<li>클러스터 개수에 따라 이너셔 감소가 꺾이는 지점이 적절한 클러스터 개수 k가 될 수 있음</li>
</ul>
<h3 id="패키지-및-함수">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지">skiti-learn 패키지</h4>
<h4 id="kmeans">KMeans</h4>
<ul>
<li>k-평균 알고리즘 클래스</li>
<li>n_cluster: 클러스터 개수를 지정, 기본값은 8</li>
<li>n_init: 이너셔를 기준으로 가장 좋은 결과를 선택하기 위한 반복 횟수, 기본값은 10</li>
<li>max_iter: k-평균 알고리즘의 한 번 실행에서 최적의 센트로이드를 찾기 위해 반복할 수 있는 최대 횟수, 기본값은 200</li>
</ul>
<h3 id="실습-1">실습</h3>
<p><a href="https://bit.ly/3oQWES0" title="k-Means">Practice 6-2</a></p>
<h2 id="6-3-주성분-분석">6-3. 주성분 분석</h2>
<h3 id="개념정리-2">개념정리</h3>
<h4 id="차원-축소">차원 축소</h4>
<ul>
<li>원본 데이터의 특성을 적은 수의 새 특성으로 변환하는 비지도 학습의 한 종류</li>
<li>공간을 줄이고 시각화 하기 쉬움</li>
<li>알고리즘의 성능을 높일 수 있음</li>
</ul>
<h4 id="주성분-분석">주성분 분석</h4>
<ul>
<li>차원 축소 알고리즘의 하나로 데이터에서 가장 분산이 큰 방향(주성분)을 찾는 방법</li>
<li>원본 데이터를 주성분에 투영해 새로운 특성을 만들 수 있음</li>
<li>일반적으로 주성분은 원본 데이터에 있는 특성 개수보다 작음</li>
</ul>
<h4 id="설명된-분산">설명된 분산</h4>
<ul>
<li>주성분 분석에서 주성분이 얼마나 원본 데이터의 분산을 잘 나타내는지 기록한 것</li>
<li>사이킷런의 PCA 클래스는 주성분 개수나 설명된 분산의 비율을 지정해 주성분 분석을 수행</li>
</ul>
<h3 id="패키지-및-함수-1">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지-1">skiti-learn 패키지</h4>
<h4 id="pca">PCA</h4>
<ul>
<li>주성분 분석을 수행하는 클래스</li>
<li>n_components: 주성분의 개수를 저장, 기본값은 None으로 샘플 개수와 특성 개수 중에 작은 것의 값을 사용</li>
<li>random_state: 넘파이 난수 시드 값을 지정</li>
<li>components_: 훈련 세트에서 찾은 주성분이 저장됨</li>
<li>explained_variance_: 설명된 분산이 저장됨</li>
<li>explained_variance_ratio_: 설명된 분산의 비율이 저장됨</li>
<li>inverse_transform(): transform() 메서드로 차원을 축소시킨 데이터를 다시 원본 차원으로 복원</li>
</ul>
<h3 id="실습-2">실습</h3>
<p><a href="https://bit.ly/3bpaEiv" title="Principal Component Analysis(PCA)">Practice 6-3</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2022 하계 모각코] 5주차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-5%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Wed, 03 Aug 2022 05:01:11 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>5회차: 8/3 14:00 ~ 17:00
계획: 딥러닝 교재 Chapter5 학습, (시간이 남을 시 파이썬 복습)</p>
<h2 id="결과">결과</h2>
<h2 id="5-1-결정-트리">5-1. 결정 트리</h2>
<h3 id="개념정리">개념정리</h3>
<h4 id="결정-트리">결정 트리</h4>
<ul>
<li>&#39;예/아니오&#39;에 대한 질문을 이어나가면서 정답을 찾아 학습하는 알고리즘</li>
<li>비교적 예측 과정을 이해하기 쉽고 성능도 뛰어남</li>
</ul>
<h4 id="불순도">불순도</h4>
<ul>
<li>결정 트리가 최적의 질문을 찾기 위한 기준</li>
<li>사이킷런에는 지니 불순도와 엔트로피 불순도가 있음</li>
</ul>
<h4 id="정보-이득">정보 이득</h4>
<ul>
<li>부모 노드와 자식 노드의 불순도 차이</li>
<li>결정 트리 알고리즘은 정보 이득이 최대화되도록 학습</li>
</ul>
<h4 id="가지치기">가지치기</h4>
<ul>
<li>결정 트리가 제한 없이 성장해 훈련 세트에 과대적합되는 것을 막기 위해 결정 트리의 성장을 제한하는 방법</li>
</ul>
<h4 id="특성-중요도">특성 중요도</h4>
<ul>
<li>결정 트리에 사용된 특성이 불순도를 감소하는데 기여한 정도를 나타내는 값</li>
</ul>
<h3 id="패키지-및-함수">패키지 및 함수</h3>
<h4 id="pandas-패키지">pandas 패키지</h4>
<h4 id="info">info()</h4>
<ul>
<li>데이터프레임의 요약된 정보를 출력</li>
<li>인덱스와 컬러 타입을 출력하고 null이 아닌 값의 개수, 메모리 사용량을 제공</li>
<li>verbose 매개변수의 기본값 True를 False로 바꾸면 각 열에 대한 정보를 출력하지 않음</li>
</ul>
<h4 id="describe">describe()</h4>
<ul>
<li>데이터프레임 열의 통계 값을 제공</li>
<li>수치형일 경우 최소, 최대, 평균, 표준편차와 사분위값 등이 출력됨</li>
<li>문자열 같은 객체 타입의 열은 가장 자주 등장하는 값과 횟수 등이 출력됨</li>
<li>percentiles 매개변수에서 백분위수를 지정, 기본값은 [0.25, 0.5, 0.75]</li>
</ul>
<h4 id="scikit-learn-패키지">scikit-learn 패키지</h4>
<h4 id="decisiontreeclassifier">DecisionTreeClassifier</h4>
<ul>
<li>결정 트리 분류 클래스</li>
<li>criterion: 불순도를 지정, 기본값은 &#39;gini&#39;(지니 불순도), &#39;entropy&#39;(엔트로피 불순도) 사용 가능</li>
<li>splitter: 노드를 분할하는 전략을 선택, 기본값은 &#39;best&#39;로 정보 이득이 최대가 되도록 분할, &#39;random&#39;이면 임의로 노드를 분할</li>
<li>max_depth: 트리가 성장할 최대 깊이를 지정, 기본값은 None으로 리프 노드가 순수하거나 min_samples_split보다 샘플 개수가 적을 때까지 성장</li>
<li>min_samples_split: 노드를 나누기 위한 최소 샘플 개수, 기본값은 2</li>
<li>max_features: 최적의 분할을 위해 탐색할 특성의 개수를 지정, 기본값은 None으로 모든 특성을 사용</li>
</ul>
<h4 id="plot_tree">plot_tree()</h4>
<ul>
<li>결정 트리 모델을 시각화, 첫 매개변수로 결정 트리 모델 객체를 전달</li>
<li>max_depth: 나타낼 트리의 깊이를 지정, 기본값은 None으로 모든 노드를 출력</li>
<li>feature_names: 특성의 이름을 지정</li>
<li>filled: True로 지정하면 타깃값에 따라 노드 안에 색을 채움</li>
</ul>
<h3 id="실습">실습</h3>
<p><a href="https://bit.ly/3PZUono" title="Decision Tree">Practice 5-1</a></p>
<h2 id="5-2-교차-검증과-그리드-서치">5-2. 교차 검증과 그리드 서치</h2>
<h3 id="개념정리-1">개념정리</h3>
<h4 id="검증-세트">검증 세트</h4>
<ul>
<li>하이퍼파라미터 튜닝을 위해 모델을 평가할 때 테스트 세트를 사용하지 않기 위해 훈련 세트에서 다시 떼어 낸 데이터 세트</li>
</ul>
<h4 id="교차-검증">교차 검증</h4>
<ul>
<li>훈련 세트를 여러 폴드로 나눈 다음 한 폴드가 검증 세트의 역할을 하고 나머지 폴드에서는 모델을 훈련해서 모든 폴드에 대해 검증 점수를 얻어 평균하는 방법</li>
</ul>
<h4 id="그리드-서치">그리드 서치</h4>
<ul>
<li>하이퍼파라미터 탐색을 자동화해 주는 도구</li>
<li>탐색할 매개변수를 나열하면 교차 검증을 수행해 가장 좋은 점수의 매개변수 조합을 선택</li>
<li>마지막으로 매개변수 조합으로 최종 모델을 훈련</li>
</ul>
<h4 id="랜덤-서치">랜덤 서치</h4>
<ul>
<li>연속된 매개변수 값을 탐색할 때 유용</li>
<li>탐색할 값을 직접 나열하는 것이 아니고 탐색 값을 샘플링할 수 있는 확률 분포 객체를 전달</li>
<li>지정된 횟수만큼 샘플링해 교차 검증을 수행하므로 시스템 자원이 허락하는 만큼 탐색량을 조절 가능</li>
</ul>
<h3 id="패키지-및-함수-1">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지">skiti-learn 패키지</h4>
<h4 id="cross_validate">cross_validate()</h4>
<ul>
<li>교차 검증을 수행하는 함수</li>
<li>첫 매개변수에 교차 검증을 수행할 모델 객체를 전달</li>
<li>두 번째 매개변수에는 특성, 세 번째 매개변수에는 타깃 데이터를 전달</li>
<li>scoring 매개변수에 검증에 사용할 평가 지표를 지정 가능, 분류 모델은 정확도를 의미하는 &#39;accuracy&#39;, 회귀 모델은 결정계수를 의미하는 &#39;r2&#39;</li>
<li>cv 매개변수에 교차 검증 폴드 수나 스플리터 객체를 지정 가능, 기본값은 5, 회귀일 때는 KFold 클래스를 사용하고 분류일 때는 StratifiedKFold 클래스를 사용해 5-폴드 교차 검증을 수행</li>
<li>n_jobs: 교차 검증을 수행할 때 사용할 CPU 코어 수를 지정, 기본값은 1로 하나의 코어 사용, -1로 지정하면 시스템에 있는 모든 코어를 사용</li>
<li>return_train_score: Tru로 지정하면 훈련 세트의 점수도 반환, 기본값은 False</li>
</ul>
<h4 id="gridsearchcv">GridSearchCV</h4>
<ul>
<li>교차 검증으로 하이퍼파라미터 탐색을 수행</li>
<li>최상의 모델을 찾은 후 훈련 세트 전체를 사용해 최종 모델을 훈련</li>
<li>첫 번째 매개변수로 그리드 서치를 수행할 모델 객체를 전달</li>
<li>두 번째 매개변수에는 탐색할 모델의 매개변수와 값을 전달</li>
<li>나머지 매개변수는 cross_validate() 함수와 동일</li>
</ul>
<h4 id="randomizedsearchcv">RandomizedSearchCV</h4>
<ul>
<li>교차 검증으로 랜덤한 하이퍼파라미터 탐색을 수행, 최상의 모델을 찾은 후 훈련 세트 전체를 사용해 최종 모델을 훈련</li>
<li>첫 번째 매개변수로 그리드 서치를 수행할 모델 객체를 전달</li>
<li>두 번째 매개변수에는 탐색할 모델의 매개변수와 확률 분포 객체를 전달</li>
<li>나머지 매개변수는 cross_validate() 함수와 동일</li>
</ul>
<h3 id="실습-1">실습</h3>
<p><a href="https://bit.ly/3vAmvRN" title="Cross Validation and Grid Search">Practice 5-2</a></p>
<h2 id="5-3-트리의-앙상블">5-3. 트리의 앙상블</h2>
<h3 id="개념정리-2">개념정리</h3>
<h4 id="앙상블-학습">앙상블 학습</h4>
<ul>
<li>더 좋은 예측 결과를 만들기 위해 여러 개의 모델을 훈련하는 머신러닝 알고리즘</li>
</ul>
<h4 id="랜덤-포레스트">랜덤 포레스트</h4>
<ul>
<li>대표적인 결정 트리 기반의 앙상블 학습법</li>
<li>부트스트랩 샘플을 사용하고 랜덤하게 일부 특성을 선택해 트리를 만듦</li>
</ul>
<h4 id="엑스트라-트리">엑스트라 트리</h4>
<ul>
<li>랜덤 포레스트와 비슷하게 결정 트리를 사용해 앙상블 모델을 만들지만 부트스트랩 샘플을 사용하지 않음</li>
<li>대신 랜덤하게 노드를 분할해 과대적합을 감소시킴</li>
</ul>
<h4 id="그레이디언트-부스팅">그레이디언트 부스팅</h4>
<ul>
<li>랜덤 포레스트나 엑스트라 트리와 달리 결정 트리를 연속적으로 추가해 손실 함수를 최소화하는 앙상블 방법</li>
<li>훈련 속도가 느리지만 더 좋은 성능을 기대 가능</li>
</ul>
<h4 id="히스토그램-기반-그레이디언트-부스팅">히스토그램 기반 그레이디언트 부스팅</h4>
<ul>
<li>그레이디언트 부스팅의 속도를 개선하여 안정적인 결과와 높은 성능을 도출</li>
</ul>
<h3 id="패키지-및-함수-2">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지-1">skiti-learn 패키지</h4>
<h4 id="randomforestclassifier">RandomForestClassifier</h4>
<ul>
<li>랜덤 포레스트 분류 클래스</li>
<li>n_estimators: 앙상블을 구성할 트리의 개수를 지정, 기본값은 100</li>
<li>criterion: 불순도를 지정, 기본값은 &#39;gini&#39;(지니 불순도), &#39;entropy&#39;(엔트로피 불순도) 선택 가능</li>
<li>max_depth: 트리가 성장할 최대 깊이, 기본값은 None으로 리프 노드가 순수하거나 min_samples_split보다 샘플 개수가 적을 때까지 성장</li>
<li>min_samples_split: 노드를 나누기 위한 최소 샘플 개수, 기본값은 2</li>
<li>max_features: 최적의 분할을 위해 탐색할 특성의 개수를 지정, 기본값은 &#39;auto&#39;로 특성 개수의 제곱근</li>
<li>bootstrap: 부트스트랩 샘플을 사용할지 지정, 기본값은 True</li>
<li>oob_score: OOB 샘플을 사용해 훈련한 모델을 평가할지 지정, 기본값은 False</li>
<li>n_jobs: 병렬 실행에 사용할 CPU 코어 수를 지정, 기본값은 1로 하나의 코어를 사용, -1이면 시스템에 있는 모든 코어를 사용</li>
</ul>
<h4 id="extratreesclassifier">ExtraTreesClassifier</h4>
<ul>
<li>엑스트라 트리 분류 클래스</li>
<li>bootstrap: 부트스트랩 샘플을 사용할지 지정, 기본값은 False</li>
<li>나머지 매개변수는 RandomForestClassifier와 동일</li>
</ul>
<h4 id="gradientboostingclassifier">GradientBoostingClassifier</h4>
<ul>
<li>그레이디언트 부스팅 분류 클래스</li>
<li>loss 매개변수는 손실 함수를 지정, 기본값은 로지스틱 손실 함수를 의미하는 &#39;deviance&#39;</li>
<li>learning_rate: 트리가 앙상블에 기여하는 정도를 조절, 기본값은 0.1</li>
<li>subsmaple: 사용할 훈련 세트의 샘플 비율을 지정, 기본값은 1.0</li>
<li>max_depth: 개별 회귀 트리의 최대 깊이, 기본값은 3</li>
</ul>
<h4 id="histgradientboostingclassifier">HistGradientBoostingClassifier</h4>
<ul>
<li>히스토그램 기반 그레이디언트 부스팅 분류 클래스</li>
<li>learning_rate: 학습률(감쇠율), 기본값은 0.1이며 1.0이면 감쇠가 전혀 없음</li>
<li>max_iter: 부스팅 단계를 수행하는 트리의 개수, 기본값은 100</li>
<li>max_bins: 입력 데이터를 나눌 구간의 개수, 기본값은 255(최댓값), 여기에 1개의 구간이 누락된 값을 위해 추가됨</li>
</ul>
<h3 id="실습-2">실습</h3>
<p><a href="https://bit.ly/3OWHMfp" title="Ensemble of Tree">Practice 5-3</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2022 하계 모각코] 4주차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-4%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Wed, 27 Jul 2022 08:23:06 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>4회차: 7/27 14:00 ~ 17:00
계획: 딥러닝 교재 Chapter4 학습, (시간이 남을 시 파이썬 복습)</p>
<h2 id="결과">결과</h2>
<h2 id="4-1-로지스틱-회귀">4-1. 로지스틱 회귀</h2>
<h3 id="개념정리">개념정리</h3>
<h4 id="로지스틱-회귀">로지스틱 회귀</h4>
<ul>
<li>선형 방정식을 사용한 분류 알고리즘</li>
<li>시그모이드 함수나 소프트맥스 함수를 사용하여 클래스 확률을 출력</li>
</ul>
<h4 id="다중-분류">다중 분류</h4>
<ul>
<li>타깃 클래스가 2개 이상인 분류 문제</li>
<li>로지스틱 회귀는 다중 분류를 위해 소프트맥스 함수를 사용해 클래스를 예측</li>
</ul>
<h4 id="시그모이드-함수">시그모이드 함수</h4>
<ul>
<li>선형 방정식의 출력을 0과 1 사이의 값으로 압축해 이진 분류를 위해 사용</li>
</ul>
<h4 id="소프트맥스-함수">소프트맥스 함수</h4>
<ul>
<li>다중 분류에서 여러 선형 방정식의 출력 결과를 정규화해 합이 1이 되도록 만듦</li>
</ul>
<h3 id="패키지-및-함수">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지">skiti-learn 패키지</h4>
<h4 id="logisticregression">LogisticRegression</h4>
<ul>
<li>로지스틱 회귀를 위한 클래스</li>
<li>solver 매개변수에서 사용할 알고리즘을 선택, 기본 값은 &#39;1bfgs&#39;, &#39;sag&#39;(확률적 평균 경사 하강법) 및 &#39;saga&#39;(&#39;sag&#39; 개선 버전) 존재</li>
<li>penalty 매개변수에서 규제 방식을 선택, L1 규제(라쏘 방식) 및 L2 규제(릿지 방식) 존재, 기본값은 L2 규제를 의미하는 &#39;l2&#39;</li>
<li>C 매개변수에서 규제의 강도를 제어, 기본값이 1.0, 값이 작을수록 규제가 강해짐</li>
</ul>
<h4 id="predict_proba">predict_proba()</h4>
<ul>
<li>예측 확률을 반환</li>
<li>이진 분류 경우에는 샘플마다 음성 클래스와 양성 클래스에 대한 확률을 반환</li>
<li>다중 분류 경우에는 샘플마다 모든 클래스에 대한 확률을 반환</li>
</ul>
<h4 id="decision_function">decision_function()</h4>
<ul>
<li>모델이 학습한 선형 방정식의 출력을 반환</li>
<li>이진 분류 경우에는 클래스의 확률이 0보다 크면 양성 클래스, 작거나 같으면 음성 클래스로 예측</li>
<li>다중 분류 경우에는 각 클래스마다 선형 방정식을 계산, 가장 큰 값의 클래스가 예측 클래스가 됨</li>
</ul>
<h3 id="실습">실습</h3>
<p><a href="https://bit.ly/3zyZlgW" title="Logistic Regression">Practice 4-1</a></p>
<h2 id="3-2-확률적-경사-하강법">3-2. 확률적 경사 하강법</h2>
<h3 id="개념정리-1">개념정리</h3>
<h4 id="확률적-경사-하강법">확률적 경사 하강법</h4>
<ul>
<li>훈련 세트에서 샘플 하나씩 꺼내 손실 함수의 경사를 따라 최적의 모델을 찾는 알고리즘</li>
<li>샘플을 하나씩 사용하지 않고 여러 개를 사용하면 미니배치 경사 하강법이 됨</li>
<li>한 번에 전체 샘플을 사용하면 배치 경사 하강법이 됨</li>
</ul>
<h4 id="손실-함수">손실 함수</h4>
<ul>
<li>확률적 경사 하강법이 최적화할 대상</li>
<li>이진 분류에는 로지스틱 회귀 손실 함수를 사용</li>
<li>다중 분류에는 크로스엔트로피 손실 함수를 사용</li>
<li>회귀 문제에는 평균 제곱 오차 손실 함수를 사용</li>
</ul>
<h4 id="에포크">에포크</h4>
<ul>
<li>확률적 경사 하강법에서 전체 샘플을 모두 사용하는 한 번 반복</li>
<li>일반적으로 경사 하강법 알고리즘은 수십에서 수백 번의 에포크를 반복</li>
</ul>
<h3 id="패키지-및-함수-1">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지-1">skiti-learn 패키지</h4>
<h4 id="sgdclassifier">SGDClassifier</h4>
<ul>
<li>확률적 경사 하강법을 사용한 분류 모델을 만듦</li>
<li>loss 매개변수는 확률적 경사 하강법으로 최적화할 손실 함수를 지정, 기본 값은 서포트 벡터 머신을 위한 &#39;hinge&#39; 손실 함수, 로지스틱 회귀를 위해선 &#39;log&#39;로 지정</li>
<li>penalty 매개변수에서 규제의 종류를 지정, 이는 LogisticRegression에서와 같은 방법, 규제 강도는 alpha 매개변수에서 지정하며 기본값은 0.0001</li>
<li>max_iter 매개변수는 에포크 횟수를 지정, 기본값은 1000</li>
<li>tol 매개변수는 반복을 멈출 조건, n_iter_no_change 매개변수에서 지정한 에포크 동안 손실이 tol만큼 줄어들지 않으면 알고리즘이 중단됨, tol 매개변수의 기본값은 0.001이고 n_iter_no_change 매개변수의 기본값은 5</li>
</ul>
<h4 id="sgdregressor">SGDRegressor</h4>
<ul>
<li>확률적 경사 하강법을 사용한 회귀 모델을 만듦</li>
<li>loss 매개변수에서 손실 함수를 지정, 기본값은 제곱 오차를 나타내는 &#39;squared_loss&#39;</li>
<li>SGDClassifier와 매개변수가 같음</li>
</ul>
<h3 id="실습-1">실습</h3>
<p><a href="https://bit.ly/3zBpwDJ" title="Stochastic Gradient Descent(SGD)">Practice 4-2</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[2022 하계 모각코] 3주차 목표 및 결과]]></title>
            <link>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</link>
            <guid>https://velog.io/@vvon_joon/2022-%ED%95%98%EA%B3%84-%EB%AA%A8%EA%B0%81%EC%BD%94-3%EC%A3%BC%EC%B0%A8-%EB%AA%A9%ED%91%9C-%EB%B0%8F-%EA%B2%B0%EA%B3%BC</guid>
            <pubDate>Wed, 20 Jul 2022 06:50:27 GMT</pubDate>
            <description><![CDATA[<h2 id="목표">목표</h2>
<blockquote>
</blockquote>
<p>3회차: 7/20 14:00 ~ 17:00
계획: 딥러닝 교재 Chapter3 학습, (시간이 남을 시 파이썬 복습)</p>
<h2 id="결과">결과</h2>
<h2 id="3-1-k-최근접-이웃-회귀">3-1. k-최근접 이웃 회귀</h2>
<h3 id="개념정리">개념정리</h3>
<h4 id="회귀">회귀</h4>
<ul>
<li>임의의 수치를 예측하는 문제</li>
<li>타깃값도 임의의 수치가 됨</li>
</ul>
<h4 id="k-최근접-이웃-회귀">k-최근접 이웃 회귀</h4>
<ul>
<li>k-최근접 알고리즘을 사용해 회귀 문제를 품</li>
<li>가장 가까운 이웃 샘플을 차ㅡㅈ고 이 샘플들의 타깃값을 평균하여 예측으로 삼음</li>
</ul>
<h4 id="결정계수r2">결정계수($R^2$)</h4>
<ul>
<li>회귀 문제의 성능 측정 도구</li>
<li>1에 가까울수록 좋고, 0에 가깝다면 성능이 나쁨</li>
</ul>
<h4 id="과대적합">과대적합</h4>
<ul>
<li>모델의 훈련 세트 성능이 테스트 세트 성능보다 훨씬 높을 때 발생</li>
<li>모델이 훈련 세트에 너무 집착홰서 데이터에 내재된 거시적인 패턴을 감지하지 못 함</li>
</ul>
<h4 id="과소적합">과소적합</h4>
<ul>
<li>훈련 세트와 테스트 세트 성능이 모두 동일하게 낮거나 테스트 세트 성능이 오히려 더 높을 때 발생</li>
<li>더 복잡한 모델을 사용해 훈련 세트에 잘 맞는 모델을 만들어야 함</li>
</ul>
<h3 id="패키지-및-함수">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지">skiti-learn 패키지</h4>
<h4 id="kneighborsregressor">KNeighborsRegressor</h4>
<ul>
<li>k-최근접 이웃 회귀 모델을 만드는 사이킷런 클래스</li>
<li>n_neighbors 매개변수로 이웃의 개수를 지정, 기본값은 5</li>
<li>다른 매개변수는 kNeighborsClassifier 클래스와 거의 동일</li>
</ul>
<h4 id="mean_absolute_error">mean_absolute_error()</h4>
<ul>
<li>회귀 모델의 평균 절댓값 오차를 계산</li>
<li>첫 번째 매개변수는 타깃, 두 번째는 예측값을 전달</li>
</ul>
<h4 id="mean_squared_error">mean_squared_error()</h4>
<ul>
<li>타깃과 예측을 뺀 값을 제곱한 다음 전체 샘플에 대해 평균한 값을 반환</li>
</ul>
<h3 id="실습">실습</h3>
<p><a href="https://bit.ly/3aOPaLG" title="k-Neareast Neighbor Regression">Practice 3-1</a></p>
<h2 id="3-2-선형-회귀">3-2. 선형 회귀</h2>
<h3 id="개념정리-1">개념정리</h3>
<h4 id="선형-회귀">선형 회귀</h4>
<ul>
<li>특성과 타깃 사이의 관계를 가장 잘 나타내는 선형 방정식을 찾음</li>
<li>특성이 하나라면 직선 방정식이 됨</li>
<li>선형 회귀에서 찾은 특성과 타깃 사이의 관계는 선형 방정식의 계수 또는 가중치에 저장됨</li>
<li>머신 러닝에서 가중치는 방정식의 기울기와 절편을 모두 의미하는 경우가 많음</li>
</ul>
<h4 id="모델-파라미터">모델 파라미터</h4>
<ul>
<li>선형 회귀가 찾은 가중치처럼 머신러닝 모델이 특성에서 학습한 파라미터</li>
</ul>
<h4 id="다항-회귀">다항 회귀</h4>
<ul>
<li>다항식을 사용해 특성과 타깃 사이의 관계를 나타냄</li>
<li>함수가 비선형일 수 있지만 여전히 선형 회귀로 표현 가능</li>
</ul>
<h3 id="패키지-및-함수-1">패키지 및 함수</h3>
<h4 id="skiti-learn-패키지-1">skiti-learn 패키지</h4>
<h4 id="linear-regression">Linear Regression</h4>
<ul>
<li>사이킷런의 선형 회귀 클래스</li>
<li>fit_intercept 매개변수를 False로 지정하면 절편을 학습하지 않음, 기본값은 True</li>
<li>학습된 모델의 coef_ 속성은 특성에 대한 계수를 포함한 배열, 배열의 크기는 특성의 개수와 같음</li>
<li>intercept_ 속성에는 절편이 저장되어 있음</li>
</ul>
<h3 id="실습-1">실습</h3>
<p><a href="https://bit.ly/3PCmX9K" title="Linear Regression">Practice 3-2</a></p>
<h2 id="3-3-특성-공학과-규제">3-3. 특성 공학과 규제</h2>
<h3 id="개념정리-2">개념정리</h3>
<h4 id="다중-회귀">다중 회귀</h4>
<ul>
<li>여러 개의 특성을 사용하는 회귀 모델</li>
<li>특성이 많으면 선형 모델은 강력한 성능을 발휘</li>
</ul>
<h4 id="특성-공학">특성 공학</h4>
<ul>
<li>주어진 특성을 조합해 새로운 특성을 만드는 일련의 작업 과정</li>
</ul>
<h4 id="릿지">릿지</h4>
<ul>
<li>규제가 있는 선형 회귀 모델</li>
<li>선형 모델의 계수를 작게 만들어 과대적합을 완화</li>
<li>효과가 좋아 널리 사용되는 규제 방법</li>
</ul>
<h4 id="라쏘">라쏘</h4>
<ul>
<li>또 다른 규제가 있는 선형 회귀 모델</li>
<li>릿지와 달리 계수 값을 아예 0으로 만들 수도 있음</li>
</ul>
<h4 id="하이퍼파라미터">하이퍼파라미터</h4>
<ul>
<li>머신러닝 알고리즘이 학습하지 않는 파라미터</li>
<li>사람이 사전에 지정해야 함</li>
<li>e.g. 릿지와 라쏘의 규제 강도 alpha 파라미터</li>
</ul>
<h3 id="패키지-및-함수-2">패키지 및 함수</h3>
<h4 id="pandas-패키지">pandas 패키지</h4>
<h4 id="read_csv">read_csv()</h4>
<ul>
<li>CSV 파일을 로컬 컴퓨터나 인터넷에서 읽어 판다스 데이터프레임으로 변환하는 함수</li>
<li>매개변수: sep(CSV 파일의 구분자를 지정, 기본값 &#39;,&#39;), header(데이터프레임의 열 이름으로 사용할 CSV 파일의 행 번호를 지정, 기본적으로 첫 번째 행을 열 이름으로 사용), skiprows(파일에서 읽기 전에 건너뛸 행의 개수를 지정), nrows(파일에서 읽을 행의 개수를 지정)</li>
</ul>
<h4 id="skiti-learn-패키지-2">skiti-learn 패키지</h4>
<h4 id="polynomialfeatures">PolynomialFeatures</h4>
<ul>
<li>주어진 특성을 조합해 새로운 특성을 만듦</li>
<li>degree는 최고 차수를 지정하며, 기본값은 2</li>
<li>interaction_only가 True이면 거듭제곱의 항은 제외되고 특성 간의 곱셈 항만 추가됨, 기본값은 False</li>
<li>include_bias가 False이면 절편을 위한 특성을 추가하지 않음, 기본값은 True</li>
</ul>
<h4 id="ridge">Ridge</h4>
<ul>
<li>규제가 있는 회귀 알고리즘인 릿지 회귀 모델을 훈련</li>
<li>alpha 매개변수로 규제의 강도를 조절, 값이 클수록 규제가 세짐, 기본값은 1</li>
<li>solver 매개변수에 최적의 모델을 찾기 위한 방법을 지정 가능</li>
<li>기본값은 &#39;auto&#39;이며 데이터에 따라 자동으로 선택됨</li>
<li>&#39;sag&#39; 및 &#39;saga&#39;는 확률적 평균 경사 하강법 알고리즘으로 특성과 샘플 수가 많을 때 유용</li>
<li>random_state는 solver가 &#39;sag&#39;나 &#39;saga&#39;일 때 넘파이 난수 시드값을 지정 가능</li>
</ul>
<h4 id="lasso">Lasso</h4>
<ul>
<li>규제가 있는 회귀 알고리즘인 라쏘 회귀 모델을 훈련</li>
<li>좌표 하강법(좌표축을 따라 최적화를 수행)을 사용</li>
<li>alpha와 random_state 매개변수는 Ridge 클래스와 동일</li>
<li>max_iter는 알고리즘의 수행 반복 횟수를 지정, 기본값은 1000</li>
</ul>
<h3 id="실습-2">실습</h3>
<p><a href="https://bit.ly/3v3nKsx" title="Regulation">Practice 3-3</a></p>
]]></description>
        </item>
    </channel>
</rss>