<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>mystudynote</title>
    <link>https://jiheek.tistory.com/</link>
    <description>공부한거 정리하는 블로그 ;O
&amp;lt; 웹, 리눅스, 임베디드 시스템, C++, 인공지능&amp;gt;</description>
    <language>ko</language>
    <pubDate>Wed, 15 Apr 2026 05:04:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jiheek</managingEditor>
    <image>
      <title>mystudynote</title>
      <url>https://tistory1.daumcdn.net/tistory/4991082/attach/da828045b36b49eaa6b6c2996afddb23</url>
      <link>https://jiheek.tistory.com</link>
    </image>
    <item>
      <title>[Ollama] vs pytorch transformers</title>
      <link>https://jiheek.tistory.com/192</link>
      <description>&lt;h2 style=&quot;background-color: #f2f2f2; color: #616161; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  Ollama vs PyTorch/transformers&lt;/h2&gt;
&lt;h4 style=&quot;background-color: #f2f2f2; color: #616161; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;PyTorch 직접 사용&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f2f2f2; color: #616161; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;장점&lt;/b&gt;: 모델 구조에 직접 접근, 세밀한 제어 가능&lt;/li&gt;
&lt;li&gt;❌&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;단점&lt;/b&gt;: 복잡한 설정, GPU 메모리 관리, 모델 로딩 시간 오래 걸림&lt;/li&gt;
&lt;li&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특징&lt;/b&gt;: Transformers 라이브러리로 모델을 직접 다운로드하고 메모리에 로딩&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 style=&quot;background-color: #f2f2f2; color: #616161; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;Ollama 사용&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f2f2f2; color: #616161; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;장점&lt;/b&gt;: 간단한 설정, 자동 최적화, 빠른 시작, 모델 관리 편리&lt;/li&gt;
&lt;li&gt;✅&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;특징&lt;/b&gt;: 서버-클라이언트 구조, 양자화 자동 적용, 메모리 효율적&lt;/li&gt;
&lt;li&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;최적화&lt;/b&gt;: C++로 작성된 llama.cpp 엔진 사용 (더 빠름)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1754894217264&quot; class=&quot;angelscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# ollama 설치
curl -fsSL https://ollama.com/install.sh | sh
# llama3.2 1B(가장 작은 모델) 설치
ollama pull llama3.2:1b&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f2f2f2; color: #616161; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;Ollama vs PyTorch/Transformers 비교표&lt;/h4&gt;
&lt;table style=&quot;background-color: #f2f2f2; color: #616161; text-align: left; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 구분 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;  Ollama&lt;/td&gt;
&lt;td&gt;  PyTorch/Transformers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;아키텍처&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;클라이언트-서버 구조&lt;/td&gt;
&lt;td&gt;직접 라이브러리 호출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;통신 방식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;HTTP API (REST)&lt;/td&gt;
&lt;td&gt;Python 함수 호출&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;기본 포트&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;11434&lt;/td&gt;
&lt;td&gt;없음 (직접 호출)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;설치 방법&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;시스템 바이너리 설치&lt;/td&gt;
&lt;td&gt;pip install&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;모델 관리&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;ollama pull &amp;lt;model&amp;gt;&lt;/td&gt;
&lt;td&gt;HuggingFace Hub 자동 다운로드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;모델 저장 위치&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;/usr/share/ollama/.ollama/models/&lt;/td&gt;
&lt;td&gt;~/.cache/huggingface/hub/&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;모델 형식&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;GGUF (양자화된 형식)&lt;/td&gt;
&lt;td&gt;PyTorch (.bin, .safetensors)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;메모리 사용&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;서버 프로세스가 공유 관리&lt;/td&gt;
&lt;td&gt;각 Python 프로세스마다 로드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;초기화 시간&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;서버 시작 후 즉시 사용&lt;/td&gt;
&lt;td&gt;매번 모델 로딩 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;동시 사용&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;여러 클라이언트가 하나의 서버 공유&lt;/td&gt;
&lt;td&gt;각각 독립적으로 모델 로드&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;성능&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;C++/Go 기반, 고도로 최적화&lt;/td&gt;
&lt;td&gt;Python 오버헤드 존재&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;스트리밍&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;내장 지원 (stream=True)&lt;/td&gt;
&lt;td&gt;복잡한 구현 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;양자화&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;기본 지원 (Q8_0, Q4_0 등)&lt;/td&gt;
&lt;td&gt;별도 라이브러리 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;커스터마이징&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;API 파라미터로 제한&lt;/td&gt;
&lt;td&gt;모든 내부 로직 접근 가능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;디버깅&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;서버 로그만 확인 가능&lt;/td&gt;
&lt;td&gt;Python 코드 직접 디버깅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;의존성&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;requests&lt;span&gt;&amp;nbsp;&lt;/span&gt;라이브러리만&lt;/td&gt;
&lt;td&gt;torch,&lt;span&gt;&amp;nbsp;&lt;/span&gt;transformers&lt;span&gt;&amp;nbsp;&lt;/span&gt;등&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;디스크 사용량&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;압축된 모델 (1.3GB)&lt;/td&gt;
&lt;td&gt;원본 모델 (더 큰 용량)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;GPU 지원&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;자동 감지 및 최적화&lt;/td&gt;
&lt;td&gt;수동 설정 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;CPU 최적화&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;llama.cpp 기반 최적화&lt;/td&gt;
&lt;td&gt;기본 PyTorch CPU 실행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;Ollama 추론 순서&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ollama의 기본 서버 포트는 11434이다.&lt;/p&gt;
&lt;pre id=&quot;code_1754893977726&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; ️ 모델 파일 (디스크): 데이터만 저장
    &amp;darr;
 ️ Ollama 서버: 파일을 읽어서 추론 엔진 구동
    &amp;darr;  
  HTTP API: 외부에서 접근 가능한 인터페이스 제공
    &amp;darr;
  ollama.py: API를 호출하는 클라이언트&lt;/code&gt;&lt;/pre&gt;</description>
      <category>DeepLearning</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/192</guid>
      <comments>https://jiheek.tistory.com/192#entry192comment</comments>
      <pubDate>Mon, 11 Aug 2025 15:37:21 +0900</pubDate>
    </item>
    <item>
      <title>[SLM] smollm 돌려보기 with copilot</title>
      <link>https://jiheek.tistory.com/191</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LLM SLM 공부하기 전 일단 돌려보자.. copilot에게 모든 코딩을 부탁해 보았다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전체 코드&lt;/h3&gt;
&lt;pre id=&quot;code_1754890752335&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;&quot;&quot;
SmolLM 추론 코드 - 실제 모델 버전
HuggingFace의 SmolLM-135M 모델을 사용합니다.
&quot;&quot;&quot;

import warnings
warnings.filterwarnings(&quot;ignore&quot;)

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM

class SmolLMInference:
    def __init__(self, model_name=&quot;HuggingFaceTB/SmolLM-135M&quot;):
        &quot;&quot;&quot;
        SmolLM 모델 초기화
        Args:
            model_name: 사용할 SmolLM 모델명 (기본값: 가장 작은 135M 모델)
        &quot;&quot;&quot;
        self.model_name = model_name
        
        print(f&quot;모델 로딩 중: {model_name}&quot;)
        self.device = torch.device(&quot;cuda&quot; if torch.cuda.is_available() else &quot;cpu&quot;)
        print(f&quot;사용 디바이스: {self.device}&quot;)
        
        # 토크나이저와 모델 로드
        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.model = AutoModelForCausalLM.from_pretrained(
            model_name,
            torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
            device_map=&quot;auto&quot; if torch.cuda.is_available() else None
        )
        
        # 패딩 토큰이 없으면 EOS 토큰을 패딩 토큰으로 설정
        if self.tokenizer.pad_token is None:
            self.tokenizer.pad_token = self.tokenizer.eos_token
        
        print(&quot;모델 로딩 완료!&quot;)
    
    def generate_text(self, prompt, max_length=100, temperature=0.7, do_sample=True, top_p=0.9):
        &quot;&quot;&quot;
        텍스트 생성 함수
        Args:
            prompt: 입력 프롬프트
            max_length: 최대 생성 길이
            temperature: 샘플링 온도 (높을수록 창의적)
            do_sample: 샘플링 여부
            top_p: nucleus sampling 파라미터
        Returns:
            생성된 텍스트
        &quot;&quot;&quot;
        # 입력 텍스트 토크나이징
        inputs = self.tokenizer.encode(prompt, return_tensors=&quot;pt&quot;).to(self.device)
        
        # 텍스트 생성
        with torch.no_grad():
            outputs = self.model.generate(
                inputs,
                max_length=max_length,
                temperature=temperature,
                do_sample=do_sample,
                top_p=top_p,
                pad_token_id=self.tokenizer.eos_token_id,
                num_return_sequences=1
            )
        
        # 생성된 텍스트 디코딩
        generated_text = self.tokenizer.decode(outputs[0], skip_special_tokens=True)
        
        # 원본 프롬프트 제거하고 생성된 부분만 반환
        if generated_text.startswith(prompt):
            generated_text = generated_text[len(prompt):].strip()
        
        return generated_text

def main():
    &quot;&quot;&quot;메인 실행 함수&quot;&quot;&quot;
    print(&quot;=== SmolLM 추론 데모 ===&quot;)
    print(&quot;(HuggingFace SmolLM-135M 모델)&quot;)
    
    # SmolLM 인스턴스 생성
    try:
        llm = SmolLMInference()
    except Exception as e:
        print(f&quot;초기화 에러: {e}&quot;)
        return
    
    # 예시 프롬프트들
    example_prompts = [
        &quot;The weather today is&quot;,
        &quot;Python is a programming language that&quot;,
    ]
    
    print(&quot;\n=== 예시 추론 결과 ===&quot;)
    for i, prompt in enumerate(example_prompts, 1):
        print(f&quot;\n{i}. 프롬프트: '{prompt}'&quot;)
        try:
            generated = llm.generate_text(
                prompt=prompt,
                max_length=50,  # 짧은 생성을 위해 길이 제한
                temperature=0.8
            )
            print(f&quot;   생성 결과: {prompt} {generated}&quot;)
        except Exception as e:
            print(f&quot;   생성 에러: {e}&quot;)
    
    # 대화형 모드
    print(&quot;\n=== 대화형 모드 (종료하려면 'quit' 입력) ===&quot;)
    while True:
        try:
            user_prompt = input(&quot;\n프롬프트를 입력하세요: &quot;)
            if user_prompt.lower() in ['quit', 'exit', '종료']:
                break
            
            if user_prompt.strip():
                generated = llm.generate_text(
                    prompt=user_prompt,
                    max_length=100,
                    temperature=0.7
                )
                print(f&quot;생성 결과: {user_prompt} {generated}&quot;)
            else:
                print(&quot;빈 프롬프트입니다. 다시 입력해주세요.&quot;)
                
        except KeyboardInterrupt:
            print(&quot;\n프로그램을 종료합니다.&quot;)
            break
        except Exception as e:
            print(f&quot;에러 발생: {e}&quot;)

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1754890871933&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;=== SmolLM 추론 데모 ===
(HuggingFace SmolLM-135M 모델)
모델 로딩 중: HuggingFaceTB/SmolLM-135M
사용 디바이스: cuda
모델 로딩 완료!

=== 예시 추론 결과 ===

1. 프롬프트: 'The weather today is'
The attention mask is not set and cannot be inferred from input because pad token is same as eos token. As a consequence, you may observe unexpected behavior. Please pass your input's `attention_mask` to obtain reliable results.
   생성 결과: The weather today is still wet and warm and there are still some cloudy days.
- The weather is forecasted to be warm and dry and there is still a lot of sunshine.
- The weather is forecasted to be cold and dry and

2. 프롬프트: 'Python is a programming language that'
   생성 결과: Python is a programming language that can be used for a variety of tasks, such as web development, mobile app development, and data analysis. Python is known for its readability and simplicity, making it a popular choice for beginners and experienced programmers alike.

=== 대화형 모드 (종료하려면 'quit' 입력) ===

프롬프트를 입력하세요: explain about smolLM
생성 결과: explain about smolLM and the models that it can use to predict the future.

Now that we have a basic understanding of how the models work, let's move on to the main part of the project: training the models.

### Training the Models

The first step in training the models is to load the data. This data can come from various sources, such as the training data, the testing data, or the validation data. For this project, we will be

프롬프트를 입력하세요: where is south korea
생성 결과: where is south korea , and the northern part of the country.
The main source of water is from the lake. The lake is located in the south of the country and the water is of great importance for the water supply and irrigation. The lake is the largest lake in the country.
The lake is also a great source of fish, which is an important source of protein for many people. The lake is the largest lake in the country and it is located in the south of the

프롬프트를 입력하세요: quit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;SmolLM &amp;amp; 코드 설명&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SmolLM이란?&lt;/b&gt;&lt;br /&gt;SLM = Small Language Model (소형 언어 모델)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;ChatGPT같은&amp;nbsp;거대한&amp;nbsp;모델과&amp;nbsp;달리&amp;nbsp;작고&amp;nbsp;가벼운&amp;nbsp;모델 &lt;/li&gt;
&lt;li&gt;135M&amp;nbsp;=&amp;nbsp;1억&amp;nbsp;3천&amp;nbsp;5백만&amp;nbsp;개의&amp;nbsp;파라미터&amp;nbsp;(ChatGPT는&amp;nbsp;수천억&amp;nbsp;개) &lt;/li&gt;
&lt;li&gt;개인 컴퓨터에서도 실행 가능한 크기&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;trasnsformers 라이브러리&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754891092936&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from transformers import AutoTokenizer, AutoModelForCausalLM&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HuggingFace에서 만든 Python 라이브러리이다. &lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;사전&amp;nbsp;훈련된&amp;nbsp;모델들을&amp;nbsp;쉽게&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해줌&lt;/li&gt;
&lt;li&gt;BERT, GPT, T5, SmolLM 등 수천 개의 모델 지원 &lt;/li&gt;
&lt;li&gt;복잡한&amp;nbsp;AI&amp;nbsp;모델을&amp;nbsp;몇&amp;nbsp;줄의&amp;nbsp;코드로&amp;nbsp;사용&amp;nbsp;가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;토크나이저란?&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754891028749&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;self.tokenizer = AutoTokenizer.from_pretrained(model_name)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;사람이&amp;nbsp;읽는&amp;nbsp;텍스트&amp;nbsp;&amp;rarr;&amp;nbsp;컴퓨터가&amp;nbsp;이해하는&amp;nbsp;숫자로&amp;nbsp;변환 &lt;br /&gt;예:&amp;nbsp;&quot;Hello&quot;&amp;nbsp;&amp;rarr;&amp;nbsp;[15496]&amp;nbsp;같은&amp;nbsp;숫자로&amp;nbsp;변환 &lt;br /&gt;각&amp;nbsp;단어나&amp;nbsp;글자&amp;nbsp;조각을&amp;nbsp;&quot;토큰&quot;이라고&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;b&gt;모델 로딩~텍스트 생성 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754891261950&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#모델 로딩
self.model = AutoModelForCausalLM.from_pretrained(
    model_name,
    torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
    device_map=&quot;auto&quot; if torch.cuda.is_available() else None
)

#패딩 토큰 설정: 문장 길이 맞추기 위해 빈 공간 표시
if self.tokenizer.pad_token is None:
    self.tokenizer.pad_token = self.tokenizer.eos_token

#텍스트 생성 함수
def generate_text(self, prompt, max_length=100, temperature=0.7, do_sample=True, top_p=0.9):&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;텍스트 생성 함수 파라미터 설명:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;prompt:&amp;nbsp;입력&amp;nbsp;텍스트&amp;nbsp;(시작하는&amp;nbsp;문장) &lt;/li&gt;
&lt;li&gt;max_length:&amp;nbsp;최대&amp;nbsp;생성할&amp;nbsp;글자&amp;nbsp;수 &lt;/li&gt;
&lt;li&gt;temperature:&amp;nbsp;창의성&amp;nbsp;조절&amp;nbsp;(0~1,&amp;nbsp;높을수록&amp;nbsp;창의적) &lt;/li&gt;
&lt;li&gt;do_sample:&amp;nbsp;랜덤성&amp;nbsp;추가&amp;nbsp;여부 &lt;/li&gt;
&lt;li&gt;top_p:&amp;nbsp;다양성&amp;nbsp;조절&amp;nbsp;(0~1,&amp;nbsp;높을수록&amp;nbsp;다양함)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Encode(텍스트-&amp;gt;토큰(숫자)), Decode(토큰-&amp;gt;텍스트)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1754891414651&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;inputs = self.tokenizer.encode(prompt, return_tensors=&quot;pt&quot;).to(self.device)

generated_text = self.tokenizer.decode(outputs[0], skip_special_tokens=True)&lt;/code&gt;&lt;/pre&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;Temperature란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Temperature는&amp;nbsp;AI&amp;nbsp;모델이&amp;nbsp;얼마나&amp;nbsp;&quot;창의적&quot;이거나&amp;nbsp;&quot;예측&amp;nbsp;가능한&quot;&amp;nbsp;텍스트를&amp;nbsp;생성할지를&amp;nbsp;조절하는&amp;nbsp;매개변수입니다. &lt;br /&gt;&lt;br /&gt;온도계와의&amp;nbsp;비유 &lt;br /&gt;실제&amp;nbsp;온도계처럼&amp;nbsp;생각해보세요: &lt;br /&gt;&lt;br /&gt;낮은&amp;nbsp;온도&amp;nbsp;(추위):&amp;nbsp;분자들이&amp;nbsp;천천히,&amp;nbsp;규칙적으로&amp;nbsp;움직임&amp;nbsp;&amp;rarr;&amp;nbsp;예측&amp;nbsp;가능함 &lt;br /&gt;높은&amp;nbsp;온도&amp;nbsp;(더위):&amp;nbsp;분자들이&amp;nbsp;빠르게,&amp;nbsp;무작위로&amp;nbsp;움직임&amp;nbsp;&amp;rarr;&amp;nbsp;예측&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.7의 temperature를 많이 사용한다.&lt;/p&gt;</description>
      <category>DeepLearning</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/191</guid>
      <comments>https://jiheek.tistory.com/191#entry191comment</comments>
      <pubDate>Mon, 11 Aug 2025 14:51:47 +0900</pubDate>
    </item>
    <item>
      <title>[aws ec2] vscode 연결: config 설정, 인스턴스 용량 증설</title>
      <link>https://jiheek.tistory.com/190</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;vscode 연결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;asw 인스턴스 생성 후 연결할 때 나오는 퍼블릭 DNS를 vscode ssh config HostName에 입력한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 인스턴스 생성 시 저장한 pem 파일 경로를 IndentityFile에 설정해준다.&lt;/p&gt;
&lt;div style=&quot;background-color: #f5f5f5; color: #333333;&quot;&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style=&quot;color: #9c5d27;&quot;&gt;Host&lt;/span&gt;&lt;span style=&quot;color: #448c27;&quot;&gt; aws&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9c5d27;&quot;&gt;&amp;nbsp; &amp;nbsp; HostName&lt;/span&gt;&lt;span style=&quot;color: #448c27;&quot;&gt; ec2-######.compute.amazonaws.com&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9c5d27;&quot;&gt;&amp;nbsp; &amp;nbsp; User&lt;/span&gt;&lt;span style=&quot;color: #448c27;&quot;&gt; ubuntu&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9c5d27;&quot;&gt;&amp;nbsp; &amp;nbsp; Port&lt;/span&gt;&lt;span style=&quot;color: #448c27;&quot;&gt; 22&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #9c5d27;&quot;&gt;&amp;nbsp; &amp;nbsp; IdentityFile&lt;/span&gt;&lt;span style=&quot;color: #448c27;&quot;&gt; C:/Users/~~/.ssh/~~.pem&lt;/span&gt;&lt;/div&gt;
&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;그리고 vscode에서 ctrl+p로 ssh 연결하면 끝&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;a href=&quot;https://jaeyung1001.tistory.com/entry/AWS-EC2-%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://jaeyung1001.tistory.com/entry/AWS-EC2-%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1754892552854&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;[AWS] EC2 용량 증설하기&quot; data-og-description=&quot;EC2를 생성했다가 용량을 너무 작게 잡아버려서 용량을 증설해야하는 일이 생겼다. 인스턴스 ID를 클릭하고, 스토리지를 클릭한다. 볼륨ID를 클릭해서 볼륨 세팅 페이지로 넘어간다음에 클릭한 &quot; data-og-host=&quot;jaeyung1001.tistory.com&quot; data-og-source-url=&quot;https://jaeyung1001.tistory.com/entry/AWS-EC2-%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://jaeyung1001.tistory.com/entry/AWS-EC2-%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4%ED%95%98%EA%B8%B0&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/B3B1n/hyZuCTkke1/AjXotCSP2JvFvD5JI7wZ30/img.jpg?width=571&amp;amp;height=571&amp;amp;face=0_0_571_571,https://scrap.kakaocdn.net/dn/oHda0/hyZuGIbzYG/pQ2CetIYsjRUGRseyaKD71/img.jpg?width=571&amp;amp;height=571&amp;amp;face=0_0_571_571,https://scrap.kakaocdn.net/dn/Ze7M5/hyZvpF8O1F/SFVwHTrLApvsVqPFkbELC1/img.png?width=1016&amp;amp;height=680&amp;amp;face=0_0_1016_680&quot;&gt;&lt;a href=&quot;https://jaeyung1001.tistory.com/entry/AWS-EC2-%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jaeyung1001.tistory.com/entry/AWS-EC2-%EC%9A%A9%EB%9F%89-%EC%A6%9D%EC%84%A4%ED%95%98%EA%B8%B0&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/B3B1n/hyZuCTkke1/AjXotCSP2JvFvD5JI7wZ30/img.jpg?width=571&amp;amp;height=571&amp;amp;face=0_0_571_571,https://scrap.kakaocdn.net/dn/oHda0/hyZuGIbzYG/pQ2CetIYsjRUGRseyaKD71/img.jpg?width=571&amp;amp;height=571&amp;amp;face=0_0_571_571,https://scrap.kakaocdn.net/dn/Ze7M5/hyZvpF8O1F/SFVwHTrLApvsVqPFkbELC1/img.png?width=1016&amp;amp;height=680&amp;amp;face=0_0_1016_680');&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;[AWS] EC2 용량 증설하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;EC2를 생성했다가 용량을 너무 작게 잡아버려서 용량을 증설해야하는 일이 생겼다. 인스턴스 ID를 클릭하고, 스토리지를 클릭한다. 볼륨ID를 클릭해서 볼륨 세팅 페이지로 넘어간다음에 클릭한&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;jaeyung1001.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DeepLearning</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/190</guid>
      <comments>https://jiheek.tistory.com/190#entry190comment</comments>
      <pubDate>Mon, 11 Aug 2025 14:08:59 +0900</pubDate>
    </item>
    <item>
      <title>[C++] thread 이해하기 기초</title>
      <link>https://jiheek.tistory.com/189</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhBjEZ/btsM3HeHXND/bBIB7FKHL2H5kKVY7UM0K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhBjEZ/btsM3HeHXND/bBIB7FKHL2H5kKVY7UM0K1/img.png&quot; data-alt=&quot;https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhBjEZ/btsM3HeHXND/bBIB7FKHL2H5kKVY7UM0K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhBjEZ%2FbtsM3HeHXND%2FbBIB7FKHL2H5kKVY7UM0K1%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;250&quot; height=&quot;237&quot; data-origin-width=&quot;250&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;https://ko.wikipedia.org/wiki/%EC%8A%A4%EB%A0%88%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1a1a1a; text-align: start;&quot;&gt;스레드(Thread)는 프로그램 내에서 독립적으로 실행되는 작업의 단위로, 프로세스 내에서 여러 스레드가 동시에 실행될 수 있다. 스레드는 경량 프로세스라고도 불리며, 같은 메모리 공간을 공유하기 때문에 스레드 간의 통신이 빠르고 효율적이다.&lt;/span&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;스레드에서 실행할 함수(threadFunction)을 정의하고, main 함수 내에서 std::thread의 인자로 정의한 함수를 전달하면, 스레드가 생성되며 함수가 실행된다.&lt;/p&gt;
&lt;pre id=&quot;code_1743475087830&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;thread&amp;gt;
#include &amp;lt;chrono&amp;gt;

// Function to be executed by the thread
void threadFunction() {
    std::cout &amp;lt;&amp;lt; &quot;Thread started.&quot; &amp;lt;&amp;lt; std::endl;

    // Loop to print count and sleep for 1 second
    for (int i = 0; i &amp;lt; 5; ++i) {
        std::cout &amp;lt;&amp;lt; &quot;Count: &quot; &amp;lt;&amp;lt; i + 1 &amp;lt;&amp;lt; std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    std::cout &amp;lt;&amp;lt; &quot;Thread done.&quot; &amp;lt;&amp;lt; std::endl;
}

int main() {
    // Create a new thread that runs threadFunction
    std::thread myThread(threadFunction);

    // Check if the thread is joinable and join it
    if (myThread.joinable()) {
        myThread.join(); 
    }

    std::cout &amp;lt;&amp;lt; &quot;Main thread end.&quot; &amp;lt;&amp;lt; std::endl;
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드 예제에서 main 함수가 호출될 때 새로운 프로세스가 실행되며, std::thread를 사용해서 새로운 thread를 생성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;thread.join()을 통해 새로운 thread가 종료될 때 까지 메인 프로세스가 대기한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #1a1a1a; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;프로세스&lt;/b&gt;: 운영 체제에서 실행되는 프로그램의 인스턴스. 각 프로세스는 독립적인 메모리 공간을 가지고 있으며, 다른 프로세스와 메모리를 공유하지 않음&lt;/li&gt;
&lt;li style=&quot;list-style-type: inherit;&quot;&gt;&lt;b&gt;스레드&lt;/b&gt;: 프로세스 내에서 실행되는 작업의 단위. 하나의 프로세스는 여러 개의 스레드를 가질 수 있으며, 이 스레드들은 같은 메모리 공간을 공유&lt;/li&gt;
&lt;/ul&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;pre id=&quot;code_1743475176638&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ g++ thread.cpp #컴파일/빌드
$ ls 
a.out  thread.cpp

$ ./a.out #실행
 thread started.
count: 1
count: 2
count: 3
count: 4
count: 5
thread done.
main thread end.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코딩놀이: python C C++</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/189</guid>
      <comments>https://jiheek.tistory.com/189#entry189comment</comments>
      <pubDate>Tue, 1 Apr 2025 11:43:47 +0900</pubDate>
    </item>
    <item>
      <title>express</title>
      <link>https://jiheek.tistory.com/187</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Express는&amp;nbsp;Node.js를&amp;nbsp;위한&amp;nbsp;빠르고&amp;nbsp;간결한&amp;nbsp;웹&amp;nbsp;프레임워크로,&amp;nbsp;웹&amp;nbsp;애플리케이션과&amp;nbsp;API를&amp;nbsp;쉽게&amp;nbsp;구축할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;도와줍니다.&amp;nbsp;Express는&amp;nbsp;미들웨어와&amp;nbsp;라우팅&amp;nbsp;기능을&amp;nbsp;제공하여&amp;nbsp;서버&amp;nbsp;측&amp;nbsp;로직을&amp;nbsp;간단하게&amp;nbsp;작성할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해줍니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;br /&gt;Express의&amp;nbsp;주요&amp;nbsp;개념&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;미들웨어(Middleware):&lt;/b&gt;&lt;br /&gt;미들웨어는&amp;nbsp;요청(Request)과&amp;nbsp;응답(Response)&amp;nbsp;객체를&amp;nbsp;처리하는&amp;nbsp;함수입니다. &lt;br /&gt;미들웨어는&amp;nbsp;요청-응답&amp;nbsp;주기에서&amp;nbsp;여러&amp;nbsp;단계로&amp;nbsp;나뉘며,&amp;nbsp;각&amp;nbsp;단계에서&amp;nbsp;특정&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;미들웨어는 app.use()를 통해 등록되며, 순차적으로 실행됩니다.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;라우팅(Routing):&lt;/b&gt;&lt;br /&gt;라우팅은&amp;nbsp;클라이언트&amp;nbsp;요청에&amp;nbsp;대해&amp;nbsp;서버가&amp;nbsp;어떤&amp;nbsp;응답을&amp;nbsp;할지&amp;nbsp;결정하는&amp;nbsp;과정입니다. &lt;br /&gt;Express에서는&amp;nbsp;app.get(),&amp;nbsp;app.post(),&amp;nbsp;app.put(),&amp;nbsp;app.delete()&amp;nbsp;등의&amp;nbsp;메서드를&amp;nbsp;사용하여&amp;nbsp;라우트를&amp;nbsp;정의할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;요청(Request)와 응답(Response) 객체:&lt;/b&gt;&lt;br /&gt;req&amp;nbsp;객체는&amp;nbsp;클라이언트의&amp;nbsp;요청&amp;nbsp;정보를&amp;nbsp;담고&amp;nbsp;있으며,&amp;nbsp;res&amp;nbsp;객체는&amp;nbsp;서버가&amp;nbsp;클라이언트에게&amp;nbsp;보낼&amp;nbsp;응답을&amp;nbsp;담고&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;app.use()의&amp;nbsp;용도 &lt;/b&gt;&lt;br /&gt;app.use()는&amp;nbsp;미들웨어를&amp;nbsp;애플리케이션에&amp;nbsp;등록하는&amp;nbsp;데&amp;nbsp;사용됩니다.&amp;nbsp;미들웨어는&amp;nbsp;요청-응답&amp;nbsp;주기의&amp;nbsp;특정&amp;nbsp;지점에서&amp;nbsp;실행되며,&amp;nbsp;다양한&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;요청&amp;nbsp;본문을&amp;nbsp;파싱하거나,&amp;nbsp;로그를&amp;nbsp;남기거나,&amp;nbsp;인증을&amp;nbsp;처리하는&amp;nbsp;등의&amp;nbsp;작업을&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;예제 &lt;br /&gt;const&amp;nbsp;express&amp;nbsp;=&amp;nbsp;require('express'); &lt;br /&gt;const&amp;nbsp;app&amp;nbsp;=&amp;nbsp;express(); &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;JSON&amp;nbsp;본문을&amp;nbsp;파싱하는&amp;nbsp;미들웨어 &lt;br /&gt;app.use(express.json()); &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;URL-encoded&amp;nbsp;본문을&amp;nbsp;파싱하는&amp;nbsp;미들웨어 &lt;br /&gt;app.use(express.urlencoded({&amp;nbsp;extended:&amp;nbsp;true&amp;nbsp;})); &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;커스텀&amp;nbsp;미들웨어:&amp;nbsp;모든&amp;nbsp;요청에&amp;nbsp;대해&amp;nbsp;로그를&amp;nbsp;남김 &lt;br /&gt;app.use((req,&amp;nbsp;res,&amp;nbsp;next)&amp;nbsp;=&amp;gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;console.log(`${req.method}&amp;nbsp;${req.url}`); &lt;br /&gt;&amp;nbsp;&amp;nbsp;next();&amp;nbsp;//&amp;nbsp;다음&amp;nbsp;미들웨어로&amp;nbsp;넘어감 &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;라우트&amp;nbsp;정의 &lt;br /&gt;app.get('/',&amp;nbsp;(req,&amp;nbsp;res)&amp;nbsp;=&amp;gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;res.send('Hello,&amp;nbsp;World!'); &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;app.post('/data',&amp;nbsp;(req,&amp;nbsp;res)&amp;nbsp;=&amp;gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;res.json(req.body); &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;오류&amp;nbsp;처리&amp;nbsp;미들웨어 &lt;br /&gt;app.use((err,&amp;nbsp;req,&amp;nbsp;res,&amp;nbsp;next)&amp;nbsp;=&amp;gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;console.error(err.stack); &lt;br /&gt;&amp;nbsp;&amp;nbsp;res.status(500).send('Something&amp;nbsp;broke!'); &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;//&amp;nbsp;서버&amp;nbsp;시작 &lt;br /&gt;app.listen(3000,&amp;nbsp;()&amp;nbsp;=&amp;gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;console.log('Server&amp;nbsp;is&amp;nbsp;running&amp;nbsp;on&amp;nbsp;port&amp;nbsp;3000'); &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;주요&amp;nbsp;미들웨어&amp;nbsp;예제 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Body&amp;nbsp;Parsing&amp;nbsp;미들웨어: &lt;br /&gt;&lt;br /&gt;express.json():&amp;nbsp;JSON&amp;nbsp;형식의&amp;nbsp;요청&amp;nbsp;본문을&amp;nbsp;파싱합니다. &lt;br /&gt;express.urlencoded():&amp;nbsp;URL-encoded&amp;nbsp;형식의&amp;nbsp;요청&amp;nbsp;본문을&amp;nbsp;파싱합니다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;정적&amp;nbsp;파일&amp;nbsp;제공&amp;nbsp;미들웨어: &lt;br /&gt;&lt;br /&gt;express.static():&amp;nbsp;정적&amp;nbsp;파일을&amp;nbsp;제공하는&amp;nbsp;미들웨어입니다.&amp;nbsp;예를&amp;nbsp;들어,&amp;nbsp;HTML,&amp;nbsp;CSS,&amp;nbsp;JavaScript&amp;nbsp;파일을&amp;nbsp;제공할&amp;nbsp;때&amp;nbsp;사용합니다. &lt;br /&gt;&lt;br /&gt;app.use(express.static('public')); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;커스텀&amp;nbsp;미들웨어: &lt;br /&gt;&lt;br /&gt;사용자가&amp;nbsp;직접&amp;nbsp;정의한&amp;nbsp;미들웨어로,&amp;nbsp;요청-응답&amp;nbsp;주기에서&amp;nbsp;특정&amp;nbsp;작업을&amp;nbsp;수행할&amp;nbsp;수&amp;nbsp;있습니다. &lt;br /&gt;&lt;br /&gt;app.use((req,&amp;nbsp;res,&amp;nbsp;next)&amp;nbsp;=&amp;gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;console.log('Request&amp;nbsp;URL:',&amp;nbsp;req.originalUrl); &lt;br /&gt;&amp;nbsp;&amp;nbsp;next(); &lt;br /&gt;}); &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;정리 &lt;br /&gt;&lt;br /&gt;Express는&amp;nbsp;Node.js를&amp;nbsp;위한&amp;nbsp;웹&amp;nbsp;프레임워크로,&amp;nbsp;웹&amp;nbsp;애플리케이션과&amp;nbsp;API를&amp;nbsp;쉽게&amp;nbsp;구축할&amp;nbsp;수&amp;nbsp;있게&amp;nbsp;해줍니다. &lt;br /&gt;미들웨어는&amp;nbsp;요청과&amp;nbsp;응답&amp;nbsp;객체를&amp;nbsp;처리하는&amp;nbsp;함수로,&amp;nbsp;app.use()를&amp;nbsp;통해&amp;nbsp;등록됩니다. &lt;br /&gt;라우팅은&amp;nbsp;클라이언트&amp;nbsp;요청에&amp;nbsp;대해&amp;nbsp;서버가&amp;nbsp;어떤&amp;nbsp;응답을&amp;nbsp;할지&amp;nbsp;결정하는&amp;nbsp;과정입니다. &lt;br /&gt;**app.use()**는&amp;nbsp;미들웨어를&amp;nbsp;애플리케이션에&amp;nbsp;등록하는&amp;nbsp;데&amp;nbsp;사용되며,&amp;nbsp;요청-응답&amp;nbsp;주기의&amp;nbsp;특정&amp;nbsp;지점에서&amp;nbsp;실행됩니다. &lt;br /&gt;&lt;br /&gt;이러한&amp;nbsp;개념을&amp;nbsp;이해하면&amp;nbsp;Express를&amp;nbsp;사용하여&amp;nbsp;다양한&amp;nbsp;웹&amp;nbsp;애플리케이션과&amp;nbsp;API를&amp;nbsp;효율적으로&amp;nbsp;구축할&amp;nbsp;수&amp;nbsp;있습니다. &lt;/p&gt;</description>
      <category>Web: html ccs javascript react</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/187</guid>
      <comments>https://jiheek.tistory.com/187#entry187comment</comments>
      <pubDate>Mon, 17 Jun 2024 17:16:35 +0900</pubDate>
    </item>
    <item>
      <title>CORS(Cross-Origin Resource Sharing)</title>
      <link>https://jiheek.tistory.com/186</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;36&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/I8s9x/btsHZy8KpBP/A314LfamcolDRUvW7dn3f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/I8s9x/btsHZy8KpBP/A314LfamcolDRUvW7dn3f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/I8s9x/btsHZy8KpBP/A314LfamcolDRUvW7dn3f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FI8s9x%2FbtsHZy8KpBP%2FA314LfamcolDRUvW7dn3f0%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;798&quot; height=&quot;36&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;36&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹 개발을 하다 보면 request를 할 때 CORS policy에 의해 에러가 발생하는 상황이 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CORS가 무엇인가??&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;CORS&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f2f2f2; color: #2c2c2c; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹 브라우저에서 실행되는 웹 애플리케이션이 다른 도메인, 프로토콜 또는 포트에서 리소스를 요청할 수 있도록 허용하는 보안 기능&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 웹 브라우저는 동일 출처 정책 (Same-Origin Policy)를 따른다. 따라서 웹 페이지가 자신이 로드된 출처와 다른 출처의 리소스에 접근하려는 것을 제한한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CORS는 이 제한을 완화하여 특정 조건 하에서 다른 출처의 리소스에 접근할 수 있게 만든다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;여기서 출처(Origin)는 프로토콜(http/https), 도메인, 포트 번호를 포함한 세 요소로 구성된다. 같은 IP를 사용하더라도 포트 번호가 다르면 다른 출처로 간주된다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;CORS의 동작 방식&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CORS는 HTTP 헤더를 사용하여 서버가 특정 출처에서 오는 요청을 허용할지 여부를 브라우저에 알린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CORS는 여러 HTTP 헤더를 사용하여 동작하며, 주요 헤더는 다음과 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 102px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 38.0233%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;Header&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 61.9767%; height: 17px;&quot;&gt;&lt;span style=&quot;background-color: #dddddd;&quot;&gt;Description&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 38.0233%; height: 17px;&quot;&gt;Access-Control-Allow-Origin&lt;/td&gt;
&lt;td style=&quot;width: 61.9767%; height: 17px;&quot;&gt;서버가 허용하는 출처 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 38.0233%; height: 17px;&quot;&gt;Access-Control-Allow-Methods&lt;/td&gt;
&lt;td style=&quot;width: 61.9767%; height: 17px;&quot;&gt;서버가 허용하는 HTTP 메서드 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 38.0233%; height: 17px;&quot;&gt;Access-Control-Allow-Headers&lt;/td&gt;
&lt;td style=&quot;width: 61.9767%; height: 17px;&quot;&gt;서버가 허용하는 요청 헤더 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 38.0233%; height: 17px;&quot;&gt;Access-Control-Allow-Credentials&lt;/td&gt;
&lt;td style=&quot;width: 61.9767%; height: 17px;&quot;&gt;자격 증명을 포함한 요청을 허용할 지 여부 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 38.0233%; height: 17px;&quot;&gt;...&lt;/td&gt;
&lt;td style=&quot;width: 61.9767%; height: 17px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;CORS를 서버에서 설정하는 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c2c2c; text-align: left;&quot;&gt;CORS 정책은 반드시 서버에서 설정해야 하며, 클라이언트가 임의로 설정할 수 없다. 이는 보안상의 이유로, 서버가 어떤 출처에서 오는 요청을 허용할지 제어할 수 있도록 하기 위함이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c2c2c; text-align: left;&quot;&gt;만약 클라이언트가 CORS 정책을 설정할 수 있다면, 악의적인 웹사이트가 사용자의 브라우저를 통해 민감한 데이터를 탈취할 수 있다. 서버가 CORS 정책을 설정함으로서, 어떤 출처에서 오는 요청을 허용할 지 제어할 수 있다.&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: #2c2c2c; text-align: left;&quot;&gt;- 신뢰성 : 서버는 신뢰할 수 없는 출처에서 오는 요청을 차단할 수 있음&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #2c2c2c; text-align: left;&quot;&gt;- 일관성 : 서버는 모든 클라이언트에 대해 일관된 CORS 정책을 적용할 수 있다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Web: html ccs javascript react</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/186</guid>
      <comments>https://jiheek.tistory.com/186#entry186comment</comments>
      <pubDate>Fri, 14 Jun 2024 18:34:45 +0900</pubDate>
    </item>
    <item>
      <title>[ubuntu] apache로 서버 폴더 tree 보여주기</title>
      <link>https://jiheek.tistory.com/185</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;322&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nVQrW/btsHF2gIn5e/6IoaXlo6k42vkRsTwnuk51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nVQrW/btsHF2gIn5e/6IoaXlo6k42vkRsTwnuk51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nVQrW/btsHF2gIn5e/6IoaXlo6k42vkRsTwnuk51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnVQrW%2FbtsHF2gIn5e%2F6IoaXlo6k42vkRsTwnuk51%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;790&quot; height=&quot;322&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;322&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http://본인의 서버 IP:port/path 를 입력해서 위와 같이 서버의 폴더에 접근할 수 있게 만들어보자 !&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;ubuntu 서버에 apache가 설치되어 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1716877795021&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt update
sudo apt install apache2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;config 파일 수정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/apache2/apache2.conf 파일에서, 접근하고자 하는 폴더로의 엑세스 권한을 부여애햐 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1716877969477&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Directory /to/your/path&amp;gt;
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
&amp;lt;/Directory&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DocumentRoot / Alias 설정&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/apache2/sites-available/000-default.conf 파일에서, documentroot과 Alias를 설정할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* DocumentRoot: &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;웹 서버에서 호스팅되는 웹 사이트의 루트 디렉토리. defaut는 &lt;/span&gt;/var/www/html이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* Alias: &lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot;&gt;특정 URL 경로를 파일 시스템의 특정 디렉토리에 매핑한다.&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: #000000; text-align: left;&quot;&gt;예를 들어, DocumentRoot를 아래와 같이 설정하면, http://본인의 서버 IP:port/ 에 설정한 /to/you/path가 호스팅된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1716878095819&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DocumentRoot /to/your/path&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Alias를 아래와 같이 설정하면, http://본인의 서버 IP:port/webpath 에 /to/your/path가 호스팅된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;URL 경로는 자유롭게 정하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1716878909792&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Alias /webpath /to/your/path&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DocumentRoot, Alias 중 원하는 방법을 사용하면 된다.&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;모든 설정을 완료한 후, 서비스를 다시 시작하고 http://&amp;lt;your IP&amp;gt;:&amp;lt;your port&amp;gt;/&amp;lt;url path&amp;gt;를 설정한 대로 진입하면 첫 사진 처럼 폴더 트리가 보일 것 이다.&lt;/p&gt;
&lt;pre id=&quot;code_1716879047157&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; sudo service apache2 restart&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Web: html ccs javascript react</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/185</guid>
      <comments>https://jiheek.tistory.com/185#entry185comment</comments>
      <pubDate>Tue, 28 May 2024 15:52:36 +0900</pubDate>
    </item>
    <item>
      <title>[windows] 서버의 보안 인증서 발급자인 &amp;quot;AAA Certificate Services&amp;quot;을(를) 신뢰하도록 선택하지 않았습니다.</title>
      <link>https://jiheek.tistory.com/183</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;인증서 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버의 보안 인증서 발급자인 &quot;AAA Certificate Services&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;먼저 인증서가 존재하는지 확인하기 위해 [window 키 + R] 창에서 certlm.msc를 연다.&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;387&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qqtap/btsFfugTWQ3/mbKyrkOBEzMVFtAo6K6d90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qqtap/btsFfugTWQ3/mbKyrkOBEzMVFtAo6K6d90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qqtap/btsFfugTWQ3/mbKyrkOBEzMVFtAo6K6d90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqqtap%2FbtsFfugTWQ3%2FmbKyrkOBEzMVFtAo6K6d90%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;387&quot; height=&quot;180&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;180&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;[신뢰할 수 있는 루트 인증서-인증서] 로 가서, AAA certificate services 인증서가 있는지 확인한다. 없다면 인증서를 직접 import 해야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;201&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/038Gk/btsFegXP0os/6vmzlKNJjzncVd84y3b9L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/038Gk/btsFegXP0os/6vmzlKNJjzncVd84y3b9L0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/038Gk/btsFegXP0os/6vmzlKNJjzncVd84y3b9L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F038Gk%2FbtsFegXP0os%2F6vmzlKNJjzncVd84y3b9L0%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;363&quot; height=&quot;201&quot; data-origin-width=&quot;363&quot; data-origin-height=&quot;201&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;h3 data-ke-size=&quot;size23&quot;&gt;인증서 다운로드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고한 사이트에서는 &lt;a href=&quot;https://pki.its.lsu.edu/aaa_root.cer&quot;&gt;https://pki.its.lsu.edu/aaa_root.cer&lt;/a&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;a href=&quot;https://www.sslcert.co.kr/guides/kb/55?page=2&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.sslcert.co.kr/guides/kb/55?page=2&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708755510451&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Sectigo 의 AAA Certificate Services  루트/체인 인증서 정보 - SecureSign&quot; data-og-description=&quot;Sectigo 의 AAA Certificate Services 루트/체인 인증서 정보 - SecureSign&quot; data-og-host=&quot;www.sslcert.co.kr&quot; data-og-source-url=&quot;https://www.sslcert.co.kr/guides/kb/55?page=2&quot; data-og-url=&quot;https://www.sslcert.co.kr/guides/kb/55?page=2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/iNtU3/hyVqpPR2N9/l601jE4tIiGZIeFfFbsjf1/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/d1benD/hyVqhK4J1y/84SaiZuhj7DKzoeDSnuYM0/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300&quot;&gt;&lt;a href=&quot;https://www.sslcert.co.kr/guides/kb/55?page=2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.sslcert.co.kr/guides/kb/55?page=2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/iNtU3/hyVqpPR2N9/l601jE4tIiGZIeFfFbsjf1/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/d1benD/hyVqhK4J1y/84SaiZuhj7DKzoeDSnuYM0/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300');&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;Sectigo 의 AAA Certificate Services 루트/체인 인증서 정보 - SecureSign&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Sectigo 의 AAA Certificate Services 루트/체인 인증서 정보 - SecureSign&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.sslcert.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;742&quot; data-origin-height=&quot;243&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pRe5m/btsFf6z4p74/9uPvukAVTL1MjLnsejKkAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pRe5m/btsFf6z4p74/9uPvukAVTL1MjLnsejKkAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pRe5m/btsFf6z4p74/9uPvukAVTL1MjLnsejKkAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpRe5m%2FbtsFf6z4p74%2F9uPvukAVTL1MjLnsejKkAk%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;742&quot; height=&quot;243&quot; data-origin-width=&quot;742&quot; data-origin-height=&quot;243&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;435&quot; data-origin-height=&quot;139&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/10VXM/btsFisIHu0m/OdMDZ5EB0WkgpHUq8IWBd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/10VXM/btsFisIHu0m/OdMDZ5EB0WkgpHUq8IWBd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/10VXM/btsFisIHu0m/OdMDZ5EB0WkgpHUq8IWBd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F10VXM%2FbtsFisIHu0m%2FOdMDZ5EB0WkgpHUq8IWBd1%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;435&quot; height=&quot;139&quot; data-origin-width=&quot;435&quot; data-origin-height=&quot;139&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;다운로드를 클릭하면 BEGIN CERTIFICATE ~ EDN CERTIFICATE 텍스트 파일이 열린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 저 본문을 복사해서 편한 경로에 [aaa_root.cer]으로 파일을 생성한다. 본인은 C드라이브에 저장했다.&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;513&quot; data-origin-height=&quot;79&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QaNcE/btsFjI5Bf89/22Vf5oMS7e3LyVKrrKQbvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QaNcE/btsFjI5Bf89/22Vf5oMS7e3LyVKrrKQbvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QaNcE/btsFjI5Bf89/22Vf5oMS7e3LyVKrrKQbvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQaNcE%2FbtsFjI5Bf89%2F22Vf5oMS7e3LyVKrrKQbvK%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;513&quot; height=&quot;79&quot; data-origin-width=&quot;513&quot; data-origin-height=&quot;79&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;h3 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;인증서 import&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 다운로드한 인증서를 import하자.&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-filename=&quot;blob&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;171&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuC2dS/btsFgQwK3VS/K6AQJT9tYjwGEil8eOzCkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuC2dS/btsFgQwK3VS/K6AQJT9tYjwGEil8eOzCkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuC2dS/btsFgQwK3VS/K6AQJT9tYjwGEil8eOzCkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuC2dS%2FbtsFgQwK3VS%2FK6AQJT9tYjwGEil8eOzCkK%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;410&quot; height=&quot;171&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;410&quot; data-origin-height=&quot;171&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;그럼 인증서 가져오기 마법사가 뜨고, 가져올 파일에서 [aaa_root.cert]을 찾는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;230&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LbTr1/btsFeRcnc8D/G957ikAXQKGeFaTg8mqGWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LbTr1/btsFeRcnc8D/G957ikAXQKGeFaTg8mqGWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LbTr1/btsFeRcnc8D/G957ikAXQKGeFaTg8mqGWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLbTr1%2FbtsFeRcnc8D%2FG957ikAXQKGeFaTg8mqGWK%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;230&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;230&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;160&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crmtP4/btsFhnA40hz/lXSj7q5EbKDqT9ehYc8CtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crmtP4/btsFhnA40hz/lXSj7q5EbKDqT9ehYc8CtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crmtP4/btsFhnA40hz/lXSj7q5EbKDqT9ehYc8CtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrmtP4%2FbtsFhnA40hz%2FlXSj7q5EbKDqT9ehYc8CtK%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;488&quot; height=&quot;160&quot; data-origin-width=&quot;488&quot; data-origin-height=&quot;160&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5sOtc/btsFeFwgZGp/IGKVdoe8djESkodDXAkSW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5sOtc/btsFeFwgZGp/IGKVdoe8djESkodDXAkSW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5sOtc/btsFeFwgZGp/IGKVdoe8djESkodDXAkSW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5sOtc%2FbtsFeFwgZGp%2FIGKVdoe8djESkodDXAkSW0%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;344&quot; height=&quot;49&quot; data-origin-width=&quot;344&quot; data-origin-height=&quot;49&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 AAA Certificate Services를 확인할 수 있을 것이다!&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;본인은 이 방법으로 에러를 해결할 수 있었다. :D&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;a href=&quot;https://software.grok.lsu.edu/Article.aspx?articleid=16562&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://software.grok.lsu.edu/Article.aspx?articleid=16562&lt;/a&gt;&lt;/p&gt;</description>
      <category>Linux, etc</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/183</guid>
      <comments>https://jiheek.tistory.com/183#entry183comment</comments>
      <pubDate>Sat, 24 Feb 2024 15:26:07 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 디스크 용량 확인 명령어</title>
      <link>https://jiheek.tistory.com/181</link>
      <description>&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;남은 디스크 용량 확인: disk free(df)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705033635184&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;df -h
df . # 현재 디렉토리가 포함된 파티션 남은 용량 확인 !!&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; 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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;디렉토리와 파일 사용 용량 확인: disk usage(du)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1705033985049&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;du #하위 폴더들까지 재귀적으로 
du -s # 총 사용량
du -h #보기 편하게 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;디렉토리와 파일의 사용 용량을 확인&lt;/span&gt;&lt;/p&gt;</description>
      <category>Linux, etc</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/181</guid>
      <comments>https://jiheek.tistory.com/181#entry181comment</comments>
      <pubDate>Fri, 12 Jan 2024 13:36:56 +0900</pubDate>
    </item>
    <item>
      <title>[cmake] 필요한 패키지 설치, apt-get</title>
      <link>https://jiheek.tistory.com/180</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;h3 data-ke-size=&quot;size23&quot;&gt;설치하기&lt;/h3&gt;
&lt;pre id=&quot;code_1704855450197&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cmake ..
#or
cmake ./&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 명령어로 빌드 폴더에서 cmake를 할 때, 패키지를 찾을 수 없다는 오류가 생길 때가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704855485362&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#CMakeLists.txt
...
pkg_check_modules(OPENCV REQUIRED opencv4)
...&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, CMakeLists.txt 파일에 opencv4 모듈을 필요로 한다고 적혀 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 설치되어 있지 않으면 &quot;No packages 'opencv4' found&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;1. &lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;패키지 관리자를 사용하여 설치 (apt-get)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;2. 소스 코드를 다운로드하여 직접 빌드&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; 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;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;opencv4의 경우에는 아래 명령어로 설치하면 된다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #555555; text-align: left;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1704855713210&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install libopencv-dev&lt;/code&gt;&lt;/pre&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;650&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/42kx1/btsDhV0HUHf/PhicmRoXp2ucSzWOclmgX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/42kx1/btsDhV0HUHf/PhicmRoXp2ucSzWOclmgX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/42kx1/btsDhV0HUHf/PhicmRoXp2ucSzWOclmgX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F42kx1%2FbtsDhV0HUHf%2FPhicmRoXp2ucSzWOclmgX1%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;387&quot; height=&quot;434&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;434&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;다시 cmake를 하면 패키지를 찾은 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;51&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDbAjx/btsDh7z2fPs/8aJDuCCTl9IqJXnypPu9N1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDbAjx/btsDh7z2fPs/8aJDuCCTl9IqJXnypPu9N1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDbAjx/btsDh7z2fPs/8aJDuCCTl9IqJXnypPu9N1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDbAjx%2FbtsDh7z2fPs%2F8aJDuCCTl9IqJXnypPu9N1%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;198&quot; height=&quot;31&quot; data-origin-width=&quot;327&quot; data-origin-height=&quot;51&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;h3 data-ke-size=&quot;size23&quot;&gt;패키지 목록 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-get으로 설치&lt;b&gt;된&lt;/b&gt; 패키지를 다음 방법으로 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1704855943059&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update #apt 패키지 관리자의 데이터베이스를 업데이트
apt list --installed #설치된 모든 패키지의 목록을 확인
#or
apt list --installed | grep opencv #opencv로 시작하는 패키지만 출력&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1704856149930&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;apt-cache search 패키지이름&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux, etc</category>
      <author>jiheek</author>
      <guid isPermaLink="true">https://jiheek.tistory.com/180</guid>
      <comments>https://jiheek.tistory.com/180#entry180comment</comments>
      <pubDate>Wed, 10 Jan 2024 12:09:23 +0900</pubDate>
    </item>
  </channel>
</rss>