<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jyun34 님의 블로그</title>
    <link>https://jyun34.tistory.com/</link>
    <description>jyun34 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 22 Jul 2026 03:05:17 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jyun34</managingEditor>
    <item>
      <title>Pytorch 강의 후기</title>
      <link>https://jyun34.tistory.com/12</link>
      <description>&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-torch&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;모델을 구성하는데 필요한 모든 구성 요소를 제공 =&amp;gt; torch.utils.data.Dataset, torch.utils.data.DataLoader, torch.nn.Module&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;자동 미분, 다양한 loss function 제공 =&amp;gt; torch.nn, torch.nn.functional&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;다양한 optimizer 제공 =&amp;gt; torch.optim&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Dataset과 DataLoader를 사용하면, 데이터 집합에서 미니 배치(mini batch) 크기의 데이터를 반환, 반환되는 모든 데이터의 차원의 크기는 같아야 한다.&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;모든 이미지는 같은 height, width, channel을 가진다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;모든 시퀀스는 같은 max_len을 가진다, zero_padding으로 길이를 맞춰준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-미니 배치: 전체 데이터 집합을 더 작은 부분집합으로 분할한 일부 데이터, batch_size&lt;br /&gt;-Dataset은 단일 데이터를 모델의 입력으로 사용할 수 있는 형태(tensor)로 변환하는 작업을 수행.&lt;br /&gt;-PyTroch에는 이미지 데이터를 다루는 'ImageForlder', 'CIFAR10', 'MNIST'와 같은 Data 구현체들이 제공된다.-Pytorch Custom model 정의&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;super().__init__(): 부모 클래스(nn.Module) 초기화 하여, 모델의 레이어, 파라미터에 접근할 수 있다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;forward(self, x): 입력 데이터에 대한 연산을 정의&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-PyTorch 훈련 과정&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;학습모드: model.train(), train_loss=0.0, train_accuracy=0&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;gpu에 dataload:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;http://images.to/&quot; data-sk=&quot;tooltip_parent&quot; data-stringify-link=&quot;http://images.to&quot;&gt;images.to&lt;/a&gt;(device), labels=&lt;a style=&quot;color: #000000;&quot; href=&quot;http://labels.to/&quot; data-sk=&quot;tooltip_parent&quot; data-stringify-link=&quot;http://labels.to&quot;&gt;labels.to&lt;/a&gt;(device)&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;순전파: output = model(data), loss = criterion(outputs, labels)&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;역전파, 가중치 업데이트: optimizer.zero_grad(), loss.backword(), optimizer.step()&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;손실과 데이터 정확도 계산: train_loss += loss.item(), _, predicted = torch.max(outputs, 1), train_accuracy += (predicted == labels).sum().item()&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-PyTorch 평가 과정&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;평가 모드: model.eval():&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;gradient 계산 비활성화:&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-모델이 학습 시 옵션&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;batchnorm, dropout, activation, init_method&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;batchnorm과 dropout은 둘 다 사용해도 되긴 하지만, 둘 중 하나만 썼을 때 성능이 더 좋게 나올 수도 있다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;activation과 init_method는 절대 없어서는 안된다. activation 옵션이 False일 시, 모델은 선형적으로 되어서 학습효과가 떨어진다. init_method는 gradient가 0이 되어서 학습이 불가능해진다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;BatchNorm, Dropout 사용 모델: 0.9802&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;BatchNorm 제거 모델: 0.9780&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Dropout 제거 모델: 0.9819&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Activation Function 제거 모델: 0.9147&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;가중치를 0으로 초기화한 모델: 0.1133&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Fine Tuning: : 전이 학습의 한 방법으로, Pretrained model을 그대로, 혹은 layers를 추가해 새로운 작업에 맞는 데이터로 모델을 추가 훈련 시키는 방법-timm: CV 분야에서 사용하는 pretrained model 라이브러리&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;timm.create_model()로 객체를 생성할 때 마다 fc layer의 weight를 랜덤하게 initializing 한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;pretrained model의 embedding을 그대로 사용하기 때문에 convolutional layers는 동일&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Hugging Face&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;오픈 소스 라이브러리 및 여러 도구를 지원하는 커뮤니티&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;NLP, CV, multi-modal, audio 등 다양한 pretrained 모델 라이브러리 제공&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;찾은 모델을 pip로 설치 (pip install transformers==4.31.0 -q&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tTrMf/btsMd8yf9jl/Zm6Tjkx2o5kU5q6awbApLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tTrMf/btsMd8yf9jl/Zm6Tjkx2o5kU5q6awbApLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tTrMf/btsMd8yf9jl/Zm6Tjkx2o5kU5q6awbApLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtTrMf%2FbtsMd8yf9jl%2FZm6Tjkx2o5kU5q6awbApLK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;404&quot; height=&quot;212&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;630&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-전이 학습 전략&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;학습 데이터가 적을 때는, retrained model을 freeze 시켜놓고 새롭게 추가하는 fully connected layer만 finetunning&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;for para in model.parameters():&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# 모든 layer freeze 하기&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;para.requires_grad = False&lt;br /&gt;for para in model.fc.parameters():&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;# fc layer 만 학습하기&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;para.requires_grad = True&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;학습 데이터가 많을 때는 pretrained 모델이 가진 지식을 많이 수정해야해서, 전체 layer를 finetunning&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;learning rate 조절: 너무 크면 학습이 진행 안 되서, 작게 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-모니터링 도구&lt;br /&gt;-TensorBoard&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;TensorFlow의 공식 시각화 툴킷,&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;학습 과정에서의 metric(loss, accuracy 등) 변화를 트래킹&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;embedding을 불러와 모델의 구조를 그래프로 표현 가능&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;weight &amp;amp; bias에 대한 히스토그램 시각화 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-WandB&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;PyTorch뿐 아니라 TensorFlow, Keras 등의 주요 딥러닝 프레임워크와도 호환되며, 협업하는 팀과 모델의 모니터링 결과 및 시각화 자료를 공유할 수 있는 강력한 도구.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;주요 기능으로는 각 학습에서 생성되는 로그를 트래킹하고 관리할 수 있는 '실험 관리'&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;metric 시각화, weight &amp;amp; bias에 대한 히스토그램 시각화&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;sweep 기능을 사용한 하이퍼 파라미터를 최적화 등이 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1353&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhioNA/btsMfHlGMQS/EslSHy8mCDeWqGktHDKfb1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhioNA/btsMfHlGMQS/EslSHy8mCDeWqGktHDKfb1/img.jpg&quot; data-alt=&quot;wandb&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhioNA/btsMfHlGMQS/EslSHy8mCDeWqGktHDKfb1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhioNA%2FbtsMfHlGMQS%2FEslSHy8mCDeWqGktHDKfb1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;418&quot; data-origin-width=&quot;2000&quot; data-origin-height=&quot;1353&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;wandb&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-PyTorch Lightning&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;딥러닝을 구현하는 코드의 양이 많아지며 코드의 복잡성이 증가하게 됨.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;PyTorch의 구현과정을 간편화하기 위해 등장한게 PyTorch Lightning&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;PyTorch의 model, optimizer, training loop 등을 한 번에 구현가능&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;.to(device)와 같은 하드웨어 호출 코드를 작성할 필요 없이 자동 최적화&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;learning rate, early stop 자동최적화&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;TensorBoard, WandB 사용 가능&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;16-bit precision 옵션 추가 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-LightningModule&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;__init__: 모델의 layer를 초기화. 손실 함수, metric 선언 가능&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;forward: 모델의 데이터 연산과정 정의&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;configure_optimizers: 옵티마이저와 학습률 스케쥴러 정의, 반환. 학습률 스케쥴러는 생략 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;training_step: train 데이터 셋의 미니 배치에 대해 손실을 반환하는 과정을 정의. 모델 학습과 관련된 optimizer.zero_grad(), loss.backward(), optimizer.step() 같은 코드는 작성 안 해도 된다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&amp;nbsp;validation_step: validation set의 미니 배치에 대한 모델의 성능(loss, accuracy)을 확인하는 과정을 정의&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;test_step: test set의 미니 배치에 대한 모델의 성능(loss, accuracy)을 확인하는 과정을 정의&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;predict_step: 추론해야하는 데이터 셋의 미니 배치에 대한 예측 과정을 정의(모델의 얘측값, 확률값 반환)&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;모델 평가와 관련된 코드인 model.eval(), with&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;http://torch.no/&quot; data-sk=&quot;tooltip_parent&quot; data-stringify-link=&quot;http://torch.no&quot;&gt;torch.no&lt;/a&gt;_grad() 같은 코드를 작성 안 해도 된다. 코드의 간결화&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Trainer&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;LightningModule의 메소드를 이용해 모델 학습을 실행하는 클래스.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;trainer.fit()을 실행시키면 'training_step', 'validation_step', 'configure_optimizers'를 호출해 학습이 시작된다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;trainer.validate(): 'validation_step' 호출&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;trainer.test(): 'test_step' 호출&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;trainer.predict: 'predict_step' 호출&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Hydra: 코드를 구조화하거나 어려운 문제를 해결하기 위해, 별도의 설정 파일(yaml)을 작성하여 관리하는 오픈소스 프레임워크(Framework)-yaml&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;key-value 구성&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;들여쓰기 구조&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;주석 사용 가능&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;${variable} 형태로 값을 작성하여, 설정값 내부에서 다른 설정 값을 참조할 수 있는 기능을 제공.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;불러온 변수는 객체 방식이나 딕셔너리 방식으로 접근 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Hydra의 특징&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;yaml 데이터 포맷을 사용하여 변수 접근, 변수 참조(${variable}) 사용가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;설정 파일의 값을 Terminal의 커맨드라인을 통해 쉽게 추가하거나 변경 가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;나눠진 여러 설정 파일들을 이용하여 하나의 설정 파일처럼 구성 가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;서로 다른 설정 파일의 실험 조합을 한 줄의 Terminal 커맨드라인으로 실행 가능&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Hydra를 통해 소스코드를 실행할 경우, Hydra는 자동으로 실행 당시의 설정값과 log를 기록함. (outputs/yyyy-MM-dd/hh-mm-ss 폴더 생성)&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;'instantiate'를 사용해 인스턴스 생성가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Config group&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Hydra에서는 설정 파일을 그룹으로 묶어 관리할 수 있다. (모델 설정 파일을 model 폴더에 생성해서 사용)&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Config group을 통해 설정값에 들어갈 수 있는 항목이 여러 개(resnet18.yaml, resnet34.yaml)가 있으면 디폴트로 실행할 defaults를 하나 지정해야한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Terminal 커맨드라인&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;'=' 커맨드: 설정 파일의 설정값을 변경 가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;'+' 커맨드: 설정 파일의 설정값을 추가 가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;'++' 커맨드: 설정 파일의 설정값을 변경, 추가 가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;'--multirun' 옵션을 사용해 여러 설정 파일의 조합을 한 번에 실행 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&amp;nbsp;-PyTorch Lightning으로 작성된 코드에 Hydra를 적용해서 설정 파일을 작성하면, 함께 사용 가능하다.&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업스테이지 AI에서 제공하는 PyTorch 강의의 후기이다. Tensor의 조작부터 해서 Pytorch를 이용해, DNN, CNN, VGG, GoogLeNET, RESENT, RNN, LSTM, GRU 등 다양한 모델을 구현하는 방법을 소개해주고, TensorBoard, WandB 같은&amp;nbsp; 강력한 모니터링 도구의 사용법을 소개해준다.&lt;br /&gt;그 외에도 PyTorch를 편리하게 하는 PyTorch Lightning, Hydra를 소개해줬다. 특히나 PyTorch Lightning은 여태까지 어렵게 이해한 PyTorch를 왜 배웠나 싶을정도로 간결함을 보여줬다. 물론 PyTorch의 구현과정을 배우는건 중요한 일이다.&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>UpstageAILab</category>
      <category>국비지원</category>
      <category>업스테이지패스트캠퍼스</category>
      <category>패스트캠퍼스</category>
      <category>패스트캠퍼스AI부트캠프</category>
      <category>패스트캠퍼스업스테이지부트캠프</category>
      <category>패스트캠퍼스업스테이지에이아이랩</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/12</guid>
      <comments>https://jyun34.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 11 Feb 2025 23:06:49 +0900</pubDate>
    </item>
    <item>
      <title>딥러닝 강의 후기</title>
      <link>https://jyun34.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전까지 머신러닝, mlops를 수강하고 딥러닝을 배우게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝은 AI의 하위 단계,&amp;nbsp;딥러닝은 머신러닝의 하위 단계로 이러한 그림을 보인다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;190&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ba9BVQ/btsMfumnejg/RoleZGLsHNeJgDvUyjNNt0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ba9BVQ/btsMfumnejg/RoleZGLsHNeJgDvUyjNNt0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ba9BVQ/btsMfumnejg/RoleZGLsHNeJgDvUyjNNt0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fba9BVQ%2FbtsMfumnejg%2FRoleZGLsHNeJgDvUyjNNt0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;266&quot; height=&quot;190&quot; data-origin-width=&quot;266&quot; data-origin-height=&quot;190&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 이전에는 사람이 일일이 프로그램이 목표 달성에 필요한 연산을 사람이 직접 다 짜서 만드는 &lt;b&gt;규칙 기반 프로그래밍 (Rule-based programming)&lt;/b&gt;이었다. 예를 들자면 스타 크래프트의 경우 싱글 플레이를 할 때 나오는 computer가 다 어느 타이밍에 건물을 지을지 사람이 다 짜놓은 프로그램 같은 거였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후에 발전하게 된게 &lt;b&gt;머신러닝&lt;/b&gt;으로 Feature을 뽑는 방식은 기존처럼 하되, 그 Feature를 판단하는 로직은 기계가 스스로 고안하는 장치를 만들게 되었다. 기계가 스스로 판단하기 때문에 머신러닝인 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝부터는 출력을 계산하기 위한 모든 연산을 기계가 고안한 것이다. 기계 스스로 알아낼 게 더 많으니 더 많은 데이터가 필요로 하고 데이터가 커지면 커질수록 성능이 올라가는 법칙을 발견하게 되서 chat gpt 같은 고성능 AI 모델이 나오게 됐다. 그래서 OpenAI(오픈 아님)가 데이터를 수집할려고 기를 쓰는 이유가 그러한 이유 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 기술에는 다양한 방식이 있는데, 다루는 데이터에 따라, 이미지/동영상을 다루는 컴퓨터 비전(CV), 텍스트를 다루는 자연어 처리(NLP), 음성데이터를 다루는 음성 인식 등이 있다. 이를 바탕으로 이미지나 텍스트 같은 데이터를 인식하거나, 생성하는 모델이 나오게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델을 만드는데에는 다양한 요소가 있는데, 데이터, 모델, 손실 함수, 최적화 알고리즘 등이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터는 해결하고자 하는 문제에 따라 정답지인 라벨링 데이터를 표시해줘야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;467&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eeHGKn/btsMdMvkTuT/pr74yanqSmhTNJQZX8YESk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eeHGKn/btsMdMvkTuT/pr74yanqSmhTNJQZX8YESk/img.png&quot; data-alt=&quot;이미지 라벨링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eeHGKn/btsMdMvkTuT/pr74yanqSmhTNJQZX8YESk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeeHGKn%2FbtsMdMvkTuT%2Fpr74yanqSmhTNJQZX8YESk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;440&quot; height=&quot;257&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;467&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 라벨링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k1AuP/btsMeSakco1/0NsrVCKWlkfHi4Mjzai2Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k1AuP/btsMeSakco1/0NsrVCKWlkfHi4Mjzai2Ek/img.png&quot; data-alt=&quot;자연어 라벨링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k1AuP/btsMeSakco1/0NsrVCKWlkfHi4Mjzai2Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk1AuP%2FbtsMeSakco1%2F0NsrVCKWlkfHi4Mjzai2Ek%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;248&quot; height=&quot;166&quot; data-origin-width=&quot;248&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;자연어 라벨링&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델은 입력을 원하는 결과로 바꿔주는 연산 과정을 구조화한 것이다. 이 과정에서 다층 퍼셉트론, DNN, CNN, RNN 등 다양한 모델이 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;손실 함수는 실제 값과 모델이 추정한 값 사이의 오차, 오차를 수치화한 함수이다. 다양한 손실함수가 있지만 그 중에서 많이 쓰는 함수가 MSE, CE이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화 알고리즘은 손실 함수를 최적화해주는 알고리즘으로 보통 옵티마이저(Optimizer)라고 불린다. Optimizer에서 가장 기본적인 것은 경사하강법(Gradient Decent)로 이걸 바탕으로 SGD, Momentum, Nesterov, AdaGrad, RMSProp, Adam이 파생됐다. 이건 이걸 다 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝을 보통 신경망으로 비유를 하는데 실제 사람의 뉴런의 방식을 모방했기 때문이다. 그렇게 모방해서 나온게 다층 퍼셉트론으로 입력신호에 가중치(weight)를 더하고 활성함수(activation)를 거쳐 출력 신호에 도달하게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;555&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJVBwU/btsMe24Zhzq/dVyF4DKOg0M5TJlFGZnO61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJVBwU/btsMe24Zhzq/dVyF4DKOg0M5TJlFGZnO61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJVBwU/btsMe24Zhzq/dVyF4DKOg0M5TJlFGZnO61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJVBwU%2FbtsMe24Zhzq%2FdVyF4DKOg0M5TJlFGZnO61%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;402&quot; height=&quot;310&quot; data-origin-width=&quot;720&quot; data-origin-height=&quot;555&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 여러번 걸쳐서 나온게 사람의 뉴런과 비슷해서 신경망(Neural Network)라고 한다. 이렇나 이름은 다양한 모델 DNN, CNN, RNN에 반영되어 나왔다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;활성화 함수(activation)는 여러가지가 있는데, sigmoid, tanh, ReLU, Leaky LeLU 등이 있다. 이 중에서 sigmoid, ReLU를 가장 많이 쓰는 듯 하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4Mawt/btsMfhOpfeq/x08y0zBv6MTEjg0h8kTHP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4Mawt/btsMfhOpfeq/x08y0zBv6MTEjg0h8kTHP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4Mawt/btsMfhOpfeq/x08y0zBv6MTEjg0h8kTHP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4Mawt%2FbtsMfhOpfeq%2Fx08y0zBv6MTEjg0h8kTHP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;401&quot; height=&quot;313&quot; data-origin-width=&quot;678&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 활성화 함수를 사용하는 이유는 입력신호가 활성화함수를 만나게 되면 위의 그림과 같이 곡선, 비선형으로 바뀌게 되는데, 이러한 결과가 모델의 학습 효율을 높이기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가중치 초기화는 모델의 layer가 깊어질수록 활성화 함수 이후 데이터의 분포가 한 쪽으로 쏠려 모델의 학습 효율을 악화시키기 때문에 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sigmoid, tanh 함수를 사용할 경우, Xavier 초기화를 쓰고, ReLU 함수를 사용할&amp;nbsp; 경우, He 초기화를 사용하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경사 하강법은 기울기가 감소하는 방향으로 x를 움직여서 f(x)의 최소값을 찾는 알고리즘으로 딥러닝에 그대로 적용된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;602&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmCB0P/btsMfdrLb1l/IZjwg2XfEUDGdIdmim7lK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmCB0P/btsMfdrLb1l/IZjwg2XfEUDGdIdmim7lK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmCB0P/btsMfdrLb1l/IZjwg2XfEUDGdIdmim7lK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmCB0P%2FbtsMfdrLb1l%2FIZjwg2XfEUDGdIdmim7lK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;489&quot; height=&quot;290&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 최소화하는 방향으로 움직이다가 최솟값에 도달하게 되면 학습이 끝나게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 이용해서 순전파, 역전파가 있는데 너무 복잡한 문제라 그냥 다른사람들이 만든 라이브러리를 쓰기에 프로그래머가 신경 쓸 문제는 아니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 기본적인 경사하강법은 지역최소점이라는 함정에 빠지게 되어 최솟값에 도달하지 못한다는 단점이 있는데, 이러한 단점을 보완하거나 찾는 속도를 빠르게 하기 위해 SGD, Momentum, Nesterov, AdaGrad, RMSProp, Adam가 나오게 되었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kSF4G/btsMd6UGy2p/Ie4YBCPtg37hKfQ5IAmGv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kSF4G/btsMd6UGy2p/Ie4YBCPtg37hKfQ5IAmGv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kSF4G/btsMd6UGy2p/Ie4YBCPtg37hKfQ5IAmGv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkSF4G%2FbtsMd6UGy2p%2FIe4YBCPtg37hKfQ5IAmGv1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;323&quot; height=&quot;257&quot; data-origin-width=&quot;251&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SGD는 모든 데이터를 사용하는 경사하강법을 일부의 데이터 샘플만을 경사하강법을 적용함으로써 그러한 문제를 해결했고, Momentum, Nesterov는 이전 기울기를 고려한 관성을 이용해 SGD보다 더 효율적으로 지역최솟값을 피하는 문제를 달성했다. AdaGrad, RMSProp은 가중치를 갱신함으로써 문제를 해결하고, Adam은 관성, 가중치 갱신을 둘 다 이용해서 문제를 해결해 뛰어난 성능을 보였다. 그래서 보통 Adam을 쓰지만 만능인 옵티마이저는 없어서 그냥 다 쓰고 더 나은 결과가 나온 옵티마이저를 쓴다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEz7rd/btsMf7jWEr3/psOVwGvwjGFNnoZBUuIjh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEz7rd/btsMf7jWEr3/psOVwGvwjGFNnoZBUuIjh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEz7rd/btsMf7jWEr3/psOVwGvwjGFNnoZBUuIjh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEz7rd%2FbtsMf7jWEr3%2FpsOVwGvwjGFNnoZBUuIjh0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;394&quot; height=&quot;302&quot; data-origin-width=&quot;394&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-Optimizer의 하이퍼 파라미터&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;lr (학습률): 0.001 ~ 0.0001, 너무 크면 발산, 너무 작으면 학습이 느림&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Batch Size: 32 ~ 512, 클수록 학습 안정적, 작을수록 일반화 가능성 증가&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Weight Decay (L2 정규화 계수): 0.01 ~ 0.0001, 과적합 방지 효과&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Dropout Rate: 0.2 ~ 0.5, 뉴런 일부를 랜덤하게 제거하여 과적합 방지&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Momentum (SGD 사용 시): 0.9,&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Beta1 / Beta2 (Adam 계열): (0.9, 0.999), 모멘텀과 RMSprop 결합 계수&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;예시&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;optimizer = AdamW(lr=0.0005, weight_decay=0.01)batch_size = 128&lt;br /&gt;dropout_rate = 0.3&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 성능 향상을 위해 드랍아웃(Dropout), 정규화(Regularization) 등이 있다. 드랍아웃은 학습할 때는 뉴런을 무작위로 삭제함으로써 매번 다른 모델이 학습하는 것과 같은 결과를 나타내고, 추론 시에는 모든 뉴런을 사용해 여러 모델의 앙상블로 보일 수도 있다. (앙상블이란&amp;nbsp; 개별적으로 학습시킨 여러 모델의 결과를 종합해서 추론하는 방식이다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;167&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbRobx/btsMfNMMNCT/MS7DwR2dnvAhVNxsf35Y40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbRobx/btsMfNMMNCT/MS7DwR2dnvAhVNxsf35Y40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbRobx/btsMfNMMNCT/MS7DwR2dnvAhVNxsf35Y40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbRobx%2FbtsMfNMMNCT%2FMS7DwR2dnvAhVNxsf35Y40%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;392&quot; height=&quot;217&quot; data-origin-width=&quot;302&quot; data-origin-height=&quot;167&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규화는 입력값과 출력값이 다르게 나올 경우, 같은 범위로 변환해주는 것을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터가 모델의 layer를 통과할 때마다 입력의 분포가 변하는 현상이 나타나는데, 데이터가 다시 고르게 분포할 수 있도록 하는게 정규화이다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pDcZj/btsMeJEDEAN/A9bk5e1sqmyzGo5xtu5z4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pDcZj/btsMeJEDEAN/A9bk5e1sqmyzGo5xtu5z4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pDcZj/btsMeJEDEAN/A9bk5e1sqmyzGo5xtu5z4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpDcZj%2FbtsMeJEDEAN%2FA9bk5e1sqmyzGo5xtu5z4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;525&quot; height=&quot;238&quot; data-origin-width=&quot;1262&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;레이어 정규화, 인스턴스 정규화, 그룹 정규화 등이 있지만 주로 쓰는 것은 배치정규화(batchnorm)이다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot; data-stringify-type=&quot;unordered-list&quot; data-list-tree=&quot;true&quot; data-indent=&quot;0&quot; data-border=&quot;0&quot;&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;배치 정규화: 배치(batch)단위의 데이터를 기준으로 평균과 분산을 계산하여, 활성화 레이어 이후 출력을 정규화하는 방법. 길이가 다르거나, 배치가 1인 경우 효과가 없다. 이러한 이유로 텍스트 같은 시계열 데이터를 활용하기 어렵기 때문에 RNN이나 LSTM 모델에서는 적용하기 어렵다.&lt;/li&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;레이어 정규화: 배치 정규화의 단점을 보완한 방법. 개별 데이터 샘플 내에서 모든 특징들의 평균과 분산을 계산하여 정규화한다. 배치 정규화와 다르게 길이가 다르거나 배치 사이즈에 무관하게 정규화가 가능하다.&lt;/li&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;인스턴스 정규화: 데이터 샘플의 각 채널에서 평균과 분산을 계산하여 정규화한다. 이미지 스타일 변환 같은 분야에서 각 데이터의 고유한 정보를 유지하기 위해 사용된다.&lt;/li&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;그룹 정규화: 인스턴스 정규화의 확장판, 배치 정규화의 단점인 배치 사이즈를 극복하기 위한 방법. 채널을 여러 그룹으로 나눈 후, 각 그룹 내에서의 평균과 분산을 계산하여 정규화하는 방법이다. 객체 인식이나 영역 분할과 같이 배치 사이즈를 늘리기 어려운 상황에서 활용 가능하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드랍아웃(Dropout), 정규화(Regularization)는 모델의 성능을 높이는데 아주 좋은 기법이지만 꼭 둘 다 쓸 필요는 없다. 하나만 쓰는게 더 좋은 결과가 나올 수 있기 때문이다. 이 3개를 다 써서 성능이 더 좋게 나온 것을 쓰면 된다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-ke-list-type=&quot;disc&quot; data-stringify-type=&quot;unordered-list&quot; data-list-tree=&quot;true&quot; data-indent=&quot;0&quot; data-border=&quot;0&quot;&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;BatchNorm, Dropout 사용 모델: 0.9802&lt;/li&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;BatchNorm 제거 모델: 0.9780&lt;/li&gt;
&lt;li data-stringify-indent=&quot;0&quot; data-stringify-border=&quot;0&quot;&gt;Dropout 제거 모델: 0.9819&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에도 학습이 진행될수록, 과적합이 일어나는 현상을 방지해주는 Early stopping이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-CNN&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;CNN의 출력을 피쳐맵(Feature map)이라 한다,&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;신경망으로 데이터를 학습 시, 모델이 학습할 때 1차원으로 평탄화하는 과정에서&amp;nbsp; 이미지 데이터가 갖고있던 &quot;형상 정보&quot;가 사라질 수 있다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;CNN은 이미지나 비디오 데이터에 좋은 성능을 낸다. 이미지가 갖고있는 형상정보, 위치정보를 잘 보존하면서 추출해내는 convolution 연산을 사용한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Stride: 입력데이터에 필터를 적용할 때 필터가 이동하는 간격을 의미. 피쳐맵의 크기를 조정할 때 사용하며, Stride의 값이 클수록 피쳐맵의 크기가 줄어든다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Padding: Convolution 연산을 수행하기 전에 입력 데이터 주변을 특정 값(주로 0)으로 채우는 연산. Convolution 연산을 반복하면 피쳐맵의 크기가 줄어들어 결국 피쳐맵의 크기가 1이 될 수 있다. 피쳐맵의 크기가 너무 작아지면 CNN을 효율적으로 할 수 없다. 이러한 문제를 방지하기 위해 padding을 사용한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;이미지 데이터는 일반적으로 RGB 3개의 채널을 가진 3차원 데이터 구조이다. 필터의 채널은 입력 데이터의 채널을 따라간다. 출력의 채널은 1이다. 필터의 갯수가 늘어나면 출력의 채널은 필터의 갯수만큼 늘어난다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;113&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cagnwM/btsMdKj291S/ow6BgDvair8TwLSFYweLm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cagnwM/btsMdKj291S/ow6BgDvair8TwLSFYweLm0/img.png&quot; data-alt=&quot;평탄화 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cagnwM/btsMdKj291S/ow6BgDvair8TwLSFYweLm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcagnwM%2FbtsMdKj291S%2Fow6BgDvair8TwLSFYweLm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;444&quot; height=&quot;113&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;113&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;평탄화 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;1156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmF7q8/btsMfhnkXbR/53c7GbT41OrmoxPKnCkS4k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmF7q8/btsMfhnkXbR/53c7GbT41OrmoxPKnCkS4k/img.jpg&quot; data-alt=&quot;Convolution 연산&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmF7q8/btsMfhnkXbR/53c7GbT41OrmoxPKnCkS4k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmF7q8%2FbtsMfhnkXbR%2F53c7GbT41OrmoxPKnCkS4k%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;370&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;1156&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Convolution 연산&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;292&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJN0ua/btsMetWpqty/z6qGM8Anym5CrXuqOSENsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJN0ua/btsMetWpqty/z6qGM8Anym5CrXuqOSENsk/img.png&quot; data-alt=&quot;출력의 채널 수 1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJN0ua/btsMetWpqty/z6qGM8Anym5CrXuqOSENsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJN0ua%2FbtsMetWpqty%2Fz6qGM8Anym5CrXuqOSENsk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;371&quot; height=&quot;167&quot; data-origin-width=&quot;648&quot; data-origin-height=&quot;292&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력의 채널 수 1&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;293&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bETXrj/btsMeMg49J2/okdMCfehwL6Btx6dyKVKh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bETXrj/btsMeMg49J2/okdMCfehwL6Btx6dyKVKh1/img.png&quot; data-alt=&quot;출력의 채널 수 필터의 갯수&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bETXrj/btsMeMg49J2/okdMCfehwL6Btx6dyKVKh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbETXrj%2FbtsMeMg49J2%2FokdMCfehwL6Btx6dyKVKh1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;185&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;293&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;출력의 채널 수 필터의 갯수&lt;/figcaption&gt;
&lt;/figure&gt;
-Pooling 연산&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Pooling 연산은 이미지 데이터의 가로, 세로 방향의 크기를 줄인 연산으로, 피쳐맵에서 중요한 정보를 추출하기 위해 사용한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;일반적으로 슬라이딩 윈도우 방식으로 동작하며 2x2, 3x3 크기의 윈도우를 사용한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Max Pooling: 가장 대표적인 pooling 방식 중 하나. 피처맵에서 최대값을 취한다. 피쳐맵에서 가장 두드러지는 특징을 가져오는 특성 때문에 피쳐맵의 중요한 정보를 선별할 수 있다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Average Pooling: 피쳐맵의 평균값을 취한다. 이미지의 전체적인 내용과 구조를 보존하는 것이 중요할 때 사용된다. 배경의 정보, 텍스처&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;학습의 효율성: 학습 파라미터를 추가하지 않고 피쳐맵(데이터 크기)을 줄일 수 있다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;잡음에 대한 강인성: 최댓값 외의 위치에 노이즈가 있을 때 영향을 받지 않는다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGZqZ/btsMf4AN20z/03sRKpi45tO5iWg0K7Z6KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGZqZ/btsMf4AN20z/03sRKpi45tO5iWg0K7Z6KK/img.png&quot; data-alt=&quot;Max Pooling&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGZqZ/btsMf4AN20z/03sRKpi45tO5iWg0K7Z6KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGZqZ%2FbtsMf4AN20z%2F03sRKpi45tO5iWg0K7Z6KK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;127&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Max Pooling&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-RNN&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;기존의 DNN, CNN은 고정된 크기에 적절치 않아, 크기가 고정되지 않는 데이터, 텍스트, 음성, 시계열 데이터를 다루는데 특화된 신경망이다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;one to one&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;one to many: 이미지 해석&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;many to one: 문장분류&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;many to many: 번역, 비디오씬 분류&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;활성함수로 tanh를 주로 사용한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Backpropa 문제로 입력과 가까운 가중치의 업데이트에 문제가 발생해서, LTSM, GRU가 등장했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-LTSM&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;망각, 입력, 출력 3개의 Gate를 통해 정보의 흐름을 조절한다. 이를 통해 시퀀스의 장기적인 정보를 잘 학습하고, 중요한 정보만 기억할 수 있다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Forget: LTSM의 1단계, 기존 정보 중 어떤 정보를 버릴지 선택&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Input: 입력 데이터 중 어떤 정보를 다음 상태로 저장할지 결정.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Output: 다음 상태로 어떤 정보를 보낼지 선택&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;585&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OXL83/btsMffXn5Ey/1YgolRzuHK7HcKkj11ILj1/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OXL83/btsMffXn5Ey/1YgolRzuHK7HcKkj11ILj1/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OXL83/btsMffXn5Ey/1YgolRzuHK7HcKkj11ILj1/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOXL83%2FbtsMffXn5Ey%2F1YgolRzuHK7HcKkj11ILj1%2Fimg.webp&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;462&quot; height=&quot;264&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;585&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-GRU&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;LTSM을 보다 단순화. Reset Gate와 Update Gate, 2개의 Gate로 유사한 성능을 내고 비용을 절감한다.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Reset Gate: 이전 정보를 얼마나 리셋할지 선택&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Update Gate: Forget + Input의 기능을 하나로 합친것과 유사하다&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;-데이터 증강 기법: Resize, Rotation, Flipping, Crop&lt;/div&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot; data-border=&quot;0&quot; data-indent=&quot;0&quot; data-list-tree=&quot;true&quot; data-stringify-type=&quot;unordered-list&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;OpenCV 라이브러리: 위의 것을 간단하게 제공&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Pytorch: 기본적으로 데이터 증강 기법 지원.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Albumentations: 색상변환,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Blur,&lt;span&gt;&amp;nbsp;&lt;/span&gt;Noise,&lt;span&gt;&amp;nbsp;&lt;/span&gt;ElasticTransform&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 지원&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;ImgAug: Affine 변환, Gaussian Blur, 라벨링 데이터도 함께 증강. numpy 배열 기반으로 동작해서 세밀하게 컨트롤 가능.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Cutout: 이미지의 일부 영역을 검은색 또는 특정 값으로 가림으로써 데이터에 변화를 주는 방법&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Mixup: 두 이미지의 픽셀 값을 선형적으로 조합(강아지 +고양이 mix)하여 새로운 이미지 생성. 해당 이미지들의 정답 라벨링도 동일한 비율로 조합.&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;Cutmix: Cutout + Mixup&lt;/li&gt;
&lt;li data-stringify-border=&quot;0&quot; data-stringify-indent=&quot;0&quot;&gt;MmgAugment: 문서 및 OCR 관련 데이터 증강에 특화, 배경 제거, 문서 구겨짐 효과, 노이즈 추가 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업스테이지 AI에서 제공해주는 딥러닝 강의 후기이다. 딥러닝의 구성요소 모델, 손실함수, Optimizer 등에 대해서 자세히 배우게 되고, 그만큼 분량이 많았던 파트였다. 여기에 나온 CNN, RNN 말고도 LSTM, ResNet, GoogLeNet 등의 모델의 등장을 간결하게 소개해줬지만 분량상 넣기 힘들었다.&amp;nbsp;&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>UpstageAILab</category>
      <category>국비지원</category>
      <category>업스테이지패스트캠퍼스</category>
      <category>패스트캠퍼스</category>
      <category>패스트캠퍼스AI부트캠프</category>
      <category>패스트캠퍼스업스테이지부트캠프</category>
      <category>패스트캠퍼스업스테이지에이아이랩</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/11</guid>
      <comments>https://jyun34.tistory.com/11#entry11comment</comments>
      <pubDate>Tue, 11 Feb 2025 20:23:17 +0900</pubDate>
    </item>
    <item>
      <title>Upstage AI Lab 6기 Git 강의 후기</title>
      <link>https://jyun34.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 최우영 강사님의 Git 강의 후기이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git이란 버전관리용으로 쓰는데 용이한 개발도구이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다보니 개발자가 되고자 한다면 꼭 배우는 과정이라나.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git은 Linux 개발자가 Linux 커널 관리를 위해 만든 버전관리 시스템이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러다보니 Git Bash에서 사용하는 명령어들은 리눅스 명령어 기반으로 만들어져있어, 리눅스를 만져본 사람들이라면 익숙할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Xdoz/btsLjjGSeX9/oUCaL37H9hDqV4fAZHwYrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Xdoz/btsLjjGSeX9/oUCaL37H9hDqV4fAZHwYrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Xdoz/btsLjjGSeX9/oUCaL37H9hDqV4fAZHwYrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Xdoz%2FbtsLjjGSeX9%2FoUCaL37H9hDqV4fAZHwYrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;563&quot; height=&quot;123&quot; data-origin-width=&quot;563&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리눅스 명령어는 거의 모든 운영체제에서 지원을 하니 알아두면 사용방법을 찾을 필요가 없어 편리하다. 사용방법 자체가 편하다고 생각하진 않지만...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls는 해당 폴더에 있는 파일, 폴더를 표시해주고, cd는 해당 폴더로 이동, pwd는 현재 위치 확인, mkdir은 폴더 만들기, cp는 복사, mv는 이동, 이름바꾸기, touch는 생성, cat은 출력, rm은 삭제이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외에 각 명령어마다 -a나 -b 등으로 추가 명령어가 더 있으니 궁금하면 찾아보시라.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nvzYP/btsLj0moWx3/ifNM9dieatJEmnW4gXqDf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nvzYP/btsLj0moWx3/ifNM9dieatJEmnW4gXqDf0/img.png&quot; data-alt=&quot;vim으로 만든 hello.py&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nvzYP/btsLj0moWx3/ifNM9dieatJEmnW4gXqDf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnvzYP%2FbtsLj0moWx3%2FifNM9dieatJEmnW4gXqDf0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;459&quot; height=&quot;257&quot; data-origin-width=&quot;723&quot; data-origin-height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vim으로 만든 hello.py&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GO99H/btsLiBn8soB/VsKbRZmzpfCv3NSxxQxa31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GO99H/btsLiBn8soB/VsKbRZmzpfCv3NSxxQxa31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GO99H/btsLiBn8soB/VsKbRZmzpfCv3NSxxQxa31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGO99H%2FbtsLiBn8soB%2FVsKbRZmzpfCv3NSxxQxa31%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;325&quot; height=&quot;43&quot; data-origin-width=&quot;475&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vim은 리눅스 환경에서 지원해주는 텍스트 편집기이다. vim '파일' 이름 뒤에 .txt나 .py 같은 확장자를 넣으면 해당 파일이 만들어지면서 입력화면이 출력된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vim은 여러가지 모드가 있는데, normal mode, insert mode, 그 외 기타가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;normal mode에서는 어떠한 입력도 명령어로 되니 텍스트 입력이 안된다. 'a'나 'i'를 눌러야 insert mode에 들어가 텍스트 입력을 할 수 있다. 그 외에 'dd'로 줄 삭제, 'h','j','k','l'로 방향 입력을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;insert mode에서는 원하는대로 텍스트를 입력하면 된다. esc로 normal mode로 빠져나올 수 있으며 ':wq'로 저장하고 나가기, ':q!'로 강제종료하고 나가기 등을 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python 실행은 python '파일 이름' 하면 실행된다. c는 gcc로 하면 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 파일 중에 '.md' 확장자를 보는 경우가 있을 것이다. 제대로 들여다보는게 아닌 이상 그냥 txt파일인가? 하고 넘어가는 경우가 부지기수일 것이다. 이것은 'MarkDown'이라는 파일 형식이고, 개인적으로 html과 비슷하다는 느낌을 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.heropy.dev/p/B74sNE&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.heropy.dev/p/B74sNE&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1734311080375&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;마크다운(MarkDown) 사용법 총정리&quot; data-og-description=&quot;자바스크립트 함수에 대한 기본적인 사용 방법부터 관련 용어, 고급 기법 등의 관련된 다양한 함수 패턴과 여러 개념을 살펴봅니다.&quot; data-og-host=&quot;www.heropy.dev&quot; data-og-source-url=&quot;https://www.heropy.dev/p/B74sNE&quot; data-og-url=&quot;https://www.heropy.dev/p/B74sNE&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOpb8i/hyXOiguDkw/EkuumZastgJkJZd2YSLey0/img.jpg?width=1000&amp;amp;height=571&amp;amp;face=0_0_1000_571,https://scrap.kakaocdn.net/dn/jNoXk/hyXKx7sLd6/7APyYpLa6qTkzTYOJJMJDk/img.jpg?width=1000&amp;amp;height=571&amp;amp;face=0_0_1000_571,https://scrap.kakaocdn.net/dn/h4Cv4/hyXOc8pQYt/TmfGlEpxLtPhi70G4R87rk/img.jpg?width=1024&amp;amp;height=772&amp;amp;face=0_0_1024_772&quot;&gt;&lt;a href=&quot;https://www.heropy.dev/p/B74sNE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.heropy.dev/p/B74sNE&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOpb8i/hyXOiguDkw/EkuumZastgJkJZd2YSLey0/img.jpg?width=1000&amp;amp;height=571&amp;amp;face=0_0_1000_571,https://scrap.kakaocdn.net/dn/jNoXk/hyXKx7sLd6/7APyYpLa6qTkzTYOJJMJDk/img.jpg?width=1000&amp;amp;height=571&amp;amp;face=0_0_1000_571,https://scrap.kakaocdn.net/dn/h4Cv4/hyXOc8pQYt/TmfGlEpxLtPhi70G4R87rk/img.jpg?width=1024&amp;amp;height=772&amp;amp;face=0_0_1024_772');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;마크다운(MarkDown) 사용법 총정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트 함수에 대한 기본적인 사용 방법부터 관련 용어, 고급 기법 등의 관련된 다양한 함수 패턴과 여러 개념을 살펴봅니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.heropy.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 방법은 이 사람이 너무 잘 정리해놔서 링크를 첨부했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tYMJx/btsLi0Outjx/zCdkWMzGojka9UakkWq1VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tYMJx/btsLi0Outjx/zCdkWMzGojka9UakkWq1VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tYMJx/btsLi0Outjx/zCdkWMzGojka9UakkWq1VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtYMJx%2FbtsLi0Outjx%2FzCdkWMzGojka9UakkWq1VK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;559&quot; height=&quot;318&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;885&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnRbhK/btsLiMpq1ID/81oRTWoPNTetOLJaHEuqcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnRbhK/btsLiMpq1ID/81oRTWoPNTetOLJaHEuqcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnRbhK/btsLiMpq1ID/81oRTWoPNTetOLJaHEuqcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnRbhK%2FbtsLiMpq1ID%2F81oRTWoPNTetOLJaHEuqcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;544&quot; height=&quot;338&quot; data-origin-width=&quot;1423&quot; data-origin-height=&quot;885&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MarkDown을 활용해 해당 파일을 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git의 실행과정은 기본적으로 add, commit, push, pull로 구성되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add, commit, push로 github의 repository에 변경사항을 수정하고 수정된 내용을 pull로 가져오는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;832&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E5VLk/btsLiUU3S7A/8Sa4gEB7ATryoRelwTKfaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E5VLk/btsLiUU3S7A/8Sa4gEB7ATryoRelwTKfaK/img.png&quot; data-alt=&quot;git의 실행과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E5VLk/btsLiUU3S7A/8Sa4gEB7ATryoRelwTKfaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE5VLk%2FbtsLiUU3S7A%2F8Sa4gEB7ATryoRelwTKfaK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;393&quot; height=&quot;361&quot; data-origin-width=&quot;906&quot; data-origin-height=&quot;832&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;git의 실행과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git add는 Staging Area라고 하는 임시공간에 수정한 파일을 올려두는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git commit은 수정할 파일을 로컬저장소에 올려두는 것이다. 이 과정에서 메시지를 남길 수 있는데 수정사항을 간결하게 남겨두면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git push는 로컬저장소에 있는 변경사항을 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;github의 원격저장소 repository에&lt;/span&gt; 반영하는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git pull은 원격저장소에서 로컬저장소에 반영하는 것이다. 이 과정은 fetch와 merge로 나뉘어있는데 git pull 명령어로 퉁칠 수 있다. 더 안정적으로 하고싶은 사람은 fetch를 선호한다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git을 쓰기 위해선 처음엔 git init을 써줘야한다. git init을 쓰면 해당 폴더에 .git이라는 숨겨진 폴더가 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;205&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qeSDK/btsLjUARFQs/loKIXa3X6j9KMKngvGkjs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qeSDK/btsLjUARFQs/loKIXa3X6j9KMKngvGkjs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qeSDK/btsLjUARFQs/loKIXa3X6j9KMKngvGkjs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqeSDK%2FbtsLjUARFQs%2FloKIXa3X6j9KMKngvGkjs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;486&quot; height=&quot;138&quot; data-origin-width=&quot;722&quot; data-origin-height=&quot;205&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 실습을 위해 vim으로 대충 파일 만들고 git add를 해줬다. warning은 별거 아니고 무시해도 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQNSaf/btsLkcnL1xv/FegNSNS6Gn21uBKRxWcE71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQNSaf/btsLkcnL1xv/FegNSNS6Gn21uBKRxWcE71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQNSaf/btsLkcnL1xv/FegNSNS6Gn21uBKRxWcE71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQNSaf%2FbtsLkcnL1xv%2FFegNSNS6Gn21uBKRxWcE71%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;529&quot; height=&quot;125&quot; data-origin-width=&quot;593&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add만 해서는 github에 올릴 수 없다. 위에 말했던 것처럼 commit, push 과정이 더 있어야 올릴 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;add 하고는 그냥 git commit 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PzIEO/btsLkFQCpOI/nYmOvVbTvctQLZpQ8KAH4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PzIEO/btsLkFQCpOI/nYmOvVbTvctQLZpQ8KAH4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PzIEO/btsLkFQCpOI/nYmOvVbTvctQLZpQ8KAH4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPzIEO%2FbtsLkFQCpOI%2FnYmOvVbTvctQLZpQ8KAH4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;571&quot; height=&quot;41&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;41&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엔터를 입력하면 이상한 화면이 나오는데, 그냥 메시지 입력하라는 말이다. 그런데 아무 말 적는게 아니고 필요한 말을 문장형이 아닌 구나 절의 형태로 입력해야한다고 한다. 대충 개발자들의 전통이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;암튼 할 말 적고 esc, :wq를 입력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;209&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lm8lS/btsLl2qsmY0/igu1feY2L1hxKNPolKxil0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lm8lS/btsLl2qsmY0/igu1feY2L1hxKNPolKxil0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lm8lS/btsLl2qsmY0/igu1feY2L1hxKNPolKxil0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flm8lS%2FbtsLl2qsmY0%2Figu1feY2L1hxKNPolKxil0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;184&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;209&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2gpmd/btsLjIN49Rr/fk1efgleNUd6a8DQswHnj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2gpmd/btsLjIN49Rr/fk1efgleNUd6a8DQswHnj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2gpmd/btsLjIN49Rr/fk1efgleNUd6a8DQswHnj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2gpmd%2FbtsLjIN49Rr%2Ffk1efgleNUd6a8DQswHnj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;43&quot; data-origin-width=&quot;571&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 화면으로 바뀌는게 싫다면 그냥 '-m' 하고 메시지를 적는 방법이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git status 명령어를 통해 해당 파일이 commit 되어있는지 알 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git push를 하기 위해서는 일단 원격저장소가 있어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;github에 로그인 해서 새 repository를 만든다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1892&quot; data-origin-height=&quot;853&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kGeOB/btsLj4i4EWe/THD1epn6n7GGi8Jxq72Cm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kGeOB/btsLj4i4EWe/THD1epn6n7GGi8Jxq72Cm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kGeOB/btsLj4i4EWe/THD1epn6n7GGi8Jxq72Cm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkGeOB%2FbtsLj4i4EWe%2FTHD1epn6n7GGi8Jxq72Cm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;576&quot; height=&quot;260&quot; data-origin-width=&quot;1892&quot; data-origin-height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;900&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QRBGL/btsLjVs6zw6/iuF8G3FKPn7DUpqMBnHl51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QRBGL/btsLjVs6zw6/iuF8G3FKPn7DUpqMBnHl51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QRBGL/btsLjVs6zw6/iuF8G3FKPn7DUpqMBnHl51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQRBGL%2FbtsLjVs6zw6%2FiuF8G3FKPn7DUpqMBnHl51%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;523&quot; height=&quot;900&quot; data-origin-width=&quot;1225&quot; data-origin-height=&quot;900&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 Repository 이름을 지어주고, 왠만하면 public, MIT License를 골라준다. MIT License는 그냥 출처 표시라고 생각하면 된다. github에서도 여러모로 저작권 문제가 있다는데 MIT License는 관대하다고 한다. public으로 안 하면 여러모로 불편하다고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/C7HNQ/btsLlkSFbgQ/kaopgMff32A93VVxLXr5sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/C7HNQ/btsLlkSFbgQ/kaopgMff32A93VVxLXr5sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/C7HNQ/btsLlkSFbgQ/kaopgMff32A93VVxLXr5sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FC7HNQ%2FbtsLlkSFbgQ%2FkaopgMff32A93VVxLXr5sK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;516&quot; height=&quot;335&quot; data-origin-width=&quot;976&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;830&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OZDfS/btsLl0sEA8E/uBcoOKY9otkW8l3iih4ok0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OZDfS/btsLl0sEA8E/uBcoOKY9otkW8l3iih4ok0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OZDfS/btsLl0sEA8E/uBcoOKY9otkW8l3iih4ok0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOZDfS%2FbtsLl0sEA8E%2FuBcoOKY9otkW8l3iih4ok0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;838&quot; height=&quot;373&quot; data-origin-width=&quot;1866&quot; data-origin-height=&quot;830&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다 만들었으면 초록색 코드 버튼을 누르고 https 주소를 복사한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbqzC5/btsLlJq57AE/ASm2YMD6kR95GXyFw3soV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbqzC5/btsLlJq57AE/ASm2YMD6kR95GXyFw3soV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbqzC5/btsLlJq57AE/ASm2YMD6kR95GXyFw3soV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbqzC5%2FbtsLlJq57AE%2FASm2YMD6kR95GXyFw3soV0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;478&quot; height=&quot;169&quot; data-origin-width=&quot;658&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git clone 주소 하면 여기 repository에 push 할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git push origin {branch name}을 하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 origin은 github 저장소 이름이라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mfkXv/btsLjGJFcUh/0A5WnNhfBL5UiYgpFcMrOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mfkXv/btsLjGJFcUh/0A5WnNhfBL5UiYgpFcMrOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mfkXv/btsLjGJFcUh/0A5WnNhfBL5UiYgpFcMrOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmfkXv%2FbtsLjGJFcUh%2F0A5WnNhfBL5UiYgpFcMrOK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;522&quot; height=&quot;202&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원격 repository가 제대로 설정이 안되면 push가 안 될 수 있는데 git remote add origin 주소를 하고 다시 push 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;481&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqDmRQ/btsLkhWIEiG/XHnGCyVbpT8SfMrLJzjJlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqDmRQ/btsLkhWIEiG/XHnGCyVbpT8SfMrLJzjJlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqDmRQ/btsLkhWIEiG/XHnGCyVbpT8SfMrLJzjJlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqDmRQ%2FbtsLkhWIEiG%2FXHnGCyVbpT8SfMrLJzjJlK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;563&quot; height=&quot;235&quot; data-origin-width=&quot;1153&quot; data-origin-height=&quot;481&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 branch를 찾아서 보면 파일이 올라와있는 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 이 작업을 할 때는 branch를 미리 만들고 해야한다. branch를 만들고 그걸 main branch에 merge 하는 것으로 협업을 하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crXEj7/btsLjGCUlpe/ObVjXnUD3KEeIwr5qNn5m0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crXEj7/btsLjGCUlpe/ObVjXnUD3KEeIwr5qNn5m0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crXEj7/btsLjGCUlpe/ObVjXnUD3KEeIwr5qNn5m0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrXEj7%2FbtsLjGCUlpe%2FObVjXnUD3KEeIwr5qNn5m0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;491&quot; height=&quot;117&quot; data-origin-width=&quot;579&quot; data-origin-height=&quot;138&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git branch {branch name}으로 branch를 만든다. git branch 명령어로 만든 branch를 확인할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git branch -D {branch name}으로 해당 branch를 삭제할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BCJyB/btsLk9DUoMN/UO4eI6eZsz7MHOCFdiPAe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BCJyB/btsLk9DUoMN/UO4eI6eZsz7MHOCFdiPAe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BCJyB/btsLk9DUoMN/UO4eI6eZsz7MHOCFdiPAe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBCJyB%2FbtsLk9DUoMN%2FUO4eI6eZsz7MHOCFdiPAe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;479&quot; height=&quot;85&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;git switch {branch name} 으로 branch를 바꿀 수 있다. 예전에는 git checkout 명령어였는데, 이 명령어는 복구하는데도 써서 헷갈리게 한다는 단점이 있었고, 이를 switchd와 restore로 나눈 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;727&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bO3gHU/btsLkGB1UI8/hERYYraFDvOB2miuEVIEX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bO3gHU/btsLkGB1UI8/hERYYraFDvOB2miuEVIEX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bO3gHU/btsLkGB1UI8/hERYYraFDvOB2miuEVIEX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbO3gHU%2FbtsLkGB1UI8%2FhERYYraFDvOB2miuEVIEX0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;475&quot; height=&quot;534&quot; data-origin-width=&quot;647&quot; data-origin-height=&quot;727&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 new branch에 hi.py 파일을 만들어서 master branch에 merge 시킨 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;merge 하기 전에는 master branch에 없었던 hi.py가 merge를 하니 master branch에 통합된 것을 알 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 commit 하지 않으면 만들어진 hi.py가 branch를 따라다녀서 merge하지 않아도 다른 branch에서 발견된다. 그럼 관리가 되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;63&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYYC84/btsLl2DZZSB/LhEA2oS31dxcYqpEcLrSWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYYC84/btsLl2DZZSB/LhEA2oS31dxcYqpEcLrSWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYYC84/btsLl2DZZSB/LhEA2oS31dxcYqpEcLrSWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYYC84%2FbtsLl2DZZSB%2FLhEA2oS31dxcYqpEcLrSWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;498&quot; height=&quot;54&quot; data-origin-width=&quot;581&quot; data-origin-height=&quot;63&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;merge를 한 다음에는 통합시킨 branch를 없앤다. 그대로 방치하면 개발하는데에 방해된다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 merge를 하다보면 파일이 충돌할 때가 있는데 그 때는 vi 편집기로 유지하고싶은 코드만 남기고 지우면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못 add한게 있으면 git reset HEAD {filename}으로 stage 영역에서 파일을 내릴 수 있고, git revert --no-commit HEAD~{커밋한 갯수}..으로 커밋한 것을 되돌릴 수 있다. 커밋한 사실 자체를 없앨 순 있지만 별로 좋은 방법은 아니라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 실제로 Upstage 6기생들과 조를 짜서 간단하게 파일을 commit하고 merge하는 경험을 했다. 부트캠프이기에 할 수 있는 귀중한 경험이었고 이 후에 있을 경진대회 때 계속 쓰면서 숙련도가 더 늘어날 것이라 예상되며 개발자의 길에 한발짝 더 나아간 기분이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인적으로는 강의자료가 실습과정을 좀 제대로 담았으면 좋겠다라는 생각이 든다. 글에는 비교적 간단하게 써놨는데, 워낙 이곳저곳을 들쑤시는 작업을 하다보니 화면공유를 통한 실습과정을 놓치면 따라갈 방도가 없었다.&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>UpstageAILab</category>
      <category>국비지원</category>
      <category>업스테이지패스트캠퍼스</category>
      <category>패스트캠퍼스</category>
      <category>패스트캠퍼스AI부트캠프</category>
      <category>패스트캠퍼스업스테이지부트캠프</category>
      <category>패스트캠퍼스업스테이지에이아이랩</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/10</guid>
      <comments>https://jyun34.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 16 Dec 2024 23:09:10 +0900</pubDate>
    </item>
    <item>
      <title>컴퓨터 공학 개론 후기</title>
      <link>https://jyun34.tistory.com/9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 김용담 강사님의 컴퓨터 공학 개론 후기이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;김용담 강사님의 경우 패스트캠퍼스에 데이터분석이나 딥러닝 강의를 올려두신 분이고 이전에 내일배움카드를 이용해서 그 강의를 들은 적 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전에도 느꼈었는데 이번 컴퓨터 공학 개론에서도 수업 내용이 상당히 심오하고 탐구적이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 말해서 나는 전공자에 가깝기도 하고 코딩테스트 때문에 자료구조도 공부했기 때문에 대부분 알고있는 내용이라 이번 시간은 집중이 안되고 상당히 지루했다. 비전공자 수업에 안 맞게 너무 딥하게 느껴지기도 하고.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강의 내용은 자료구조, 컴퓨터 구조, 운영체제로 이뤄져있었다. 생각보다 자료는 많지 않은데 자료량과 맞지 않는 강사님의 입담으로 진행된 강의였다. 원래는 비전공자를 위해 최소화해서 갖고온 것 같은데 아는게 많다보니 전공자 출신들이 궁금해하면 다 답변해주면서 시간이 많이 갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 상식적으로 알아야하는 깨알 꿀팁: Quick Search는 O(nlogn)의 시간 복잡도를 가지지만 최악엔 O(n^2)의 시간복잡도를 가진다. 면접에 나오는 질문이라고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;513&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs84Ew/btsLdxFyCfj/vE3PirJo7SW11x6rQtLaw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs84Ew/btsLdxFyCfj/vE3PirJo7SW11x6rQtLaw0/img.png&quot; data-alt=&quot;강의 시간에 직접 구현한 Binary Search&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs84Ew/btsLdxFyCfj/vE3PirJo7SW11x6rQtLaw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs84Ew%2FbtsLdxFyCfj%2FvE3PirJo7SW11x6rQtLaw0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;256&quot; height=&quot;357&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;513&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;강의 시간에 직접 구현한 Binary Search&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 개인적으로 이런 딥한 강의보다, OT 후기 때 언급했었던 네카라쿠베 코딩테스트 강의를 파기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포괄적으로 보자면 여기에 자료구조 공부가 들어있기도 하고, 취업준비를 위해 모인 부트캠프라면 이게 더 맞다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 강의는 전반적으로 개념과 예시를 엄청 자세하게(...너무 길어서 건너뛰기도 많이 했다.) 설명해주고, 코딩 공부를 할 때 좋은 사이트 '백준'에서 실습하는 식으로 진행됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기초 문제부터 콕콕 집어주는 느낌이라 까먹은 개념을 다잡는데 도움이 크게 됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 아쉬웠던건 '백준'이라는 사이트가 가진 문제점을 설명 안 해준달까, 뭐, 구글에 간단하게 검색하니 나오긴 했지만.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A566G/btsLdOfYgUh/J6x8WhvlSwpgtjsGc8CiKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A566G/btsLdOfYgUh/J6x8WhvlSwpgtjsGc8CiKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A566G/btsLdOfYgUh/J6x8WhvlSwpgtjsGc8CiKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA566G%2FbtsLdOfYgUh%2FJ6x8WhvlSwpgtjsGc8CiKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;342&quot; height=&quot;98&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 생각하기엔 백준 사이트는 시간복잡도에 관한 기준이 좀 빡빡한 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 파이썬의 코드 input()은 최적화가 되어있지 않은 입력이라 시간을 꽤 잡아먹는 편이다. 그래서 무조건 sys.stdin.readline()으로 바꿔야했다. 안 그러면 채점을 안 해주는 문제가 너무 많았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dfs 문제를 풀 때도 함수 호출을 너무 많이 하게되면 채점을 안 해준다. sys.setrecursionlimit(10**6) 같은 코드를 써야 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 패스트캠퍼스 온라인 강의장 안에 컴퓨터 구조나 운영체제같은 대학교에서 배우는 과목들도 다 있었다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사실 컴퓨터 구조 같은 과목은 현장에서 쓸 사람이 별로 없다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이게 사실상 반도체 설계, cpu 설계 이런 하드웨어적인 성향이 강한 사람이 아니고서야 딱히 그렇게까지 막 필수로 알아야하는 지식은 아니라고 생각한다. 실제로 초반에 강사가 그렇게 말을 한다.(넘길 사람은 넘기라는 뜻)&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 컴퓨터에 대한 기본지식이 많긴 해서 상식 탑재용으로 듣기 좋다고 생각한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;김용담 강사님도 이번 강의를 맛보기용이라고 하셨으니 어느 정도 사실이라 본다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이거 말고도 데이터베이스, 네트워크도 있지만 이 둘은 시간관계상 패스하고 짧은 시간동안 데이터베이스 지식이 왜 필요한지를 설명해주셨다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이전 통계학에서 배웠던 벡터. 이것은 머신러닝을 할 때 엄청 중요한 역할을 하는데, 대강 듣기로는 데이터 간의 벡터거리 관련해서 알아야하기 때문에 데이터베이스가 중요하다고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내가 알기로는 K-cluster가 그런 종류였던 것 같기도 하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>UpstageAILab</category>
      <category>국비지원</category>
      <category>업스테이지패스트캠퍼스</category>
      <category>패스트캠퍼스</category>
      <category>패스트캠퍼스AI부트캠프</category>
      <category>패스트캠퍼스업스테이지부트캠프</category>
      <category>패스트캠퍼스업스테이지에이아이랩</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/9</guid>
      <comments>https://jyun34.tistory.com/9#entry9comment</comments>
      <pubDate>Wed, 11 Dec 2024 07:55:38 +0900</pubDate>
    </item>
    <item>
      <title>프로젝트 수행을 위한 이론 1:Statistic 후기</title>
      <link>https://jyun34.tistory.com/8</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;statistics란 통계학을 의미한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;AI를 다루는데 왜 통계학을 배울까?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그건 AI를 다루는데에 있어서 사람이 데이터를 만져야하는 전처리 과정은 필수로 존재하는데,&amp;nbsp; 그 전처리 과정에서 데이터가 올바른지 검증해서 잘못된 데이터를 넣지 않기 위해서이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 한 시골마을에 [28, 29, 60, 70, 70, 80]의 나이를 가진 사람들이 있을 때 이 마을의 평균 나이는 56세이다. 50대의 사람이 전혀 없는데 이 마을을 50대의 마을이라 하는 것은 얼토당토않는 이야기인 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 밖에도 옛날엔 소아병 발병시기와 아이스크림 소비량이 여름에 같이 증가해서 아이스크림을 덜 먹으면 소아병이 발병하지 않을 거라는 말도 안되는 말도 있었다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 통계학을 시작할 땐 기초지식으로 중, 고등학생 때 배우는 확률과 통계의 내용을 배웠다. 순열, 조합, 조건부 확률 등등.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후엔 변수, 모집단, 표본, 확률분포, 정규분포, 신뢰구간, 귀무가설, 대립가설, t검정 등 대학 때부터 배우는 수학 전공생이 아니면 생소한 개념이 나온다. 특히 딥러닝 분야는 수학이 많이 나오다보니 수학 전공생들이 많이 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 다음 학습내용으로는 내가 몰랐던 내용을 위주로 정리하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3일동안 9시간씩 진행한 내용으로 진짜 많은 내용이 있지만 중요하다고 생각되는 부분만 정리하도록 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;변수란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립변수: 다른 변수에 영향을 주는 변수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종속변수: 영향을 받는 변수, 독립변수에 의해 변화되는 변수.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시: 농사를 지을 때 햇빛, 물(독립변수)와 수확량(종속변수)의 관계.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;질적변수: 분류를 위한 용어로 정의되는 변수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비서열 질적변수: 서열이 정해질 수 없는 변수 (성별, 인종, 학력)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서열 질적변수: 서열적으로 구분할 수 있는 변수 (초졸, 중졸, 고졸)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;양적변수: 양의 크기를 나타내기 위해 수량으로 표시되는 변수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속변수: 주어진 범위 내에 어떤 값도 가질 수 있는 변수 (체중, 나이, 키)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비연속변수: 특정 수치만을 가질 수 있는 변수 (IQ, 가족구성원 수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변수로 이뤄진 데이터를 성격에 따라 다음과 같이 구분할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;범주형 척도: 데이터들을 구분지어 나눌 수 있는 척도.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명목척도: 수나 순서와 관계없이 이름만 붙여진 척도 (남/여,서울/세종/부산/대구/인천/광주/대전/울산)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서열척도: 숫자나 연산과는 관련없으나, 순서(서열)를 구분할 수 있는 척도 (1등, 2등, 3등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;연속형 척도: 연속하는 속성의 데이터를 연구나 조사의 목적에 맞게 구분한 척도&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등간척도: 측정한 자료들을 대상으로 학ㅂ과 차가 가능한 척도 (온도, 수학 점수)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비율척도: 등간척도의 성질과 함께 '없다'의 개념인 0값도 가지는 척도 (길이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모집단: 통계적 연구대상이 되는 전체 집합 (대한민국 국민 전체, 유튜브 회원 전체)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모수: 모집단을 분석하여 알아낸 결과수치, 모집단의 특성값 (모평균: &amp;mu;, 모분산: &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: left;&quot;&gt;&amp;sigma;^2, 모표준편차: &lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: left;&quot;&gt;&amp;sigma;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: left;&quot;&gt;표본: 과학적인 방법으로 모집단을 대표할 수 있는 일부를 추출하여 선택한 모집단의 일부&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;통계량: 표본을 분석하여 알아낸 결과수치 (표본평균: x, 표본분산: s^2, 표본표준편차: s)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;295&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Awi3m/btsK5DdDg3i/eU43CKtykzLogslL8rNJF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Awi3m/btsK5DdDg3i/eU43CKtykzLogslL8rNJF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Awi3m/btsK5DdDg3i/eU43CKtykzLogslL8rNJF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAwi3m%2FbtsK5DdDg3i%2FeU43CKtykzLogslL8rNJF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;668&quot; height=&quot;295&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;295&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술통계량: 통계량을 기술통계량이라고 한다. 기술하고자 하는 대상은 표본이며, 표본이 모집단에 대한 대표성을 가지고 있음을 설명한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본의 중심을 설명하는 것이기에 대표값이라고 하며 중심경향도라고 부리기도 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중심경향도의 예시: 평균, 중앙값, 최빈값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균: 데이터의 모든 값을 합쳐, 데이터 개수만큼 나눈 값. 데이터의 중심값을 계산하기에 가장 흔한 방법으로 데이터가 대칭적일 때는 중앙값과 비슷하게 나오지만, 극단적으로 값이 낮거나 높은 이상치에 영향을 많이 받는다. 산술평균, 가중평균, 기하평균, 조화평균 등 다양하게 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중앙값: 주어진 데이터를 정렬했을 때 가장 중앙에 위치한 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최빈값: 데이터에서 가장 많이 나오는 값. 평균값으로 설명하기 어려울 때 잘 언급되는 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;([28, 29, 60, 70, 70, 80]의 나이를 가진 사람들이 있을 때 최빈값은 70이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모분산: 표본의 분포 특성을 잘 드러내지 못하는 평균의 단점을 해소하기 위해 평균과 각 표본들이 얼마나 떨어져 있는지를 측정한 차이(편차)를 확인함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본분산: 모집단을 기준으로 하지 않고, 표본을 선정하여 표본의 개수를 (n-1)로 계산한 분산을 표본분산이라 하며, (n-1)을 자유도라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(자유도: 통계학에서 데이터를 분석할 때 독립적으로 변할 수 있는 값들의 수, n에서 1을 빼는 이유는 표본 평균을 계산할 때, 이미 하나의 제약조건을 사용하기 때문이다.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLps8o/btsK4JZZhcl/pSdlKWgkNagafa06yQqeT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLps8o/btsK4JZZhcl/pSdlKWgkNagafa06yQqeT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLps8o/btsK4JZZhcl/pSdlKWgkNagafa06yQqeT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLps8o%2FbtsK4JZZhcl%2FpSdlKWgkNagafa06yQqeT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;252&quot; height=&quot;156&quot; data-origin-width=&quot;264&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규분포: 통계학에서 가장 널리 사용되는 확률분포 중 하나로, 연속형 확률변수가 특정한 패턴을 따르는 분포를 의미.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연속형 확률변수: 특정 구간 내의 모든 실수 값을 가질 수 있는 변수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b863ZW/btsK5Bz5R78/K5Vou1Es1QZP4ipkMckfq1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b863ZW/btsK5Bz5R78/K5Vou1Es1QZP4ipkMckfq1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b863ZW/btsK5Bz5R78/K5Vou1Es1QZP4ipkMckfq1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb863ZW%2FbtsK5Bz5R78%2FK5Vou1Es1QZP4ipkMckfq1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;294&quot; data-origin-width=&quot;759&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표본의 특성을 구체적으로 살펴보기 위해서는 표본이 최댓값이나 최솟값에 몰려 있는 정도를 파악해야하며 이를 비대칭도로 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜도: 분포의 비대칭도를 나타내는 통계량. 비대칭이 커질수록 왜도의 절대값은 증가하며 일반적으로 왜도가 -1~+1 범위는 치우침이 없는 데이터라고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zNIDp/btsK45BvHAK/jHDxGzK2u9BHv6DlLa4JwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zNIDp/btsK45BvHAK/jHDxGzK2u9BHv6DlLa4JwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zNIDp/btsK45BvHAK/jHDxGzK2u9BHv6DlLa4JwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzNIDp%2FbtsK45BvHAK%2FjHDxGzK2u9BHv6DlLa4JwK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;364&quot; height=&quot;290&quot; data-origin-width=&quot;550&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첨도: 꼬리 부분의 길이가 뾰족함으로 데이터의 분포를 알 수있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOVCYi/btsK470pAcq/9x8atxSQFongXEztwAguBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOVCYi/btsK470pAcq/9x8atxSQFongXEztwAguBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOVCYi/btsK470pAcq/9x8atxSQFongXEztwAguBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOVCYi%2FbtsK470pAcq%2F9x8atxSQFongXEztwAguBk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;378&quot; height=&quot;90&quot; data-origin-width=&quot;534&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뉴스에서 통계를 보면 히스토그램, 원그래프 등 다양하게 있다. 이런 것을 다루기 위해 우리는 파이썬의 pandas와 matplotlib, seaborn 등을 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 중 생소하고 어렵게 느껴질 부분은 상자수염그림이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;425&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kHc9S/btsK3kfLKEk/fMNHrKWFQWk7j0FKKFI7eK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kHc9S/btsK3kfLKEk/fMNHrKWFQWk7j0FKKFI7eK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kHc9S/btsK3kfLKEk/fMNHrKWFQWk7j0FKKFI7eK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkHc9S%2FbtsK3kfLKEk%2FfMNHrKWFQWk7j0FKKFI7eK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;407&quot; height=&quot;287&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;425&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvwkyf/btsK3RRS4Dv/8aQJKdTm22P6B3ONvBljMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvwkyf/btsK3RRS4Dv/8aQJKdTm22P6B3ONvBljMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvwkyf/btsK3RRS4Dv/8aQJKdTm22P6B3ONvBljMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcvwkyf%2FbtsK3RRS4Dv%2F8aQJKdTm22P6B3ONvBljMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;510&quot; height=&quot;230&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상자수염그림: 데이터 분포와 중심 경향을 시각적으로 나타내는 통계학적 도구.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사분위수: 값을 같은 갯수로 4개로 나눈 각각의 값, describe() 함수로 봤을 때 나오는 25, 50, 75, 100의 내용으로 보면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1사분위(Q1): 누적백분율 25%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2사분위(Q2): 누적백분율 50%, Median(중앙값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3사분위(Q3): 누적백분율 75%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;4사분위:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;누적백분율 100%&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IQR: Q3 - Q1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Minimum: Q1 - 1.5*IQR&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Maximum: Q3 - 1.5*IQR&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Outliers: Minimum보다 작고 Maximum보다 큰 값. 관측된 데이터 범위에서 많이 벗어날 정도로 작은 값, 큰 값을 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;추리 통계: 분석된 자료를 근거로 모집단의 특성을 추론하는 것이 목적 (점추정, 구간추정, 가설, 검정 통계량 등)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;점추정: 모수를 어떤 특정 수치로 표현하는 것&amp;nbsp; (정확하게 90점으로 표현)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추정량: 표본으로부터 관찰된 값을 토대로 특정 모수를 추정하기 위한 함수 또는 공식을 의미. (표본평균을 구하는 공식)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추정치: 추정량을 사용해 실제 표본 데이터에서 계산된 값을 의미함.&amp;nbsp; (특정 표본 데이터를 이용해 계산한 평균값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;바람직한 점추정량 조건&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 평균 제곱 오차(MSE): 평균 제곱 오차가 최소화되어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 일치성: 표본의 크기가 모집단의 규모에 근접해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 불편성: 추정량의 기댓값이 모수와 같아야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구간추정: 모수를 최소값과 최대값의 범위로 표현하는 것&amp;nbsp; (80~90점으로 표현)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신뢰구간: 그 구간 안에 모수가 포함될 확률을 나타냄&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모평균(&amp;micro;)을 추정할 때, 표본 평균을 x바, 표준오차를 SE라 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;661&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQPv3E/btsK5Gg0bno/avZiHkXyvpguMwzO7G3S5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQPv3E/btsK5Gg0bno/avZiHkXyvpguMwzO7G3S5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQPv3E/btsK5Gg0bno/avZiHkXyvpguMwzO7G3S5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQPv3E%2FbtsK5Gg0bno%2FavZiHkXyvpguMwzO7G3S5K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;676&quot; height=&quot;458&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;661&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가설: 주어진 사실이나 연구나 조사하고자 하는 사실이 어떠할 것인지를 주장하거나 추측하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;귀무가설: 입증하고자 하는 가설로, 일반적으로 믿어온 사실을 가설로 설정한 것. 이 때의 표현은 '~와 차이가 없다', '~의 효과는 없다', '~와 같다'가 되어야 한다. &lt;b&gt;영가설&lt;/b&gt;이라고도 하며, &lt;b&gt;H0&lt;/b&gt;로 표기함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대립가설: 귀무가설과 반대되는 가설로 연구의 목적이 된다. &amp;nbsp;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이 때의 표현은 '~와 차이가 있다', '~의 효과는 있다', '~와 다르다'가 되어야 한다.&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;b&gt;연구가설&lt;/b&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이라고도 하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;H1&lt;/b&gt;로 표기함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류: 연구자나 조사자가 범할 수 있는 오류이다. 실제로도 많은 사람들이 범하는 오류.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1종오류: 귀무가설이 참임에도 불구하고, 귀무가설을 기각하는 오류. 실제로 효과가 없는데 효과가 있다고 하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2종오류: 대립가설이 참임에도 불구하고, 대립가설을 기각하는 오류. 실제로 효과가 있는데 효과가 없다고 하는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유의수준: 귀무가설이 참일 때, 이를 잘못 기각할 확률을 유의수준이라고 한다.&amp;nbsp; &lt;span style=&quot;background-color: #ffffff; color: #4d5156; text-align: left;&quot;&gt;&lt;b&gt;&amp;alpha;&lt;/b&gt;로 표기된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #4d5156; text-align: left;&quot;&gt;유의확률: &lt;b&gt;p-value&lt;/b&gt;라고 하며, 귀무가설을 기각할 수 있는 최소한의 확률을 의미한다. 유의확률이 유의수준보다 높으면 귀무가설을 채택하고, 낮으면 기각한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유의수준은 일반적으로 0.05(통상), 0.01, 0.001(정밀함이 필요한 경우, ex: 의학)을 기준으로 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value &amp;gt;= 0.5일 경우 귀무가설을 채택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;p-value &amp;lt; 0.5일 경우 대립가설을 채택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단측검정: 귀무가설의 기각역이 한쪽 끝에 있는 검정.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kMjvh/btsK4vnsoPu/G4LFsr2kcj1labA8qB24gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kMjvh/btsK4vnsoPu/G4LFsr2kcj1labA8qB24gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kMjvh/btsK4vnsoPu/G4LFsr2kcj1labA8qB24gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkMjvh%2FbtsK4vnsoPu%2FG4LFsr2kcj1labA8qB24gk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;327&quot; height=&quot;185&quot; data-origin-width=&quot;623&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;양측검정: 귀무가설의 기각역이 양쪽 끝에 있는 검정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boK0lp/btsK47TIqA1/ut7KKsNdErybRKsdnntH61/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boK0lp/btsK47TIqA1/ut7KKsNdErybRKsdnntH61/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boK0lp/btsK47TIqA1/ut7KKsNdErybRKsdnntH61/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboK0lp%2FbtsK47TIqA1%2Fut7KKsNdErybRKsdnntH61%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;352&quot; height=&quot;842&quot; data-origin-width=&quot;1180&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 양측검정이 단측검정보다 위험도가 낮고, 프로그래밍 단계의 scipy 라이브러리에선 양측검정의 p-value가 기본으로 나옴.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF01au/btsK4sqIb6K/KCmXSav4Mjqa8y3rZluNpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF01au/btsK4sqIb6K/KCmXSav4Mjqa8y3rZluNpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF01au/btsK4sqIb6K/KCmXSav4Mjqa8y3rZluNpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF01au%2FbtsK4sqIb6K%2FKCmXSav4Mjqa8y3rZluNpK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;466&quot; height=&quot;65&quot; data-origin-width=&quot;681&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;z분포: 표본의 개수가 충분히 많을 때, 표준화 과정을 통해 만들어진 정규분포를 z분포라고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;t분포: 표본이 적은 경우 t분포를 사용한다. 표본이 충분하지 않기 때문에 정규분포를 이루지 못할 가능성이 크고 모분산을 알지 못 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;등분산: 2개의 모집단에서 추출된 각 표본 간의 분산이 같음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이분산: 2개의 모집단에서 추출된 각 표본 간의 분산이 다름&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LpKN1/btsK5CeJ24z/kbX9RxpOWZ8OoiFALfKWXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LpKN1/btsK5CeJ24z/kbX9RxpOWZ8OoiFALfKWXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LpKN1/btsK5CeJ24z/kbX9RxpOWZ8OoiFALfKWXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLpKN1%2FbtsK5CeJ24z%2FkbX9RxpOWZ8OoiFALfKWXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;266&quot; data-origin-width=&quot;800&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일표본 t검정: 모집단의 분산을 알지 못할 때 모집단에서 추출된 표본의 평균과 조사자가 이론적 배경이나 경험적 배경에 의해서 설정된 특정한 수를 비교하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 종속표본 t검정: 각기 다른 두 모집단의 속성인 평균을 비교하기 위해, 두 모집단에서 표본들을 추출하여 표본의 평균들을 비교함으로써 모집단의 평균을 비교하는 방법. 이 때 각기 다른 모집단으로부터 추출된 두 표본은 서로 독립적인 것이 아니라 어떤 관계가 있는 종속적인 것이어야 한다. (신약 투약 전과 후의 효과. 광고 전과 후의 매출 효과)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;독립표본 t검정: 각기 다른 두 모집단의 속성인 평균을 비교하기 위해,&amp;nbsp; 두 모집단을 대표하는 표본들을 독립적으로 추출하여 표본의 평균들을 비교함으로써 모집단의 유사성을 검정하는 방법. (A회사의 건전지와 B회사의 건전의 작동시간 비교, A회사 광고와 B회사 광고에 대한 매출효과 비교)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산분석(ANOVA): 분산의 원인이 어디에 있는가를 알아보는 통계적 방법. 3개 이상의 집단에 대한 평균의 차이를 검정하는 분석방법. 분산을 비교하여 평균의 차이를 검정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일원 분산분석(one-way ANOVA): 한 가지 기준이 되는 요인으로 비교하고자 하는 변수의 평균 차이가 집단 간에 존재하는지를 조사하는 것. (사회계층에 따른 사회에 대한 만족도 차이, 교수법에 따른 학업성취의 차이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이원 분산분석(two-way ANOVA): 두 가지 기준이 되는 요인으로 비교하고자 하는 변수의 평균 차이가 집단 간에 존재하는지를 조사하는 것. 요인이 두 개 이상으로 늘어난다면 각 요인들이 연관되어 변수에 영향을 미치는 &lt;b&gt;상호작용 효과&lt;/b&gt;도 검정해야한다. (햇빛과 물에 따른 수확량의 차이)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사후분석: 실험이나 통계적 검정 후, 유의미한 결과가 발견되었을 때, 어떤 그룹 간 차이가 있는지를 추가적으로 하는 분석. Henry scheffe가 해결해서 sheffe 검정이라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상관 분석: 두 변수(특징 변수와 목표 변수) 간의 연관성을 파악하기 위해 상관분석을 한다. 예를 들어 수학 점수와 과학 점수 사이의 연관성을 알고 싶을 때, 밑의 그림의 4번째(0 &amp;lt; r &amp;lt; 1)이라 할 때 두 점수는 연관성이 있다고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상관 분석을 통해 높은 상관 관계를 가진 특징 변수들을 파악하면 다중 선형 회귀 모델에 쓰이기도 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSZC99/btsK3np3ksJ/7GwnZaBKyp0bJaew1inkUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSZC99/btsK3np3ksJ/7GwnZaBKyp0bJaew1inkUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSZC99/btsK3np3ksJ/7GwnZaBKyp0bJaew1inkUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSZC99%2FbtsK3np3ksJ%2F7GwnZaBKyp0bJaew1inkUk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;659&quot; height=&quot;264&quot; data-origin-width=&quot;659&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;스칼라와 벡터: 통계에 분류되진 않지만 머신러닝을 익히는데 필요한 이론이다. 머신러닝 분야에서는 주로 pytorch를 이용한다고 한다.&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Scalar: 하나의 숫자로 표현되는 양을 의미함. (값의 크기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vector: 순서가 지정된 여러 개의 숫자들이 일렬로 나열된 구조 (값의 크기와 방향)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Matrix: 동일한 크기를 가진 Vector들이 모여서 형성한, 행과 열로 구성된 사각형 구조&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노름: 벡터가 원점에서 얼마나 떨어져 있는지를 의미함. 벡터의 크기 또는 길이를 측정하는 방법으로 사용되고 L1 노름, L2 노름, L &amp;infin; 노름 등 다양하게 존재한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L1 노름: 벡터에 포함된 요소의 절대값의 합으로 정의할 수 있다. 뉴욕 맨해튼의 도로망과 유사하다고 해서 맨해튼 노름이라고도 불린다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;284&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6xc4X/btsK3hi4d6a/sxn8sjDWFgPqAyhq3BsZ30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6xc4X/btsK3hi4d6a/sxn8sjDWFgPqAyhq3BsZ30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6xc4X/btsK3hi4d6a/sxn8sjDWFgPqAyhq3BsZ30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6xc4X%2FbtsK3hi4d6a%2Fsxn8sjDWFgPqAyhq3BsZ30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;433&quot; height=&quot;194&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;284&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L2 노름: 벡터에 포함된 요소의 제곱합의 제곱근으로 정의할 수 있다. 고등학교 과정에서 나오는 벡터의 거리를 구하는 방법과 똑같고 피타고라스의 정리에 의한 유크리드 거리이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dfzoBh/btsK52D4UDw/KOPdFt2iqsDmSWnvwXPmk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dfzoBh/btsK52D4UDw/KOPdFt2iqsDmSWnvwXPmk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dfzoBh/btsK52D4UDw/KOPdFt2iqsDmSWnvwXPmk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdfzoBh%2FbtsK52D4UDw%2FKOPdFt2iqsDmSWnvwXPmk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;390&quot; height=&quot;169&quot; data-origin-width=&quot;629&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;L&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;infin; 노름: 벡터에 포함된 요소의 절대값 중 최댓값으로 정의할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;노름에 대해서 정리해서 원으로 표현하면 다음과 같이 나타낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;L1노름은 벡터의 합이 1일 경우를 기준으로 해서 원을 그리면 마름모 모양이 나오고, L2노름은 벡터의 거리가 1인 경우를 기준으로 해서 원을 그리면 원 모양이 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bg6ZiH/btsK4YJmwMd/ZkxGjuQDu0abXkAe3U0DTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bg6ZiH/btsK4YJmwMd/ZkxGjuQDu0abXkAe3U0DTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bg6ZiH/btsK4YJmwMd/ZkxGjuQDu0abXkAe3U0DTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbg6ZiH%2FbtsK4YJmwMd%2FZkxGjuQDu0abXkAe3U0DTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;608&quot; height=&quot;518&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사도: 두 벡터가 얼마나 유사한지에 대한 측정값을 의미한다. 0과 1 사이로 표현할 수 있으며, 1에 가까울수록 유사하다. 이러한 유사도는 군집화(Clustering) 알고리즘에서 데이터들이 얼마나 유사한지를 판단하는 중요한 기준으로 사용된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨해튼 유사도: 두 벡터 사이의 맨해튼 거리를 역수로 변환하여 계산한 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유클리드 유사도: 두 벡터 사이의 유클리드 거리를 역수로 변환하여 계산한 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코사인 유사도: 두 벡터 사이의 각도를 측정하여 계산한 값. (cos 함수는 0도가 1이 되고 90도는 0이 되는 함수이다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터 사이의 각도를 측정하는 방법엔 벡터의 내적을 이용하면 되는데 머신러닝에선 그냥 코드를 입력하면 알아서 계산된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdFH8t/btsK5rK6DjJ/OhS26crVoQMASREgGCg150/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdFH8t/btsK5rK6DjJ/OhS26crVoQMASREgGCg150/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdFH8t/btsK5rK6DjJ/OhS26crVoQMASREgGCg150/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdFH8t%2FbtsK5rK6DjJ%2FOhS26crVoQMASREgGCg150%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;421&quot; height=&quot;408&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;평균 벡터: 주어진 벡터들의 &quot;중심&quot;&amp;nbsp; 또는 &quot;평균 위치&quot;를 나타내는 벡터를 의미함. 벡터의 합을 구하고 벡터의 개수만큼 나누면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(x1 = [1, 2, 3], x2 = [2, 4, 6], x3 = [ 3, 6, 9] -&amp;gt; &amp;micro; = [2, 4, 6])&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;진짜 수많은 이론을 썼다. 글로 작성하기에는 너무 많은 내용이어서 넘긴 내용도 많고 scipy와 pingouin, scikit-posthocs를 활용한 실습도 있었지만 설명할 자신이 없어서 실습과정은 넘겼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 AI는 코딩을 하는게 기본이지만 코딩 없이도 데이터 분석, AI 모델링도 할 수 있는 Orange3라는 툴을 소개받았다. 대신 화면에 그림을 표시하기 위해 GPU 자원을 많이 가져가는 모양이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1735&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br6L7x/btsK3iI9rIv/kVTzn8qTK9nPckxCDKoRGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br6L7x/btsK3iI9rIv/kVTzn8qTK9nPckxCDKoRGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br6L7x/btsK3iI9rIv/kVTzn8qTK9nPckxCDKoRGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr6L7x%2FbtsK3iI9rIv%2FkVTzn8qTK9nPckxCDKoRGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;574&quot; height=&quot;221&quot; data-origin-width=&quot;1735&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;753&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coFUq4/btsK4VTp47U/PrE5GsHVzBcnDA7FXq2ER0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coFUq4/btsK4VTp47U/PrE5GsHVzBcnDA7FXq2ER0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coFUq4/btsK4VTp47U/PrE5GsHVzBcnDA7FXq2ER0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoFUq4%2FbtsK4VTp47U%2FPrE5GsHVzBcnDA7FXq2ER0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;614&quot; height=&quot;364&quot; data-origin-width=&quot;1270&quot; data-origin-height=&quot;753&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;647&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccVZIX/btsK3iI9rSb/kcxLhiioYunZc8MFUqgdQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccVZIX/btsK3iI9rSb/kcxLhiioYunZc8MFUqgdQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccVZIX/btsK3iI9rSb/kcxLhiioYunZc8MFUqgdQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccVZIX%2FbtsK3iI9rSb%2FkcxLhiioYunZc8MFUqgdQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;634&quot; height=&quot;392&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;647&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로는 요슈아 벤지오라고 하는 세계적인 인지도를 가진 AI 연구원을 소개하는 &lt;/span&gt;&lt;span&gt;ebs 영상을 보여줬다. 영상의 내용은 인공지능, 머신러닝이 무엇인가에 대한 내용인 것 같았다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거에 연구되었던 인공지능은 &lt;span&gt;논리주의로, 사람이 컴퓨터에게 지식을 직접 알려주는 것이었다. 옛날에 스타크래프트에서 computer와 대전할 수 있었는데 이게 대표적 예시이지 않을까 싶다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; 머신러닝은 데이터만 컴퓨터에게 제공해주고 스스로 알게하는 느낌이었다. 유튜브에서도 찾을 수 있는데 AI에게 슈퍼마리오를 깨는 방법만 알려주고 스스로 하게 만드니 몇 천회의 시도 끝에 게임을 클리어하고 더 빠르게 깨는 방법을 최적화까지 하는 모습을 보였다.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>UpstageAILab</category>
      <category>국비지원</category>
      <category>업스테이지패스트캠퍼스</category>
      <category>패스트캠퍼스</category>
      <category>패스트캠퍼스AI부트캠프</category>
      <category>패스트캠퍼스업스테이지부트캠프</category>
      <category>패스트캠퍼스업스테이지에아이랩</category>
      <category>패스트캠퍼스업스테이지에이아이랩</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/8</guid>
      <comments>https://jyun34.tistory.com/8#entry8comment</comments>
      <pubDate>Tue, 3 Dec 2024 11:44:19 +0900</pubDate>
    </item>
    <item>
      <title>Upstage AI Lab 6기 Python 강의 후기</title>
      <link>https://jyun34.tistory.com/7</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번 주에는 &lt;span style=&quot;background-color: #f8f8f8; color: #1d1c1d; text-align: left;&quot;&gt;조대연, 장철원 강사님을 통해 파이썬의 다양한 모듈을 학습할 수 있었다. 여태까지 쓴 글들은 그 때 공부하고 복습할 겸 썼던 글이었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조대연 강사님은 파이썬 전반 + pandas, 장철원 강사님은 크롤링, 정규표현식 re를 가르치셨다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조대연 강사님의 강의는 시간이 촉박한 나머지 너무 급하게 하는 느낌이라 그렇게 기억에 남지 않았다. 어차피 기초의 내용이었고, 중요한건 pandas인데, 실습 과정에서 tab, shfit + tab으로 함수를 쓰는 법을 익혔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 전처리 같은 경우 함수가 너무나도 많고, 그 안에 써야하는 변수를 다 알 수 없기 때문에, shift + tab으로 함수의 정보를 볼 수 있는건 무척이나 도움되는 일이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장철원 강사님은 html의 구조, requests, BeautifulSoup, selenium, api, re 등을 가르치셨는데, 이 분의 강의시간은 넉넉하셨는지 적절한 실습시간이 주어져 많이 공부할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;759&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5Hqwm/btsKVUuakZv/IkgiRFjeIosKbolRYa2pB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5Hqwm/btsKVUuakZv/IkgiRFjeIosKbolRYa2pB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5Hqwm/btsKVUuakZv/IkgiRFjeIosKbolRYa2pB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5Hqwm%2FbtsKVUuakZv%2FIkgiRFjeIosKbolRYa2pB1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;636&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;759&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;750&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UMNH4/btsKWI0KNZK/hOHxlgbitdmZLwsNikZnF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UMNH4/btsKWI0KNZK/hOHxlgbitdmZLwsNikZnF0/img.png&quot; data-alt=&quot;학습 내용 일부 발췌&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UMNH4/btsKWI0KNZK/hOHxlgbitdmZLwsNikZnF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUMNH4%2FbtsKWI0KNZK%2FhOHxlgbitdmZLwsNikZnF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;750&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;학습 내용 일부 발췌&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 때 배운 것은 여태까지 작성한 블로그에 잘 녹여냈다고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규표현식 re는 따로 쓰지 않았었는데, 사실 이 과정에서는 re를 읽는 방법을 학습한 것이지, 잘 쓰는 법까지는 조금... 많이 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 re 쓰는 법을 파고들면 은근 deep하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 그냥 여기서 적당히 수업 내용을 쓸려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y1o3v/btsKWU05TqJ/xan1pVpOmcgqiNS3Ia7GGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y1o3v/btsKWU05TqJ/xan1pVpOmcgqiNS3Ia7GGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y1o3v/btsKWU05TqJ/xan1pVpOmcgqiNS3Ia7GGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy1o3v%2FbtsKWU05TqJ%2Fxan1pVpOmcgqiNS3Ia7GGk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;693&quot; height=&quot;383&quot; data-origin-width=&quot;1252&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1405&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUUMxB/btsKVrFZU9f/E2WOdMAwAPghWLqoJDLqWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUUMxB/btsKVrFZU9f/E2WOdMAwAPghWLqoJDLqWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUUMxB/btsKVrFZU9f/E2WOdMAwAPghWLqoJDLqWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUUMxB%2FbtsKVrFZU9f%2FE2WOdMAwAPghWLqoJDLqWk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;655&quot; height=&quot;249&quot; data-origin-width=&quot;1405&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 사이트에 들어가면 이런 식으로 연습이 가능한데, python으로 표현하면 왼쪽과 같이 쓰면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pattern = r'패턴'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;re.findall(pattern, text)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 기억하면 될 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 메타문자를 많이 쓰는데, 메타 문자란, 특정 의미나 기능을 담은 문자라고 생각하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bi9rlp/btsKWQEmak3/rSYvXMlqGtM6UJLOkwf430/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bi9rlp/btsKWQEmak3/rSYvXMlqGtM6UJLOkwf430/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bi9rlp/btsKWQEmak3/rSYvXMlqGtM6UJLOkwf430/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbi9rlp%2FbtsKWQEmak3%2FrSYvXMlqGtM6UJLOkwf430%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;631&quot; height=&quot;251&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;re'[a-z]'는 text에서 a~z까지 찾아낸다고 보면된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;re'[a-zA-Z]'는 모든 영문자를 찾아내고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;re'[a-zA-Z0-9]'는 모든 영문자와 숫자를 찾아낸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;191&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIahz5/btsKVKZehVX/yfBhXfChklgf6nyfg1yjwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIahz5/btsKVKZehVX/yfBhXfChklgf6nyfg1yjwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIahz5/btsKVKZehVX/yfBhXfChklgf6nyfg1yjwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIahz5%2FbtsKVKZehVX%2FyfBhXfChklgf6nyfg1yjwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;281&quot; height=&quot;146&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;191&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1509&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bpg2qo/btsKU9esqAc/hEqemk8ZI9JJhFS2Y50jJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bpg2qo/btsKU9esqAc/hEqemk8ZI9JJhFS2Y50jJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bpg2qo/btsKU9esqAc/hEqemk8ZI9JJhFS2Y50jJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbpg2qo%2FbtsKU9esqAc%2FhEqemk8ZI9JJhFS2Y50jJ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;292&quot; data-origin-width=&quot;1509&quot; data-origin-height=&quot;703&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 일일이 [a-z], 이런 식으로 쓰는게 귀찮은건지 \d, \w 같은 표현이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;195&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceelYN/btsKXhuZJiq/KVJBSdilaPtzRMYVWAQwuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceelYN/btsKXhuZJiq/KVJBSdilaPtzRMYVWAQwuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceelYN/btsKXhuZJiq/KVJBSdilaPtzRMYVWAQwuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceelYN%2FbtsKXhuZJiq%2FKVJBSdilaPtzRMYVWAQwuK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;355&quot; height=&quot;134&quot; data-origin-width=&quot;516&quot; data-origin-height=&quot;195&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;655&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ubXh/btsKWRwuN0v/bhdb1p2XHevKKQkMTzu0f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ubXh/btsKWRwuN0v/bhdb1p2XHevKKQkMTzu0f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ubXh/btsKWRwuN0v/bhdb1p2XHevKKQkMTzu0f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ubXh%2FbtsKWRwuN0v%2Fbhdb1p2XHevKKQkMTzu0f0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;628&quot; height=&quot;281&quot; data-origin-width=&quot;1464&quot; data-origin-height=&quot;655&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;658&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RlEA2/btsKW8EVF8B/RrKvZjm4IWrNUc9tWmfkcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RlEA2/btsKW8EVF8B/RrKvZjm4IWrNUc9tWmfkcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RlEA2/btsKW8EVF8B/RrKvZjm4IWrNUc9tWmfkcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRlEA2%2FbtsKW8EVF8B%2FRrKvZjm4IWrNUc9tWmfkcK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;273&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;658&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;638&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQUwe7/btsKVreRfqZ/QywKSifbb1r0W7HxBFqonk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQUwe7/btsKVreRfqZ/QywKSifbb1r0W7HxBFqonk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQUwe7/btsKVreRfqZ/QywKSifbb1r0W7HxBFqonk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQUwe7%2FbtsKVreRfqZ%2FQywKSifbb1r0W7HxBFqonk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;593&quot; height=&quot;305&quot; data-origin-width=&quot;1242&quot; data-origin-height=&quot;638&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qWvrs/btsKV08CaHf/hLJujwqFmpzoTZNZzJHWk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qWvrs/btsKV08CaHf/hLJujwqFmpzoTZNZzJHWk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qWvrs/btsKV08CaHf/hLJujwqFmpzoTZNZzJHWk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqWvrs%2FbtsKV08CaHf%2FhLJujwqFmpzoTZNZzJHWk0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;604&quot; height=&quot;210&quot; data-origin-width=&quot;1502&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;682&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTAe7P/btsKVZPnHs7/kGXwgXQT0tXDfvryegu390/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTAe7P/btsKVZPnHs7/kGXwgXQT0tXDfvryegu390/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTAe7P/btsKVZPnHs7/kGXwgXQT0tXDfvryegu390/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTAe7P%2FbtsKVZPnHs7%2FkGXwgXQT0tXDfvryegu390%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;610&quot; height=&quot;275&quot; data-origin-width=&quot;1512&quot; data-origin-height=&quot;682&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문자 뒤에 '*'을 붙이면, 그 앞에 있는 문자를 0~무한까지 인식할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pattern = r'ca*t' 이면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;text 내용이 ct, cat, caaaaaaaat이든 다 인식한다는 의미이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/q8akN/btsKXKjgzWL/MktdboWKns5JWWnNjrWnQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/q8akN/btsKXKjgzWL/MktdboWKns5JWWnNjrWnQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/q8akN/btsKXKjgzWL/MktdboWKns5JWWnNjrWnQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fq8akN%2FbtsKXKjgzWL%2FMktdboWKns5JWWnNjrWnQ1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;272&quot; height=&quot;209&quot; data-origin-width=&quot;367&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;+는 1~무한.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cat은 인식하지만 ct는 인식하지 못한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tVTIr/btsKVsEQvdo/SF0NlaJDDeWLWSL5z3rzMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tVTIr/btsKVsEQvdo/SF0NlaJDDeWLWSL5z3rzMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tVTIr/btsKVsEQvdo/SF0NlaJDDeWLWSL5z3rzMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtVTIr%2FbtsKVsEQvdo%2FSF0NlaJDDeWLWSL5z3rzMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;268&quot; height=&quot;189&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;{m, n}은 m이상 n이하.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlkNva/btsKUCt25UZ/SkQOJBXTQpPQnYIgMCTQE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlkNva/btsKUCt25UZ/SkQOJBXTQpPQnYIgMCTQE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlkNva/btsKUCt25UZ/SkQOJBXTQpPQnYIgMCTQE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlkNva%2FbtsKUCt25UZ%2FSkQOJBXTQpPQnYIgMCTQE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;259&quot; height=&quot;191&quot; data-origin-width=&quot;382&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;?는 0,1만 인식한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwmpl7/btsKVIG5h1Z/0A6iMoUw7d5pnm4IkvcVhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwmpl7/btsKVIG5h1Z/0A6iMoUw7d5pnm4IkvcVhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwmpl7/btsKVIG5h1Z/0A6iMoUw7d5pnm4IkvcVhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwmpl7%2FbtsKVIG5h1Z%2F0A6iMoUw7d5pnm4IkvcVhk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;289&quot; height=&quot;200&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 잘 이용하면 다음과 같이 나타낼 수도 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wtE6H/btsKW6tymLo/zyx9pyrYk7JusvHhZQWMR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wtE6H/btsKW6tymLo/zyx9pyrYk7JusvHhZQWMR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wtE6H/btsKW6tymLo/zyx9pyrYk7JusvHhZQWMR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwtE6H%2FbtsKW6tymLo%2Fzyx9pyrYk7JusvHhZQWMR1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;285&quot; data-origin-width=&quot;847&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 심화해서 알아보면...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;713&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zVQJ2/btsKXAgLJiC/Ku43M4336rKbPS9CMMChR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zVQJ2/btsKXAgLJiC/Ku43M4336rKbPS9CMMChR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zVQJ2/btsKXAgLJiC/Ku43M4336rKbPS9CMMChR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzVQJ2%2FbtsKXAgLJiC%2FKu43M4336rKbPS9CMMChR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;243&quot; height=&quot;438&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;713&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;...이래서 정규표현식이 은근 deep하다는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여태까지 정리한 것만 해도 꽤 내용이 되는 것 같은데, html의 내용에서 할려고 하니 어떻게 해야할지 모르겠고 막막하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 쓸 일이 있으면 더 배우고 정리하고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여태까지 배운 것만으로는 좀 모자른다고 생각해서 re 글은 따로 정리하지 않고 후기를 남겼다.&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>UpstageAILab</category>
      <category>국비지원</category>
      <category>업스테이지패스트캠퍼스</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <category>패스트캠퍼스</category>
      <category>패스트캠퍼스AI부트캠프</category>
      <category>패스트캠퍼스업스테이지부트캠프</category>
      <category>패스트캠퍼스업스테이지에이아이랩</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/7</guid>
      <comments>https://jyun34.tistory.com/7#entry7comment</comments>
      <pubDate>Tue, 26 Nov 2024 11:22:20 +0900</pubDate>
    </item>
    <item>
      <title>크롤링 (API, json)</title>
      <link>https://jyun34.tistory.com/6</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rCqOj/btsKTUOBCPz/ZQGw4sgv0tcM58UhWJYHD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rCqOj/btsKTUOBCPz/ZQGw4sgv0tcM58UhWJYHD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rCqOj/btsKTUOBCPz/ZQGw4sgv0tcM58UhWJYHD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrCqOj%2FbtsKTUOBCPz%2FZQGw4sgv0tcM58UhWJYHD0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;717&quot; height=&quot;256&quot; data-origin-width=&quot;1347&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 여태까지 BeautifulSoup, Selenium을 이용해서 웹사이트에서 직접 데이터를 긁어왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 크롤링을 할 때는 해당 사이트에서는 많은 요청을 처리하게 되서 서버가 느려질 수 있기에, robots.txt로 크롤링 규칙을 만들었고 이를 어길 시 밴을 할 수도 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 할 수 있는게 많지 않아 여태까지 좀 재미없게 진행해왔다. 할려면야 할 수는 있는데 즐겨쓰는 사이트라 밴을 당하면 곤란하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;하지만 마음껏 크롤링 할 수 있는 방법이 있는데 그건 바로 API이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVH4ke/btsKVJ0dle8/08Gvck8dMkHmrGadsvwy3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVH4ke/btsKVJ0dle8/08Gvck8dMkHmrGadsvwy3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVH4ke/btsKVJ0dle8/08Gvck8dMkHmrGadsvwy3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVH4ke%2FbtsKVJ0dle8%2F08Gvck8dMkHmrGadsvwy3k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;569&quot; height=&quot;192&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API는 따로 API 서버를 마련해뒀기 때문에 여기서 아무리 크롤링을 해도 본래 서버에는 영향을 주지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 이번엔 네이버 API를 사용할 생각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API를 이용하기 앞서 알아두면 좋은 지식이 있는데, API는 보통 json 파일을 통해 통신한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0xWDW/btsKVCmUaoA/v7YtAga6SYFyCBrnP20ee1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0xWDW/btsKVCmUaoA/v7YtAga6SYFyCBrnP20ee1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0xWDW/btsKVCmUaoA/v7YtAga6SYFyCBrnP20ee1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0xWDW%2FbtsKVCmUaoA%2Fv7YtAga6SYFyCBrnP20ee1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;514&quot; height=&quot;618&quot; data-origin-width=&quot;949&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 키-값 쌍은 dictionary를 의미한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제로 json 파일을 보면 수많은 dictionary와 list의 쌍으로 이루어져있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;677&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EJIva/btsKWPZEFPk/VdRwp10tBEj8dcMTkYqSZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EJIva/btsKWPZEFPk/VdRwp10tBEj8dcMTkYqSZk/img.png&quot; data-alt=&quot;json 파일 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EJIva/btsKWPZEFPk/VdRwp10tBEj8dcMTkYqSZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEJIva%2FbtsKWPZEFPk%2FVdRwp10tBEj8dcMTkYqSZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1398&quot; height=&quot;677&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;json 파일 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번에 할 크롤링은 네이버 API로 할 것이다. (구글 API는 유료.)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;876&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nijBR/btsKWVlhfYH/CkuZA20AbMj4K4piIKFMxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nijBR/btsKWVlhfYH/CkuZA20AbMj4K4piIKFMxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nijBR/btsKWVlhfYH/CkuZA20AbMj4K4piIKFMxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnijBR%2FbtsKWVlhfYH%2FCkuZA20AbMj4K4piIKFMxk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;758&quot; height=&quot;451&quot; data-origin-width=&quot;1472&quot; data-origin-height=&quot;876&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;747&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RoFiv/btsKVzp7Mnt/GkbmNJFqUwkatKxe9jIhQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RoFiv/btsKVzp7Mnt/GkbmNJFqUwkatKxe9jIhQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RoFiv/btsKVzp7Mnt/GkbmNJFqUwkatKxe9jIhQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRoFiv%2FbtsKVzp7Mnt%2FGkbmNJFqUwkatKxe9jIhQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;719&quot; height=&quot;352&quot; data-origin-width=&quot;1526&quot; data-origin-height=&quot;747&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 개발자센터에 들어가 오픈 API 이용신청을 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;765&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ntRII/btsKXgJutD2/KYdUyrCrkZChG8EKpcat9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ntRII/btsKXgJutD2/KYdUyrCrkZChG8EKpcat9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ntRII/btsKXgJutD2/KYdUyrCrkZChG8EKpcat9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FntRII%2FbtsKXgJutD2%2FKYdUyrCrkZChG8EKpcat9K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;643&quot; height=&quot;401&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 만들어라.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ErlZB/btsKWLweV4H/ivjRQO3dczc3l5IKlEzqn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ErlZB/btsKWLweV4H/ivjRQO3dczc3l5IKlEzqn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ErlZB/btsKWLweV4H/ivjRQO3dczc3l5IKlEzqn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FErlZB%2FbtsKWLweV4H%2FivjRQO3dczc3l5IKlEzqn1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;618&quot; height=&quot;760&quot; data-origin-width=&quot;1204&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 만들면 ID와 비밀번호를 주는데 이건 API를 이용할 때 집어넣으면 된다. 절대 남에게 보여주면 안된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제부터 우리가 할 크롤링은 블로그 제목과 이미지를 크롤링하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cl2tJ3/btsKW25GhlY/sqBM6U7KPDp221v2khcKJK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cl2tJ3/btsKW25GhlY/sqBM6U7KPDp221v2khcKJK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cl2tJ3/btsKW25GhlY/sqBM6U7KPDp221v2khcKJK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcl2tJ3%2FbtsKW25GhlY%2FsqBM6U7KPDp221v2khcKJK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1318&quot; height=&quot;431&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;739&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/P8cce/btsKVxlojIs/K8BT9SQOtlhegh0qRnxUR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/P8cce/btsKVxlojIs/K8BT9SQOtlhegh0qRnxUR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/P8cce/btsKVxlojIs/K8BT9SQOtlhegh0qRnxUR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FP8cce%2FbtsKVxlojIs%2FK8BT9SQOtlhegh0qRnxUR0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;575&quot; height=&quot;415&quot; data-origin-width=&quot;1023&quot; data-origin-height=&quot;739&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간색으로 표시한 곳에 들어오면 우리가 사용할 API의 사용법이 나오는데 제법 친절하게 나와있어 거의 그대로 하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GMHzY/btsKVLKuEvj/YQDq4kShxFhEJg45dsKWMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GMHzY/btsKVLKuEvj/YQDq4kShxFhEJg45dsKWMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GMHzY/btsKVLKuEvj/YQDq4kShxFhEJg45dsKWMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGMHzY%2FbtsKVLKuEvj%2FYQDq4kShxFhEJg45dsKWMk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;627&quot; height=&quot;418&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이건 네이버 측에서 제공하는 예시 코드인데 유심히 봐야할 것은 'client_id'와 'client_secret', encText이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'client_id'와 'client_secret'는 오픈 API 이용신청을 하면서 발급받은 것을 여기에다가 붙여넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 encText의 &quot;검색할 단어&quot;에 원하는 내용을 입력하면 해당 검색의 결과가 나온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 그대로 써도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;267&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJTQWU/btsKU6n22fh/kU6qyalmyEAyzKWSdslxhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJTQWU/btsKU6n22fh/kU6qyalmyEAyzKWSdslxhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJTQWU/btsKU6n22fh/kU6qyalmyEAyzKWSdslxhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJTQWU%2FbtsKU6n22fh%2FkU6qyalmyEAyzKWSdslxhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;457&quot; height=&quot;178&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;267&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 나는 여러모로 원하는대로 안 되서 위의 코드를 바탕으로 새로 코드를 썼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;186&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vb68W/btsKXaJnHEW/kycijfKdsdI3X5Y6jv20uK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vb68W/btsKXaJnHEW/kycijfKdsdI3X5Y6jv20uK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vb68W/btsKXaJnHEW/kycijfKdsdI3X5Y6jv20uK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvb68W%2FbtsKXaJnHEW%2FkycijfKdsdI3X5Y6jv20uK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1008&quot; height=&quot;186&quot; data-origin-width=&quot;1008&quot; data-origin-height=&quot;186&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;677&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EJIva/btsKWPZEFPk/VdRwp10tBEj8dcMTkYqSZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EJIva/btsKWPZEFPk/VdRwp10tBEj8dcMTkYqSZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EJIva/btsKWPZEFPk/VdRwp10tBEj8dcMTkYqSZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEJIva%2FbtsKWPZEFPk%2FVdRwp10tBEj8dcMTkYqSZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;674&quot; height=&quot;677&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 대충 웹소설 추천을 검색해봤고, 이렇게 json 파일을 받았다는 것을 알 수 잇다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mFM0w/btsKVdgNuT4/sOPMhxqjfdKNypNbkiHPbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mFM0w/btsKVdgNuT4/sOPMhxqjfdKNypNbkiHPbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mFM0w/btsKVdgNuT4/sOPMhxqjfdKNypNbkiHPbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmFM0w%2FbtsKVdgNuT4%2FsOPMhxqjfdKNypNbkiHPbK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;506&quot; height=&quot;293&quot; data-origin-width=&quot;1111&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터를 참고해서 url 뒤에 &quot;&amp;amp;start={입력}&amp;amp;display={입력}&quot;을 추가로 기입하면 더 많은 정보를 얻을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2XBeU/btsKWMaRxfC/7XC2DUiDO8LoP56DGjMMf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2XBeU/btsKWMaRxfC/7XC2DUiDO8LoP56DGjMMf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2XBeU/btsKWMaRxfC/7XC2DUiDO8LoP56DGjMMf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2XBeU%2FbtsKWMaRxfC%2F7XC2DUiDO8LoP56DGjMMf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;165&quot; height=&quot;68&quot; data-origin-width=&quot;206&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;text는 문자열이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cstPQt/btsKVL4NWQl/RtF5K8on4xFLt5tMyk8xe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cstPQt/btsKVL4NWQl/RtF5K8on4xFLt5tMyk8xe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cstPQt/btsKVL4NWQl/RtF5K8on4xFLt5tMyk8xe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcstPQt%2FbtsKVL4NWQl%2FRtF5K8on4xFLt5tMyk8xe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1388&quot; height=&quot;740&quot; data-origin-width=&quot;1388&quot; data-origin-height=&quot;740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;85&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zntsK/btsKXspwXUc/7He3kTJFCRri6yRqk0Zwl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zntsK/btsKXspwXUc/7He3kTJFCRri6yRqk0Zwl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zntsK/btsKXspwXUc/7He3kTJFCRri6yRqk0Zwl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzntsK%2FbtsKXspwXUc%2F7He3kTJFCRri6yRqk0Zwl1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;408&quot; height=&quot;57&quot; data-origin-width=&quot;609&quot; data-origin-height=&quot;85&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;json() 함수로 열면 json 형식으로 출력된다. 위에서 말했던 것처럼 dictionary와 list로 이루어져있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 dictionary와 list 다루는 것처럼 다루면 다음과 같이 깔끔하게 제목만 출력할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;279&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyvQ5S/btsKUCU6PKk/VgN4LLiRVYmk0QlIQkPSXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyvQ5S/btsKUCU6PKk/VgN4LLiRVYmk0QlIQkPSXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyvQ5S/btsKUCU6PKk/VgN4LLiRVYmk0QlIQkPSXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeyvQ5S%2FbtsKUCU6PKk%2FVgN4LLiRVYmk0QlIQkPSXk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;205&quot; data-origin-width=&quot;616&quot; data-origin-height=&quot;279&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 이미지를 크롤링 할 생각이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;블로그와 마찬가지로 이미지로 들어가 참고해서 쓰면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cCRwiY/btsKVwmqzI6/p41rkwPwY9HGvPqiQqkqiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cCRwiY/btsKVwmqzI6/p41rkwPwY9HGvPqiQqkqiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cCRwiY/btsKVwmqzI6/p41rkwPwY9HGvPqiQqkqiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcCRwiY%2FbtsKVwmqzI6%2Fp41rkwPwY9HGvPqiQqkqiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;707&quot; height=&quot;763&quot; data-origin-width=&quot;1650&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;575&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ANEpr/btsKU53JDqP/I2jWzxQDzvxIKEHlmCQEK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ANEpr/btsKU53JDqP/I2jWzxQDzvxIKEHlmCQEK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ANEpr/btsKU53JDqP/I2jWzxQDzvxIKEHlmCQEK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FANEpr%2FbtsKU53JDqP%2FI2jWzxQDzvxIKEHlmCQEK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1290&quot; height=&quot;575&quot; data-origin-width=&quot;1290&quot; data-origin-height=&quot;575&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;url에서 blog를 image로 바꿨고, 대충 start와 display도 기입했다. display는 20개를 보여준다는 뜻이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 이미지는 link나 thumbnail에서 받아오면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vNgpI/btsKVxFG5Tk/yKUO7qVjoyG5KxCYvejbA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vNgpI/btsKVxFG5Tk/yKUO7qVjoyG5KxCYvejbA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vNgpI/btsKVxFG5Tk/yKUO7qVjoyG5KxCYvejbA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvNgpI%2FbtsKVxFG5Tk%2FyKUO7qVjoyG5KxCYvejbA1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;595&quot; height=&quot;202&quot; data-origin-width=&quot;698&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대충 파일 함수를 사용해서 저장하면 된다. 파일 함수 관련되서는 다음에 정리할까싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일이 존재하는 폴더를 뒤져보면 크롤링한 이미지가 저장되어있는 것을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Qg55D/btsKWQK6b8R/nz3fu8gLcDwENahYA6bj21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Qg55D/btsKWQK6b8R/nz3fu8gLcDwENahYA6bj21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Qg55D/btsKWQK6b8R/nz3fu8gLcDwENahYA6bj21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQg55D%2FbtsKWQK6b8R%2Fnz3fu8gLcDwENahYA6bj21%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1662&quot; height=&quot;358&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/6</guid>
      <comments>https://jyun34.tistory.com/6#entry6comment</comments>
      <pubDate>Mon, 25 Nov 2024 23:42:05 +0900</pubDate>
    </item>
    <item>
      <title>웹크롤링 (selenium)</title>
      <link>https://jyun34.tistory.com/5</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 selenium을 이용해 네이버 홈페이지에서 크롤링을 해볼려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;왜 굳이 selenium으로 하냐하면, requests와 selenium의 차이점이 있는데 requests는 정적 HTML만 가져오고, javascript로 동적으로 추가되는 콘텐츠는 포함되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면 selenium은 실제 브라우저에서 페이지를 렌더링해서 동적 콘텐츠가 포함된 최종 HTML을 가져온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 네이버 같은 경우는 동적 콘텐츠가 굉장히 많은 편이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 압도적인 정보량의 차이를 봐라. ㅋㅋ&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1485&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZwtV2/btsKS9Zrjdk/ghGD3urgvpzRf1ci4SViVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZwtV2/btsKS9Zrjdk/ghGD3urgvpzRf1ci4SViVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZwtV2/btsKS9Zrjdk/ghGD3urgvpzRf1ci4SViVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZwtV2%2FbtsKS9Zrjdk%2FghGD3urgvpzRf1ci4SViVK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1485&quot; height=&quot;748&quot; data-origin-width=&quot;1485&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 웹툰 제목을 크롤링할 생각이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 아무리 find_all()로 찾아봐도 안 보여서 물 건너갔다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;951&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J8pkS/btsKS11Dyi6/NbOkTNVkuSV9FhbV9TRdt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J8pkS/btsKS11Dyi6/NbOkTNVkuSV9FhbV9TRdt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J8pkS/btsKS11Dyi6/NbOkTNVkuSV9FhbV9TRdt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ8pkS%2FbtsKS11Dyi6%2FNbOkTNVkuSV9FhbV9TRdt1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1907&quot; height=&quot;951&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;951&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그나마 재미있어 보이는걸 찾았다. 대충 인터넷뉴스 제목 같은데 이것을 긁어보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;659&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Zrv8H/btsKS4KK18X/tJViVQzoWNpqi8Mk7bVTjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Zrv8H/btsKS4KK18X/tJViVQzoWNpqi8Mk7bVTjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Zrv8H/btsKS4KK18X/tJViVQzoWNpqi8Mk7bVTjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZrv8H%2FbtsKS4KK18X%2FtJViVQzoWNpqi8Mk7bVTjk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1390&quot; height=&quot;659&quot; data-origin-width=&quot;1390&quot; data-origin-height=&quot;659&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이전 글에서 한 것처럼 class 정보를 이용해 text로 출력하면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;341&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlbLyz/btsKSPGRXUn/oKuqcEvQrK4anuU2esMBLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlbLyz/btsKSPGRXUn/oKuqcEvQrK4anuU2esMBLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlbLyz/btsKSPGRXUn/oKuqcEvQrK4anuU2esMBLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlbLyz%2FbtsKSPGRXUn%2FoKuqcEvQrK4anuU2esMBLk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;558&quot; height=&quot;215&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;341&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/5</guid>
      <comments>https://jyun34.tistory.com/5#entry5comment</comments>
      <pubDate>Sat, 23 Nov 2024 00:16:16 +0900</pubDate>
    </item>
    <item>
      <title>웹크롤링 (BeautifulSoup)</title>
      <link>https://jyun34.tistory.com/4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;크롤링이란 자동화된 프로그램이나 봇(웹 크롤러)을 사용하여 웹사이트의 정보를 수집하는 과정이다. 이를 긁어온다고 표현한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;크롤링을 할 때는 지켜야하는 규칙이 있는데, 해당 사이트 주소에 /robots.txt를 쓰면 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mu9Me/btsKTrSZsiS/lrOAN0yZppGS3Abap3xrx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mu9Me/btsKTrSZsiS/lrOAN0yZppGS3Abap3xrx1/img.png&quot; data-alt=&quot;서울특별시 공공데이터 robots.txt&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mu9Me/btsKTrSZsiS/lrOAN0yZppGS3Abap3xrx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmu9Me%2FbtsKTrSZsiS%2FlrOAN0yZppGS3Abap3xrx1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;269&quot; height=&quot;105&quot; data-origin-width=&quot;468&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서울특별시 공공데이터 robots.txt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;User-agent의 '*'는 모든 크롤러를 대상으로 한다는 의미이다. 대다수의 사이트들은 '*'로 끝나지만 특이하게 구글은 워낙 다루는 데이터가 많아서 그런지 쓰여져있는게 엄청 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Allow가 허용한다는 내용이고, Disallow는 허용 안 한다는 의미이다. 허용 안 하는 데이터에 접근하면 사이트에서 밴(ban)을 할 수 있으니 주의하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 네이버나 구글에서 이미지 크롤링을 해볼까 했는데 죄다 금지라 그냥 안 할 생각.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;User Agent를 바꿔서 해볼까 했지만 너무 오래 전부터 있었던 방법이기도 하고, 둘 다 대기업이니 그 정도 방어책은 당연히 있을거라 생각하며 가급적 안 하는걸 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예전에 네이버 검색페이지에서 크롤링 했던 기억이 있는데, 그 때는 robots.txt를 몰랐어서 네이버에서 일부러 밴을 안 한건지 잘 모르겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;161&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8m5NQ/btsKTIfGtro/ayq4MtjZKDTNJkRVxKktz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8m5NQ/btsKTIfGtro/ayq4MtjZKDTNJkRVxKktz1/img.png&quot; data-alt=&quot;네이버 검색페이지의 robots.txt&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8m5NQ/btsKTIfGtro/ayq4MtjZKDTNJkRVxKktz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8m5NQ%2FbtsKTIfGtro%2Fayq4MtjZKDTNJkRVxKktz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;273&quot; height=&quot;94&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;161&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;네이버 검색페이지의 robots.txt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvspUg/btsKTCzKBY2/CiOejHWXfMLbisk77awX81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvspUg/btsKTCzKBY2/CiOejHWXfMLbisk77awX81/img.png&quot; data-alt=&quot;구글 robots.txt&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvspUg/btsKTCzKBY2/CiOejHWXfMLbisk77awX81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvspUg%2FbtsKTCzKBY2%2FCiOejHWXfMLbisk77awX81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;272&quot; height=&quot;90&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;구글 robots.txt&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;솔직히 구글은 자기들도 크롤링으로 다른 사이트에 있는 데이터 다 긁어오면서, 그냥 이미지 몇개 긁는 것도 금지하고 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;양심이 없네.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라고 생각을 하는데 사실 api를 통해서 크롤링 정보를 제공하는 경우는 있으니 이건 다음 글에서 다루고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무튼 본문으로 돌아와서, 일단 아무거나 긁어보고자 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PWp77/btsKSFEpwkH/4Vu8GaJagT5NKHEKnadiQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PWp77/btsKSFEpwkH/4Vu8GaJagT5NKHEKnadiQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PWp77/btsKSFEpwkH/4Vu8GaJagT5NKHEKnadiQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPWp77%2FbtsKSFEpwkH%2F4Vu8GaJagT5NKHEKnadiQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1860&quot; height=&quot;955&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에처럼 하기 위해서는 F12를 눌러 개발자 옵션을 열어줘야한다. 그리고 빨간색으로 표시한 부분을 누르고 웹사이트의 이곳저곳을 만지면 그 부분의 정보가 개발자 옵션에 뜬다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o3x5D/btsKToBZGTx/XflXQP1NjgUo8F4hZ868TK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o3x5D/btsKToBZGTx/XflXQP1NjgUo8F4hZ868TK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o3x5D/btsKToBZGTx/XflXQP1NjgUo8F4hZ868TK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo3x5D%2FbtsKToBZGTx%2FXflXQP1NjgUo8F4hZ868TK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;565&quot; height=&quot;247&quot; data-origin-width=&quot;761&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 파이썬에 해당 웹사이트의 정보를 불러와야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹사이트는 html, css, java script로 이루어져있고 크롤링을 할 때는 html 정보를 긁어오는 것이라 생각하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;방법은 아래의 두 가지가 있는데 편한 것을 고르면 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1445&quot; data-origin-height=&quot;719&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chOR67/btsKTkzI3il/2iPfw0Pjvl2a8OXOncupE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chOR67/btsKTkzI3il/2iPfw0Pjvl2a8OXOncupE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chOR67/btsKTkzI3il/2iPfw0Pjvl2a8OXOncupE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchOR67%2FbtsKTkzI3il%2F2iPfw0Pjvl2a8OXOncupE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;735&quot; height=&quot;366&quot; data-origin-width=&quot;1445&quot; data-origin-height=&quot;719&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BeautifulSoup()은 BeautifulSoup 객체를 만드는 것이라 직관적이게 bs_obj로 이름지었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;83&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/du2vf9/btsKUh3epBd/mS74LmqNy1junRMjUqHUb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/du2vf9/btsKUh3epBd/mS74LmqNy1junRMjUqHUb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/du2vf9/btsKUh3epBd/mS74LmqNy1junRMjUqHUb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdu2vf9%2FbtsKUh3epBd%2FmS74LmqNy1junRMjUqHUb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;208&quot; height=&quot;66&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;83&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BeautifulSoup(가져올 주소, &quot;html parser&quot;). 그냥 외우면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 광활한 html 정보 안에 원하는 정보가 어디있는지 찾아야한다. 해당 html 요소를 찾아보자. 나는 '산업/경제'를 긁어올려고 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;955&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PWp77/btsKSFEpwkH/4Vu8GaJagT5NKHEKnadiQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PWp77/btsKSFEpwkH/4Vu8GaJagT5NKHEKnadiQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PWp77/btsKSFEpwkH/4Vu8GaJagT5NKHEKnadiQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPWp77%2FbtsKSFEpwkH%2F4Vu8GaJagT5NKHEKnadiQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1860&quot; height=&quot;955&quot; data-origin-width=&quot;1860&quot; data-origin-height=&quot;955&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;html 정보에는 &amp;lt;h&amp;gt;, &amp;lt;a&amp;gt;, &amp;lt;li&amp;gt;, &amp;lt;span&amp;gt; 등등이 있는데 이것을 find() 함수를 이용해 찾아본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 find_all()을 쓴건데 이 둘의 차이는 몇 개를 찾느냐의 차이이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find()는 제일 앞의 것만 찾아온다. find_all()은 찾는 것들을 모두 list로 담아서 준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byEAa9/btsKSI8XflJ/EsUEiUNTXoijMluokBcfx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byEAa9/btsKSI8XflJ/EsUEiUNTXoijMluokBcfx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byEAa9/btsKSI8XflJ/EsUEiUNTXoijMluokBcfx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyEAa9%2FbtsKSI8XflJ%2FEsUEiUNTXoijMluokBcfx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;378&quot; height=&quot;412&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;678&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;음... 그런데 'span'으로 찾아보니 너무 많다. 다른 것을 이용해서 찾아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1339&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmDcd4/btsKS7HdL0y/Bh5EicLkZyrxROSiZiKVKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmDcd4/btsKS7HdL0y/Bh5EicLkZyrxROSiZiKVKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmDcd4/btsKS7HdL0y/Bh5EicLkZyrxROSiZiKVKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmDcd4%2FbtsKS7HdL0y%2FBh5EicLkZyrxROSiZiKVKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1339&quot; height=&quot;406&quot; data-origin-width=&quot;1339&quot; data-origin-height=&quot;406&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'a'로 찾아도 마찬가지로 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 'span'으로 찾을 때와는 차이점이 있는데, class 정보가 있다는 것이다. title도 있고.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs6qNV/btsKTqs4Q7l/iJjykUdQXj2hy2os65OMt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs6qNV/btsKTqs4Q7l/iJjykUdQXj2hy2os65OMt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs6qNV/btsKTqs4Q7l/iJjykUdQXj2hy2os65OMt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs6qNV%2FbtsKTqs4Q7l%2FiJjykUdQXj2hy2os65OMt0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;409&quot; height=&quot;275&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 class 정보를 이용해서 찾아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;class는 'n' 뒤에 숫자가 있는 문자열인 것을 이용해 for문으로 뽑아봤다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.text는 &quot;&amp;lt;span&amp;gt; 내용 &amp;lt;/span&amp;gt;&quot; 같은 정보에서 내용만 빼오는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 &amp;lt;a&amp;gt; 안에 &amp;lt;span&amp;gt;이 2개나 있어 다른 것도 붙어나왔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 없애기 위해서는 정규표현식(re)를 이용해서 없애야한다. 정규표현식은 다음에 다룰 생각이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 아까 나온 find()를 이용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find()는 제일 앞의 것만 찾아온다고 했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아니면 find_all()이 list로 리턴하는 것을 생각하면 word[0].text로 해도 될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bFOYfN/btsKTo25GnV/SCTn1lzqfS8KAJ29aoChf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bFOYfN/btsKTo25GnV/SCTn1lzqfS8KAJ29aoChf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bFOYfN/btsKTo25GnV/SCTn1lzqfS8KAJ29aoChf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbFOYfN%2FbtsKTo25GnV%2FSCTn1lzqfS8KAJ29aoChf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;317&quot; height=&quot;230&quot; data-origin-width=&quot;498&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번엔 title을 이용해서 찾는 방법이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXFs8R/btsKUeyQiDA/qLGuBg9ZKLY6QkozkWL540/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXFs8R/btsKUeyQiDA/qLGuBg9ZKLY6QkozkWL540/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXFs8R/btsKUeyQiDA/qLGuBg9ZKLY6QkozkWL540/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXFs8R%2FbtsKUeyQiDA%2FqLGuBg9ZKLY6QkozkWL540%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;413&quot; height=&quot;241&quot; data-origin-width=&quot;662&quot; data-origin-height=&quot;386&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래는 네이버에서 적당히 할려고 했는데 여러 난관이 있어서 시간이 오래 걸렸다. 아까 네이버 검색페이지는 다 허용 안된다고 했었는데, 네이버는 페이지마다 robots.txt 내용이 다 다르다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 selenium을 다루는 글에서는 네이버 홈페이지에서 할 생각이다.&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/4</guid>
      <comments>https://jyun34.tistory.com/4#entry4comment</comments>
      <pubDate>Fri, 22 Nov 2024 20:06:11 +0900</pubDate>
    </item>
    <item>
      <title>Jupyter notebook 쓸 때 팁</title>
      <link>https://jyun34.tistory.com/3</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Tab: 자동완성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dphqPS/btsKOzjtupa/WkBxoCcddNsVTEisOF1crK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dphqPS/btsKOzjtupa/WkBxoCcddNsVTEisOF1crK/img.png&quot; data-alt=&quot;Tab을 나오면 함수나 변수명이 나온다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dphqPS/btsKOzjtupa/WkBxoCcddNsVTEisOF1crK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdphqPS%2FbtsKOzjtupa%2FWkBxoCcddNsVTEisOF1crK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;305&quot; height=&quot;241&quot; data-origin-width=&quot;691&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Tab을 나오면 함수나 변수명이 나온다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Shift + Tab: 함수의 정보가 나온다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;503&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3a2JN/btsKPHt19pt/n8Dh2qP8PwUJ4T7pwDMke0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3a2JN/btsKPHt19pt/n8Dh2qP8PwUJ4T7pwDMke0/img.png&quot; data-alt=&quot;함수가 가진 변수 데이터가 나온다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3a2JN/btsKPHt19pt/n8Dh2qP8PwUJ4T7pwDMke0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3a2JN%2FbtsKPHt19pt%2Fn8Dh2qP8PwUJ4T7pwDMke0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;436&quot; height=&quot;269&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;503&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;함수가 가진 변수 데이터가 나온다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;python에서 이와 같은 기능을 가진 help() 함수가 있는 것 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DMYR9/btsKOoWzkR8/HVTkEUUeGGRZ86jMemkU8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DMYR9/btsKOoWzkR8/HVTkEUUeGGRZ86jMemkU8K/img.png&quot; data-alt=&quot;코딩 테스트 같은 환경에서 유용하다고 한다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DMYR9/btsKOoWzkR8/HVTkEUUeGGRZ86jMemkU8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDMYR9%2FbtsKOoWzkR8%2FHVTkEUUeGGRZ86jMemkU8K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;506&quot; height=&quot;337&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;552&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;코딩 테스트 같은 환경에서 유용하다고 한다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ctrl + 클릭: 여러 줄 쓰기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/F9XS2/btsKPP6pqyM/iVJ0FsAybL8TIukBYNPpN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/F9XS2/btsKPP6pqyM/iVJ0FsAybL8TIukBYNPpN0/img.png&quot; data-alt=&quot;들여쓰기 할 때나 많은 변수 이름 바꿀 때 유용해보인다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/F9XS2/btsKPP6pqyM/iVJ0FsAybL8TIukBYNPpN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FF9XS2%2FbtsKPP6pqyM%2FiVJ0FsAybL8TIukBYNPpN0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;320&quot; height=&quot;136&quot; data-origin-width=&quot;503&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;들여쓰기 할 때나 많은 변수 이름 바꿀 때 유용해보인다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Upstage AI Lab 6기</category>
      <category>오블완</category>
      <category>티스토리챌린지</category>
      <author>jyun34</author>
      <guid isPermaLink="true">https://jyun34.tistory.com/3</guid>
      <comments>https://jyun34.tistory.com/3#entry3comment</comments>
      <pubDate>Wed, 20 Nov 2024 10:41:24 +0900</pubDate>
    </item>
  </channel>
</rss>