<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>넨이의 코딩</title>
    <link>https://code-nen.tistory.com/</link>
    <description>영넨이의 코딩</description>
    <language>ko</language>
    <pubDate>Tue, 11 Aug 2026 20:37:37 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>영넨이</managingEditor>
    <image>
      <title>넨이의 코딩</title>
      <url>https://tistory1.daumcdn.net/tistory/3780924/attach/1cb68c48415f4399bbeb53a58eb99721</url>
      <link>https://code-nen.tistory.com</link>
    </image>
    <item>
      <title>7. 에이전트 확장성 확보: 멀티 프로바이더(Multi-Provider) 지원 구조 설계</title>
      <link>https://code-nen.tistory.com/142</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번 6편 글에서는 단일 파일이었던 에이전트 루프 코드를 모듈화하는 리팩터링을 진행했다.&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;멀티 프로바이더(Multi-Provider) 지원&lt;/b&gt; 구조를 갖추기 위해서이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에이전트를 서비스나 환경에 맞게 운용하려면 Claude뿐만 아니라 OpenAI의 GPT 모델, 혹은 가성비가 훌륭한 DeepSeek 등 다양한 LLM을 코드 수정 없이 자유롭게 스왑할 수 있어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로바이더마다 도구 스펙 포맷, 응답 구조, 메시지 히스토리(특히 Assistant 턴과 Tool Result)를 기록하는 방식이 전부 제각각이다.&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;h3&gt;1. 프로바이더 추상 클래스 설계 (base.py)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 먼저 각 프로바이더가 공통으로 따라야 할 인터페이스를 정의하고, 응답 데이터를 정규화할 &lt;code&gt;LLMResponse&lt;/code&gt; 구조를 잡는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/base.py
from abc import ABC, abstractmethod
from dataclasses import dataclass, field

@dataclass
class ToolCall:
    id: str          # 도구 호출 식별자
    name: str
    input: dict

@dataclass
class LLMResponse:
    text: str                    # 정규화된 텍스트 응답
    tool_calls: list             # list[ToolCall]
    stop_reason: str             # 정규화: &quot;tool_use&quot; | &quot;end_turn&quot;
    input_tokens: int
    output_tokens: int
    raw: dict = field(default_factory=dict)   # 원본 응답 저장용

class LLMProvider(ABC):
    @abstractmethod
    def call(self, messages: list, tools: list) -&amp;gt; LLMResponse:
        &quot;&quot;&quot;messages와 도구 목록을 전달받아 공통 응답 포맷인 LLMResponse로 정규화해 반환한다.&quot;&quot;&quot;
        raise NotImplementedError

    @abstractmethod
    def append_assistant(self, messages: list, response: LLMResponse) -&amp;gt; None:
        &quot;&quot;&quot;어시스턴트 턴을 각 프로바이더 스키마에 맞춰 messages에 추가한다.&quot;&quot;&quot;
        raise NotImplementedError

    @abstractmethod
    def append_tool_results(self, messages: list, results: list) -&amp;gt; None:
        &quot;&quot;&quot;도구 실행 결과를 각 프로바이더 스키마에 맞춰 messages에 추가한다.&quot;&quot;&quot;
        raise NotImplementedError&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;h3&gt;2. Anthropic Claude 프로바이더 구현 (claude.py)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Anthropic API의 독자적인 도구 호출 및 메시지 히스토리 규칙을 반영한 구현체이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/claude.py
import requests
from agent.llm.base import LLMProvider, LLMResponse, ToolCall

class ClaudeProvider(LLMProvider):
    def __init__(self, api_key: str, model: str = &quot;claude-haiku-4-5&quot;, max_tokens: int = 500):
        self.api_key = api_key
        self.model = model
        self.max_tokens = max_tokens

    def call(self, messages: list, tools: list) -&amp;gt; LLMResponse:
        headers = {
            &quot;x-api-key&quot;: self.api_key,
            &quot;anthropic-version&quot;: &quot;2023-06-01&quot;,
            &quot;content-type&quot;: &quot;application/json&quot;,
        }
        body = {
            &quot;model&quot;: self.model,
            &quot;max_tokens&quot;: self.max_tokens,
            &quot;tools&quot;: tools,
            &quot;messages&quot;: messages,
        }
        response = requests.post(&quot;https://api.anthropic.com/v1/messages&quot;, headers=headers, json=body, timeout=60)
        if response.status_code != 200:
            raise RuntimeError(f&quot;Claude API {response.status_code}: {response.text}&quot;)
        return self._to_response(response.json())

    def _to_response(self, raw: dict) -&amp;gt; LLMResponse:
        text = &quot;&quot;.join(b.get(&quot;text&quot;, &quot;&quot;) for b in raw.get(&quot;content&quot;, []) if b.get(&quot;type&quot;) == &quot;text&quot;)
        tool_calls = [
            ToolCall(id=b[&quot;id&quot;], name=b[&quot;name&quot;], input=b.get(&quot;input&quot;, {}))
            for b in raw.get(&quot;content&quot;, []) if b.get(&quot;type&quot;) == &quot;tool_use&quot;
        ]
        stop = &quot;tool_use&quot; if raw.get(&quot;stop_reason&quot;) == &quot;tool_use&quot; else &quot;end_turn&quot;
        usage = raw.get(&quot;usage&quot;, {})
        return LLMResponse(
            text=text, tool_calls=tool_calls, stop_reason=stop,
            input_tokens=usage.get(&quot;input_tokens&quot;, 0), output_tokens=usage.get(&quot;output_tokens&quot;, 0), raw=raw
        )

    def append_assistant(self, messages: list, response: LLMResponse) -&amp;gt; None:
        messages.append({&quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: response.raw[&quot;content&quot;]})

    def append_tool_results(self, messages: list, results: list) -&amp;gt; None:
        content = []
        for tool_call_id, output, is_error in results:
            block = {&quot;type&quot;: &quot;tool_result&quot;, &quot;tool_use_id&quot;: tool_call_id, &quot;content&quot;: output}
            if is_error:
                block[&quot;is_error&quot;] = True
            content.append(block)
        messages.append({&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: content})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;h3&gt;3. OpenAI 호환 프로바이더 구현 (openai.py)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenAI의 &lt;code&gt;/chat/completions&lt;/code&gt; 엔드포인트에 맞춘 프로바이더 구현이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OpenAI와 DeepSeek은 API 명세가 호환되므로, 공통 분모가 되는 로직을 여기에 한 번에 작성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/openai.py
import json
import requests
from agent.llm.base import LLMProvider, LLMResponse, ToolCall

class OpenAIProvider(LLMProvider):
    def __init__(self, api_key: str, model: str = &quot;gpt-4o-mini&quot;, base_url: str = &quot;https://api.openai.com/v1&quot;):
        self.api_key = api_key
        self.model = model
        self.base_url = base_url.rstrip(&quot;/&quot;)

    def call(self, messages: list, tools: list) -&amp;gt; LLMResponse:
        headers = {
            &quot;Authorization&quot;: f&quot;Bearer {self.api_key}&quot;,
            &quot;content-type&quot;: &quot;application/json&quot;,
        }
        body = {&quot;model&quot;: self.model, &quot;messages&quot;: messages}
        if tools:
            body[&quot;tools&quot;] = [self._tool_spec(t) for t in tools]

        response = requests.post(f&quot;{self.base_url}/chat/completions&quot;, headers=headers, json=body, timeout=60)
        if response.status_code != 200:
            raise RuntimeError(f&quot;OpenAI-호환 API {response.status_code}: {response.text}&quot;)
        return self._to_response(response.json())

    @staticmethod
    def _tool_spec(neutral: dict) -&amp;gt; dict:
        return {
            &quot;type&quot;: &quot;function&quot;,
            &quot;function&quot;: {
                &quot;name&quot;: neutral[&quot;name&quot;],
                &quot;description&quot;: neutral[&quot;description&quot;],
                &quot;parameters&quot;: neutral[&quot;input_schema&quot;],
            },
        }

    def _to_response(self, raw: dict) -&amp;gt; LLMResponse:
        choice = raw.get(&quot;choices&quot;, [{}])[0]
        msg = choice.get(&quot;message&quot;, {})
        text = msg.get(&quot;content&quot;) or &quot;&quot;
        tool_calls = []
        for tc in msg.get(&quot;tool_calls&quot;, []) or []:
            fn = tc.get(&quot;function&quot;, {})
            args = fn.get(&quot;arguments&quot;) or &quot;{}&quot;
            try:
                parsed = json.loads(args)
            except json.JSONDecodeError:
                parsed = {}
            tool_calls.append(ToolCall(id=tc[&quot;id&quot;], name=fn.get(&quot;name&quot;, &quot;&quot;), input=parsed))

        stop = &quot;tool_use&quot; if choice.get(&quot;finish_reason&quot;) == &quot;tool_calls&quot; else &quot;end_turn&quot;
        usage = raw.get(&quot;usage&quot;, {})
        return LLMResponse(
            text=text, tool_calls=tool_calls, stop_reason=stop,
            input_tokens=usage.get(&quot;prompt_tokens&quot;, 0), output_tokens=usage.get(&quot;completion_tokens&quot;, 0), raw=raw
        )

    def append_assistant(self, messages: list, response: LLMResponse) -&amp;gt; None:
        messages.append(response.raw[&quot;choices&quot;][0][&quot;message&quot;])

    def append_tool_results(self, messages: list, results: list) -&amp;gt; None:
        for tool_call_id, output, _is_error in results:
            messages.append({&quot;role&quot;: &quot;tool&quot;, &quot;tool_call_id&quot;: tool_call_id, &quot;content&quot;: output})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;h3&gt;4. DeepSeek 프로바이더 구현 (deepseek.py)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DeepSeek은 OpenAI 호환 API 규격을 사용하므로, &lt;code&gt;OpenAIProvider&lt;/code&gt;를 상속받아 단 몇 줄의 코드만으로 완벽히 재사용하여 완성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/deepseek.py
from agent.llm.openai import OpenAIProvider

class DeepSeekProvider(OpenAIProvider):
    def __init__(self, api_key: str, model: str = &quot;deepseek-chat&quot;):
        super().__init__(api_key, model=model, base_url=&quot;https://api.deepseek.com/v1&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;h3&gt;5. 이름 기반 팩토리 레지스트리 (agent/llm/__init__.py)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 외부(UI 등)에서 이름 문자열만 가지고 동적으로 적절한 프로바이더를 생성할 수 있도록 매핑한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/__init__.py
import os
from agent.llm.base import LLMProvider
from agent.llm.claude import ClaudeProvider
from agent.llm.openai import OpenAIProvider
from agent.llm.deepseek import DeepSeekProvider

_PROVIDERS = {
    &quot;claude&quot;:   (&quot;ANTHROPIC_API_KEY&quot;, lambda key: ClaudeProvider(key)),
    &quot;openai&quot;:   (&quot;OPENAI_API_KEY&quot;,    lambda key: OpenAIProvider(key)),
    &quot;deepseek&quot;: (&quot;DEEPSEEK_API_KEY&quot;,  lambda key: DeepSeekProvider(key)),
}

def available() -&amp;gt; list:
    return list(_PROVIDERS.keys())

def get_provider(name: str) -&amp;gt; LLMProvider:
    entry = _PROVIDERS.get(name)
    if entry is None:
        raise ValueError(f&quot;알 수 없는 프로바이더: {name} (가능: {available()})&quot;)

    env_key, factory = entry
    api_key = os.environ.get(env_key)
    if not api_key:
        raise RuntimeError(f&quot;{env_key} 환경 변수가 없습니다.&quot;)
    return factory(api_key)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;h3&gt;6. 정리 및 의의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터페이스를 추상화하고 각 API 응답 구조를 &lt;code&gt;LLMResponse&lt;/code&gt;로 정규화한 덕분에, 코어 에이전트 루프(&lt;code&gt;agent_loop.py&lt;/code&gt;)는 호출 대상 모델에 전혀 종속되지 않는 독립성을 갖추게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델을 교체할 때도 루프는 전혀 건드리지 않고 &lt;code&gt;get_provider(&quot;openai&quot;)&lt;/code&gt;나 &lt;code&gt;get_provider(&quot;deepseek&quot;)&lt;/code&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;확장성 있는 멀티 프로바이더 뼈대가 안정적으로 구축되었으니, 다음 포스팅부터는 본격적으로 **Phase 2인 언리얼 엔진 통신 및 플러그인 연동**을 진행해보도록 하자.&lt;/p&gt;</description>
      <category>AI</category>
      <category>Agent</category>
      <category>AI</category>
      <category>Claude</category>
      <category>claudecode</category>
      <category>multi-provider</category>
      <category>Python</category>
      <category>Refactoring</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/142</guid>
      <comments>https://code-nen.tistory.com/142#entry142comment</comments>
      <pubDate>Sun, 26 Jul 2026 00:33:01 +0900</pubDate>
    </item>
    <item>
      <title>6. 에이전트 코드 리팩터링: 계층 분리와 이벤트 기반 루프</title>
      <link>https://code-nen.tistory.com/141</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번에 5편 글에서는 파이썬(Python)으로 병렬 도구 호출(Parallel Tool Use)을 어떻게 처리하는지 알아보았다.&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;code&gt;loop.py&lt;/code&gt; 한 파일에 API 호출, 도구 정의, 루프 처리, 터미널 출력까지 다 때려박아 놔서 코드가 점점 복잡해지고 있었다..&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;b&gt;LLM 프로바이더, 도구 레지스트리, 이벤트 기반 루프, UI 진입점&lt;/b&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;1. 변경된 폴더 구조&lt;/h3&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;pre class=&quot;plaintext&quot;&gt;&lt;code&gt;agent/
├── llm/
│   ├── __init__.py
│   ├── base.py
│   └── claude.py
├── tools/
│   ├── __init__.py
│   ├── base.py
│   └── builtin/
│       ├── time_tool.py
│       └── math_tool.py
├── loop/
│   ├── agent_loop.py
│   └── events.py
ui/
└── backend/
    └── run.py&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;2. 1단계: LLM 프로바이더 분리 (agent/llm)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 다양한 LLM(Claude, OpenAI, DeepSeek 등)을 유연하게 교체할 수 있도록 추상 클래스 &lt;code&gt;LLMProvider&lt;/code&gt;를 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/base.py
from abc import ABC, abstractmethod

class LLMProvider(ABC):
    @abstractmethod
    def call(self, messages: list, tools: list) -&amp;gt; dict:
        &quot;&quot;&quot;messages + tools 를 보내고 응답 dict 를 반환한다.&quot;&quot;&quot;
        raise NotImplementedError&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;그리고 이 추상 클래스를 상속받아 실제로 Anthropic Claude API를 호출하는 &lt;code&gt;ClaudeProvider&lt;/code&gt;를 구현했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/llm/claude.py
import requests
from agent.llm.base import LLMProvider

class ClaudeProvider(LLMProvider):
    def __init__(self, api_key: str, model: str = &quot;claude-haiku-4-5&quot;, max_tokens: int = 500):
        self.api_key = api_key
        self.model = model
        self.max_tokens = max_tokens

    def call(self, messages: list, tools: list) -&amp;gt; dict:
        headers = {
            &quot;x-api-key&quot;: self.api_key,
            &quot;anthropic-version&quot;: &quot;2023-06-01&quot;,
            &quot;content-type&quot;: &quot;application/json&quot;,
        }
        body = {
            &quot;model&quot;: self.model,
            &quot;max_tokens&quot;: self.max_tokens,
            &quot;tools&quot;: tools,
            &quot;messages&quot;: messages,
        }
        response = requests.post(&quot;https://api.anthropic.com/v1/messages&quot;, headers=headers, json=body, timeout=60)
        if response.status_code != 200:
            raise RuntimeError(f&quot;Claude API {response.status_code}: {response.text}&quot;)
        return response.json()&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;3. 2단계: 도구(Tools) 모듈화 및 레지스트리 (agent/tools)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도구들도 클래스 구조로 묶어 모듈화했다. &lt;code&gt;Tool&lt;/code&gt; 구조체에 이름, 설명, 입력 스키마, 그리고 실제 실행할 &lt;code&gt;run&lt;/code&gt; 함수를 정의한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/tools/base.py
from dataclasses import dataclass
from typing import Callable

@dataclass
class Tool:
    name: str
    description: str
    input_schema: dict
    run: Callable[..., str]

    def spec(self) -&amp;gt; dict:
        return {
            &quot;name&quot;: self.name,
            &quot;description&quot;: self.description,
            &quot;input_schema&quot;: self.input_schema,
        }&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;code&gt;time_tool.py&lt;/code&gt;, &lt;code&gt;math_tool.py&lt;/code&gt;)를 각각 독립된 파일로 깔끔하게 관리할 수 있게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도구들을 모아서 LLM에 스펙을 넘기고 실행하는 기능은 레지스트리(&lt;code&gt;__init__.py&lt;/code&gt;)에서 중앙 제어한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/tools/__init__.py
from agent.tools.builtin.time_tool import get_time
from agent.tools.builtin.math_tool import add_numbers

_REGISTRY = {t.name: t for t in [get_time, add_numbers]}

def specs() -&amp;gt; list:
    return [t.spec() for t in _REGISTRY.values()]

def execute(name: str, tool_input: dict) -&amp;gt; tuple[str, bool]:
    tool = _REGISTRY.get(name)
    if tool is None:
        return f&quot;에러: 알 수 없는 도구 '{name}'&quot;, True
    try:
        return str(tool.run(**tool_input)), False
    except Exception as error:
        return f&quot;에러: {error}&quot;, True&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;4. 3단계: 이벤트 기반 루프 구현 (agent/loop)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 리팩터링의 핵심 중 하나다. 기존에는 루프 코드 안에서 &lt;code&gt;print&lt;/code&gt;를 직접 호출하여 출력을 처리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 앞으로 데스크톱 앱(Electron 등)이나 소켓으로 메시지를 보내야 할 수도 있으므로, 출력을 루프와 완전히 분리했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;루프 내부에서는 &lt;code&gt;print&lt;/code&gt; 대신 특정 사건이 발생할 때마다 &lt;code&gt;on_event()&lt;/code&gt; 콜백 함수로 이벤트를 발행한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/loop/events.py
from dataclasses import dataclass

@dataclass
class TurnStart:
    turn: int
    stop_reason: str | None

@dataclass
class AssistantText:
    text: str

@dataclass
class ToolCall:
    name: str
    input: dict

@dataclass
class ToolResult:
    name: str
    output: str
    is_error: bool

@dataclass
class FinalText:
    text: str

@dataclass
class Usage:
    input_tokens: int
    output_tokens: int&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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/loop/agent_loop.py
from typing import Any, Callable
from agent.tools import specs, execute
from agent.loop import events

MAX_TURNS = 10

def run(question: str, provider, on_event: Callable) -&amp;gt; None:
    messages: list[dict[str, Any]] = [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: question}]
    total_in, total_out = 0, 0

    for turn in range(1, MAX_TURNS + 1):
        data = provider.call(messages, specs())
        
        usage = data.get(&quot;usage&quot;, {})
        total_in += usage.get(&quot;input_tokens&quot;, 0)
        total_out += usage.get(&quot;output_tokens&quot;, 0)

        stop_reason = data.get(&quot;stop_reason&quot;)
        on_event(events.TurnStart(turn, stop_reason))

        if stop_reason != &quot;tool_use&quot;:
            for block in data.get(&quot;content&quot;, []):
                if block.get(&quot;type&quot;) == &quot;text&quot;:
                    on_event(events.FinalText(block.get(&quot;text&quot;, &quot;&quot;)))
            break

        for block in data.get(&quot;content&quot;, []):
            if block.get(&quot;type&quot;) == &quot;text&quot;:
                on_event(events.AssistantText(block.get(&quot;text&quot;, &quot;&quot;)))

        messages.append({&quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: data[&quot;content&quot;]})
        results: list[dict[str, Any]] = []

        for block in data[&quot;content&quot;]:
            if block.get(&quot;type&quot;) != &quot;tool_use&quot;:
                continue

            name = block[&quot;name&quot;]
            tool_input = block.get(&quot;input&quot;, {})
            on_event(events.ToolCall(name, tool_input))

            output, is_error = execute(name, tool_input)
            on_event(events.ToolResult(name, output, is_error))

            result_block = {
                &quot;type&quot;: &quot;tool_result&quot;,
                &quot;tool_use_id&quot;: block[&quot;id&quot;],
                &quot;content&quot;: output,
            }
            if is_error:
                result_block[&quot;is_error&quot;] = True
            results.append(result_block)

        messages.append({&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: results})
    on_event(events.Usage(total_in, total_out))&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;5. 4단계: 백엔드 진입점 및 터미널 출력 (ui/backend)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 루프를 실행하고 이벤트를 받아 실제로 화면에 출력해 주는 진입점(&lt;code&gt;run.py&lt;/code&gt;)이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# ui/backend/run.py
import sys
from pathlib import Path
from dotenv import load_dotenv
from agent.llm import get_provider
from agent.loop.agent_loop import run
from agent.loop import events

load_dotenv(Path(__file__).resolve().parents[2] / &quot;agent&quot; / &quot;.env&quot;)

def cli_print(event) -&amp;gt; None:
    &quot;&quot;&quot;이벤트를 받아서 터미널에 출력한다. (나중에 Electron과 연동할 땐 이 함수만 JSON 출력으로 변경)&quot;&quot;&quot;
    if isinstance(event, events.TurnStart):
        print(f&quot;\n[턴 {event.turn}] stop_reason={event.stop_reason}&quot;)
    elif isinstance(event, events.AssistantText):
        print(f&quot;  (Claude) {event.text}&quot;)
    elif isinstance(event, events.ToolCall):
        print(f&quot;  &amp;rarr; 도구 호출: {event.name}({event.input})&quot;)
    elif isinstance(event, events.ToolResult):
        print(f&quot;  &amp;larr; 결과: {event.output}&quot;)
    elif isinstance(event, events.FinalText):
        print(event.text)
    elif isinstance(event, events.Usage):
        print(f&quot;\n=== 누적 토큰 : 입력 {event.input_tokens} / 출력 {event.output_tokens} ===&quot;)

def main() -&amp;gt; None:
    if len(sys.argv) &amp;lt; 2:
        print('사용법 : python -m ui.backend.run &quot;질문&quot;')
        sys.exit(1)

    provider = get_provider(&quot;claude&quot;)
    run(&quot; &quot;.join(sys.argv[1:]), provider, on_event=cli_print)

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;6. 느낀 점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설계 분리가 끝나니까 결합도가 낮아져서 확실히 코드가 단정해진 느낌이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 OpenAI 모델로 바꾸고 싶다면 &lt;code&gt;agent/llm&lt;/code&gt; 계층에 프로바이더만 추가하면 되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI 대신 웹이나 GUI 앱 화면에 에이전트를 올리고 싶다면 &lt;code&gt;run.py&lt;/code&gt;의 &lt;code&gt;cli_print&lt;/code&gt; 콜백 내부만 갱신해 주면 된다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>Agent</category>
      <category>AI</category>
      <category>Claude</category>
      <category>claudecode</category>
      <category>event-driven</category>
      <category>Python</category>
      <category>Refactoring</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/141</guid>
      <comments>https://code-nen.tistory.com/141#entry141comment</comments>
      <pubDate>Sat, 25 Jul 2026 22:05:58 +0900</pubDate>
    </item>
    <item>
      <title>5. Python으로 병렬 도구 호출(Parallel Tool Use) 구현하기</title>
      <link>https://code-nen.tistory.com/140</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번 4편 글에서는 파이썬(Python)으로 Claude API와 주고받는 기본적인 &lt;b&gt;Tool Use(도구 사용) 루프&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;이번에는 한 단계 더 나아가, 사용자가 단일 질문 안에서 복수의 정보나 처리를 요구할 때 Claude가 한 턴에 여러 도구를 동시에 호출하는 &lt;b&gt;병렬 도구 호출(Parallel Tool Use)&lt;/b&gt; 기능을 추가하고 테스트해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size20&quot;&gt;1. 병렬 도구 호출(Parallel Tool Use)이란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 게임 테스트 에이전트를 운용하다 보면 &quot;현재 캐릭터 위치를 확인하고, 3미터 앞 장애물로 이동해라&quot;와 같이 한 번에 여러 액션이나 조회가 필요한 상황이 빈번하게 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude API는 한 턴의 &lt;code&gt;stop_reason=&quot;tool_use&quot;&lt;/code&gt; 응답 내에 &lt;b&gt;여러 개의 &lt;code&gt;tool_use&lt;/code&gt; 블록&lt;/b&gt;을 배열로 동시에 전달할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 우리의 루프는 이를 순회하며 각 도구를 실행하고, 결과 &lt;code&gt;tool_result&lt;/code&gt; 블록들을 하나의 &lt;code&gt;user&lt;/code&gt; 메시지에 모아 다시 전달해주면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size20&quot;&gt;2. 인자가 있는 신규 도구 추가 (add_numbers)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존의 인자가 없는 &lt;code&gt;get_time&lt;/code&gt; 외에, 인자(Parameter)를 요구하는 계산 도구 &lt;code&gt;add_numbers(a, b)&lt;/code&gt;를 추가하여 &lt;code&gt;agent/loop.py&lt;/code&gt;를 업데이트했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/loop.py

# [1] 도구 스펙 (input_schema 에 인자 정의 추가)
TOOLS = [
    {
        &quot;name&quot;: &quot;get_time&quot;,
        &quot;description&quot;: &quot;현재 시각을 ISO 형식 문자열로 반환한다. 사용자가 시간이나 날짜를 물으면 사용.&quot;,
        &quot;input_schema&quot;: {
            &quot;type&quot;: &quot;object&quot;,
            &quot;properties&quot;: {},
            &quot;required&quot;: [],
        },
    },
    {
        &quot;name&quot;: &quot;add_numbers&quot;,
        &quot;description&quot;: &quot;두 숫자를 더한 결과를 문자열로 반환한다. 사용자가 두 수의 합을 물으면 사용.&quot;,
        &quot;input_schema&quot;: {
            &quot;type&quot;: &quot;object&quot;,
            &quot;properties&quot;: {
                &quot;a&quot;: {&quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;첫 번째 숫자&quot;},
                &quot;b&quot;: {&quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;두 번째 숫자&quot;}
            },
            &quot;required&quot;: [&quot;a&quot;, &quot;b&quot;],
        },
    }
]

# [2] 실제 도구 구현 및 레지스트리 등록
def get_time(**kwargs) -&amp;gt; str:
    return datetime.now().isoformat(timespec=&quot;seconds&quot;)

def add_numbers(a, b, **kwargs) -&amp;gt; str:
    return str(a + b)

TOOL_FUNCS = {
    &quot;get_time&quot;: get_time,
    &quot;add_numbers&quot;: add_numbers
}

# [3] 병렬 도구 실행 루프 처리
for block in data[&quot;content&quot;]:
    if block.get(&quot;type&quot;) != &quot;tool_use&quot;:
        continue

    name = block[&quot;name&quot;]
    tool_input = block.get(&quot;input&quot;, {})
    output, is_error = execute_tool(name, tool_input)

    results.append({
        &quot;type&quot;: &quot;tool_result&quot;,
        &quot;tool_use_id&quot;: block[&quot;id&quot;],
        &quot;content&quot;: output,
    })
&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;size20&quot;&gt;3. 실행 및 결과 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 &lt;code&gt;python agent/loop.py &quot;지금 몇 시고, 3 더하기 5는?&quot;&lt;/code&gt; 명령을 입력하여 복수 도구가 한 턴에 정상적으로 병렬 호출되는지 테스트했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;max-width: 100%; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1);&quot; src=&quot;data:image/png;base64,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BJgAE2ACTIAJMAEmwAS8EWBBxBs/zs0EmAATYAJMgAkwASbABJgAE2ACTIAJJEECLIgkwU7jJjMBJsAEmAATYAJMgAkwASbABJgAE2AC3giwIOKNH+dmAkyACTABJsAEmAATYAJMgAkwASbABJIgARZEkmCncZOZABNgAkyACTABJsAEmAATYAJMgAkwAW8EWBDxxo9zMwEmwASYABNgAkyACTABJsAEmAATYAJJkAALIkmw07jJTIAJMAEmwASYABNgAkyACTABJsAEmIA3AiyIeOPHuZkAE2ACTIAJMAEmwASYABNgAkyACTCBJEiABZEk2GncZCbABJgAE2ACTIAJMAEmwASYABNgAkzAGwEWRLzx49xMgAkwASbABJgAE2ACTIAJMAEmwASYQBIkwIJIEuw0bjITYAJMgAkwASbABJgAE2ACTIAJMAEm4I0ACyLe+HFuJsAEmAATYAJMgAkwASbABJgAE2ACTCAJEmBBJAl2GjeZCTABJsAEmAATYAJMgAkwASbABJgAE/BGgAURb/w4NxNgAkyACTABJsAEmAATYAJMgAkwASaQBAmwIJIEO42bzASYABNgAkyACTABJsAEmAATYAJMgAl4I8CCiDd+nJsJMAEmwASYABNgAkyACTABJsAEmAATSIIEWBBJgp3GTWYCTIAJMAEmwASYABNgAkyACTABJsAEvBFgQcQbP87NBJgAE2ACTIAJMAEmwASYABNgAkyACSRBAiyIJMFO4yYzASbABJgAE2ACTIAJMAEmwASYABNgAt4IJBlBpEH9+vT00//xu9pDhw/TkCFD/eJMDwYNHEhp06ahCRMn0bFjx0yLiUq+zp06UcGCBfzq2rptG02bNt0vjg+YABNgAkyACTABJsAEmAATYAJMgAkwAXsCSUYQGTJ4ED388MN+V3HhwgWq36ChX5zpwdo1qyllypTUf8BA2r59u2kxUck3fdpblCNHDr+6vvnmG+rUuYtfHB8wASYQGwQee+wxql2rZoLGbNm6lZYtW54gniOYABNgAkyACTABJsAEmAATiDyBJCeI/PPPP/TWtGmSzJkzP9CXX37po/Tqq69Q0yZNfMeBdjZu2kSTJk32O52YgkjhwoWpUcOGlClTRtmmWbNm0yebN/u1Tz94pGhRypkrp4zC9ULIiWVB5P7775dtPXjwoH4ZvM8Ewkoglu+z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WJlwCCLB6o7VeLgkLVWqpNr6EGzSF86+w+PINddeKwcPHvRtbQhn/YF1Rfv6AtuPxDmEhooVK6jtHAULni/7rUk7tq8wiNS46SYpZa1+KlasqBw/dlw+/+JzR7Z1wA5GeePiKknhQoVk/4EDGYTBcPENx/hF+zkK17WzHhIgARIgARIgARIggewlQEEke/lL2zZtLA8elV33AjYKtDFE14UdFoC3iBKWHYYZM2f5bRlxWJzZSIAESIAESIAESIAESIAESIAESCBmCVAQidmhYcdIgARIgARIgARIgARIgARIgARIgAQiRYCCSKTIsl4SIAESIAESIAESIAESIAESIAESIIGYJUBBJGaHhh0jARIgARIgARIgARIgARIgARIgARKIFAEKIpEiy3pJgARIgARIgARIgARIgARIgARIgARilgAFkZgdGnaMBEiABEiABEiABEiABEiABEiABEggUgQoiESKLOslARIgARIgARIgARIgARIgARIgARKIWQIURGJ2aNix7CBw+eWXS6dOHW2b/vbbb2X69Bm2aYwkARLwJ3D11VdJ3z59VOTTHTv5J4Y4u75qVWnTprWULVtWLrzwQjnvvPMkZfgIuv4OwYxJeZvA4MGDpHq1apKWlianT5+W7du3y5ix4xxDmTJ5knrOpln/v23ZssVxOWYkARIgARIggdxAgIJIbhjFXHwNTRo3lptvrhH0ClNTF8jOXbuCprtNuO6662TM6FG2xX7//Xd5tFFj27S8Fjlo0EDJly+frHhlhWzfscPx5Xst57iBGM3Yq1dPKVq0qHz04Ufy2uuvx2gvw9utqVOmyBVXlJX//e9/8kTzFo4qL1WqlEyf9pK6t8wCY8aMlffWrTOj/I6Thg5RZU5+950gb6RDtNvzej0lS5YUCLmxHpzyDNdz5LS9WOem+zdq5AipVKmSPlXfJ06ckLbt2vvFBTuZOWO64F75748/SsuWTwbLxngSIAESIAESyJUEKIhk47Cmzp8vBQsWcN2DAwcOSN/nnndd7rVXV7kugwIbN22S5ORhnspmtdDIESOkcmX/H3pmndOmTQ/7BPPBBx8wm/Adnzl9JuSkzJcxlx9g0jpj+jR1lUuXLZO5c+c5umKv5RxVHuOZVryyXAoUKCC7du2WPn37xnhvs969OnXukMSEBFXR4sVLZH5qqqNK+/ZJlNq1a6u8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14wPdhwtQUS3b64U0XH4njZturz2+utmFI9JgARIgARIgARIgARIgARIgATyMAEKItbgm2JINLyQDBo0UG62XMFCXFiyeIm89fbbjm/BVq2eUsIFJvheg50gouNgUBWGVRG0IDJ33vwsGUK9+uqrfF09ffqMHDt2zHceroPbb79d+vZJ9LnXha2SP/74Qy666CLllQftmPZRwtUu6yEBEiABEiABEiABEiABEiABEsiZBPK8IFKz5m0yoH9/3+hhtUZmAVsxOnaKzyxbyHRshdm3b5/ATkjFihVD5rVLHDJ0qJ+dDLs8weK0+GFumenQob2UtexsYCuODloQmf3yy/LKKyt0dEx+65Uz2N4zavRoPzshUyZPlnLlrlD9xuoX03ZKTF4MO0UCJEACJEACJEACJEACJEACJBBxAnleEGnTurU0avSoK9AQTZo+9rirMsEyvzx7llx++eXBkoPGh9uGiF1DOUUQade2rTRs+Ii6BGyLsVs9owWTSHi5sWPHOBIgARIgARIgARIgARIgARIggdgmkOcFEQzPvLlzpGjRomqksGXm1Kn/hhy1kydPyrLly0PmiVSinthHQhC54YYbpHz5cpZ9kytkxYqVMmXyJLXlJNZXiCQNHSLVqlVTyBP79JHdu/dkwD971kwpXry4in+4Qbp4kiETI0iABEiABEiABEiABEiABEiABPIMAQoi54ZaiyJYQYCtJN9++21M3gRuBZHO8fFSu/bf1LWctT7z58vnc0/7+++/K5sb+fPnz3CtcE/brWvXsAgiKcOSffXDbsqYMWN95+E4GDlihFSuXElV9Xy//vLpp59mqHbOy7PlsssuU/EURDLgYQQJkAAJkAAJkAAJkAAJkAAJ5DkCFESMIYcoUqRIEXnhhYGyfccOIyVyh4EeZ5y25HSFSGJCgtSpc4dttXBFC8OjEEbgVvfnn38WuKvFCpg5c+fJ+HFjsyyIRMPLTHynTvLQQw+qa1z3/vsyevQYv+stVqyYQBDJZ4lB3DLjh4YnJEACJEACJEACJEACJEACJJBnCVAQCRj666tWlZ27dgXERu5UCyIQI44f/8ZRQ2flrAwbluJ4FUtcXJwleqRJWtrvcub0aTlhCR5OQjhsiERDEMGYpaQMU5cEkQfui5csWarOy1iGYoclJ/nstOzdu1d6JyQ6uXzmIQESIAESIAESIAESIAESIAESyMUEKIhk8+BqQWT9+g0yctSobO6Nf/M5RRBBr+Fyt3bt2r4LgDCClS8FCxb0xaWlpUmjxk185zwgARIgARIgARIgARIgARIgARLIuwQoiGTz2GtBBCsXsE3FacCE/7PPPnOa3VO+cAgi5cuXl8mTJvraD6eHHl+l5w5atmghjRs3kgIFCgQmKRfHKcNHyDffOFuFk6ECRpAACZAACZAACZAACZAACZAACeQqAhREsnk4tSDipRuRNg4aDkHEy3VltczVV18lcXGVpHChQrL/wAHZunVrVqtkeRIgARIgARIgARIgARIgARIggVxGgIJINg9o2zZtLA8plV33Ii3tN+nXf4Drcm4KwDtMiRIlZMbMWbJx40Y3RZmXBEiABEiABEiABEiABEiABEiABGKaAAWRmB4edo4ESIAESIAESIAESIAESIAESIAESCASBCiIRIIq6yQBEiABEiABEiABEiABEiABEiABEohpAhREYnp42DkSIAESIAESIAESIAESIAESIAESIIFIEKAgEgmqrJMESIAESIAESIAESIAESIAESIAESCCmCVAQienhYedIgARIgARIgARIgARIgARIgARIgAQiQYCCSCSosk4SIAESIAESIAESIAESIAESIAESIIGYJkBBJKaHh50jARIgARIgARIgARIgARIgARIgARKIBAEKIpGgyjpJgARIgARIgARIgARIgARIgARIgARimgAFkZgeHnaOBEiABEiABEiABEiABEiABEiABEggEgQoiESCKuskARIgARIgARIgARIgARIgARIgARKIaQIURGJ6eNg5EiABEiABEiABEiABEiABEiABEiCBSBCgIBIJqqyTBEiABEiABEiABEiABEiABEiABEggpglQEInp4WHnSIAESIAESIAESIAESIAESIAESIAEIkHg/wEAAP//VR5ldgAAQABJREFU7J0HmBTF9vaPSkYQQcFAUFAQFa4R5JqzoIKSk4BkkCw5Z1BylpwlR70Xc7z+EUVQDCAo8ElWUERBJfnVW0uNPb09s909cXffep7d6a6u1L/qme56+9Sp8y6/4sq/hYEESIAESIAESIAESIAESIAESIAESIAEMhGB8yiIZKLe5qmSAAmQAAmQAAmQAAmQAAmQAAmQAAloAhREeCGQAAmQAAmQAAmQAAmQAAmQAAmQAAlkOgIURDJdl/OESYAESIAESIAESIAESIAESIAESIAEKIjwGiABEiABEiABEiABEiABEiABEiABEsh0BCiIZLou5wmTAAmQAAmQAAmQAAmQAAmQAAmQAAlQEOE1QAIkQAIkQAIkQAIkQAIkQAIkQAIkkOkIUBDJdF3OEyYBEiABEiABEiABEiABEiABEiABEqAgwmuABEiABEiABEiABEiABEiABEiABEgg0xGgIJLpupwnTAIkQAIkQAIkQAIkQAIkQAIkQAIkQEGE1wAJkAAJkAAJkAAJkAAJkAAJkAAJkECmI0BBJNN1OU+YBEiABEiABEiABEiABEiABEiABEiAggivARIgARIgARIgARIgARIgARIgARIggUxHgIJIputynjAJkAAJkAAJkAAJkAAJkAAJkAAJkAAFEV4DJEACJEACJEACJEACJEACJEACJEACmY4ABZFM1+U8YRIgARIgARIgARIgARIgARIgARIgAQoivAZIgARIgARIgARIgARIgARIgARIgAQyHQEKIpmuy3nCJEACJEACJEACJEACJEACJEACJEACFER4DZAACZAACZAACZAACZAACZAACZAACWQ6AhREMl2X84RJgARIgARIgARIgARIgARIgARIgAQoiPAaIAESIAESIAESIAESIAESIAESIAESyHQE0o0g8myjRnL33XcFddB3338vQ4cOC4rzuzN40CDJkSO7jJ8wUX744Qe/xcQlX5fOnaV06euC6vp4wwaZNm16UBx3SIAESIAESIAESIAESIAESIAESIAEnAmkG0Fk6JDBUqZMmaCzOHLkiDR6tnFQnN+dNatXyfnnny8DBg6SjRs3+i3Gd75LL7lEfjp82FX+6dOmymWXXRaU9ttvv5XOXboGxXGHBEggvgQGDOgv5513nqxauUo2f/55fCtnbSRAAiRAAiRAAiRAAiRAAp4IpDtB5O+//5ap06bpkzx48JB89tlngRN+/PFK0rxZs8B+qI0333pLJk6cFHQ43oJI+XLlpGrVqlKiRHHJnj17oC1//fWXfPnll1qYCUTaNm6+6Sa54sordCzOF0JOMgsi1157rW7rjh07bGfCXRLIOAQKFSokM6an/DYtW75c5s2bH9WT4/coqjhZGAmQAAmQAAmQAAmQAAlIuhNETp8+LU9XrebYdfXr1ZNatWrqY0gXKqx77bVU00viKYhg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0qBjkfSfl34IqjQBO155RtJEiFTouy1fbgk7rS2SOqKR956775YClxSQ/334P8elrKNRB8sgARIgARIgARIgARIggfRIIN0IImbVGCvkWEyBsJafrNtWJ5qmjfAz0qVrypKfJi4zfToJIpnp/HmuJEACJEACJEACJEACJEACJEAC3gikG0HE22kxdWYj4EUQgZXFqJEjfCFyWl3EV0HMlOEJ8DrL8F3MEyQBEiABEiABEiABEkjnBCiIpPMOZPNTCHgRROAwdMSLL/pCR0HEF7ZMmYnXWabsdp40CZAACZAACZAACZBAOiJAQSQddRabGpqAcQL5+edfSJ++fUMnPHfk7rvvSjONU4JdO3fJ3n37nA4xjgRSEeB1lgoJI0iABEiABEiABEiABEggaQhQEEmarmBDSIAESIAESIAESIAESIAESIAESIAE4kWAgki8SLMeEiABEiABEiABEiABEiABEiABEiCBpCFAQSRpuoINIQESIAESIAESIAESIAESIAESIAESiBeBDCeIDB40SHLkyC7jJ0yUH374ISYcL73kEvnp8GFddpkyZaRhg2dkz569Mm78+JjUF41C27VtK0WLFpGly5bJJ598Go0iQ5bRp3dvueiivIrHBMVlT8h0PEACkRKIx/c90jaGyl+wYEH58ccfQx3W8R07tJcrr7xS5s1fIFu2bAmbNjMdTM/97qefChQoIOXK3R4y67p1r4U8lpEOxPM+lpG48VwyJoF4/w6OHJHijL5zl64xB9q9W1e5RD1rT502XXbs2BHz+lgBCZBA5iaQ1ILIjTfeKAMH9Hfsoa7dust3332X6phZbWTAwEGycePGVMcjjZg5Y7pgIANhYb4apNSvV09q1aopx44dk3r1n4m0+JjlX7J4keTKlUteXrRIFi1a7Kqeiy++WC699NI0027fvj0ozdo1q+W8886Tfv0HyKZNm4KOedkpWrSo1KhRXcqo6yBnzpySLVs2ueCCC+T06dPy119/ye+//y7r138ss2bP9lJshkhrFeXicUKR1ocHm8PnRESn9kJYPHvmjHz9zTdOh0PGxfr7HrJiHwdwPbds0VxKly4tWbJkCZSAa3n9xx/LqFGjA3FmY/mypZI9e3aZMWOmrFm71kTH7TPSfnfbUDz8gkuePHn0bwe+2x8rJpMmT3EsIpn6vWzZsurBvYAcOHBAtm7d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&quot; alt=&quot;병렬 도구 호출 실행 결과 스크린샷&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;[턴 1] 단일 턴에서 2개 도구 동시 실행&lt;/b&gt;: Claude가 질문을 분석하고 &lt;code&gt;get_time({})&lt;/code&gt;과 &lt;code&gt;add_numbers({'a': 3, 'b': 5})&lt;/code&gt; 두 도구를 하나의 턴에서 한꺼번에 호출했다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과 일괄 반환&lt;/b&gt;: 파이썬 루프에서 두 결과를 &lt;code&gt;2026-07-25T17:38:56&lt;/code&gt;과 &lt;code&gt;8&lt;/code&gt;로 처리한 후 Claude에게 전달했다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;[턴 2] 최종 응답 완성&lt;/b&gt;: Claude가 두 실행 결과를 종합하여 현재 시각과 계산 결과(8)를 자연스럽게 한 번에 답변하고 &lt;code&gt;stop_reason=end_turn&lt;/code&gt;으로 마무리했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size20&quot;&gt;마무리하며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단일 도구 실행뿐만 아니라 &lt;b&gt;복수 도구의 병렬 호출(Parallel Tool Calling)&lt;/b&gt;까지 안정적으로 처리할 수 있는 에이전트 루프 구조가 갖춰졌다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 편에서는 이러한 도구 사용 구조를 바탕으로 언리얼 엔진과 실제 통신할 소켓/HTTP 커넥터를 연동하는 Phase 2 작업으로 진입할 예정이다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>AI에이전트</category>
      <category>ClaudeAPI</category>
      <category>ParallelToolUse</category>
      <category>ToolUse</category>
      <category>언리얼엔진</category>
      <category>파이썬</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/140</guid>
      <comments>https://code-nen.tistory.com/140#entry140comment</comments>
      <pubDate>Sat, 25 Jul 2026 17:42:42 +0900</pubDate>
    </item>
    <item>
      <title>4. Python으로 Tool Use 루프 구현하기</title>
      <link>https://code-nen.tistory.com/139</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번 3편 글에서는 파이썬(Python)의 &lt;code&gt;requests&lt;/code&gt;와 &lt;code&gt;python-dotenv&lt;/code&gt; 라이브러리를 사용해서 Claude 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;b&gt;언리얼 엔진 내부에서 스스로 동작하는 AI 테스트 에이전트&lt;/b&gt;를 만들 수 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에이전트가 게임 안에서 캐릭터를 이동시키거나, 장애물을 피하고, 현재 위치나 시각 같은 정보를 파악하려면 Claude가 스스로 필요한 도구를 호출하고 그 결과를 다시 받아 판단하는 &lt;b&gt;Tool Use(도구 사용) 루프&lt;/b&gt;가 필수적이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size20&quot;&gt;1. Tool Use 루프란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Claude 같은 LLM은 자체적으로 실시간 시각이나 언리얼 엔진 내부 상태를 알지 못한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 우리가 스펙(&lt;code&gt;input_schema&lt;/code&gt;)을 정의한 도구 목록을 함께 전달하면:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Claude가 질문을 분석하고 도구가 필요하다고 판단 시 &lt;code&gt;stop_reason=&quot;tool_use&quot;&lt;/code&gt;와 함께 호출할 도구 이름 및 인자를 반환한다.&lt;/li&gt;
&lt;li&gt;우리의 파이썬 코드가 해당 도구를 직접 실행한다 (예: &lt;code&gt;get_time()&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;실행 결과를 &lt;code&gt;tool_result&lt;/code&gt; 블록으로 포맷팅하여 다시 Claude에게 전달한다.&lt;/li&gt;
&lt;li&gt;Claude가 최종 결과를 바탕으로 사용자에게 답변을 완성(&lt;code&gt;stop_reason=&quot;end_turn&quot;&lt;/code&gt;)한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size20&quot;&gt;2. 파이썬 코드 구현 (loop.py)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Phase 1 단계로 먼저 가짜 도구(현재 시각을 구하는 &lt;code&gt;get_time&lt;/code&gt;)를 정의하고, 도구 실행 결과를 주고받는 기본 루프를 &lt;code&gt;agent/loop.py&lt;/code&gt; 파일로 구현했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;# agent/loop.py
import os
import sys
from datetime import datetime
from typing import Any
import requests
from dotenv import load_dotenv

load_dotenv()

API_URL = &quot;https://api.anthropic.com/v1/messages&quot;
MODEL = &quot;claude-haiku-4-5&quot;
MAX_TURNS = 10   # 무한루프 방지

# [1] 도구 스펙 (Claude가 읽는 설명서)
TOOLS = [
    {
        &quot;name&quot;: &quot;get_time&quot;,
        &quot;description&quot;: &quot;현재 시각을 ISO 형식 문자열로 반환한다. 사용자가 시간이나 날짜를 물으면 사용.&quot;,
        &quot;input_schema&quot;: {
            &quot;type&quot;: &quot;object&quot;,
            &quot;properties&quot;: {},
            &quot;required&quot;: [],
        },
    },
]

# [2] 실제 도구 함수
def get_time(**kwargs) -&amp;gt; str:
    return datetime.now().isoformat(timespec=&quot;seconds&quot;)

TOOL_FUNCS = {&quot;get_time&quot;: get_time}

def execute_tool(name: str, tool_input: dict) -&amp;gt; tuple[str, bool]:
    func = TOOL_FUNCS.get(name)
    if func is None:
        return f&quot;에러: 알 수 없는 도구 '{name}'&quot;, True
    try:
        return str(func(**tool_input)), False
    except Exception as error:
        return f&quot;에러: {error}&quot;, True

# [3] Claude API 호출 및 루프
def run(question: str, api_key: str) -&amp;gt; None:
    messages = [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: question}]
    total_in, total_out = 0, 0

    for turn in range(1, MAX_TURNS + 1):
        # API 호출
        data = call_claude(messages, api_key)
        stop_reason = data.get(&quot;stop_reason&quot;)
        print(f&quot;\n[턴 {turn}] stop_reason={stop_reason}&quot;)

        if stop_reason != &quot;tool_use&quot;:
            for block in data.get(&quot;content&quot;, []):
                if block.get(&quot;type&quot;) == &quot;text&quot;:
                    print(block.get(&quot;text&quot;, &quot;&quot;))
            break

        # assistant 턴을 기록
        messages.append({&quot;role&quot;: &quot;assistant&quot;, &quot;content&quot;: data[&quot;content&quot;]})

        # tool_use 블록 실행 및 tool_result 생성
        results = []
        for block in data[&quot;content&quot;]:
            if block.get(&quot;type&quot;) == &quot;tool_use&quot;:
                name = block[&quot;name&quot;]
                output, is_error = execute_tool(name, block.get(&quot;input&quot;, {}))
                results.append({
                    &quot;type&quot;: &quot;tool_result&quot;,
                    &quot;tool_use_id&quot;: block[&quot;id&quot;],
                    &quot;content&quot;: output,
                })

        messages.append({&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: results})
&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;size20&quot;&gt;3. 실행 및 결과 확인&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널에서 &lt;code&gt;python agent/loop.py &quot;지금 몇 시야?&quot;&lt;/code&gt; 및 &lt;code&gt;python agent/loop.py &quot;안녕?&quot;&lt;/code&gt;을 실행하여 테스트해 보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img style=&quot;max-width: 100%; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.1);&quot; src=&quot;data:image/png;base64,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EiABEiABEiABEiABEiABHwQobPmAx6okQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJpR4DCVtqxZ88kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAI+CFDY8gGPVUmABEiABEiABEiABEiABEiABEiABEiABNKOAIWttGPPnkmABEiABEiABEiABEiABEiABEiABEiABHwQoLDlAx6rkgAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJpB0BCltpx549kwAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJ+CBAYcsHPFYlARIgARIgARIgARIgARIgARIgARIgARJIOwIUttKOPXsmARIgARIgARIgARIgARIgARIgARIgARLwQYDClg94rEoCJEACJEACJEACJEACJEACJEACJEACJJB2BChspR179kwCJEACJEACJEACJEACJEACJEACJEACJOCDAIUtH/BYlQRIgARIgARIgARIgARIgARIgARIgARIIO0IUNhKO/bsmQRIgARIgARIgARIgARIgARIgARIgARIwAcBCls+4LEqCZAACZAACZAACZAACZAACZAACZAACZBA2hGgsJV27NkzCZAACZAACZAACZAACZAACZAACZAACZCADwIUtnzAY1USIAESIAESIAESIAESIAESIAESIAESIIG0I0BhK+3Ys2cSIAESIAESIAESIAESIAESIAESIAESIAEfBChs+YDHqiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAmlHgMJW2rFnzyRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAj4IUNjyAY9VSYAESIAESIAESIAESIAESIAESIAESIAE0o4Aha20Y8+eSYAESIAESIAESIAESIAESIAESIAESIAEfBCgsOUDHquSAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmkHQEKW2nHnj2TAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAn4IEBhywc8ViUBEiABEiABEiABEiABEiABEiABEiABEkg7Aq6FrUebNZPbbrs12Yj3fPmlDB48JFme152BAwZI9uzZ5IWx42Tfvn1em4lLvS6dO0vZsmWS9bV+wwaZPHlKsjzukAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJRJ+Aa2Fr8KCBUqFChWQjOXLkiDR7tHmyPK87q1aukIwZM0q//gNk48aNXpuJ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AhS23DNjDRIgARIgARIgARIgARIgARIgARIgARIggQQgQGErAS4Ch0ACJEACJEACJEACJEACJEACJEACJEACJOCeAIUt98xYgwRIgARIgARIgARIgARIgARIgARIgARIIAEIUNhKgIvAIZAACZAACZAACZAACZAACZAACZAACZAACbgnQGHLPTPWiAOBAmrZ+latngja0/fffy9TpkwNeoyZJBAvAqVKXSrdu3XT3T3+RKuIu72qXDl59NFmUrx4ccmePbtkypRJhj43TNatWxdoo3//flKpYkU5c+aMnDp1Sj799FMZOWp04Hi4jYkTxut2J6v3ycaNG8MV53ESIAESIAESIAESIAESIAESSLcEKGyl20sX34HXrlVLrr32mpCdzps3X77Yti3kcbcHLr/8chn5/Iig1f744w+pUbNW0GPMTP8EunTuLBkyZJDXVq+WrVu3JuwJTZo4UUqUKC7Hjx+XBo80jGicRYoUkSmTX9TnZ1cYOXKUvPPuu4GsEcOHyZVXXhnYx8YPP/wgzVs8liwv1M60qVOkcOHC8suvv0qjRo1DFWM+CZAACZAACZAACZAACZAACaR7AhS21CWcN3euZMmS2fXF3Lt3r3R/5lnX9V5+aZXrOqiwbv16GTx4iKe6fisNHzZMypRJPtG225w8eYq8/Mordpbv7fvvvy9oG6dPnU4mAgQtxMwAAYiESLt37w7kxXLDT3+FChaU6dOn6eEtX75CZsycGcuhem77tttula5duuj6ixYtlrnz5kXUVvduXeWWW27RZf/3v40yf/582fPll0Hr5suXTy677DLp0L6d5M6dW5fp0KFjyPJ2I3fdVUXat2uns+bMmSuLlyyxD3ObBEiABEiABEiABEiABEiABP4xBChsqUv50qqVKSwoIrnCP//8szRp2iySosnKLJgf2STYVLrgggv0+NZv2CCDBg022XF9rajcolITtj744EM5dOiQ5zFddNFFyq2rq6f6cNXq3MVbXU8dpqNK4Dph/Dg94oULF8k8JaTEMvntL70IW7NmzpD8+fOLW+vBUaNGSmklVp09e1aqP1wjoktxd9Wq0rbt07rsuHHj5fU33oio3pLFi7Sr4+nTp6VO3XoR1WEhEiABEiABEiABEiABEiABEkhvBChsqStmhK0+ffvJpk2bEu4aTp0yWeDCBPFo2PDhMR8fxIWr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wo9aacyEOfLBByMlp7AVCRsTkQAJkAAJkAAJkAAJkAAJkAAJpIkAha00gWQ2JJCIwMknnyy9evWUo448Ms4BPAStTz75JE8stZz1veKKy52rgZc/3vKxbNu+PXB8RiQBEiABEiABEiABEiABEiABEiCBdBKgsJVOmsyLBAIQwNCzsmXLyI4dO8U5/CxAUkYhARIgARIgARIgARIgARIgARIgARJwEKCw5YDBRRIgARIgARIgARIgARIgARIgARIgARIggYJDgMJWwekr1pQESIAESIAESIAESIAESIAESIAESIAESMBBgMKWA0aYxcGDBsmBBx4gEyZOkq1bt4ZJGjpuzx7d5Ujjm+nxx+fLG+vXh07PBCRAAiRAAiRAAiRAAiRAAiRAAiRAAiRQGAkUeWGrbZvWUrz4/gn7drtxjr1k6dK4OCuWP2FntRswcJCsW7cubl+6VxYtXCAlSpSQ2XPmyLJlT6Q7+4zmB2fpX+7aldEynJmnWh4ExF1ZrK+z7vlxOVWe+bFNXnViv8dTKSr9Ht9qrpEACZAACZAACZAACZAACRREAkVa2CpTpozMfHhG0n777LPPpFXrNnHxoghb55xztlxw/gVx+fitbPn4Y3nxxRft7oIkbFW++GKpXr26VKx4khxwwAGx5v3yyy/y9ttvC4TARKGGSVu16k3WQm2//faT77//XjZv3iL3P/CAZ7JUyytdurR069ZVKhx/vBx88MGxMn744QdZufJ5mTlrVmxbOhbCtK9lyxZyzdVXByp2584vpFPnzoHiJooUlefwYUOlQoUKibKWJ5Yvl0WLFts4XbveZ86F8xPGd+/8888/pV79Bu7NcvbZZ0vzZs3ksMMOtftmzZotL61alSuec0O2+91Z9imnnCID+veLzY7ZsVNn+eKLL5xR4pajtC8ugwArUfsdWR933HHSu1cvKVeurOCcRfjpp5/kv//dKt179LDr/EcCJEACJEACJEACJEACJEACmSJQpIUtQG3TurUv25tvrmpfPj/avDmXFc8llSvbdGEstkYMHy5nnnmGb3nOHV9++aU0a36P3VRQhK0rrrhcunfr5mxGruXffvtNOne5Tz755JNc+yDk3H7bbbm2Y8N3330v9RvEixqplnfmGWfIoEEDZf/9vS32vv3uO2nQoKFnfaJsDNu+AQP6y/nnnReoKMyu2LBR40Bx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ARIggRQIUNjaC0+FrSgs3RYhUfJIlCYdwlai/PPjvipVqkjZsmXskLKdO4MNDU2lHZhxsOLJJwtmb4Pz+kyHbLcv0+1B/hDgKlQ4XjALYvHi+8vmjz4SDAvMzyHb/Z6fWaRSN4h06P9i+xSTda+tk20+Q5BTKYNpSYAESIAESIAESIAESIAESMCLAIWtvVSaNW1qZpw73YtRwm3w4ZMJyx5noZjd7Cjjp+jhmbPihuI543CZBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBGgsFXUepztJQESIAESIAESIAESIAESIAESIAESIIFCQoDCViHpSDaDBEiABEiABEiABEiABEiABEiABEiABIoaAQpbRa3H2V4SIAESIAESIAESIAESIAESIAESIAESKCQEKGwVko5kM0iABEiABEiABEiABEiABEiABEiABEigqBEILWw1bdJErrji8jhOH23eLEOHDovbFnVl8KBBcuCBB8iEiZNk69atUbPJSrpuXbvKGWecHlfWmrVrZfr0GXHbuEICJEACJEACJEACJEACJEACJEACJEACJJB+AqGFraFDBstZZ50VV5OvvvpKmjRtFrct6sqK5U/IPvvsIwMGDpJ169ZFzSZyuqOOPFK+3LUrUPoZ0x+ScuXKxcV9//33pWu37nHbuEICJJBdAgMG9JdixYrJE8uekPUbNmS3cJZGAiRAAiRAAiRAAiRAAiRAAiSQNQKRha0///xTHpo+3VZ0x46d8vrrr8cqfeutt0jLFi1i634Lz61cKZMmTY7bnW1hq/LFF0v16tWlYsWT5IADDojV5ZdffpG3337bCmyxja6F8849V4459hi7Fe2FIJefha1TTjnF1vXDDz90tYSrJFB4CJQtW1YenpFzbVq8ZIk88sijaW0cz6O04mRmJEACJEACJEACJEACJEACJJASgcjC1m+//SZ3Va/hWXiD+vWldu277T7E8wtPP/NMrmF72RS2MKSye7duftWL1b9zl/vkk08+SRhv2dIlUrx48XwrbB133HEyZfIk24YFCxbKvMcfT9ge7iSBgkogk8IWz6OCelSw3iRAAiRAAiRAAiRAAiRAAoWVQEaFre+++07q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JXAv020//vij1KlbL5YGC9kWtqL2O6xCK1SoEFd398oTy5fLokXx9wuU17Nnj9jzlTvNzz//LK3btJWvvvoqblc2+z2u4AgrXu+oyAbPf/MXLPA0IInavtatWtkaTnvooVA1jSJs4TnuUvN8myx88+03cR9iKGyJBBK2APawww7z5PvNN994bg974Bx++OHyyNw5nnm5N0KJbNCgfr6y2Jr32GNyyCGlrOoP9d8v6ANlGGFLH7j88tTtbgFLH7jc2zV+sl9nue+//7489dTfPV/Eq91+u9x55x1y1FFH2SznGCFn6bJlybIv0PvbtmktN998c6wNuEHgYQY3z0MOOcT+4QEHATdZWDZGMQvFMKRUw5YtH6eaRaT0c+fMliOOOCKW9t527ZMOS87keRSrSJoWgrYP4ss9zZvFXjq1+GTXABW2II5++EFyk+KbbrrRlpEtYcspumib3L849jt3uU8++eSTuF1XXXml3Hdfl5joGbfTrOChtEPHTrJz5073rlzrfzvzzFzbsOGXX3/1tCb2jJxPN+oxBo53VU8sKEQ9zvBSMGjQQCuiemHItPWQtlHL9rtORG2f5hv0N6+P68WLFho3DgcK7im17q6dtNr9HrhfLrzwQs94EJd79+mba58+h4QVtu6oVk3uuad5rvyCbHjxpZc8rSaCpM1GHH3eCXv91OessMKWvuy42wa3ERD9vUKX+7pKh/btKGx5wYm4LZXzHUVCkLn9tts8S//uu+/NCJIGcftSLS/s9TqZsHW3Gdrq/nitFYZRA0KmRt5oObYMMyro/PPOc27yXcZ7p9Mae+qUKVK+/LFmxM730tN8LHO6XoHrjl49e1px59nnnpOJxj2OhmwKW6n0u/seqfV3/uIDlNMND6z4Zkx/yLZ79+7dxuBgjjzzTI6rEgix9evXk+LFi3tagod9f3fWI5vL48aOtR9VUea2bduNkc37pr3F5dxzz7Xv49ju9ZwdtX16zW5+T4ukH+lRtgZNF0ZYbm+u8zfecINm4fuLj8g1a90d209hK4GwhaEPXbt2jcFKtvC7efB2WotEOXBw8qq6jvJUTMNLzq/mJUXDqNGjzc29fZERttDuo401mFc455xz5N62bewu90mjD1xRha1lS5fYC98LL7wgY8eN9yo+btvkSRON/7DjZfv2z8xXgJw6xUUoJCvVzMN9i70P92jr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AMJW1LFHzSAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAhYIQNiyAA9ZQQAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEoo4AhK2oY4+aQQAEQAAEQAAEQAAEQAAEQAAEQAAEQAAELBCAsGUBHrKCAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAhEHQEIW1HHHjWDAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAhYIABhywI8ZAUBEAABEAABEAABEAABEAABEAABEAABEIg6AhC2oo49agYBEAABEAABEAABEAABEAABEAABEAABELBAAMKWBXjICgIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgEHUEIGxFHXvUDAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgYIEAhC0L8JAVBEAABEAABEAABEAABEAABEAABEAABEAg6ghA2Io69qgZBEAABEAABEAABEAABEAABEAABEAABEDAAgEIWxbgISsIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgEDUEYCwFXXsUTMIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgIAFAhC2LMBDVhAAARAAARAAARAAARAAARAAARAAARAAgagjAGEr6tijZhAAARAAARAAARAAARAAARAAARAAARAAAQsEIGxZgIesIAACIAACIAACIAACIAACIAACIAACIAACUUcAwlbUsUfNIAACIAACIAACIAACIAACIAACIAACIAACFghA2LIAD1lBAARAAARAAARAAARAAARAAARAAARAAASijgCErahjj5pBAARAAARAAARAAARAAARAAARAAARAAAQsEICwZQEesoIACIAACIAACIAACIAACIAACIAACIAACEQdAQhbUcceNYMACIAACIAACIAACIAACIAACIAACIAACFggAGHLAjxkBQEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQiDoCELaijj1qBgEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQsEAAwpYFeMgKAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAQdQQMC1uNGjakEiU+tmnx6TNnaMiQoTZxZg8GDRxIsWPHovETJtK5c+fMFuOXfF06d6bcuXPZ1LVz1y6aPn2GTRwOQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAEvE/AsLA1ZPAgyps3r01Lbt68SQ0bNbaJM3uwds1qihYtGvUfMJB2795tthi/5JsxfRqlTp3apq4TJ05Q5y5dbeJwAAIg4F8C/fv3o6CgIFq9ajXt27/fv5WjNhAAARAAARAAARAAARAAARAAAb8RMC1svXz5kqZNny4beuXKVdqzZ4/W6C+/LEfNmzXTjl3tbNq8mSZOnGRzOiqFrXz58lGTxo0pceJEsk2zZ8+hX7dts2mf/qBA/vyUNl1aGcX9ZUEukIWt7Nmzy7aeOnVK3w3sg8AbRSBVqlQ0c0bEZ9PyFSto/vxvvdo/3EdexYnCQAAEQAAEQAAEQAAEQAAEQMASAdPC1rNnz6hS5SpOK69bpw7VqFFdnuN0rsKGjRsdpu1FhbBVtGhRatqkMaVMmdKmqYsWL6bFi5fYxLk6WLVyBcWMGTNgha0MGTLQ5EkTZfOXLFlKCxctctUVxIPAa03Al8IW7qPX+tJA40EABEAABEAABEAABEAABN5AAj4VtsLCwqhO3XqGsPlb2BoxfLiDnyzVYAhbigS2IPD6EICw9fqMFVoKAiAAAiAAAiAAAiAAAiAAAlYJvPXC1pzZsyh58uTEUyv3HzggHdZXKF9ecoWwZfXyQn4Q8D8BCFv+Z44aQQAEQAAEQAAEQAAEQAAEQCCqCPhU2OJpiAeEWOQq9Os/gLp17UqZMmXSkqRPn07u+8t5fOiY0XRDOL+fNGky3blzhypVqkiNGzWSbQhEYStb1qxUs2ZNSpUqJSVIkIAePnxIN2/eot//9ztt2LBR48g7JUuWpPfezS3jEiVKRDzlksPff/9Nx48fl/vqz4qVq+jq1avqUNvmyZOHPiv9KWXJkoVixYpFl69coSOHj9Cy5cu1NPqdhg0aULx4cWnvvv104cIFqlChPOV5Lw89ffpE1umqHn0ZZvYbNKhP8ePFo4OHDtH27b9Rjhw5qGzZMpRPLHTA1+HJkycpdOw4h6ITJ05M5ct/Rbly5qRUYiGAO7dv0+nTZ2jJ0qV0W+w7C7wSZtkyZSlDhvSUJEkSevz4CZ2/cJ6OHTtGq1evcZZFizMyflomsWN0HOrUri19xR0WY8V+4ipXrkSFCxemFClS0OVLl2nN2rU+WZzBKE+r7WQRulChQpQmbRq6dPGSuA/+R/v27fOqjy0r91G1atXENZJYXht8XdoH/qyJETMG7dy5iw4ePGh/moxe11Z5OjQAESAAAiAAAiAAAiAAAiAAAiAQ4AR8KmxF1vevv2lD/fv1lRZT9mn9JWzZ1xvIwlaH9u2oVKlS9k3WjvnBuFdIb+143NixQpDKrB272xk9JpS2bt1qk6R1q1b0xRef28Spg1u3blHXbt0dxDA1lfTSpUvSZ1mMGDFUFrllkWmAWPHS2yvVrV61kriuI0eP0rVr1+i/QtSzD5cvX6bmLVpq0f/55BNqL5jat5ETcDtHjR5Dv//+u5aed4YPG0bvvhILbU68OmBxlFfFdCYSGh0/Vb6ZcVA+386cOSsFrmTJkqnitO233y5wKVBqiQzsmOFppZ2hoWOIhUL7cEiIm2rlVm84j7dyH6n+sbDaqXMX+6bS+nVrZRyLXiNGjnQ4b/S6VvX5c9wdGo0IEAABEAABEAABEAABEAABEPAjAZ8KW48ePaLZc+Y47c6zp8+IV0VMkyaNEEBSaGkGDRwo9yFsaUjkzkdFilCvXj3l/osXL+iiEI7Onj1LCeLHp4wZM0pxkB/oe/YK0TLWrFmD8ouVGznEiR1HE7lYlGLLK32YLla4PHv2Ly2qevVqVK9uXXnM0zT5wTxcWIexkMCWYhzCwu4JH2oRaWSE+KOELXXMdZ0UqzCmT5eelDUet79CxUoqiVe2SgB48OCBsBiLJ8u8d++etLqKLxglTZpUik1NmzWX50qU+Ji6dvlXaGArtgsXLlLqNKk1sYT73ap1a7ooLIFUmDB+nLQwfPLkCbF4x2IZh6zZslFKYQ3F4fHjx1S1WsTiCTJC/DEzfpzX7DgogUPVz9Znf//zD6UV9xtP1ePw9OlTqlylqtxny7NhQ4fIfU//7Nixk+bOmyeTm+VptJ2qbQMG9CdelZQD8z4qrOXixokjLfWCgoJUMvKGsGXlPlL9sypseXpdq/oUgMjGXaXDFgRAAARAAARAAARAAARAAAReVwI+FbZeB+fx9gMXqBZbPGXz44+Ly+ZOnDiJfvzpJ5ums+CUQqzquGPHDpt4dWB0Nbfly5ZS7Nixpe+xkN59bKZJ8eqKXB6HyVOm2EyB1AtbbD3VvXsP1QRq0+YbKvPZZ/KY28/98FZQwhaXx9ZWw4ePoJ27dmnFs+VaESEOqlUulyxeJAUwFq9YRN2zZ4+WtnDhQtQ7JEIgZMGrTdt22rl69eqK6Yp3aP1332lxaqdjxw6apdiMGTNp3fr16pSccmtm/MyOg17g+PPP3TTglWDMDRoyeJBm0TRq1Gg5VZHF0UkTJ2jt9WTn6NFj1K17d5nULE+j7VTtWrd2DbGAxVNxq9eoqaKl2NW/fz95jiO9IWxphYsdo/eR6p9VYYvb4Ml1rerj9J6MO6dDAAEQAAEQAAEQAAEQAAEQAIHXmQCELbvRC1Rha9TIEZRT+IHiwNPplKWQXfNdHhp5IGdfXD17RAgW9lZgXIFeBGErJ7ZqUkEvbNVv0NDBT5USoMLDw6lGzVoqm+WtKpcLshfb7Av/6v/+j5o3byajf/hhA02ZOtU+Cc2aNVNaYLHwVb5CRYfzriLU1DIWGIcMHaYlMzN+VsZBCRzOrOPezZ1bCH8RbVu6dBktWLhQTFdMTP369tXa68nOrj92SaHQCk+j7eR2NWncmCpWrCCbuGTJUlq4aJFNc0ePGikttzjyTRK2Iruuub9meHI+BBAAARAAARAAARAAARAAARB4XQn4VNhiC4M9e/ZSTOEcmf0YBQfHko6SEwtH5jydLTg4WEzzYmHka42fEkYwFVFDInfat2tHn34a4V/rpnB2P2/efPpl61bbRG6OjAhbtWrVpNq1IkQnZdFjX/TiRQuJp/jxFKmatWprp9X48RQoFrbsw9jQUMqaNYu0BDMiGNmXY3+shC1n0wDt03bu3InYHxQHtsjiKYvRokWLSPZqGlu6tGml2MORbHXG1mf6wNPgPvjgAzl1MVHCRJqFUK5cEeLjgQMHKaT3v/7OzIyflXFQAgdfKw0bNdY3Xe4rAe7nn7fQ2HGOTvUdMriJsMLTTDv79e1DH374oWzRV+UjBC598/RC25sibHlyXTMDMzz17LAPAiAAAiAAAiAAAiAAAiAAAq8bAZ8KW5HBYOGL/f506NBRS6qEEQhbGhK5wz6QZgsrIntH5+znih2cszWHu2BE2OrSuTN98kkJWVy79u1tfG+pOmbOmC59NdlbBKnxs5/Cp/JFJkqodEa3Sthip+3Kj5arMpS45uq8fTyvmLnxxx9lNE/57N07RPrssk+nP7a3dDMzflbGQQkc7ES8fYcO+qbJfSVsuXJa7pDBTYQVnmbayVMm2WrQlTXdBwUKEE9H5PCmCFueXNfcXzM8OR8CCIAACIAACIAACIAACIAACLyuBHwibGXKlImKFv1IMnn+7Ll07swWB/yffeJcEeIDCx/OghJGIGw50mFH++xrK3PmTP9aGL1KxiLhzFmz6Pvvf3DMKGKMCFt6x9yNGzeh6zduOJSpxAU+obeaUeN34sQJuTqgfcaePXtQ0Y8irg1eFfPcuXP2SUwdK2Hr+PET1EUwcheUKMdpftq0yV1SeW7NmrV0/vx5ua98XvHB/fv36dTp03Tzxk3h/+ipPP/555/Lrb1/MY40On5WxkEJHEZ8OylrM9kBD/7cEP2+Ia4NKzzNtHPWzBlyxU17UVU1OZtw5B86ZrQ8fFOELU+ua+6wGZ6KG7YgAAIgAAIgAAIgAAIgAAIg8DoS8ImwpQdRoXx5Ymfc+/btpxUrV+pPOd1XwgiELad4tEieBvdluXJUoEB+MdUzpoxncatS5SpaGv2OEWHr69atSAk0vMoiWx/Zh3lz50irJf3KepxGjR+vGNiiZSv7bDaOy/WCmENCgxFK2HImKNkXpXeebqQN1apVo/rCeTwHngY6ZkyofdGkLKEia4cn42dlHIwKHHq/aQ6dchGhnMeb5cnFGm0n59H7K3M2fsWLF6fu3SLEzagWtlauWC6nXJ8WAmiHjp24+TZBXS+uLOeMXNdcsBmeNg3CAQiAAAiAAAiAAAiAAAiAAAi8ZgR8LmwNHjSQ8uXLR64seOx5qQe5Pn360r79++1P+/w4UJ3Hu+u4Epk4Tddu3ejYseMOydOnS0dTpkyW8Swwso8uV4HFyKZNm8jT879dQMuXL3dIqh6g79y5Q/XqN9DOK2Hr0aNHVK16DS1e7ShrG3cinEprZKuum8gEJS6zVcuWVK7cF7L4fv0H2KyI6K7OyKZRFilcmEJCeskiPGmHqsvV+FkZBzU+nlpsWRG2zPLk/httJ+fRT9Hkacynz5zhaC00atiQKleuJI+9LWwZuY+4AcuWLqE4ceKQM6H3/ffz0aBXq1VC2NKGDzsgAAIgAAIgAAIgAAIgAAIgYIhAwAlbhlrvg8Svo7DVt09vKliwoKTRrVt3OnrsmFMyyjpk164/aNDgwU7TcCRPJZ0wPsKh+LXr16lJk6Y2aUuX/pTatW0r4+wFHCVs8cm+ffvR3n37tLzJkyenObNnyWNn5WoJTewYEbby5MlDQ4dE9P/8hQvUWrd4gbuqBw4YQPnzvy+TOBMQp02dQmmF03kO9lxkpIs/rsbPyjiYEYyyZMlM0YJeOdF30VZ99A3hmJ6FTbM8uSwz7fysdGlq27aNbMrOXbto8OAh+mbR/HlziX2acfC2sMVlenofcVq+3vm6f/LkCVWpWo2jtKCfagphS8OCHRAAARAAARAAARAAARAAARAwRADClsDFQk2MGBHT+QqK1daKFCksIbIos2PHTrn/9OkT4hXkXAX1gO6pZZqrclzFh4aOoVixYtGyZctpq241xKJFi8ppV7yqnytn2qpM1Ub2TTR58hT68aef1CmH7eRJE6VfLj6xY+dOGjJkqEzD1nf9+/XVnNjb+8nSC1vsU42nXyn/VHrBYdz48bR5888O9ZqNMCJscR366Wxs1TRw0GAp0qj6q1apQuXLfyV9wqkplfXENMTqYjoiBxbEhg4dpvVNPx2Pz9sLW2bHz+w4qLH21GKL22wlmOHJ9Zlt59Iliylu3LiyyVOnTdN8y/Xq1ZM+KlJE64ovhC3VZk/uI7bIYsssDr9u20a8yigH/YqXfAxhiykggAAIgAAIgAAIgAAIgAAIgIBxAhC2BDNlgREZPmf+fFQe9bDrK2FryuTJlD59OlWddMQfHBxMQUFBWhw7Qp8wYaJ2bL/TulVL+uKLiCl49uf4gZsfvFVgR+LDhw3TnNSzaPb8+XNN0OJ0e/fupb79+qsscqsXttQJ9sOl/IBxnLettbhMo8JWsmTJaMrkSXKaGOfnwNMjOehXnrxy5Qo1a95CxvOfFcuXSYFRRbAlDo8DBxbyWHzkYC9smR0/s+Ogrkd/CVtmeZpt55dflqOWLf4dFx676NGj29wPPA6+ELaM3EdsBTdu7Fhuigx8H3Hg+5an68aOHVseQ9iSGPAHBEAABEAABEAABEAABEAABAwT8JuwxQ90LAJ4Gq6LKXCtPJwi5mmZrtJ5Imx5ag3lK2GLH+LZskwJJ/q+8EP9pk2bafKUKfpop/sNGtSnz8uWldYubOWlgr2wxfHscH7Y0CGUMGFClUxumcWqVatp7rx5NvF8oIQtdjifIEEC4ul0+uDKibY+jZl9JWxxvezw3tPQpzdP4/zQQRDh/DfFVLs1a9cSr4qoQu7cuSikVy8HJvfu3ZOrMU6cMEEKY/btsDJ+ZsZBOS13dT2qa15vRaT6aGVrlKeVdpYq9V9q8803NkIk3wsTJ02i9u3ayW4sXbqMFixcaKVLTvMauY+qV69GdevUsbnGHjx4QJ06d6apr+5ZV+Ng9Lq2wtNpRxEJAiAAAiAAAiAAAiAAAiAAAgFOwLSwpe+XvVWL/pzeL5E+PrJ9e6fkkaWPivNs8ZM+fXqbql0JCTaJLBykSpWKcuTITqlTp6FHDx/S2bNnpXWQhSIjzZo4cWLhWyo/JUualA4K4ejUqVMu8yhh6+DBg9QrpLdMx9Y1bJ3ibiqnywL9dIIta/LmyUtB0YLo3Lnz0hrNXdU5cuSgXLly0cPwcNq0ebO7pDbnrIyfkXGwqTQKDozytNJEFht57A4eOkjHj5+wUpRP835SogQlS56Mftv+G12/ccOndaFwEAABEAABEAABEAABEAABEHhbCBgWttQqh3pAvphapi8/UPf1zsJVG/nBukvXrurwrds6E7beOgjoMAiAAAiAAAiAAAiAAAiAAAiAAAiAgF8IGBa2/NIqVPLaEjAibLHV0+hRI0311dlqeKYKQqY3ngCuszd+iNFBEAABEAABEAABEAABEACBt5gAhK23ePB90XUjwhY7Rh85YoSpZkDYMoXtrcyE6+ytHHZ0GgRAAARAAARAAARAAARA4C0hAGHrLRlof3VTObvev/8A9e7TJ9JqS5T4ONI0zhL8dfYvunDxorNTiAMBBwK4zhyQIAIEQAAEQAAEQAAEQAAEQAAE3ggCELbeiGFEJ0AABEAABEAABEAABEAABEAABEAABEDg7SMAYevtG3P0GARAAARAAARAAARAAARAAARAAARAAATeCAIQtt6IYUQnPCWQJ897FBYWRufOnfc0C9KBAAiAAAiAAAiAAAiAAAiAAAiAAAgEKAGfCFu9Q0IoUaKENG78BDp/3j8CwqCBAyl27Fg0fsJEIVqc8yluf/UvRfLkdP3GDdmXLFkyU+tWreiGOB423JzDdZ9CCbDCs6eNTqULp6BT5+7R5r0PZOuSJE1GSRMnomzZstHRY0fFtXkhwFqN5oAACIAACIAACIAACIAACIAACIAACBgh4BNha93aNRQUFER9+/WnvXv3etyeZMmSUZkyn9Gtm7fox59+8jgfJ1Sr8fUfMJB2795tKC8nzpEjh9M8J0+edIg32z+HgtxEsIj1xRef06VLl6hFy1b05ZflqGWLFvTo0SOqVr2Gm5yen0qXLi0lF+LZhQsX6ebNm55nDNCUpT5MQOeuPKLTF59Sh8pJqXXjAvQw7D71Cj1A6/98RHnzfUgPH4bRsyePKWfOnLR7z943ot8BOhxoFgiAAAiAAAiAAAiAAAiAAAiAAAj4nIBHwhZbuHTs0J5SpUpFwcHB9OzZM7py5Qrt3bePZsyY6dBIs8LPR0WKUK9ePWX5lSpXcSjXXYQVYato0aLUs0d3p8WPGz+eNm/+2eac2f7pC0mTJg31DulF9+7dp27dHev2hbDFFmCthGCWL19eihUrlr459PLlS3rw4AH9snUrTZ8+w+aclYORI0ZQ+vTppCDXqHETK0W5zduwXBLq3fx9OnjqBoVMPE7ZkgRRj9bvU6osSejcgX+o2ZgTdPJiEBUuXExcu+eFRWEiSpgwIf3++//clouTIAACIAACIAACIAACIAACIAACIAACgUsgUmGrXr26VL1aNa0HL168oGjRomnHyqJIixA7ZoWfyISt+vXr0Zflyumr0vbjxo0r981YbGXLmpVChMjkLIwcOYqOHD1qc8ps//SFRNZXbwtbbO3FVl8qPHnyRApZDx8+pPjxE4j/8bRxZeGyd5++dPjwYZXc9Hbhgm+lgMTXTYWKlUyXE1nGOh/Ho15f56W4aRPR9h9P0YSFZ6nCx8mocoVsQoyNTj9sOkNtJl2lpMmSU84cuYWV2l+UKVNmOnLkMN26dTuy4nEeBEAABEAABEAABEAABEAABEAABEAgAAm4FbZy5cpJI4YPl9MKr1+/LqcWKp9ZNWvWoFo1a0oxhH1aff1NG617ZoWfyMSe7t26UrFixbR69Ds89ZGDGWFLX44n+2b7py87sr56U9iqJoTJ+kKg5MDjN236dDpw4KC+OXK/QvnyxOMaP358YiGqR4+ewhfVMYd0RiL8JWxxm4bVSk7VauemaMFBtGTlSfp+8yVq/H/p6T9lc9DT+w9p1JxDNHNjOL37Xl568uQZPX/2WFjM3RN+y65T4RzBVK5kWkqcIIhW/HSHfjsEscvIOCMtCIAACIAACIAACIAACIAACIAACEQFAbfCVmjoGGJrpvDwcKpRs5ZD+5TfJz7xVfkK2nmzwk9kYo9WgZMdo1MR2adWA2EBZiSsWr2G9uzZY9oiTV9XZH31prC1etVKihEjBh08eJB6hfTWN8Pp/sIFC4SVVQI6c+Yste/QwWkaTyP9IWzlThuTMmSIQ9f/uUOtq6Sl/5bJRtHixKZlK4/Rll8vUtPKWajQJxnp9oWbQtw6QYt+f2LT/NL5olO3JvkoW54M9DL8IU1bsJ+GL71ukwYHIAACIAACIAACIAACIAACIAACIAACgUfArbC1dMli4il+K1euornz5jlt/Yrly6S/pkmTJtPGH3+UaZSwxUIKr+LHYfPPW+jQoUNy39WfyMSe3LlzUfbszp28N23SWFqWeWqxxZZJdWrXdtUUp/FLly6jBQsXekXYKlXqv9ShfXvp26p8hYoO9XlL2GJmbHXHPrSc1eNQsYgoWbIkderYgZ4+fUqVq1R1lsTjOH8IW5PbZaL8xd6hHdv/oS1b/6Ha5d6hYqVz0qPHj2mj8HY/AABAAElEQVTutwfp8vl71LLuu5QmV2o6sfcf6j75OO3/698u9KuRlGrXyE9BMYPo9MGL1HX6STr0z4t/E2APBEAABEAABEAABEAABEAABEAABEAgIAm4FbaUFZQzB+qqN/PnzaUkSZLQpk2bafyECTJaCVsqDW/XrltHM2fO0kc57EcmbPUOCRHOvws55NNHeCpssSP8Avnz67NGun9ACHWXL1/2irDVsEEDqlKlsqxTb+2mGvF161b0+efWV0WsVKkiNW7UyNBqirxS4pzZEWPlrG2qjZ5s/SFszeyUgUp/lZOePH5Js2YdoGMnblH9Cpnpw2IZ6O79p7RgwRGK/uw51a5bkOIliU6/bTlBg+edo1NXIqavhjZPQ+XLZaeH98Np/tKTNGJ9mCddQxoQAAEQAAEQAAEQAAEQAAEQAAEQAIEoJuBW2Jo9ayalSJFCrgrI4pazoKa5TZo8hTZu3CiTKGFr3/79wkn3BRm3RVhsnT5zxlkRWlxkwhavXlji44+19PqdEiUi4j0VtvR5eT979uxUvvxX9E7GjPRc+JfaJ1Z8/OWXrdInlX1a1b++/frT3r177U97dMyrP3J/OQwePISuXb9G48aOdcirnPOraZ+PHj2iatVrOKRzFcEC3swZ0+VpT0WqihUrUJPGjemxsHiqWq26q6I9iveHsFUyezTqWvsdyl00I9179JwWLjpO/5y5RU1r5qBsRd6lW1fDaN703ylP9iT06VfviVU3H9G2rX/TqEXnKObLF9Sv1btU4MOUdOfybeoVepw2HH3mUd+QCARAAARAAARAAARAAARAAARAAARAIGoJuBW22rVtS6VLfyodiTdr3oKuXbtm01p1niMbNmpMN2/elOfNCj+RCVv6yrNkyUxnz/47n0xZl5kRtrp07kyffFJCX7y2v3PXLik8aRFiR/WPHY/zdD0Oe/fuI1fin0xg94ctotgyigNP2QwdO44mTZwgp1NyXKxYsaRjfqvCFpe1fNlSih07thDPrlOTJk05ymXIKIS9cWNDpU+uEydOUOcuXV2m9eSEP4Qtbsd/cwRRx/qZKW/xHPTg/mOaP/cA3b52nxrWLUBpc6aja3+dp7Cb4ZRR7MeMFY2e3rtLp09epxcvY1DWd9+hWMGP6frZK9RqxAnae+6lJ11DGhAAARAAARAAARAAARAAARAAARAAgSgm4FbYSpcuLU0QlloxY8YUVi7PaP3672iXEHqSJUsmrZty5swpm//rtm00atRorStK+DFq0aSELS5ow4YNFBwci+LGi0vx48WjePHiU6JECcU2nhR9eBVEntrIUxw5mBW2KleuRI0aNpRl8OqO3McnT59Q2TJl6d13c8v4nzZtogkTJsp9/qP6p0WIHbZG69Choz7K5T5znTplinaeVyCsULGSdsw73vKxxWUVLFiQ+vQOkaLZw4cP6fsffqB58+bzKS2kT5eOGjRsQIULFZKCGqerXqOmdt7szry5cyhp0qTy+qlUuYrZYjzKVyJHNBrSJg+lz52awsPCafqcw8IZ/COqXTMvpc6WXvgZi0n05AG9fPqQ6AULks8pKE5yCgoWq0CGX6U7F65Su9HHaPuJ5x7Vh0QgAAIgAAIgAAIgAAIgAAIgAAIgAAJRS8CtsMVNY8FjrLDgYQsiZ+HIkSPUvUdPm1NK+LEibNkUaHfAjtDv379Pc+bMpU2bN8uzZoUtZVHkTJjq2aM78fRH+1UhVf+mTptGB/YfkPXff/CA7ty5Y9dS54fdu3Wl4sWL05UrVyiOcM6fKGFCsufoTWGLW8G+ybp17SrEwmCtUSyosWDJwiULhSqwZV5I7z7Sn5iKM7tlAY+FPG9Ma3TVhixpYtEXHyejq5fDKFmMp1SzfFbKXCAr3bt9n+bO2U3Z0sSlz6qWoBhCKH1xX1gdPg+PKCooOgXFTU1BMeLQi4dXKPzaFRo1+xTN/fXVeVcVIh4EQAAEQAAEQAAEQAAEQAAEQAAEQCAgCEQqbKlWlv/qKypYqCBleucdevLkifSdtW7detorfFHZByX8GBW2WERr+Mp66tmzp7Ke8PCHdOv2Lbp96zbxtLwjR4/aVyePzQpbqq1jxoTSL1u32pTN0x2V3yu9fyqVx2j/uPBMmTLR+HFjtRUc06ROTc2bN5P1jh8/QRPqvC1sqY6xr67Py5aVVlRx4sSRUw55PO+GhdFVIbQtXLjIJWNVhpFt6JjRlC1bNgoLu0d16tY1ktXjtPVKJaIBPT6ge3ef0uQZ+yjo8TOqVuk9ypwvI4WL6ybs5kNKkSE1RQ96Iay17gtrLbbIEkJe9GAhbKWkoGjB9PLRVXp08wrNWn6WRq2563HdSAgCIAACIAACIAACIAACIAACIAACIBB1BDwWtow00Yrw46weFpgK5C9AKVOmpKTJklK0oGjSn9fVq1fpxMmTdPjwYQoNHUMJheXTsGHD6dSpU86KcRq3YvkyaY3GU/NWrFxpk4atnHglRg7eErbU1DxeXbF5i5aybCX+sAXVqNGjafv237w6FVFWIv60atmSihUrStt/+42mT5+horXttKlTiMWu0NCxxI7/vRF4dccSJUoIf2hnqWevCJbeKFdfxvsZiAY1zEjvFclAt249phXrztLjsIf0xWdZKWv+LEK/iiuEKzEF8ZmYgiis/YSqKLMHRY9FQbGSieNo4vx1enTrMq356Tz1mHtdXzz2QQAEQAAEQAAEQAAEQAAEQAAEQAAEApSAR8IWT8fr1LGDEA1uaWKMu/54S9iqUrkyValSmRIkSOCuOmJ/ULyC4ZSpU92mc3Zy1MgRxL7CeKrc19+0IRbLVFDTFHmKYb36DVS05mPLqMUWC0dp06YV2spL6iGmb+qtzxYtXKD1c/acOZQmdRr64ovPpZVai5atyOyqiFqjxc6wYUPpvXffpaNHj1G37t31p+S+WuEyVKzOuGXLLw7nAymCLd0uCwuzHLnz0J2rlyhDnBvUuUZa+qhsTnr46CWtXXuSHl4Lo3IV2L9WZiFqPRb/H+m68FLoWWIKZnASKXS9eHiVHt68Sjt2XaWmEy7p0mEXBEAABEAABEAABEAABEAABEAABEAgUAl4JGyVLVOGvvnmazk1sErVapH2hQWS6NGjyxX1TgqLKjOB6+N6OfDKg6dOnaZTp0/JKYnPxVSypEmSUqbMmSh3rlxyxT9Ox0JR9+49eNfjwKsAjhXWXuxnigUnFraePXsuBKg00ok6F8SWRocOHdLKNCPcKVGJC+HVEzdv/lkrj3fYIf84MUWR/W1NmjSZsmTJAmHLhpDtQZEihemlsHC7eOkqpc/wDu3a+Ru9l/IFDWn+DuX9KCM9fhaNjh8S59ImomQZ04qJh9GFtZaYgiiunZe8pRfifwwhbMUT2+f0/P4Nun/rJu3ff4sajoOwZUsbRyAAAiAAAiAAAiAAAiAAAiAAAiAQmAR8Imx5o6tKPDp9+jR16NjJbZHt27WjTz8tJdO0/vobOn/+vNv09ifZ71X/fn2l3yn9uTDhd2r06DEOfsRU24xYbLH/sPHjx9GMmTPFio8b9dXY7HM/fv55i0+mIipxzZ8WWyxOKsf0u/74g27fvm3TX7MHycRKi4ULFxZTUU9QtOgxKVGSZHTy5CkqmPQaNauUjoqUyETREsSjl0+iUVD0uKIaMf2QpyC+eCYErqdCFGORS+xHiy70rmf0KOwuPbh7n7b/eYs6zblhtlnIBwIgAAIgAAIgAAIgAAIgAAIgAAIg4EcCASlsvf9+Pho0cKDEwNMDz507FymS9evWyjRz5s6lVatWR5reWQL24ZUzZw568eIl/f77786SyDgzwpbLwlycsOo8/sMPPxSrIHaxKZ1XtowWLZro3ws59dLmpDhg/1oc2Jn88+ds1RQR2JKtRs1a6tDjLa+GyKsiqsCrSH7//Q/q0PI2efLk9EGBAnTx4kW6e++eaH98OnXyGGVI9IKafpaYyn+egRKlSUFBscX/aHGEpRZbaQkfWy+FoPUsXPjVuktPHobT40dP6EHYA3px9wmNXn2NVu99bLltKAAEQAAEQAAEQAAEQAAEQAAEQAAEQMD3BAJS2OJuK6GKBaZhw0e4JVGxYgVq0rixTNOxU2dDzuPdFuzi5OsgbBUvXpy6d+vqogfGo/XO8z3N7Wthi9uROlUqypU7F4U/CBdTVc8Ii7BbWvO6lotLNcq/Q0mzZKSgmOwkPlicCxLWWkK4ehomtK3bYvrhXXp4L5ye3XtCO/bfpW4r72n5sQMCIAACIAACIAACIAACIAACIAACIBDYBAwJW9wVdrLuaWCrHzOWPlz+4EEDKV++fLIqdt7+x59/0pEjR+jGjZvS4oinomXPkZ2KiOloqYUjcQ7sH6tps+Zy35d/Xgdhy5f997TsVEJ0mjljupZ80uQptHGj62mYWkKDO0mSJKbkyZLTtevX6O7dMJvcLf4TTE1rZaPkmdOIaYc8JTGGmIL4mJ4/ukcPw+5R2PUwehL2WExpvE/jttyhY1fEdEUEEAABEAABEAABEAABEAABEAABEACB14KAR8LWJyVKUJcunQ136NmzZ1SpchXD+VSGzp07UfFixShGDCFGuAk8VY6du/cK6e0mlfdO+UPY+m/JklS1ahU6fPiIXO3RG6sieo/A61VSjUIxqHXVjJT6ncRE0WOIxQGe0dOHT+jRvYf04Fo47Tt0lxb88YD2Q9R6vQYWrQUBEAABEAABEAABEAABEAABEHjrCXgkbEU1JXZAnjt3brlyYOLEieSKi2zFdfv2HblS4po1Ef61/NXOyZMmUnBwMPXu05cuX77sl2rZZ1brVi3pypUrfhPw/NIxP1VSMhtR1RJJKE/WBMJyS7jYevKCbl5/ROt33KQFe4XfLQQQAAEQAAEQAAEQAAEQAAEQAAEQAIHXjsBrIWy9dlTR4IAlUDTTc0odLzo9evqSLt55QQevRQ/YtqJhIAACIAACIAACIAACIAACIAACIAAC7glA2HLPB2dBAARAAARAAARAAARAAARAAARAAARAAAQClACErQAdGDQLBEAABEAABEAABEAABEAABEAABEAABEDAPQEIW+754CwIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgECAEoCwFaADg2aBAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAi4JwBhyz0fnAUBEAABEAABEAABEAABEAABEAABEAABEAhQAhC2AnRg0CwQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAH3BCBsueeDsyAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAgFKAMJWgA4MmgUCIAACIAACIAACIAACIAACIAACIAACIOCeAIQt93xwFgRAAARAAARAAARAAARAAARAAARAAARAIEAJQNgK0IFBs0AABEAABEAABEAABEAABEAABEAABEAABNwTgLDlng/OggAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIBCgBCFsBOjBoFgiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAgHsCELbc88FZEAABEAABEAABEAABEAABEAABEAABEACBACUAYStABwbNAgEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQcE8AwpZ7PjgLAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAQoAQgbAXowKBZIAACIAACIAACIAACIAACIAACIAACIAAC7glA2HLPB2dBAARAAARAAARAAARAAARAAARAAARAAAQClACErQAdGDQLBEAABEAABEAABEAABEAABEAABEAABEDAPQEIW+754CwIgAAIgAAIgAAIgAAIgAAIgAAIgAAIgECAEoCwFaADg2aBAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAi4JwBhyz0fnAUBEAABEAABEAABEAABEAABEAABEAABEAhQAhC2AnRg0CwQAAEQAAEQAAEQAAEQAAEQAAEQAAEQAAH3BCBsueeDsyAAAiAAAiAAAiAAAiAAAiAAAiAAAiAAAgFKAMJWgA4MmgUCIAACIAACIAACIAACIAACIAACIAACIOCeAIQt93xwFgRAAARAAARAAARAAARAAARAAARAAARAIEAJQNgK0IFBs0AABEAABEAABEAABEAABEAABEAABEAABNwTgLDlng/OggAIgAAIgAAIgAAIgAAIgAAIgAAIgAAIBCgBCFsBOjBoFgiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAgHsCELbc88FZEAABEAABEAABEAABEAABEAABEAABEACBACUAYStABwbNAgEQAAEQAAEQAAEQAAEQAAEQAAEQAAEQcE8AwpZ7PjgLAiAAAiAAAiAAAiAAAiAAAiAAAiAAAiAQoAQgbAXowKBZIAACIAACIAACIAACIAACIAACIAACIAAC7glA2HLPB2dBAARAAARAAARAAARAAARAAARAAARAAAQClIDPhK1BAwdS7NixaPyEiXTu3LkA7T6a5YqAv8evbZs2lDFjBlq2fDn98cefrpr12sb7m6e/Qfm7f6NGjpBd7Nylq8+72r1bV0qePDlNmz6DTp065fP63oYKvHm9JEmShNKkTk0pUqSghAkT0rVr1+jS5ct0/vz5twGl6T726tWTkiRO/EZf1968ziIDXbdOHcqf/33avv03WrtuXWTJcR4EQAAEQAAEQAAEQMCLBHwmbK1ds5qiRYtG/QcMpN27dxtqcs8e3Slbtmy0Zu06WocfiIbYRZY4VapUdPXq1ciSkZXxi7RwJwmWLllMcePGpUWLF9PixUucpHi9o/zN0yqtTJkyUfFixShLliz04uUL+vuvv2nhokUui/V3/9avWyvb8lX5Ci7b5K0Tq1etpBgxYtCYMaH0y9at3irWZ+U0bNBA3EtxDJd/Uoh2mzf/bDifmQxWr5f06dJRs+bN6L1336VYsWK5bML9+/flmE0XouTbFLJk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QAIkQAIkQAIkQAIkQAIkQAK+BChs+eLhQRIgARIgARIgARIgARIgARIgARIgARIggVwlQGErV68M60UCJEACJEACJEACJEACJEACJEACJEACJOBLgMKWLx4eJAESIAESIAESIAESIAESIAESIAESIAESyFUCFLZy9cqwXiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAr4EKGz54uFBEiABEiABEiABEiABEiABEiABEiABEiCBXCVAYStXrwzrRQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk4EuAwpYvHh4kARIgARIgARIgARIgARIgARIgARIgARLIVQIUtnL1yrBeJEACJEACJEACJEACJEACJEACJEACJEACvgQobPni4UESIAESIAESIAESIAESIAESIAESIAESIIFcJUBhK1evDOtFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTgS4DCli8eHiQBEiABEiABEiABEiABEiABEiABEiABEshVAhS2cvXKsF4kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAK+BChs+eLhQRIgARIgARIgARIgARIgARIgARIgARIggVwlQGErV68M60UCJEACJEACJEACJEACJEACJEACJEACJOBLgMKWLx4eJAESIAESIAESIAESIAESIAESIAESIAESyFUCFLZy9cqwXiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAr4EKGz54uFBEiABEiABEiABEiABEiABEiABEiABEiCBXCVAYStXrwzrRQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk4EuAwpYvHh4kARIgARIgARIgARIgARIgARIgARIgARLIVQIUtnL1yrBeJEACJEACJEACJEACJEACJEACJEACJEACvgQobPni4UESIAESIAESIAESIAESIAESIAESIAESIIFcJUBhK1evDOtFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTgS4DCli8eHiQBEiABEiABEiABEiABEiABEiABEiABEshVAhS2cvXKsF4kQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAK+BChs+eLhQRIgARIgARIgARIgARIgARIgARIgARIggVwlQGErV68M60UCJEACJEACJEACJEACJEACJEACJEACJOBLgMKWLx4eJAESIAESIAESIAESIAESIAESIAESIAESyFUCWRO2+vbpI7vttquMvG+UfPTRR1k5/zL77y9fff21zfvkk0+WBjfXl48/3iwjRo7MSnmZyLRF8+byn/8cKnPnzZOVK1/JRJYp8+jWtavstdeehsd9hsvHKeNl8oCe38xZs2X16tWZzDpfXgMH9JfixYvLkKHD5LPPPst3PFd2xF3PmjVrytkVz5IXXnhRlixdmisYCr0ehfE8FPpJB6xAHO/rgFXJSjR9L8Xx3sUJxMkz7vdLVi6QT6YdO7SX/c1v/f0PjJeNGzf6xNzxDsV5nxUGXX1u42hPpHN+O8p12B7fn0XlusfVfilq/aq4uKRzn0RJW9SuQ5RzjJLGyeXII4+QZk2bytdGBxh4z71RsmOa7ZBAIGHrpJNOkt69enqefvsOHeXdd9/Nd2zJ4kWy8847S6/efWTVqlX5jqe7Y+KE8XLAAQdYgWjatOlSr25duemmG+XHH3+UuvXqp5t91tLPmT1LSpUqJTNnzZJZRvzJZli6ZLHstNNO0qNnr6yLTHoeen5TpkyV+QsW6O6sLPX8OnXuImvWrMlKGc5MK1e+WC695BJ58623ZPbsOc5Dvutx1/O+kSPk8MMPt8Jpn759fevmdXD69GlS2tyjYcM772yUDh07hk0WOT5+4JqaH7XDDj9M9txjD/nzz7/k888/kxkzZ3ne73od4nweIp9chhJ279ZNypTZX2bMmCkvr1iRMtdsv69TFhzTAX0vxfHexSnFyVPv67jegzFdskQxixYusB8whpoPGM8+91xif9CVQffeaz/wBI2v8V586SWZOnWabmZtecwxx0gF82EuaFj5yiuJD1Xp3Ge3NGwoe+65Z9BiE/E2vPOOPP7444ntbK7ocxtHe8J9HhXNx6Fjjj7G7l6/YYO8+uqr7iiJ7XSuQyKTHF7R67A9vj/TwZ7udT/22GM9i3/HPGPuoO/5bLZfbjbGATVr1JBPP/1UGjdpGmu/6uijjpKjjz7afdr5tr/77jtZsXJlYn+muIwdM0YOOaSsjB8/QR56+OFE/rpyySWVpVXLlvLTTz9Jnbr1dHdWltqGf+qpp41xyH2xXgc9oYMPPlhXQy+zZWgAEeuqq65M3J/XXHO1NGncWH7//XepeeNNoevplQD3AD6kbd78iXzzzTdeUbgvxwkEErZOOaWC/QLtdS53t20nXi/hdF/4XmU59+WasDV40L1ykHkRzJ0zV5Y+9JCzqknrURoI+LGBoFJQGDvuflm+fHkiWiZe+LVr15LKF19sRURkDGX8+RdeEDQ0vYKeX5iG6JVXXilnnnGGLH95uTzzzDKvbD336fnF1aHr1bOHnH766fLue+9J69ZtPOvktTNqPW+79VYpVTq/wAQhOVUDACJvn9690hK28GztvffeXqfiuQ9WcxCxN2/eLE2b3ekZJ9M7bzRWafXq1bXCrVfe/3v+eRk8eEjSIb0OURqGENGqV6+elF/QjZWmEbb6tdeCRs9ovLlzZkvJkiWN2DfTV4zN1PsajdOrr75aDjroQCOolTFWu7vJzz//bN4b38gHH3wgEydNyuj5ZfO9i9+9k08qWHD48KMPrXWk88Si8Cwq70HneYZZr1ChgpxbqVKBSb7/4fukezVdYWv+vLmy6667FliuO0LY97w7fdDtNq1bycXmNzZoePHFl+QeI9YhRLnPtJwF8+fJLrvsopuBl3iOm7doGTi+M2Ic7QlneVHWb7/9Nrnu2mvtb5ozPTpPQ4cNT2pj6fF0roPmgeX29P6sZJ71Rnfc7jw9z/VXXlklY8aOTTqWKZ5JmabYuGfgQDnqqCNTHE3eDcGnRctWiZ3p1BN8Onfy/hCIUSdPP/1MohyspNN+SdVeRL5//vlnYlQN7v2qVaokhIM4DQa6dOks55x9NqrkG3788SdjvLBNWEqHi7OgGeaDLoR+iFoPGOtgd6hh2n8NGtyctoiibTJ3/j179U6I52PHjJZy5cpJYQlbPbp3kzPPPNNdxcDbw4YPl2XLng0cXyNCTOvWtYsRD3/2/EieDWFLP5BXqHByvnbCv//+K7/88ov9oOZ1T2i9wy7xsa1cuUPsvXTLrbeFTc74BRAIJGwhj1Qd3e+//96ziLAv/H322UemTpnsmZd7J77colObSxZbM6ZPNy/FPezQrwkTJrqrnNhW4SfMly8VVBKZpFhxd9jTfeH7vdzeMlZLnbt0zVcTPb8wwla/vn0EnZ4N5qto23bt8+WZaoee3/YqbD20dInnqWNY6aGHHup5rM3dbaVF87vSErY8M/bZiaFC5513XmzCFoYd456BNSIaOXPnzpV169fLgQceINWqVbOdA1R38eIlSUKK3i/u58Tn1BKH0NhDoy9KeO5//5MhQ4ZGSZp2Gu28Lly4SB6cPDllfmHf1+6MYNXb/K47pWzZsu5DSdtoKOBDSJjnPCkD10Y237tBG9p4HpvdeVdSzaLwLCrvwaQTDbHR3LyXLr/ssgJT/PHHH1Kj5o2JeOkKW/vtt5+1kk5kWMBK+3Zt7fszLmHrwgsukEsuTf5wdXz58lYUBou169Yl1fg5Y7WmnYYo95lmpu+GN954U95//33dnXL53/+eZ79kRxW24mpPpDyBAAcwrAmWWgj4Wv+OGfq6qxH/TjjhBHs98P4aMPCefOJWOtcBZW2P78/rr68q+DhXUFi/foO0a5/c7kuXZ0FlOo/fP25sgb9bGh8fdp0d0XTqCRGzq+nEe4VBgwbL22vXJh2K2n5R65+kzBwbf/31l1SrXsPuyQVhC/VZb9pz7gDRA5Y02RK29FqCe8eOndzFS+fOnaTSOefY/ddVqZrveNAdUyY/6Gkp27Vrt8Q1L2xhC+5Mrrn6Ks9Twu8pwj///COwnvMKELbwuxI2QNhEu+vvv/+WG6rl/5CcaWEL1l6w+tIAkRdC1m+//Sa7776H+V868YEDderWJyPyUgAAQABJREFUvUdGRgepiAqGVa+/QYvnMkMEUgpbMMdr27Zt4GK2mIvu7KzoSyLMUEQ88LD80KBi2q+//mq/Kuj+wUOGmM578x1G2MJ5pzILPeWUU+TOZk0tGvfLNuoPITKrVesmqVunjs0XvsDGjhsnaNTdYTr3EDEQFi1aLJMefNCu6x8KW0pi21KvA6xV3ntvkz2AznAqUVhTopEB8ea0U0+1QhZetk89/bS89eZbcrL5ugDrB/zQo7H1f1st9WBGrQ0ZXLcoQxHHP3B/SiFb6+ZcwhoC9YzLYmuE+dHE2PpUw461AYL3xk21aieqqtchirCF8q679rpEXkFWLrjgfGsRUZjCloqjGEaDL4KpQpT3teZVvvxxgq/e+u6GIPC8sZj78MOPzD3+nXl3lbVfxC+pXFn23XdfmwwNopsbNNQsIi+zKWyhg+tnKXvWWWfZIXJeIn8UnjuKsAWxBv7/UoXvzD0zdeq0xOF0ha1ERgFX+vfrKxDP4xK2vKql9/WXX34pt91+h1cUuy/KfaaZqbA1atRoeeLJJ3V3yqWKPlGErTjbEylPoIADZ1esmBAa5s2fn3QPIumQwYMEQ8ecQoBmmc512F7fnyps4Xn3svCDtdLhxmUChC30N3bffXfFmbDEDtN/SCROY+VEI2A6BSW0rw41ljOvvf66zbXKddfJEUcckSgBw9PQ9omjnlHbL61btZSTPIY67166tBX8YVFdu05de04QInHdCmMoon5ISvV+qV+/nsBSPxvCllqmAQL6ObfddnvCf7NebKfl75NPPSX3Gf/R2QqFLWylOq///Oc/MnrUffZwKvEpVdog++MUtiDe3WzuKQT0x+5/4AFPMQ4ftfH7hfcThKhOnTrn+9gU5NyccShsOWlkfj2lsIUvSAP69wtVIhpgaIghpPNDr4Vqg7Zfv/75/MPk2lBEbYjCWXemLbaUh9dSv4J6jTGO+kOIcmbNnGEfZK+vF73NUDeILV5lUtjKf5X0OjiPwAkrhg0GCfqD7u7k6HVAo6u7+ZKgIV1hS3/A8cOFLxhBw2tmuF0cDhy1frBAgiWSV1BBB+KJflXS64CGC/4jzJs3X6bPmOGVRdr7pk2dYgVC+AWClWncwTnUwS3yueuSzvtarwc6MHfe1Vy++OILd/aJ7YsvusgM421lOwNhLTQTmThWCuu9iyqoMLBs2TIZNnyEo1bRfv92FGHr22+/lQYNb0ni5beh7YCoPrbQiIRfy6ChWLFi9v4sTGFL318FfdFN57nV+zcOYSvO9kTQ6+yOpx3rzz//XO5o1Nh92G7rvQjLaOdEBulch+31/anCllc7ETAxHAeiHoSt/fffz/jB2yvBvESJEnY9DsFIC9Vn7vY7GiV+w1Tw0N/PVNZd+IAYZDIoCKOY5CpMWGg+IOPDlLZfonyY8yqvbdu7BdaiznZlLlhsRRW2orbrIK4OGzrEfqRCmxeuNdDuHTFipHW7Anbt27WT88//r203QshEWf37D8jXL/XijH0YClqjerVUh5P2P2b8F8KSqDCHIiZVyLFx7z33yPHHl0/sSTVsMxEh5Eqcwpa+y998803pYqzlCgra1oRxQqvWrQuK7nucwpYvnrQPphS2kDP8CbkDrDPwZR7WI84A56f7mR+nf7ZssbvhMwIvgKAvfGdeuq43HjrLLxlHrs6Qa8KWNk7wJfreQYOcVU1aV+EnzFDEpAxcG9o49fqCEPWHEMMC0clCaNq0mWz+5JOkUjEmedKkiXZf/wEDk8zy9fw4FHEbMr0OEFj0uZlqRC33Pb0tRfKaOvT86quv5FbzJUlDtoUtjCn3cqKp5RfWUp81+OV47DFvJ8baSMUQMXyNQdDrgEbJlq3vKcy2Nc+IjNkIcMK/l/HZAEfLo8ck+xDJRnnuPGF5d9BBByV2Q3BPNUtm1I4ZOibooCA4WScK9Vhp2KCB8VdWzdPywSO67y69F+J+7zrfgV4fXqLwpLDlfam1HRBV2NLfSHRW9Ln3Lil57+vmgwF+3+IOXbt0kbPPrpgoFj6IevfJ+z1O7Ny6EuU+0zyUS7aFrbjbE3p+YZfapoSfz+EjkoVqzetB0+6BFY/7A2bU67A9vz/DCFuFORRRr622Gdp36CDr1uUNhdPh0yr+4MNMuUPLaRLraD2MxZbTcjGRSQErc4zfXnx80/ZLpoQttQrCkLGuZpIZhKIubOn7PWi7DkJK+/btBEIqRj5069bdCFrDE74H8W481XzExzBsBPRnb7/tNjuCBu1I9LsQp6AAn32NGt1RUDR7HBb+GKaaa8IWrPJPOOF4W8ePPvpIYL2FgDa420eePRDhDyboat2qlRUOq1S9Pl8OmRqKCHEOIh2uoVc5+Qo2Oy4yz/7dbVpnpN1KYcuLcOb2+QpbWgzM8uEEEg8a1GwEfEnEy37qtGl2WAGGBl522aWaJLFM54uL/tB4OT7WRohavuiXlVTDkxIVytKK1jXV1wYtVoWfTAhbOmQCDycsU9xD2/SHUMvG0u13yHlM16sbP0UNGzaw+dW/uYHuTlpqA0/560E9vx1Z2ELD99RTT5FPjCCIBpJeh6i+wLRx5TbBxlcmfAmCzyJM4qAhkxZb2lDQvP2WeCfceFMtvygZOabnjVlLmjZrli/PW2+5RW644fp84/T1OmSqYZivYNcOfRYK8m/lSpaRzUuNz56WLVrYvGAZddxxx/l+ZYzaMbulYUPj1+wGgbWW0y+S30kceOCBMmH8AzaK08rXL02qY4Xx3kVd1JFsqoZRFJ4UtryvcqaEraACjnct4tkLh72wwkbA8MArLr/crjsdxtsdW/9Euc80vQpbGHYUZPano0xnC5ZvBbVxNH9dxt2e0HLDLjERBd6TmMUb7VavoF/t3e2bqNdhe35/FjVhS98zzo+1KjKnsi4Oe93x24fRDmHCG8aiBLPMZbr9os+/8wNhURa2wrbr1EIT1wJ9J7jSgbU5fDf36tnT+sHaddddEg7FndZJmEERzr8R8JG6oI+j+BB2qUf/2Gbg+vPG628I2vy5ImzhN6i+sTLER1qExx57zAhZ40Tfl9gHK+xx9z+QZOSA/WGDfvREOrdrHeyD2x1MsqNDZaPOioj+AfoJqaxJUZY7oF+Hfi+CV93c8f22KWz50Un/WIHCFr5QtDEqpQb4F0AH1jnL0DTjOH31q6vNV8ZtM1rgywRCVGHL+SXL62u8CluY/eyxRx+TqlWrCIbeFIawhXH5AwcOsOcLx3O1auf5prI7XH+0s5uusKUPJrLHLIzwreQO+kMI81r8R5g+fUZKqw1Njw4xOsZwKOucAUaPY6kvNVgdOYef6fm5G37OtO71dDt0+MF5f9P7NltMRY6vCdkI6sQfZukop5SZbQ7Pgf5Hox/r+IKHoF/a9TpEFbbUMgsWB9Vr1Eycmj4D+pLXAypsoTE2YmTeeHjUOUjnBXnA3F59IWmeQZeZmnLXr7zLLr1UWrRobqPAGmv06DHWLwYajRi2CfN6hJdXrBBY02jQ6xC2AaTpwy7VmshLmA+bV5j4eA926tjB3ocfm5kqm5mZKvW5xLsbDjBhfu0MYRvomhasMaQhlcCj8ZzL841JP0z7w6Rxptf1wnjvatkzZ0yXPfbYQ+Bf68HJU2S/rb7D9Dj8vIX5ko90ReU9qOcYdqkCfdShiM8++6zhvcYW+7npgIB9kKAduFy1QNVzwHsNjHDf6G+vTsyBODhf94QtUZ9b5KdcsB4mhBW24m5PhDkXZ9wbb6wp9c1sa14+tBDvDDNzc88e3W0St3Vq1OuwPb8/wwhbTzz5hH2f6vWA4Bf2/alpoy51uOy4+++XRx551GajQ69UWMb1ck7cg3smnXoec8wxUqXKdXKYsX7ZYn6b4c7h2WefS1iZO88lk+0XiAPqmxcfu3X2bYy8gZW3tinjNBhQoelLMzJhvBkt4A6YYAMWVu4PvFG5oI85oH9/edH0YVJN7oO29wnHH2+HHbpntoYV1oknmr6fGVEUNrQz/quPMH5bS5s+A3zTrl79mixYuDCRjVrTYWZMzJCp7kji6t/qDM04P/V9h/4H+vq4XzRACHXOIIv+79tvr5UXX3zRziSo8YIu9R5AfLTdv/zqS4FPXXfQ+zOqsOX8uBpUpNL3WZiPuO566zaFLSWRnWWBwta8uXPsbDBQsvuaGw2NGgTcGO1MhwZfuNBZcnv2j/pDbzM3f/SLOLa1c6bHsNROvXMf1uN68J3l9urVU04/7bTErh49eor7JagHtYOZjrClX1WQJ64LfAJ4hagvfPXb9br5ctCte15Dzp0/Gnho6K1duy5pWlY9vziFLWfdsukXRYUtZ3nudTwL+AoAEemJJ560IqJeh6jClvPrUJOmTY0l2Ke2WH021f+D1kWFLd3GMi7H7s4ys7mOaZfxjkgV9IfPeVyvQyaFrckPTrJm7K1atc7nbFS/AEN0hvgcR0BDVBvbTpEdznmHDxuWmNlr9erVSc7k03lfK1e3r7dU56tDNMMKHO784n7vavlqgQJhDu9eCFLOIZ8aD8swH3bSFbac5WbzPegsJ8x6usKWs6ww77OoAg7KC9roddYt7Dq+5jc3Qr1acrgnVkAnCBNRIOAD1aLFixOOzdN5buEsHdPbhw0ffPhhkn+pgtLH3Z4oqD6pjmOyInyRx6gEdJ6HDB1qOpyrbXR0ahrcfLM9hg9n8CXoDOlch+31/akdwVRWEU4fW0cccXjSx3JlG+b9qWmiLidNnCBlypSR2bPnCD5GIYwZM9o6j9eRCal8bEWpp/O5dtfZ/VEOx/U++emnn6z4in0QRCB8hA3q/xP3MiyDdOIXzUfbT4UhbGkdUi0zJWylyj+b+yHMdTKTJrh5o0znb5oKW+66xNG/hR84TJShAb85jzz6qK/vaLRdMLILIi8C0njNaqh5plrqSCAcx8dX+C6Fs3rNF4YDYKf3Z1RhC/lr/wlCKiYL8AsYdjli+DD7/k9lvemX3n2MwpabSGa3CxS2dKhH6zZ3y7vvvpuvdD0+xDhH3s3cdBqaGZPBdL5k6I+M5ocpdjEGWoMKW3jJf//DD7K3cTyJL+hxPPhaB13qD45upxoiheMq/EQVtsaMHpX4YlTQA6n1CtuRb2OcO8NHml/nSMdbu3+A9fziFLbwkvt1q883fPGa6phRS69JJpaYJQ2zUKJDC9Hg559+lh/MvffDj+b/Dz8mRF93WXod4EcCjlLDBk2PdOqo2vnFAftvNc/HV1ufDxW28OUZzwcC/MW4HVzbA1v/QKSEdUAmAsQ952yEmcjTKw9YJtWvV9eK7LuYKdlxvt8Zk/KlS5Z6WiUqx7DPg1fZuk/ff+4v+Diu5cHnHqxOsx20sYpy4MvtTuNfTO8J7MM0zUOHDE5Y4zmd76fTMVPBAmVgyMSMGTMFlrTugEYyvk6XNJaOeIbCOF9154Vt5avHsvne1TKwVEs8nWnyrrvuNL4nTnBGsZ0h7AjT4UlX2IrrPZh0oiE29D4JK2iqQAyn3njfIqwyzpTRAQ0SRhqfKfvss0+QqElx8B4L4+Q+KXHADTyTaMxrwx1tLLS13AGW802bNrHPjtOiJJ3n1l1Gtrbjbk+kcx6Y/XaweV+r83K8p/TaIN8ffvxR6tWrn6+IdK6DPhfIdHt6f6qwhU7uU8YXkTucd95/jbC6h20TbXhng5Q1s+dqOOusM+1qmPenpo26HDZsqPVt5PQZhJnaYb0+zFiNLFv2rHVxgCG5GtQ6PGw9MXwfVmkIEJceeuhh+fOvP83Q4ysSfozcfnPdv3dI69dGx3GvcMH550u7dnkz3mPSIfiQKllyNxv1xBNPtL6TVDiIU9iCSHGpsVotKHz4wYdJPvCUS5h2HcQbvE8zEf4wH7I7mpnyggT9yAKrH7SR3n77bcFs0SoK6cdBFbbw7OA/xPY8wf1Hqevx/glSdpg4sJzaxwj9mBABom7QgJE+uIYrzGiJRWbSgzABH1/HGb+5GrwMZjLlYwtlYNh/925d7fsd7WWId+i3OkO5Qw4xbYAGUtHMgK2+xTPhbkXfK1EFQGcduZ6fQIHClv5gew13cw4JgqmuOthzFhP2hY+0zilFccOhI+QejqjCln5JifMF7Dw/DDmpdM459uVzjzFJxQsBIZWjWxV+wghbeABrm6GdMFvWRhYEErfDTWe9sB7lhY90Og2qXwcEPnIgrixYsFAmT5mCZDbo+cUpbEW1hNI6Z3uJF/Y///xrG61hy9IvEpoODW0MLbvcjHvHcFQNTme2KmzhRwnOLoMECFtdt967QeIXFCfK15qC8kz3eDPTkMEXnxkzZyVmb003Tz9hS4+5Rfl0y0yVXkVvWBmgkZcq4F152OGHJQ3T1Pd8lPc1ytHhRlom7lM03v4w5usld9st4YwVx9Fggb+jp55+WqOHXsbx3vWqlD5bOD8vv4aaJgrPdIWtXH8Pagfe73dF+TmXKmyl+k11xi2K62gzYAgQ/JXqEKhU54FO6fMvvJA4jI8R+KA30kw97zcbqSbAbNetW7XUzbSWeI5TzR7ozDju9oSz7CjrsKC77bZbTWezgvEpVtJOOAAruuee+1/Cksedb5Tn3ZnH9vj+VGHLeZ5e615t2XR5epWTap869T7v3HOtiIXnCIID2gpwrwJBAe8sBOxzuhqJWk+12PASpjobix58tHNb4mt7HsL2G2Y0BcLP5gOr27euPZDiD9rs48aOseek4pUzqo4G0WOF1a9y1qmg9SjtOreLnYLKKOh4EMteXFNcW7QdMAmU01BDRyihvwvhRIWtp5562rzb75OicB0KYlTQcR12jw9YJc0QTfj0wnPoFA0zKWyhPjBW6GAMDvBhXAN+1yA44eOG9rdxDD7Fu5rJBfDxId0AAQ/9QrSRg/qmTbfMHSl9gcJWdzNbhn49wY/72rVr5S9z0fGF+gBjtovwgRmeCD8j+CHToGb1UTpKD9w/zs46gR+TySZf+PjCy6CTUcXfNuUj5IKwpTM4oD6oJ8ZIa8cHD0frNm1k06Y830+Ig6DCT1Bhy+kEGunxdQd+k+AwvKCgP4RhvmQgT6cD24a33Orpm0nzdnc29Py2Z2ELHVB0EMKGjp06JWbbCZp29qyZUrp0aYEDctwLGDqCHz+8eNGhgZVKuXKH2G0Vk/QeDCNsBa1PLsWD6HftNdeGrtIgY2btfi5DZ7I1gYpXbost9ceC94B7mHbUsoKkw3sXX/3ChvPOO8/6jEtHbILvETj/POWUCrah4GwU4H79xfh5e+6553xN2oPUO473rlc9YJ6PL70IBTmMjdLhobDlRV0kirCFj0CNGwWbhcq71G170fgMMh34thTR1yDYHlDmgNAZYBY/tMMKCoXRoYu7PVEQg2wcnztntu0IdTXTxmsbNWw529v78+CDD5arr7qqQAzrjS9Q+Gp1hijvT2f6oOuHH364bbMHjY94zg9VUeuZqv2M/GE1qH6FnIKJpgnbnkeeGnTyAxWl0Vl3hlwQtqpUqWJ9JjvrFWR9QP8B1oItSFzEUWu7oPFTxUPf1PmxIVU8dYyealSRtiVxzQtL2II/seZmIrhMBPxutmrdOlBWeA5hWY02IzSDg42fNxWcR5r+rrZLMy1saeXQl7jyiiussA1DGojZ8CkGC90vjNCGUQhR3+tahnOpE2C5h9U643A9OoEChS1kDXHrzDPPSFIvtUj3jGy6P+oLv0njxoKbDEGn3dVx7XhQ8IUQAlthC1t4EDHmFuaJ+HHA7F4adOwu6otzcHaiVfgJKmwhT5gt/vrrb3KfUe7XrlunxRS4TOeHUIfbLF++PN+U5zq0wMvJqp5fNoQtzFYCX2bg+qzpIOv5xW2pAP9imMI8aNBhDWHriSFOmJFExRE0fPHyx5ce+PTBDyqGyox/4H77JVG/bqQrbKmfkaDnp/E+/fSzJH9ruj9bS7UACZt/Og1Dd1naGHELWzoz488//yy169R1J8v6dtRrCGu2xx9/PCP1g8+afffdJ+n9l27Gcb53nXXVodfYF2SWyyi/f0GFrVx5Dzr5BFnX5zUOi63CEHCCMCgojv5+FhTPfTzMB0Q8Q36hW9cudmYwNOTHjbvfL2ogMQ0ZxNme8K1wyINwHo0hOfiY6OWKAx1QWPHgtz2IxVyY4ren92eY80bcKO/PsGVofPiAQzv+77+3GAfuW2z7Ep1atDMhQnz37XfytfGZCh9I7msctZ76PHi1k2FF0q1rV1u9TApbaiWCjJ3DmZUDlrkgbKnljrNeQdYz2a4LUl7YOCrwew0/098rbesXlrDlHKYa9vy84jvvX6/juk+H5sEaqlHjvCGiKv6AyeAhQ+yorWwIW02bNJFzz60kLxiH95hgxh2gP0DsGjZseKSPxu78sI2JG8431tebNm3KNyGMV3zuC0cgkLCFLOGj4sILLzCzdxwmxYrtbCyHPpblLy9POLJ2Fxvlhe90CK1jjZEvfuDhcwsCAX5w8AKDOT0a+IUxFBEP/913t9n6Y/i3nTkQs7NpcHa+ID5MnDgp4fNHG65hhC3NF1YgDW6ub4S0r4wj/366O+VShZ8oL/w77rhdqlx3nc0bY6UnPfigXVeTWGzojB32wNY/en5eP9jOeM517dDh2kIE3G23Xa3FB8xD8R8NRyzVAkQ7Rnp+YQUjZ9lxrEepJ2YVrVunjq3etGnTE+PcMeZ7hBG3wGP5yy9bP0VwSKlDYOH3B35bcA9GtdiChUSYUKxYMXttCuPrw/HHlw9cVYgTuIeiPA+pCkklbKFxeq2ZNecr45jyPjNMKO6g9Qpb7vwFC/L5GQibR7biF8Z7F8PtGzduZN9BOC+335NU5xrl9297fw+qsIUOI5wzlyheQooVL2YtUkuXKm0tUPfeey/Zy/jLxG8+AmZZjWKxhbSYfTNTIQ4feagrLALV302Quvft08dGCyNsab74SITfEfjJdAbtVMGKJsqMX868dD3O9oSWmYml/nZj6PQTTz6ZL0t9z+Z6GwQVL4z3pwLDcLFzjMsOzPgH344FhSjvz4LyDHIcH6TKli0rjxp/O6kmgHLmE7WeOqs43oWYiMApmOkwRQwxrH9zg0Rxei+Gbb/AihvtQ7Sj0R+BdSf8hXmFXBC2UC+0c4MGOPhPp10HK7Y99tg9aHGJeC+j/T1gYGI7yIreLzCGmGZmqH/OfKDHEMW2pj+Jd7E6kNd3cGEMRYTF/c477ZzydDqaGbcxA/yqVatk8ZIlKePhwBtvJM++7RVZDVdwbzpHZSGuzj6NdfRBDz7oYLnqqisz4jweeSIMHDhAMMP22rXJE6HlHd1mMa5+9nQ/l7lLILCwhYt/1JFHyrx58xOdbL/T0gc4aIPL2fCBSAQLCGeAc73evXpaE8GHHn5YMKNPYQhbOk4adcOPEhy9OkUtrTMaqP379bU/Jk6HsCr8RBG21OGkjsPWslIto/4Qan6YjQL+zhCgmiPgyxaCjsG3G44/en5RhC1HNvlW8dID76+//sZOez7GjFHW84u7UYkf3f323y9fHVPt0M5HmHrqjEFuizmdUc4tIqmlI2ZjhMP4dIStVOeRav+2qYh/Mo4t66WKVuj79X4J2zD0q7h2bNwWW35p4jimwkBZMxzkTOOIF6Lx448/kVQ0GlLw7YCvRitWrrSN3jD+OpIyy/JG3O/d/Y2fnT69e9thvjg1vP8WLloUWPQL+/uHMlTYwnqqkM33IDo/uCcQ/vrzr0AfT1LV02u/Cltex7z2qUVwVGFL84RT6N3NcO4BRtjeZD6cbE8hyn2m569cBw8ekjTZg3aqMilsocy42hN6fuku8RsK62cEr494GLZzzz15HdvFi5fIxEmT0i0ya+njfn+6TwRD6zDEDp1h9AkKCgsXzLdt/Q4dO4Z231BQ3n7HtX0V9AOPPkPwZYoPiUED2tXDzXsJH+vxToewBYuxsmUPTrSxO3fpatu6mmeU9gss/mH5j4D3afcePWXNmjWaZb5lrghb8HMXNEw0Rg/pCFsYRgyLHFhSaT/Hr2xcM5T31ltvhba2wXPYyQhDSO8OKL9xk6Z2BJC+gwtD2HLXy72t1lXOSRbccYJuq6iE+JjdE+9ZZ8BHenzIh7+t0aPHmHfIkRS2nIC47kkgsLA1dcpka7UFUcnLXM+dOxqxaCQPGTLUfchzG04N4fwYPqS8ZgVCIjQ0bjB+vDC7W2EORcQwH3z9aN6ipaf/KT1BWLm1MpZlPcyPiQYVfuIQtm679VZTz12sGOmcHU3rEmQJx3pnnHG6ffEjPqZufv2NN5IcTzvz0fMLI2zhZX/SSSfKFvPDbk3ATScc4sx3xsfaN+a/1xAAlKk/9GEEI2ddo66r6BQ2fdh6wmcdGswaGhmfMdcZKyD8+N7VvEU+QbWq8U0AJ/LpDkVE+mJmjHnQsL/58UHDwC22BU0fNV4L4wvgsssKnkXHnX9YYQuiuldA4wRiBAK+gsKS0i9AkE51L/ulS+eYDmf1ms0LX+ZUdA1qMp5OXdJNG+d7Fw0qTJABXwv4cIHOmPOrekHnEkVwKOz3oIq0em6Zvifg0wRfWxHQicNvCT5W/P5H3vLXX361Fo6fGZ8WmOpbg3Ye3f4c9XhBy3TTF5R/Jo9jZlNYrAUN2kEK+gHRmW8qLtqpyrSwhbLjaE84zzGddacQi3ZJ9Ro1k7LDEJarr87zIfWB8W+G9mAuhzjfn24OYYUtd/q4tsMKW+nUC/2ZXj17WL8+znww/BH9JrfFmLZ3w7Zf0CZHaNW6TYGOr3NB2Ip7KKIKW85Zop3Xw72u7f8owhbywiiDG66/XsqXL2+tlDFJwLp165M+JOk7eHsXtmAkMNL0N8ZPmCAQylKFSy6pLM88s0yyMRRRxbU4LbYgOOtvNz4qw70SQ+YIZE3YylwVvXMqTGHLu0bB9qrwE4ewFaxGmY2l5xdG2IpaA/2hDysYRS1P0+kPG36QwggVQWeu0nK8lrCqWPXKKs9hERo/XWFLO7j4khgmYIgoJhuIK6iwhS9dn3/+ReBiwziPV98HgTMvIGKmxYICipMrr7zSjuf36pjVrl1L6tSunW/2pYLyxPFMcsF9VqXqthk+g5QfNo6+l8K8dyE0YWicX4MrVT2iCFup8ipof6beg/rca3lx36tarnuZSoBxx0u1nW76VPlmY7/epxD98PsSNPQzjpODTCjjzC8VF0yMcuCBB8j69etTuppw5pPNdeURR3vCeR4QtuH+AhbqeD+hE4LOR2fjS2vzJ5/YqMpP04Wx2tkR3p/KBUsKW04ayesYeXLccceaD5b/5nOi74yp7/mwwhast4NaYueSsAULszAz0A0ylqcQmMOGuIWtIPXbUYStICyccdIVtuDOp0P7ds4srZEK3vMwGMCHNnfAR3sEtKG3bNmSOIzfhZtq1U5sB13BbIjwd6chlb87Pc5leAIUtsIzSyuFNtTCdLC0wLBDETVdnEs9vzgaovpDX1jC1vr1G6SdsWjLtZApYevmBg1z+kuCClvuyRsyeT0wuxr8H2QioOHatFmzTGQVOA+dYclLPIJICv9sXlOOF1QAJk/oatJnIkRtIIQpW99LUd67YcrRuBS2lET6SxUQdgSLrTjv03S5pn9lC85BecTRnnDWRn27YPKPe+8dJL2MGwyIW+j8YMr3JsbvHoaToSOE3x9M7IKOOCYRCvL1fUd7f1LYct5d0da1vRtW2ApTWi4JW+pvKkz9o8SlsBWOWiaHIoYrWdK22MLs37AIzFSI8vGPwlam6KfOJ7SwBesI/A8a1pmvft279wgaPXC8HdliCx1B/WoYBNhnZrY6fE2MI8TZENUf+sIStjA0af784I7W//r7L2tOm+3rkClhCw6Tvb5g+NX/+eefz9jMIX7l4JgKW7/88osdbltQfD3+l3l/LTVDNrfXgB/O2sYSC2En8++CC86367ie//yb5ysPO840X69KG99DmGVTpzJe89YaefyJZF9cNnER/6PvJQpb3hfSORMXYqTyoeidOrt70xVgND3eZRgOHDRgJrTWZvhOnEHvU0wC8vLLyU7d/erx95a/8/kn8YuPY8oF7bkw73lY5rp9oBZUVtTjyiMuYQtCf5s2re3QeohYrdu0sX7ZsL+D6RDh3PHlvly5cvaU4Fx/rZk9EsOW4XoDLKdMnZrkQiDquedSOr0OUd+fKmyBKQTAoGHDhg3SpWu3oNHTjqdDEcO+K1a+8krWJ4nR9u6OImxBIJ5pZmkOGqK2r1XYgsXre++9V2Bx5533X9lzzz0i+dgqMPOtEWix5U0qXYst71zj3Qu3S/i90DB6zNiMzUSuee7oy8DClqq0YYFlS3WHs+yTTz5JZs+ZY6cB1dn6MD69br36YasZW/x0GghqsRW2sviRrlHzxrDJIsXX84ujIao/9IUlbIUF5GU1EzaPIPEzJWwFKcsd5/HHHxe8qOMIKmyFLSuu6xC2XpmKjyF0nTt1jJQdOhJt22Xui1akSmQhkb6XonbMwlapqFlsYZbfiy68MHGaHTt2SoidiZ2FtKICTLoWW2Gr7zV8N2weYePrfRo2HeKH/XqsXMOWFScX5RFHewI+UdHOhWUWBCoICE5fb7DQGjF8mPW7h9+QCRMmytKHHrL4cGzokMF2WAt2NG3aLNTHx7DXIO74eh2ivj8xgcPRRx0VutrZ6j+kqgh83OnEK6nieO2Pw8eatnezKWxddNFFUrNGdeNg/m0ZO26cFEa/KqqPrajtOhW2vK6r376oPrb88tRjEHBOPPEEeejhR6zoURjXQeviXqoWkAnn8e68C9rGEO4ajvvzmmuuNtazja2/TsygzEACIBBY2Mp1XHgh169XVza9/35Kx+a5cA6YKRGK7dSp05JmIgpaN0xLGjb8Yb4whvEFFTZ/Z3w9v0kPTvb1F+BME3V97JgxZlaZ4nZmEgwHiCtUr1bNOtQPW96vv/6W5CAybPqg8eH09tRTTrFTOs+YOTNoskS8G26I7u/oDTOxwKZN8cw8hq/oV2113puofICV34zvmkxNYx+guEKJgoZQlID3xMsrgluKRCmjMNLoeynqezdsnTEDHCYY6dGzZ9b9FGXiPQjH0pgJEgETuGAK+lwJ6BTvuccedtIYvxm9/OobpbMa1C+NX7lhj7Vq2dLM9lwmbDL52/j+yIZlfOiKZDiBPrdxtCdQdUzYcqERePv1628tWd2n07t3LznOzHjdxcxYhyHc7oDJRF5dvVoWLlzkPlSkt/U6xPX+LExYaJ+HDWEmFgmbt8bH5FqwCuxmRsCE8T2l6aMsC6NfBcfaF154QejqRm1f16xZUzABUtiw5u011qgibLoo8QvjOqSqJ4RHuOjALNGPPPJoqmix7IfPrGZNmxgfu5/HatkZy8mxkMgEththKzIBJiQBEiABEiCBHZiAWgMAQZu728rGjRt3YBo8dRIgARIgARIgARIggaJGgMJWUbtirC8JkAAJkAAJZIhA+fLHyb333GNzg5+R7XEoaoZQMRsSIAESIAESIAESIIEcJUBhK0cvDKtFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTgT4DClj8fHiUBEiABEiABEiABEiABEiABEiABEiABEshRAhS2cvTCsFokQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAL+BChs+fPhURIgARIgARIgARIgARIgARIgARIgARIggRwlQGErRy8Mq0UCJEACJEACJEACJEACJEACJEACJEACJOBPgMKWPx8eJQESIAESIAESIAESIAESIAESIAESIAESyFECFLZy9MKwWiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAv4EKGz58+FREiABEiABEiABEiABEiABEiABEiABEiCBHCVAYStHLwyrRQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk4E+AwpY/Hx4lARIgARIgARIgARIgARIgARIgARIgARLIUQIUtnL0wrBaJEACJEACJEACJEACJEACJEACJEACJEAC/gQobPnz4VESIAESIAESIAESIAESIAESIAESIAESIIEcJUBhK0cvDKtFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTgT4DClj8fHiUBEiABEiABEiABEiABEiABEiABEiABEshRAhS2cvTCsFokQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAL+BChs+fPhURIgARIgARIgARIgARIgARIgARIgARIggRwlQGErRy8Mq0UCJEACJEACJEACJEACJEACJEACJEACJOBPgMKWPx8eJQESIAESIAESIAESIAESIAESIAESIAESyFECFLZy9MKwWiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAv4EKGz58+FREiABEiABEiABEiABEiABEiABEiABEiCBHCVAYStHLwyrRQIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk4E+AwpY/Hx4lARIgARIgARIgARIgARIgARIgARIgARLIUQIUtnL0wrBaJEACJEACJEACJEACJEACJEACJEACJEAC/gQobPnz4VESIAESIAESIAESIAESIAESIAESIAESIIEcJUBhK0cvDKtFAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiTgT4DClj8fHiUBEiABEiABEiABEiABEiABEiABEiABEshRAhS2cvTCsFokQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAL+BChs+fPhURIgARIgARIgARIgARIgARIgARIgARIggRwlQGErRy8Mq0UCJEACJEACJEACJEACJEACJEACJEACJOBPgMKWPx8eJQESIAESIAESIAESIAESIAESIAESIAESyFECFLZy9MKwWiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAv4EKGz58+FREiABEiABEiABEiABEiABEiABEiABEiCBHCVAYStHL4y7Wn379JHddttVRt43Sj766CP3YW6TQBKBuO+XuMtLOlluZJzAfvvtJ02aNPbM98svv5Tx4yd4Hsv2Tt5n2SbM/EmABEiABEiABEiABEig6BGgsGWuWaNGd8iee+4p8+cvkA8++CAnr+KSxYtk5513ll69+8iqVatyso7pVuqGG6434t1uobN54/U3ZO26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htGj7rOOmjF85aOPPirMqrDsQiBQufLFctyxx4UuGb6kvjGTOmQ7wMKoRIkS0q59B3nXdOAZohOYNnWK9REGK7KgMzpGL21bSlgnlSpdatuOEGuvvfa6wNdZtgPvs2wTZv4kQAIkQAIkQAIkQAIkUPQIUNgqeteMNSYBEtiOCZxdsaIVsb/86ktZt279dnymPDUSIAESIAESIAESIAESIAESSJ8Aha30GTIHEiABEiABEiABEiABEiABEiABEiABEiCBQiBAYasQoLNIEiABEiABEiABEiABEiABEiABEiABEiCB9AlQ2EqfIXMgARIgARIgARIgARIgARIgARIgARIgARIoBAIUtgoBOoskARIgARIITmDmjOnBIzti1qlbz7HFVRIgARIgARIgARIgARIgge2RAIWt7fGq8pxIgARIYDsiQGFrO7qYPBUSIAESIAESIAESIAESyDCBSMLWkUceIR07dLBVadS4SeAqRU0XuIAdIOLYMaOlWLFi8sD4CbJq1aqsn3Hc5WX9hFgACZBAkSNAYavIXTJWmARIgARIgARIgARIgARiIxBJ2Bo3dqwcckhZ+fnnn6V2nbqBKxs1XeACdoCIEyeMlwMOOEB++PFHqVevftbPOO7ysn5CLIAESKDIEaCwVeQuGStMAiRAAiRAAiRAAiRAArERCC1snX/+f6V9u3a2gnPmzJXpM2YEqmzUdIEy34EiXXJJZWnVsqU942nTpsvcefOyevZxl5fVk2HmKQn06tlDDj/8cHv8hx9+kBYtW+WL26Z1KznllFPs/i1btsitt92eLw535A6BY445xlZm48aNuVOpiDWhsBURHJORAAmQAAmQAAmQAAmQwA5AILSwNWXyg7LvvvvK33//LTdUqx4YUdR0gQvYgSLOmztHdtttN/n999+l5o03Zf3M4y4v6ye0gxWw3377ScWKZ8kpFSrIQQcdLJ9//pm8tWaNPPLIowkS+nzqjnbt28v69Rt00y4XLVwgxYsXT+y7rkrVxDpXcovAoYceKmNGj7KVmj17jsyYOTPjFSxf/jjp1LGj/T1A5r/++qtMmvSgPPHkkxkvi8JWxpEyQxIgARIgARIgARIgARLYbgiEErZgATB0yGB78i+99JIMvOfeQCCipguU+Q4Y6fbbb5OqVarYM7930CB54YUXs0oh7vKyejI7WObDhg2Vo486yvOsv//+e+nWvYd88MEH4ha2Xl6xQvr1659Id+mll0jLFi0S21ihsJWEI6c2si1sHXjggfLA/eNk5513znfew4YPl2XLns23P50dFLbSoce0JEACJEACJEACJEACJLB9EwglbPXt08cMRapgidxy623y9ddfB6ITNV2gzHfQSEsWL7KdSogSzVvkDU3MJoq4y8vmuewIeUPYuPeegbL77rvb04VPtg/NvfLJJ5/IEUccKbC2QVCrP7ew9ccff0iNmjfaOPjjJZBR2ErgybmVbAtbfXr3llNPPcX6Wezeo6d8++230rVrFyui/vTTT1Knbr2MMqGwlVGczIwESIAESIAESIAESIAEtisCoYQtHZIW1nF51HRBSd92661maN6u8s47G+Wpp5/2TLb//vvLTTfWtMeeffY5WbtuXVK8vffeW6pUuU7KH3ecHHjQQfL9d9/Ju+++J7PnzJHvzLo71K1TR/beey9Zs+Zt+d/zz0u1ajeY4V4VpUyZMvLZp5/J4iVL8s1amIl6aj3uHzdWypYtK//8849Uvf4G3Z21ZbbLi8LTebJxXL90ytO0YesZNd38eXNl1113lX///VdG3nefPP30M5qVXZ588snSr28f2WmnnezQsbPOPNMOKfvRCGClSpWyQw47d+kqb731lo2vwubHH38sEE0Q3MLW8ceXlysuv8IcLyf77LOP/PHHn/Lx5o9lnXnWFi1abNP4/cGkCNdcfbUcffRRcvDBB9v0GDaJZ+mNN970SxrqWDr1rGIsJc82wzoPMvWDSPh/L/2fPP7EE9Kgwc2yk/n3/AvPy6ZN7+erT9jrHuV5uOiii+TEE463Ze+1115SqVIluw7xe/369Ul1mr9goXzxxRdJ+8JsTJw4QQ4w7zqnn8Uy5h07adJEm4373giTt1dcClteVLiPBEiABEiABEiABEiABEgABAILWxCGHtzaaXn//fc9nUt7IY2aziuvVPtmTJ8me+65p/z1119SrXoNz2jNm98ll192mT3Wt28/WbFyZSLehRdcIK1atUzyH6QH4Uts8JChgqGXzrBwwXwpUaKEvPfeJitwwY+RO7idu6dbT2f+vXv3ktNOPdXucgoQzjiZXM92eVF46vnFdf3SKQ9po9QzSrqGDRpI9erVrOjZwfhAcvvK0vNobe75ypUry5dffSXFixVLCFsQr0488UR59dVX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/WwZH2/eLM2a3Zkor6CVdDueYerpVRcdwvX9999L/ZsbeEXJ6L5slxeFZ9zXL2p5caZTn3abN38iTZs1s/eA08oK/ufeM//hPP2AAw6wx9MVtvr07i2nnnqKzctrYon7x42VsmYSBgS3sFW9WjVp2DDv/n3XDF9s3eZuG8/9Z5999rEzN7r3h9mOWk+w6t27ly0Kk0zosEwte87sWVKqVCm76RS2ol53ZBTledD66FIFzRUrVkrffnnvOT2WraXea25fairkOyfgCFMHClthaDEuCZAACZAACZAACZAACexYBEIJW5ddeqm0aNHcEpo5a5bMmjU7EK0o6aIKW07rEK2cs5Ov+3TptAyDv6w+xiIDYpGGGtWrS5Uq18lvv/0mjZvkzXyGY+l2PMPWU+uD5SWXVJZWLVvaXXFYY8RRXlSecV+/qOXFle7SSy+Rli1a2HujadNmsvmTT+y6WmfZja1/YAUJv1jpClv1zTDEG81wRAQIxAMGDEz4onMOx8Nxt7CFfdOmTknMPLp27Trp0LEjdttw5JFHSCez/cMPP0jbdsGGP2ta9zKdek6cOEEOKFPGZomZHSc9OMk61gfrcuXKJYpyClvYGfW6R30eEhUxK5oHPkSMGTNWnnjySefhrKzrhAQo875Ro6w/RvVziPusStXrI5VLYSsSNiYiARIgARIgARIgARIggR2CQChhC0TUcuenn36SOnXz/OoEIRU2XVRhy1lHrdd4429rqfG35RX2228/GTtmtHW4rcfh7wcBwy41fP7553JHo8a6meg0RnEer5koE932q6fGwVJFirCWc848wqzHUZ52wsPyjPv6RS0vznRz58y297NzdlBcb4i0p59+mrEuKm18ba2VuXPnCcQeWEOed+65dkbDH3/80Thxr5/y9lCLHERwWkG67+U///wzMaMi8t91111tnl7CFiyb+hiLKOfz9tdff0mxYsVk5513tuk2bNiQtrCFjKLWEw7i+/Xrm1RHWzHzB+/CPfbYw266ha2o1z3q8/D/7d25TxRRHMDx35rYGQKJSqIdUABKJYol0mC00L9AEywgwcKjEUE8scIEFLVQEYIHRuWIJpJII9hp0I6ICYI2brFWirFzfoPPDMeyOzO7kwzvO4W7OzPv+rzBZH55h6mTfprRe95z5ntn5zV5MzFhfub08/Gjh85uiJtW5Pni5Utnd8Q7K85nc4LAVjZK3IMAAggggAACCCCAgJ0CvgNbTY2NcvDgAVero+Oq6Lo92Rx+03lHOmj+2a6xpfe2tp6VvTU1+jXtTmbuRc8/OqqgunqXJBIJz9nFr6lUSkZGR5cskvz82VP3xT3dC7eZBqQvj/oSudoRpJ46gqW7q8vN7t2793Lp8uXVss7ZuajKC+sZdf/5Lc90SBTp6ur2yckTJ9wie3puZjVSp7/vvhvYyjS19Vxbm+zZs9vN2xvYqqgol7bWVikoKDBNdT816KMbTfTcuOEGhZZPUTM3FxYWysULF0Sft+XHwsKCsxB+v4yNjS2/5Pt3mHpu375NtP90h0QNuGkAXNfyu3uvVzquLP4d9jn1fD40tKJefvs97N+DqcDRo0dkf329O1XSBAn1Wj4DW27+zs6IpaWlbp/raNeh4WEZHHxiquX7k8CWbzISIIAAAggggAACCCBgjYDvwJbKmFEP+lKniwFnewRNl23+ubhPX6yrdlZJYkNCvn79JlNTU7nINmd5mKldUewip5WOurywUFH3X9Dy8p3Ou67V8kXjwxqvlV7XxSsvL5ffTjDq9fj4WremvbajslIqnBFSP3/9kpmZTzI7+yXtvUEvhK2njsTSgLcetbW1cvrfToDt7eflw8ePaasVtN/TZmjJBQJblnQ0zUQAAQQQQAABBBBAIIBAoMCWjtjSEVh6eEdtZCo/aLpM+dp0fXRk2B0tMjIyKvd6e/Pe9KjLy3uDLCrAbNqgTdYRj/Pz8zLz+bNMT0/Lj9QP+aPTBTdudKYlTlukkvummuCv5uzn/8Pc12T95khga/32LS1DAAEEEEAAAQQQQCCsQKDAVthCSY8AAtEI6FQ03XlwtSm2pga3bt+WV6/CT/Mz+a3HT51+eby52R2FNjDw4H8TjzU0yOHDh9zfa+3q+D8BXwIJENgKxEYiBBBAAAEEEEAAAQSsECCwZUU300ibBYqKiqTGWXOuylmkvaSkxFlLq8hd+0iDXboBQff16zI5+dZmooxt90431JvVzbtmlU4NbnJ2oUwmkxnz4gb/AgS2/JuRAgEEEEAAAQQQQAABWwQIbNnS07QTAQQCC5SVlUlLyxnZsnnzktFvGtCam5uTk6dOB86bhJkFCGxlNuIOBBBAAAEEEEAAAQRsFSCwZWvP024EEAgkoCPgiou3yvfvSdFdJDnyL0BgK//GlIAAAggggAACCCCAQFwFCGzFteeoNwIIIIAAAggggAACCCCAAAIIIGC5AIEtyx8Amo8AAggggAACCCCAAAIIIIAAAgjEVYDAVlx7jnojgAACCCCAAAIIIIAAAggggAAClgsQ2LL8AaD5CCCAAAIIIIAAAggggAACCCCAQFwFCGzFteeoNwIIIIAAAggggAACCCCAAAIIIGC5AIEtyx8Amo8AAggggAACCCCAAAIIIIAAAgjEVYDAVlx7jnojgAACCCCAAAIIIIAAAggggAAClgsQ2LL8AaD5CCCAAAIIIIAAAggggAACCCCAQFwFCGzFteeoNwIIIIAAAggggAACCCCAAAIIIGC5AIEtyx8Amo8AAggggAACCCCAAAIIIIAAAgjEVeAv3ngC2wk8vL0AAAAASUVORK5CYII=&quot; alt=&quot;Tool Use 루프 실행 결과 스크린샷&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&quot;지금 몇 시야?&quot; 질문 시&lt;/b&gt;: [턴 1]에서 &lt;code&gt;stop_reason=tool_use&lt;/code&gt;가 발생하면서 &lt;code&gt;get_time({})&lt;/code&gt;을 호출하고, 그 결과인 &lt;code&gt;2026-07-25T16:41:29&lt;/code&gt;를 다시 전달하자 [턴 2]에서 &lt;code&gt;stop_reason=end_turn&lt;/code&gt;으로 자연스럽게 정확한 현재 시간과 날짜를 답변해 준다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&quot;안녕?&quot; 일반 대화 시&lt;/b&gt;: 도구 호출이 필요 없으므로 [턴 1]에서 바로 &lt;code&gt;stop_reason=end_turn&lt;/code&gt;으로 깔끔하게 응답을 마친다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size20&quot;&gt;마무리하며&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;드디어 단순 단방향 호출이 아닌, AI가 상황에 맞춰 도구를 스스로 호출하고 결과를 반영하는 &lt;b&gt;Agentic Tool Use 루프&lt;/b&gt;의 기본 골격을 완성했다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 단순한 &lt;code&gt;get_time&lt;/code&gt; 같은 가짜 도구가 아니라, 언리얼 엔진과 실제 통신하는 모듈을 붙여서 본격적인 게임 테스트 에이전트로 발전시켜 볼 예정이다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>AI에이전트</category>
      <category>ClaudeAPI</category>
      <category>ToolUse</category>
      <category>언리얼엔진</category>
      <category>파이썬</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/139</guid>
      <comments>https://code-nen.tistory.com/139#entry139comment</comments>
      <pubDate>Sat, 25 Jul 2026 17:16:53 +0900</pubDate>
    </item>
    <item>
      <title>3. Python으로 Claude API 호출하기</title>
      <link>https://code-nen.tistory.com/137</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;저번에 curl을 사용해 HTTP 요청으로 Claude API를 호출해봤는데, 이번에는 파이썬(Python)으로 구현을 해보려고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접 curl로 매번 터미널에서 요청을 보낼 수는 없으니까..&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;code&gt;requests&lt;/code&gt;와 &lt;code&gt;.env&lt;/code&gt; 파일을 로드하기 위한 &lt;code&gt;python-dotenv&lt;/code&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;pre class=&quot;bash&quot;&gt;&lt;code&gt;pip install requests python-dotenv&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 프로젝트 폴더 안에 &lt;code&gt;.env&lt;/code&gt; 파일을 만들어서 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; &lt;/p&gt;
&lt;pre class=&quot;plaintext&quot;&gt;&lt;code&gt;ANTHROPIC_API_KEY=발급받은_API_키&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 다음 파이썬 코드를 작성해본다. 파일 이름은 &lt;code&gt;hello.py&lt;/code&gt;로 지었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;python&quot;&gt;&lt;code&gt;import os
import sys

import requests
from dotenv import load_dotenv

load_dotenv()

API_URL = &quot;https://api.anthropic.com/v1/messages&quot;
MODEL = &quot;claude-haiku-4-5&quot;

def main() -&amp;gt; None:

    if len(sys.argv) &amp;lt; 2:
        print('사용법 : python hello.py &quot;claude에게 보낼 질문&quot;')
        sys.exit(1)

    question = &quot; &quot;.join(sys.argv[1:])

    api_key = os.environ.get(&quot;ANTHROPIC_API_KEY&quot;)

    if not api_key:
        print(&quot;ANTHROPIC_API_KEY 환경 변수가 설정되지 않았습니다.&quot;)
        sys.exit(1)


    headers = {
        &quot;x-api-key&quot;: api_key,
        &quot;anthropic-version&quot;: &quot;2023-06-01&quot;,
        &quot;content-type&quot;: &quot;application/json&quot;,
    }

    body = {
        &quot;model&quot; : MODEL,
        &quot;max_tokens&quot; : 500,
        &quot;messages&quot; : [
            {
                &quot;role&quot;: &quot;user&quot;,
                &quot;content&quot;: question
            }
        ]
    }

    try:
        response = requests.post(
            API_URL,
            headers=headers,
            json=body,
            timeout=60
        )

        response.raise_for_status()

    except requests.RequestException as error:
        print(f&quot;API 요청 실패 : {error}&quot;)

        if &quot;response&quot; in locals():
            print(response.text)

        sys.exit(1)

    data = response.json()

    for block in data.get(&quot;content&quot;, []):
        if block.get(&quot;type&quot;) == &quot;text&quot;:
            print(block.get(&quot;text&quot;, &quot;&quot;))

    usage = data.get(&quot;usage&quot;, {})

    print(&quot;\n=== 사용량 정보 ===&quot;)
    print(f&quot;입력 토큰: {usage.get('input_tokens', 0)}&quot;)
    print(f&quot;출력 토큰: {usage.get('output_tokens', 0)}&quot;)
    print(f&quot;종료 이유 : {data.get('stop_reason')}&quot;)

    return;

if __name__ == &quot;__main__&quot;:
    main()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드를 작성하고 실행하는 방법 is 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;python hello.py &quot;안녕, 파이썬에서 보내는 첫 메시지야!&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt; &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 터미널에 입력하면 Claude의 응답과 함께 사용량 정보(입력 토큰, 출력 토큰, 종료 이유)가 예쁘게 출력되는 것을 볼 수 있다.&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;code&gt;dotenv&lt;/code&gt;를 사용해서 환경변수에 있는 API 키를 안전하게 불러오는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;code&gt;requests&lt;/code&gt;를 사용해 post 요청을 보낼 때 API 스키마(&lt;code&gt;model&lt;/code&gt;, &lt;code&gt;max_tokens&lt;/code&gt;, &lt;code&gt;messages&lt;/code&gt;)를 맞춰주는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 마지막으로 응답 데이터에서 실제 텍스트 블록(&lt;code&gt;content&lt;/code&gt;)과 토큰 사용 정보(&lt;code&gt;usage&lt;/code&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;파이썬으로 API 호출하는 것도 생각보다 간단하다^.&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;Tool Use 루프&lt;/b&gt;를 구현해 보도록 하자.&lt;/p&gt;</description>
      <category>AI</category>
      <category>Agent</category>
      <category>AI</category>
      <category>Claude</category>
      <category>claudecode</category>
      <category>dotenv</category>
      <category>Python</category>
      <category>Requests</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/137</guid>
      <comments>https://code-nen.tistory.com/137#entry137comment</comments>
      <pubDate>Fri, 24 Jul 2026 21:34:49 +0900</pubDate>
    </item>
    <item>
      <title>2. HTTP로 Claude API 호출하기</title>
      <link>https://code-nen.tistory.com/136</link>
      <description>&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;저번에도 말했듯이 구독 or API 키를 사용해 AI 모델을 불러올 수 있다.&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 키는&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;a href=&quot;https://platform.claude.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://platform.claude.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784889468404&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;Claude Platform&quot; data-og-description=&quot;Build on the Claude Platform&quot; data-og-host=&quot;platform.claude.com&quot; data-og-source-url=&quot;https://platform.claude.com/&quot; data-og-url=&quot;https://platform.claude.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bo9tTX/dJMb8RkfECL/rAydnZJeEVg493Wk8uL0CK/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260,https://scrap.kakaocdn.net/dn/Lp7AA/dJMb9ia4rc0/i7fO5LqwKawA2clDV5czH0/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot;&gt;&lt;a href=&quot;https://platform.claude.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://platform.claude.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bo9tTX/dJMb8RkfECL/rAydnZJeEVg493Wk8uL0CK/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260,https://scrap.kakaocdn.net/dn/Lp7AA/dJMb9ia4rc0/i7fO5LqwKawA2clDV5czH0/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&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;Claude Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Build on the Claude Platform&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;platform.claude.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;&lt;a href=&quot;https://platform.openai.com/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://platform.openai.com&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1784889506734&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;OpenAI Platform&quot; data-og-description=&quot;&quot; data-og-host=&quot;platform.openai.com&quot; data-og-source-url=&quot;https://platform.openai.com/home&quot; data-og-url=&quot;https://platform.openai.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/qfiTo/dJMb9bwfAdH/CcUbInHiYLg0kQdzpNlbNk/img.png?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/rtUBd/dJMb9jOAd01/gIEuT8r4Fo9gLA0MdDNdA1/img.png?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628&quot;&gt;&lt;a href=&quot;https://platform.openai.com/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://platform.openai.com/home&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/qfiTo/dJMb9bwfAdH/CcUbInHiYLg0kQdzpNlbNk/img.png?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/rtUBd/dJMb9jOAd01/gIEuT8r4Fo9gLA0MdDNdA1/img.png?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628');&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;OpenAI Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;platform.openai.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 gpt 모델을 가져올 수 있다.&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;뭐.. 딥시크나 glm도 가져오라면 가져올 수 있다! (사실 딥시크가 api키는 현재 가장 싸다.) (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;딥시크의 경우에 openai 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;지금은 claude code 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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;799&quot; data-origin-height=&quot;406&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bObXlV/dJMcahrNfWr/Bndp73JcvrMlpmKjyqHVw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bObXlV/dJMcahrNfWr/Bndp73JcvrMlpmKjyqHVw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bObXlV/dJMcahrNfWr/Bndp73JcvrMlpmKjyqHVw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbObXlV%2FdJMcahrNfWr%2FBndp73JcvrMlpmKjyqHVw1%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;799&quot; height=&quot;406&quot; data-origin-width=&quot;799&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;가장 먼저 파워쉘을 열어준다. (윈도우는 파워쉘, 맥은 터미널)&lt;/p&gt;
&lt;pre id=&quot;code_1784889667768&quot; class=&quot;bash&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;$env:ANTHROPIC_API_KEY = &quot;여기&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;발급 받은 api키를 임시로 환경변수에 등록하는거다. 여기 라고 되어 잇는 위치에 api키를 발급받아 넣으면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1784889903992&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo $env:ANTHROPIC_API_KEY&lt;/code&gt;&lt;/pre&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;그리고 다음과 같이 입력해보자.&lt;/p&gt;
&lt;pre id=&quot;code_1784890011179&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl https://api.anthropic.com/v1/messages `
  -H &quot;x-api-key: $env:ANTHROPIC_API_KEY&quot; `
  -H &quot;anthropic-version: 2023-06-01&quot; `
  -H &quot;content-type: application/json&quot; `
  -d '{
    &quot;model&quot;: &quot;claude-haiku-4-5-20251001&quot;,
    &quot;max_tokens&quot;: 200,
    &quot;messages&quot;: [{&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: &quot;안녕, 한 문장으로 자기소개해&quot;}]
  }'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWMxHA/dJMcaiqB8VC/WkPL6ZaErQK4RjbUmxuhqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWMxHA/dJMcaiqB8VC/WkPL6ZaErQK4RjbUmxuhqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWMxHA/dJMcaiqB8VC/WkPL6ZaErQK4RjbUmxuhqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWMxHA%2FdJMcaiqB8VC%2FWkPL6ZaErQK4RjbUmxuhqk%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;789&quot; height=&quot;258&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;258&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;x-api-key = 우리가 등록한 환경변수의 키를 가져다 넣음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;model = 사용할 모델 (haiku는 앤트로픽이 제공하는 가장 싸고 빠른 모델)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;max_tokens = 답 최대 길이 (필수적으로 넣어야한다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;messages = 우리가 넣을 대화이다. (role은 사용자가 넣은 메시지인지 에이전트가 넣은 메시지인지 구분하기 위해 넣는다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1784890218036&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
   &quot;model&quot;:&quot;claude-haiku-4-5-20251001&quot;,
   &quot;id&quot;:&quot;msg_011CdLkMhSAZ2trDxFPWbF5F&quot;,
   &quot;type&quot;:&quot;message&quot;,
   &quot;role&quot;:&quot;assistant&quot;,
   &quot;content&quot;:[
      {
         &quot;type&quot;:&quot;text&quot;,
         &quot;text&quot;:&quot;안녕하세요! 저는 Claude라는 AI 어시스턴트로, 다양한질문에 답변하고 창의적인 작업을 도와드리는 것을 즐깁니다.  &quot;
      }
   ],
   &quot;stop_reason&quot;:&quot;end_turn&quot;,
   &quot;stop_sequence&quot;:null,
   &quot;stop_details&quot;:null,
   &quot;usage&quot;:{
      &quot;input_tokens&quot;:25,
      &quot;cache_creation_input_tokens&quot;:0,
      &quot;cache_read_input_tokens&quot;:0,
      &quot;cache_creation&quot;:{
         &quot;ephemeral_5m_input_tokens&quot;:0,
         &quot;ephemeral_1h_input_tokens&quot;:0
      },
      &quot;output_tokens&quot;:71,
      &quot;service_tier&quot;:&quot;standard&quot;,
      &quot;inference_geo&quot;:&quot;not_available&quot;
   }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응답온 json 인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 봐야할건,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;content = 응답&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;stop_reason = 응답이 끝난 이유( 공부하면서 작성 중이라서 예상이지만 end_turn은 종료고, 나중에 tool_use가 있다면 이어서 툴 사용하게끔 붙이지 않을까 싶다.) 추후에 알아보도록 하자..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;usage = 사용한 토큰양&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;http 요청을 통해서 claude code api를 요청 해봤는데, 생각보다 쉽다^.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음에는 이걸 그대로 파이썬으로 만들어 보도록 하자.&lt;/p&gt;</description>
      <category>AI</category>
      <category>Agent</category>
      <category>AI</category>
      <category>ai호출</category>
      <category>ai호출하기</category>
      <category>Anthropic</category>
      <category>API</category>
      <category>Claude</category>
      <category>claudecode</category>
      <category>deepseek</category>
      <category>openai</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/136</guid>
      <comments>https://code-nen.tistory.com/136#entry136comment</comments>
      <pubDate>Fri, 24 Jul 2026 19:53:51 +0900</pubDate>
    </item>
    <item>
      <title>1. 언리얼에서 동작하는 테스트 AI 에이전트 만들기</title>
      <link>https://code-nen.tistory.com/135</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;대학생활 하느라 바빠가지고, 게임 개발 말고는 딱히 만들거나 추가적인 공부를 하는게 없어서 손을 놨었는데.&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;b&gt;언리얼에서 동작하는 AI 테스트 에이전트&lt;/b&gt;를 만드는게 목표이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;(왜 만드냐면, 게임 개발을 하면서 QA가 생각보다 매우 귀찮고 반복 작업이 많다. 이걸 AI를 사용해서 어느정도 자동화가 가능하지 않을까? 싶어서 만들어 보기로 했다.)&lt;/u&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 data-ke-size=&quot;size16&quot;&gt;보통 AI는 anthropic이나 OpenAI에서 구독을 통해서 사용할 수 있는 방법과 API 키를 사용해서 사용할 수 있는 방법.&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;가장 기초부터 하나하나 만들어 보는게 목표이기 때문에 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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. HTTP로 API 호출하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Tool Use 루프 (로컬 도구를 사용해서) 진짜 도구를 만들어 쓰기보단 테스트용 도구 만들기&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;4. GetGameState 도구 (AI가 언리얼 상태를 확인하기 위한 도구)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. PerformAction (AI가 명령해서 직접 언리얼의 플레이어?를 이동시키기 위한 도구)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 통합 : LLM이 직접 게임 조종&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 스크린샷&amp;nbsp; + 비전&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8. 지식베이스 + 시나리오&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9. 결정성 + 리포트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10. 자체 프로토콜 (MCP)&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;이 정도면 AI한테 언리얼 QA 테스트를 시킬 수 있지 않을까...?&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. LangGraph&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. MCP 표준화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. RAG + 벡터DB 지식 강화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 멀티에이전트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 평가 + 관측&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 배포 (사실 누가 쓰긴 쓸까..? 싶긴..한데)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. 프롬프트 인젝션 방어&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;화이팅..!!&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;</description>
      <category>AI</category>
      <category>Agent</category>
      <category>AI</category>
      <category>aiagent</category>
      <category>Anthropic</category>
      <category>claudecode</category>
      <category>GPT</category>
      <category>langgraph</category>
      <category>openai</category>
      <category>RAG</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/135</guid>
      <comments>https://code-nen.tistory.com/135#entry135comment</comments>
      <pubDate>Fri, 24 Jul 2026 19:35:56 +0900</pubDate>
    </item>
    <item>
      <title>1. Unreal Engine 플러그인 만들기 (NavMesh Export 하기)</title>
      <link>https://code-nen.tistory.com/134</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NavMesh 맵을 추출해야하는데, 이때 인스턴스에서 추출하는 코드를 만들어야하나? 하면서 고민하고 있었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;플러그인으로 만들어서 레벨에 있는 NavMesh를 추출하고 해당 파일을 서버에 따로 보내서 적용하는 것이다.&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. 언리얼 상단에 edit - plugin 을 선택한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnr3Dr/dJMcacWdUk8/PtDPOfTcGmN1nkExTXKMmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnr3Dr/dJMcacWdUk8/PtDPOfTcGmN1nkExTXKMmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnr3Dr/dJMcacWdUk8/PtDPOfTcGmN1nkExTXKMmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnr3Dr%2FdJMcacWdUk8%2FPtDPOfTcGmN1nkExTXKMmk%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;364&quot; data-origin-width=&quot;453&quot; data-origin-height=&quot;364&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;2. 좌측 상단 위 +Add 버튼을 눌러 플러그인을 생성한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;644&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DcXGi/dJMcaiWp3EZ/8mN0hxDb7sz6c1oAuFmdcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DcXGi/dJMcaiWp3EZ/8mN0hxDb7sz6c1oAuFmdcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DcXGi/dJMcaiWp3EZ/8mN0hxDb7sz6c1oAuFmdcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDcXGi%2FdJMcaiWp3EZ%2F8mN0hxDb7sz6c1oAuFmdcK%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;1071&quot; height=&quot;644&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;644&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;3. 자신에게 필요한 플러그인 템플릿을 선택한다. (여기서는 Editor Toolbar Button을 선택했는데 Blank 선택해도 됨)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;1040&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pvJZq/dJMcaivll5e/MviKlnzGwz4cj6tRSH1ZH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pvJZq/dJMcaivll5e/MviKlnzGwz4cj6tRSH1ZH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pvJZq/dJMcaivll5e/MviKlnzGwz4cj6tRSH1ZH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpvJZq%2FdJMcaivll5e%2FMviKlnzGwz4cj6tRSH1ZH1%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;1326&quot; height=&quot;1040&quot; data-origin-width=&quot;1326&quot; data-origin-height=&quot;1040&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;4. 그럼 다음과 같이 plugin 폴더가 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IVNly/dJMcaiPDfdQ/2WlzpKKscfUeriGl2BVUCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IVNly/dJMcaiPDfdQ/2WlzpKKscfUeriGl2BVUCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IVNly/dJMcaiPDfdQ/2WlzpKKscfUeriGl2BVUCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIVNly%2FdJMcaiPDfdQ%2F2WlzpKKscfUeriGl2BVUCk%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;426&quot; height=&quot;245&quot; data-origin-width=&quot;426&quot; data-origin-height=&quot;245&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;5. 반드시 해야하는 Build.cs에 다음과 같이 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1769592626211&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;PrivateDependencyModuleNames.AddRange(
    new string[]
    {
        &quot;Core&quot;,
        &quot;CoreUObject&quot;,
        &quot;Engine&quot;,
        &quot;UnrealEd&quot;,
        &quot;NavigationSystem&quot;,
        &quot;Navmesh&quot;,
        &quot;Projects&quot;
    }
);&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;p data-ke-size=&quot;size16&quot;&gt;6. NavMesh를 export하기 위한 클래스를 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1769592545797&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#pragma once

#include &quot;CoreMinimal.h&quot;

class FNavMeshExporter
{
public:
	static void ExportCurrentWorldNavMeshCommand(const TArray&amp;lt;FString&amp;gt;&amp;amp; Args);

private:
	static bool ExportCurrentWorldNavMeshToFile(const FString&amp;amp; AbsPath);
};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1769592555459&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;NavMeshExporter.h&quot;

#include &quot;Editor.h&quot;
#include &quot;Engine/World.h&quot;
#include &quot;NavigationSystem.h&quot;
#include &quot;NavMesh/RecastNavMesh.h&quot;

#include &quot;Misc/FileHelper.h&quot;
#include &quot;Serialization/BufferArchive.h&quot;

#include &quot;Detour/DetourNavMesh.h&quot;

static constexpr uint32 NAV_MAGIC   = 0x4D56414E; // 'NAVM'
static constexpr uint32 NAV_VERSION = 1;

void FNavMeshExporter::ExportCurrentWorldNavMeshCommand(const TArray&amp;lt;FString&amp;gt;&amp;amp; Args)
{
    if (Args.Num() &amp;lt; 1)
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;Usage: Readapt.ExportNavMesh &amp;lt;AbsolutePath&amp;gt;&quot;));
        UE_LOG(LogTemp, Error, TEXT(&quot;Example: Readapt.ExportNavMesh D:/NavExport/MyMap.navbin&quot;));
        return;
    }

    const FString AbsPath = Args[0];

    if (ExportCurrentWorldNavMeshToFile(AbsPath))
    {
        UE_LOG(LogTemp, Display, TEXT(&quot;[NavExport] OK: %s&quot;), *AbsPath);
    }
    else
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;[NavExport] FAILED&quot;));
    }
}

bool FNavMeshExporter::ExportCurrentWorldNavMeshToFile(const FString&amp;amp; AbsPath)
{
    if (!GEditor)
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;GEditor is null.&quot;));
        return false;
    }

    UWorld* World = GEditor-&amp;gt;GetEditorWorldContext().World();
    if (!World)
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;Editor World is null. Open a level first.&quot;));
        return false;
    }

    UNavigationSystemV1* NavSys = FNavigationSystem::GetCurrent&amp;lt;UNavigationSystemV1&amp;gt;(World);
    if (!NavSys)
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;NavigationSystem is null. Check Project Settings -&amp;gt; Navigation System.&quot;));
        return false;
    }

    ANavigationData* NavData = NavSys-&amp;gt;GetDefaultNavDataInstance(FNavigationSystem::DontCreate);
    ARecastNavMesh* RecastNav = Cast&amp;lt;ARecastNavMesh&amp;gt;(NavData);
    if (!RecastNav)
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;Default NavData is not ARecastNavMesh.&quot;));
        UE_LOG(LogTemp, Error, TEXT(&quot;Did you add NavMeshBoundsVolume and Build Paths?&quot;));
        return false;
    }

    const dtNavMesh* DetourMesh = RecastNav-&amp;gt;GetRecastMesh();

    if (!DetourMesh)
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;Detour dtNavMesh is null. NavMesh may not be generated yet.&quot;));
        return false;
    }

    // --- 파일에 쓸 바이너리 만들기 ---
    FBufferArchive Ar;

    uint32 Magic = NAV_MAGIC;
    uint32 Ver   = NAV_VERSION;
    Ar &amp;lt;&amp;lt; Magic;
    Ar &amp;lt;&amp;lt; Ver;

    // dtNavMeshParams 저장 (서버 init에 필요)
    dtNavMeshParams Params = *DetourMesh-&amp;gt;getParams();
    Ar.Serialize(&amp;amp;Params, sizeof(dtNavMeshParams));

    // 타일 개수 세기
    uint32 TileCount = 0;
    const int MaxTiles = DetourMesh-&amp;gt;getMaxTiles();
    for (int i = 0; i &amp;lt; MaxTiles; ++i)
    {
        const dtMeshTile* Tile = DetourMesh-&amp;gt;getTile(i);
        if (!Tile || !Tile-&amp;gt;header || !Tile-&amp;gt;data || Tile-&amp;gt;dataSize &amp;lt;= 0)
            continue;
        TileCount++;
    }

    Ar &amp;lt;&amp;lt; TileCount;

    // 타일 데이터 저장
    for (int i = 0; i &amp;lt; MaxTiles; ++i)
    {
        const dtMeshTile* Tile = DetourMesh-&amp;gt;getTile(i);
        if (!Tile || !Tile-&amp;gt;header || !Tile-&amp;gt;data || Tile-&amp;gt;dataSize &amp;lt;= 0)
            continue;

        int32 TileIndex = i;
        int32 DataSize  = Tile-&amp;gt;dataSize;

        Ar &amp;lt;&amp;lt; TileIndex;
        Ar &amp;lt;&amp;lt; DataSize;
        Ar.Serialize((void*)Tile-&amp;gt;data, DataSize);
    }

    // 저장
    if (!FFileHelper::SaveArrayToFile(Ar, *AbsPath))
    {
        UE_LOG(LogTemp, Error, TEXT(&quot;Failed to write file: %s&quot;), *AbsPath);
        return false;
    }

    Ar.FlushCache();
    Ar.Empty();

    return 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;p data-ke-size=&quot;size16&quot;&gt;7. ExportEditor.cpp에 가서 콘솔 커멘드를 추가해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1769592689690&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &quot;NavMeshExporter.h&quot;
#include &quot;HAL/IConsoleManager.h&quot;

void FReadaptNavExportEditorModule::StartupModule()
{
    // (아래만 추가)

    IConsoleManager::Get().RegisterConsoleCommand(
        TEXT(&quot;Readapt.ExportNavMesh&quot;),
        TEXT(&quot;Export current level RecastNavMesh tiles to file. Usage: ...파일이름 &amp;lt;AbsolutePath&amp;gt;&quot;),
        FConsoleCommandWithArgsDelegate::CreateStatic(&amp;amp;FNavMeshExporter::ExportCurrentWorldNavMeshCommand),
        ECVF_Default
    );
}&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;p data-ke-size=&quot;size16&quot;&gt;8. 언리얼 OutPut Log에 다음과 같이 입력해보자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byTcvQ/dJMcai3aat7/TpYyKvbYpN6Br2Y4fsTeu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byTcvQ/dJMcai3aat7/TpYyKvbYpN6Br2Y4fsTeu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byTcvQ/dJMcai3aat7/TpYyKvbYpN6Br2Y4fsTeu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyTcvQ%2FdJMcai3aat7%2FTpYyKvbYpN6Br2Y4fsTeu0%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;841&quot; height=&quot;298&quot; data-origin-width=&quot;841&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>졸업작품</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/134</guid>
      <comments>https://code-nen.tistory.com/134#entry134comment</comments>
      <pubDate>Wed, 28 Jan 2026 18:32:58 +0900</pubDate>
    </item>
    <item>
      <title>깃허브 300mb 무시하고 push 하는 방법</title>
      <link>https://code-nen.tistory.com/129</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kevin0181/git-chunker&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/kevin0181/git-chunker&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756811759597&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - kevin0181/git-chunker: A Python tool to automatically commit and push files to Git in 300MB chunks.&quot; data-og-description=&quot;A Python tool to automatically commit and push files to Git in 300MB chunks. - kevin0181/git-chunker&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/kevin0181/git-chunker&quot; data-og-url=&quot;https://github.com/kevin0181/git-chunker&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/HYmxV/hyZGgaTudz/NF61xKM94Bj9BYeEJp1wK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/e7lIl/hyZGjZLkR7/DrCoux4i1ok5xV1xI2mkkK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/kevin0181/git-chunker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/kevin0181/git-chunker&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/HYmxV/hyZGgaTudz/NF61xKM94Bj9BYeEJp1wK0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/e7lIl/hyZGjZLkR7/DrCoux4i1ok5xV1xI2mkkK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;GitHub - kevin0181/git-chunker: A Python tool to automatically commit and push files to Git in 300MB chunks.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A Python tool to automatically commit and push files to Git in 300MB chunks. - kevin0181/git-chunker&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 깃허브 사이트에 들어가서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;auto_commit.py파일을 받는다&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;가장 상단 루트 폴더에 내부에 넣어놓고 py파일을 실행한다.&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;1299&quot; data-origin-height=&quot;982&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6H8u9/btsQgrneHKO/WZ96UHY8WnEKktIKotcd8K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6H8u9/btsQgrneHKO/WZ96UHY8WnEKktIKotcd8K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6H8u9/btsQgrneHKO/WZ96UHY8WnEKktIKotcd8K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6H8u9%2FbtsQgrneHKO%2FWZ96UHY8WnEKktIKotcd8K%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;1299&quot; height=&quot;982&quot; data-origin-width=&quot;1299&quot; data-origin-height=&quot;982&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;이미지처럼 37기가가 넘어가는 폴더도 순차적으로 300mb내외로 계산해서 커밋 푸쉬해줘서 올릴 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/129</guid>
      <comments>https://code-nen.tistory.com/129#entry129comment</comments>
      <pubDate>Tue, 2 Sep 2025 20:17:05 +0900</pubDate>
    </item>
    <item>
      <title>운영체제 들어가기_1</title>
      <link>https://code-nen.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725342864133&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;ostep-translations/korean at master &amp;middot; remzi-arpacidusseau/ostep-translations&quot; data-og-description=&quot;Various translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translations&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean&quot; data-og-url=&quot;https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGGRhI/hyWVTKhbCs/VmyrxgakrnCOlYVP8kKtM0/img.png?width=1200&amp;amp;height=600&amp;amp;face=967_144_1060_245&quot;&gt;&lt;a href=&quot;https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/remzi-arpacidusseau/ostep-translations/tree/master/korean&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGGRhI/hyWVTKhbCs/VmyrxgakrnCOlYVP8kKtM0/img.png?width=1200&amp;amp;height=600&amp;amp;face=967_144_1060_245');&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;ostep-translations/korean at master &amp;middot; remzi-arpacidusseau/ostep-translations&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Various translations of OSTEP can be found here. Help the cause and contribute! - remzi-arpacidusseau/ostep-translations&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;
&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;책에서는 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;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;CPU의 가상화&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;그림 5.2&amp;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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt;그림 5.4&amp;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 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;병행성&lt;/b&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;만약 1000번을 실행한다면 원하는 값이 나올 수 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10000번 처럼 숫자가 높아지면 프로세서가 읽고 쓰고 저장하는 부분에서 겹쳐질 수 있기때문에 원하는 값이 나오지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 os가 일치시켜주는게 병행성.&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;영속성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/운영체제</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/128</guid>
      <comments>https://code-nen.tistory.com/128#entry128comment</comments>
      <pubDate>Tue, 3 Sep 2024 15:21:45 +0900</pubDate>
    </item>
    <item>
      <title>JPA 저장을 했는데, 데이터가 없는 경우</title>
      <link>https://code-nen.tistory.com/127</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JPA를 사용해서 사용자를 저장하려고 테스트 코드를 작성했습니다.&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;근데 JPA는 정상적으로 동작을 했지만, mysql workbench에서 쿼리문으로 직접 확인한 결과 데이터가 저장되어있지 않았습니다.&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-filename=&quot;7B4D5988-E2B5-4716-AC3B-CDCB2B238394.jpeg&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsl3ic/btrQTV1wCoI/CKJF32Q5f0fUKh5jLNo2B1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsl3ic/btrQTV1wCoI/CKJF32Q5f0fUKh5jLNo2B1/img.jpg&quot; data-alt=&quot;테스트 코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsl3ic/btrQTV1wCoI/CKJF32Q5f0fUKh5jLNo2B1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbsl3ic%2FbtrQTV1wCoI%2FCKJF32Q5f0fUKh5jLNo2B1%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;994&quot; height=&quot;560&quot; data-filename=&quot;7B4D5988-E2B5-4716-AC3B-CDCB2B238394.jpeg&quot; data-origin-width=&quot;994&quot; data-origin-height=&quot;560&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;B684D375-111B-431D-9B26-4B58B92A9492_4_5005_c.jpeg&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;176&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dMY4AZ/btrQRlNN3ab/D48bgkTM2JlVSp0OPFBF6k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dMY4AZ/btrQRlNN3ab/D48bgkTM2JlVSp0OPFBF6k/img.jpg&quot; data-alt=&quot;JPA를 사용해서 사용자 정보를 저장하는 부분&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dMY4AZ/btrQRlNN3ab/D48bgkTM2JlVSp0OPFBF6k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdMY4AZ%2FbtrQRlNN3ab%2FD48bgkTM2JlVSp0OPFBF6k%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;1276&quot; height=&quot;176&quot; data-filename=&quot;B684D375-111B-431D-9B26-4B58B92A9492_4_5005_c.jpeg&quot; data-origin-width=&quot;1276&quot; data-origin-height=&quot;176&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;JPA를 사용해서 사용자 정보를 저장하는 부분&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;다음과 같이 사용자를 저장하려고 했는데, 자꾸 성공적으로 저장이 되었지만 mysql에서 쿼리문으로 확인하면 데이터가 존재하지 않는 문제였다.&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;&lt;a href=&quot;https://tecoble.techcourse.co.kr/post/2020-08-31-jpa-transaction-test/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://tecoble.techcourse.co.kr/post/2020-08-31-jpa-transaction-test/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1668072562072&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;JPA 사용시 테스트 코드에서 @Transactional 주의하기&quot; data-og-description=&quot;서비스 레이어()에 대해 테스트를 한다면 보통 DB&amp;hellip;&quot; data-og-host=&quot;tecoble.techcourse.co.kr&quot; data-og-source-url=&quot;https://tecoble.techcourse.co.kr/post/2020-08-31-jpa-transaction-test/&quot; data-og-url=&quot;https://post/2020-08-31-jpa-transaction-test/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ZQkke/hyQwNoIZ19/gfiNOrJXPGPG0MKtYXJYSk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/dATj0n/hyQwGXqh2l/S5XCIe3BBCPLgCgnDkE5b1/img.png?width=1448&amp;amp;height=1840&amp;amp;face=0_0_1448_1840&quot;&gt;&lt;a href=&quot;https://tecoble.techcourse.co.kr/post/2020-08-31-jpa-transaction-test/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tecoble.techcourse.co.kr/post/2020-08-31-jpa-transaction-test/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ZQkke/hyQwNoIZ19/gfiNOrJXPGPG0MKtYXJYSk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080,https://scrap.kakaocdn.net/dn/dATj0n/hyQwGXqh2l/S5XCIe3BBCPLgCgnDkE5b1/img.png?width=1448&amp;amp;height=1840&amp;amp;face=0_0_1448_1840');&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;JPA 사용시 테스트 코드에서 @Transactional 주의하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;서비스 레이어()에 대해 테스트를 한다면 보통 DB&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tecoble.techcourse.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 data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;test code에서 @Transactional 어노테이션을 사용하면 save한 뒤 자동으로 rollback을 한다는 것이다...;;;&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 alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;22370C4D-5046-422D-B6F9-DB4351CA7F54.jpeg&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;1140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkyxZ/btrQUuCs1ry/aFwE9e7rNNDQcj7a53LUl0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkyxZ/btrQUuCs1ry/aFwE9e7rNNDQcj7a53LUl0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkyxZ/btrQUuCs1ry/aFwE9e7rNNDQcj7a53LUl0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkyxZ%2FbtrQUuCs1ry%2FaFwE9e7rNNDQcj7a53LUl0%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;1016&quot; height=&quot;1140&quot; data-filename=&quot;22370C4D-5046-422D-B6F9-DB4351CA7F54.jpeg&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;1140&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;위에 있던 @Transactional을 주석처리하니깐 내가 생각한대로 데이터가 나왔다 ㅠㅠ&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;</description>
      <category>코딩/Spring</category>
      <category>JPA</category>
      <category>jpa save</category>
      <category>jpa 저장</category>
      <category>jpa 저장 안될때</category>
      <category>jpa 저장 안됨</category>
      <category>spring jpa</category>
      <category>spring jpa save 안됨</category>
      <category>spring jpa save()</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/127</guid>
      <comments>https://code-nen.tistory.com/127#entry127comment</comments>
      <pubDate>Thu, 10 Nov 2022 18:32:43 +0900</pubDate>
    </item>
    <item>
      <title>Compilation Error zip END header not found</title>
      <link>https://code-nen.tistory.com/126</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;gradle 컴파일 시, 인터넷 문제나 그 외의 다른 문제로 인해 오류가 나고&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;C:\Users\user\.gralde 파일이 있다. 그 폴더를 삭제 후 다시 컴파일 해보자. 그럼 정상적으로 컴파일 후 사용이 가능하다.&lt;/p&gt;</description>
      <category>IDE/intellij</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/126</guid>
      <comments>https://code-nen.tistory.com/126#entry126comment</comments>
      <pubDate>Mon, 11 Jul 2022 11:26:10 +0900</pubDate>
    </item>
    <item>
      <title>React + Electron 배포 시 빈 화면 출력, HashRouter 설정, Router설정</title>
      <link>https://code-nen.tistory.com/125</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;React를 사용하여 Electron을 배포할 때 빈화면이 나와 당황했다...&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;Electron 은 배포를하면 경로가 변경되어 기존 경로랑 다르게 적용된다는걸 알았다.&lt;/p&gt;
&lt;pre id=&quot;code_1651580019530&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import {Routes, Route, HashRouter} from &quot;react-router-dom&quot;;
import import파일 from &quot;./pages/import파일/import파일&quot;;
import import파일 from &quot;./pages/import파일/import파일&quot;;

function App() {
    return (
        &amp;lt;HashRouter&amp;gt;
            &amp;lt;div className=&quot;App&quot;&amp;gt;
                &amp;lt;Routes&amp;gt;
                    &amp;lt;Route path={'/'} element={&amp;lt;import파일&amp;gt;&amp;lt;/import파일&amp;gt;}/&amp;gt;
                    &amp;lt;Route path={'/admin'} element={&amp;lt;import파일&amp;gt;&amp;lt;/import파일&amp;gt;}/&amp;gt;
                &amp;lt;/Routes&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/HashRouter&amp;gt;
    );
}

export default App;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HashRouter를 사용하여 경로 앞부분에 #을 붙여서 해결하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직접적으로 경로를 적어줄때도 index.html/#/admin 이렇게 적어주면 되는거 같다.&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;</description>
      <category>코딩/JavaScript</category>
      <category>electron</category>
      <category>Electron 배포</category>
      <category>electron 빈화면</category>
      <category>HashRouter</category>
      <category>react</category>
      <category>router</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/125</guid>
      <comments>https://code-nen.tistory.com/125#entry125comment</comments>
      <pubDate>Tue, 3 May 2022 21:14:53 +0900</pubDate>
    </item>
    <item>
      <title>Spring ajax json 및 데이터 가져오기</title>
      <link>https://code-nen.tistory.com/124</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;spring 사용하면서 ajax 통신 사용 시 json 데이터를 가져올때 어떻게 해야할지 알아보자. (사실 안까먹으려고...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1644833729896&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; var data = {
        &quot;데이터1&quot;: 데이터1,
        &quot;데이터2&quot;: 데이터2,
        &quot;데이터3&quot;: 데이터3,
    }

    $.ajax({
        anyne: true,
        type: &quot;POST&quot;,
        contentType: 'application/json',
        url: &quot;url&quot;,
        dataType: &quot;json&quot;,
        data: JSON.stringify(data),
        success: function (data) {
            console.log(data);
        }
    });&lt;/code&gt;&lt;/pre&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;pre id=&quot;code_1644833830501&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @PostMapping(&quot;url&quot;)
    @ResponseBody
    public boolean 함수이름(@RequestBody Map&amp;lt;String, Object&amp;gt; data) { 

        ObjectMapper mapper = new ObjectMapper();
        List&amp;lt;MenuDTO&amp;gt; menuDTOList = mapper.convertValue(data.get(&quot;데이터1&quot;), new TypeReference&amp;lt;List&amp;lt;DTOclass&amp;gt;&amp;gt;() {});

        return 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;만약 데이터1이 json이라면? 위와같이 받아오면 편하다. mapper를 사용하여 dto클래스로 변경해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반 string 같은 데이터라면?&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;pre id=&quot;code_1644833943979&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    @PostMapping(&quot;url&quot;)
    @ResponseBody
    public boolean 함수이름(@RequestBody Map&amp;lt;String, Object&amp;gt; data) {

 		String 변수명 = (String) data.get(&quot;데이터2&quot;);

        return 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;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;</description>
      <category>코딩/Spring</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/124</guid>
      <comments>https://code-nen.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 14 Feb 2022 19:19:38 +0900</pubDate>
    </item>
    <item>
      <title>UnsatisfiedDependencyException,BeanCreationException,IllegalArgumentException  [spring boot 에러]</title>
      <link>https://code-nen.tistory.com/123</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;spring boot를 사용하여 소셜 로그인을 만들어 보는 도중 난생처음 보는 에러를 보았다..&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;pre id=&quot;code_1629026978112&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'oauthController' defined in file [C:\Users\user\Desktop\asdf\out\production\classes\prac2\asdf\oauth\controller\OauthController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'oauthService' defined in file [C:\Users\user\Desktop\asdf\out\production\classes\prac2\asdf\oauth\service\OauthService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'googleOauth': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sns.google.token.url' in value &quot;${sns.google.token.url}&quot;
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) ~[spring-context-5.3.9.jar:5.3.9]
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583) ~[spring-context-5.3.9.jar:5.3.9]
	at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:145) ~[spring-boot-2.5.3.jar:2.5.3]
	at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754) [spring-boot-2.5.3.jar:2.5.3]
	at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434) [spring-boot-2.5.3.jar:2.5.3]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:338) [spring-boot-2.5.3.jar:2.5.3]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) [spring-boot-2.5.3.jar:2.5.3]
	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) [spring-boot-2.5.3.jar:2.5.3]
	at prac2.asdf.AsdfApplication.main(AsdfApplication.java:10) [classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_291]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_291]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_291]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_291]
	at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49) [spring-boot-devtools-2.5.3.jar:2.5.3]
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'oauthService' defined in file [C:\Users\user\Desktop\asdf\out\production\classes\prac2\asdf\oauth\service\OauthService.class]: Unsatisfied dependency expressed through constructor parameter 1; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'googleOauth': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sns.google.token.url' in value &quot;${sns.google.token.url}&quot;
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:800) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1354) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1204) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:564) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9]
	... 24 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'googleOauth': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sns.google.token.url' in value &quot;${sns.google.token.url}&quot;
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1413) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:601) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:524) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1380) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791) ~[spring-beans-5.3.9.jar:5.3.9]
	... 38 common frames omitted
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'sns.google.token.url' in value &quot;${sns.google.token.url}&quot;
	at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180) ~[spring-core-5.3.9.jar:5.3.9]
	at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126) ~[spring-core-5.3.9.jar:5.3.9]
	at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239) ~[spring-core-5.3.9.jar:5.3.9]
	at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210) ~[spring-core-5.3.9.jar:5.3.9]
	at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1321) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1300) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:119) ~[spring-beans-5.3.9.jar:5.3.9]
	at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:399) ~[spring-beans-5.3.9.jar:5.3.9]
	... 50 common frames omitted


Process finished with exit code 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;언뜻 봤을때는 그냥 properties 파일을 못읽어오는 듯? 했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Value 어노테이션의 값을 가져오지 못하는 것을 보고 properties 위치를 지정해주려고 했지만 이마저도 안됐다.&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;평소 gradle로 써와서 혹시나 하고 maven으로 변경하여 다시 작성하니깐 정상적으로 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 gradle에서 properties를 못읽어 온다는건데,.... 바로 구글링해서 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;maven은 기본적으로 프로필 파일을 읽어오지만 gradle은 다르다.. 직접 넣어줘야한다;;;;;&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;gradle에 다음 코드를 추가해서 해결했다.&lt;/p&gt;
&lt;pre id=&quot;code_1629027438116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sourceSets {
            main {
                resources {
                    srcDirs(&quot;src/main/resources&quot;)
                }
            }
        }&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;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 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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://velog.io/@harry-jang/SpringBoot-Gradle%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-profile%EB%B3%84-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://velog.io/@harry-jang/SpringBoot-Gradle%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-profile%EB%B3%84-%ED%94%84%EB%A1%9C%ED%8D%BC%ED%8B%B0-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;</description>
      <category>코딩/Spring</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/123</guid>
      <comments>https://code-nen.tistory.com/123#entry123comment</comments>
      <pubDate>Sun, 15 Aug 2021 20:37:52 +0900</pubDate>
    </item>
    <item>
      <title>Spring boot) mybatis 사용하기(mysql)</title>
      <link>https://code-nen.tistory.com/122</link>
      <description>&lt;p&gt;수정(추가)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.notion.so/neneee/mybatis-a64891971a4b4b6e82cf79a8c8061273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.notion.so/neneee/mybatis-a64891971a4b4b6e82cf79a8c8061273&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603266073867&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;mybatis 사용 방법&quot; data-og-description=&quot;mybatis 사용 방법&quot; data-og-host=&quot;www.notion.so&quot; data-og-source-url=&quot;https://www.notion.so/neneee/mybatis-a64891971a4b4b6e82cf79a8c8061273&quot; data-og-url=&quot;https://www.notion.so/a64891971a4b4b6e82cf79a8c8061273&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.notion.so/neneee/mybatis-a64891971a4b4b6e82cf79a8c8061273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.notion.so/neneee/mybatis-a64891971a4b4b6e82cf79a8c8061273&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;mybatis 사용 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;mybatis 사용 방법&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.notion.so&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이러한 방법이 훨신 더 편하고 깔끔한거 같다.(두개다 참고)&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p&gt;dependencies &lt;span&gt;{&lt;br /&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;implementation &lt;span&gt;'org.springframework.boot:spring-boot-starter-web'&lt;br /&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;implementation &lt;span&gt;'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.3'&lt;br /&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;runtimeOnly &lt;span&gt;'mysql:mysql-connector-java'&lt;br /&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;testImplementation&lt;span&gt;(&lt;/span&gt;&lt;span&gt;'org.springframework.boot:spring-boot-starter-test'&lt;/span&gt;&lt;span&gt;) {&lt;br /&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;exclude &lt;span&gt;group&lt;/span&gt;: &lt;span&gt;'org.junit.vintage'&lt;/span&gt;, &lt;span&gt;module&lt;/span&gt;: &lt;span&gt;'junit-vintage-engine'&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Spring boot 에서 mybatis를 빌드 받는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;application.properties에 mysql을 연동할 정보를 입력한다.&lt;/p&gt;
&lt;pre id=&quot;code_1603257721317&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/[database이름]?serverTimezone=UTC&amp;amp;useUnicode=true&amp;amp;charaterEncoding=utf-8
spring.datasource.username=[유저 이름]
spring.datasource.password=[유저 비밀번호]&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;필자는 여기서 유저의 권한을 줘야하는데 안줘서 시간을 좀 날렸다. db에 접속할 수 있도록 새로 생성한 유저에게 권한을 꼭 주자.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;com.example.demo.dao.UserDTO&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1603257930191&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.demo.dto;

public class UserDTO {
    private int seq;
    private String name;
    private String country;

    public UserDTO(int seq, String name, String country) {
        this.seq = seq;
        this.name = name;
        this.country = country;
    }

    public int getSeq() {
        return seq;
    }

    public void setSeq(int seq) {
        this.seq = seq;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getCountry() {
        return country;
    }

    public void setCountry(String country) {
        this.country = country;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;lombok를 사용해도 좋다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;com.example.demo.dao.UserDAO&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1603258024666&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.demo.dao;

import com.example.demo.dto.UserDTO;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public interface UserDAO {
    List&amp;lt;UserDTO&amp;gt; selectUsers(UserDTO param) throws Exception;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;DAO를 interface로 선언해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603258079057&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.demo;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);

        Resource[] res = new PathMatchingResourcePatternResolver().getResources(&quot;classpath:mappers/*Mapper.xml&quot;);
        sessionFactory.setMapperLocations(res);

        return sessionFactory.getObject();
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Application 클래스에서 초기화를 해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;com.example.demo.controller.UserController&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1603258167189&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.demo.controller;

import com.example.demo.dao.UserDAO;
import com.example.demo.dto.UserDTO;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@MapperScan(basePackages = &quot;com.example.demo.dao&quot;)
public class UserController {
    @Autowired
    private UserDAO userDAO;

    @RequestMapping(&quot;/users&quot;)
    public List&amp;lt;UserDTO&amp;gt; users(@RequestParam(value = &quot;country&quot;, defaultValue = &quot;&quot;) String country) throws Exception {
        final UserDTO param = new UserDTO(0, null, country);
        final List&amp;lt;UserDTO&amp;gt; userList = userDAO.selectUsers(param);
        return userList;
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;컨트롤러에 입력을 해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;resources.mappers.UserMapper.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1603262126421&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot;
        &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;
&amp;lt;mapper namespace=&quot;com.example.demo.dao.UserDAO&quot;&amp;gt;&amp;lt;!--namespace를 통해 UserDAO와 연결합니다. --&amp;gt;
    &amp;lt;select id=&quot;selectUsers&quot; parameterType=&quot;com.example.demo.dto.UserDTO&quot;
            resultType=&quot;com.example.demo.dto.UserDTO&quot;&amp;gt;&amp;lt;!-- selectUsers()메서드를 호출하면 실행할 SELECT문이며,
						UserDTO 객체를 파라미터로 받아, UserDTO객체를 반환합니다.--&amp;gt;
        SELECT `seq`, `name`, `country`
        FROM lab03
        &amp;lt;if test='country != null and country != &quot;&quot;'&amp;gt;&amp;lt;!-- 만약 파라미터에 country가 있다면 SQL문에 WHERE절을 추가합니다. --&amp;gt;
            WHERE country = #{country}
        &amp;lt;/if&amp;gt;
    &amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결과를 확인해주기 위해 Postman을 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;System.println.out을 사용해도된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.postman.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.postman.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603258235066&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Postman | The Collaboration Platform for API Development&quot; data-og-description=&quot;Postman makes API development easy. Our platform offers the tools to simplify each step of the API building process and streamlines collaboration so you can create better APIs faster.&quot; data-og-host=&quot;www.postman.com&quot; data-og-source-url=&quot;https://www.postman.com/&quot; data-og-url=&quot;https://www.postman.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vs4yF/hyHXiWZWzr/5YYzpAge5NOK6RKgsGEU3K/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/5aSNx/hyHWjb9sF5/bLxcrYc6JUZkoQ84lZcchk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/byJ9vK/hyHXnqtizI/j5GSwr3xpEv8yl5aPwmRn0/img.png?width=2144&amp;amp;height=508&amp;amp;face=0_0_2144_508&quot;&gt;&lt;a href=&quot;https://www.postman.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postman.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vs4yF/hyHXiWZWzr/5YYzpAge5NOK6RKgsGEU3K/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/5aSNx/hyHWjb9sF5/bLxcrYc6JUZkoQ84lZcchk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/byJ9vK/hyHXnqtizI/j5GSwr3xpEv8yl5aPwmRn0/img.png?width=2144&amp;amp;height=508&amp;amp;face=0_0_2144_508');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Postman | The Collaboration Platform for API Development&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Postman makes API development easy. Our platform offers the tools to simplify each step of the API building process and streamlines collaboration so you can create better APIs faster.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.postman.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0Mk9K/btqLqmqBAZ8/j7kY3CPLKjCkOxrjgO3yV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0Mk9K/btqLqmqBAZ8/j7kY3CPLKjCkOxrjgO3yV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0Mk9K/btqLqmqBAZ8/j7kY3CPLKjCkOxrjgO3yV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0Mk9K%2FbtqLqmqBAZ8%2Fj7kY3CPLKjCkOxrjgO3yV1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;결과 화면이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹사이트에서 실행하면 아마 cross domain error에 걸리니 어플리케이션을 깔아서 해보도록하자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 보고 따라 정리했다.&lt;/p&gt;
&lt;p&gt;-&amp;gt;&lt;a href=&quot;https://velog.io/@ghd64845/Spring-boot-MyBatis%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;velog.io/@ghd64845/Spring-boot-MyBatis%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603258403294&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Spring-boot : MyBatis를 이용하여 MySQL 연동하기&quot; data-og-description=&quot;MyBatis를 사용하는 이유? 우선 MyBatis를 알기 전에 JDBC를 먼저 알아야한다. 간단하게 JDBC는 Java에서 DB연동하기 위한 API다. 이 JDBC만 사용하게 되면 Java소스 와 Query소스가 겹치게 되고 관리가 어려워&quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@ghd64845/Spring-boot-MyBatis%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0&quot; data-og-url=&quot;https://velog.io/@ghd64845/Spring-boot-MyBatis를-이용하여-MySQL-연동하기&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/T8Tgw/hyHXk1AnyO/q4ygsWjKq5s2xKKe2jCqq1/img.jpg?width=1000&amp;amp;height=662&amp;amp;face=307_182_425_311,https://scrap.kakaocdn.net/dn/cBJeeE/hyHXtc9ADw/VJtZLjczzrf01UkIGsv7Fk/img.jpg?width=1000&amp;amp;height=662&amp;amp;face=307_182_425_311,https://scrap.kakaocdn.net/dn/7AAeT/hyHWm016IB/rBkwkNKSdxII7vBe03lHB1/img.png?width=970&amp;amp;height=847&amp;amp;face=0_0_970_847&quot;&gt;&lt;a href=&quot;https://velog.io/@ghd64845/Spring-boot-MyBatis%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-MySQL-%EC%97%B0%EB%8F%99%ED%95%98%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@ghd64845/Spring-boot-MyBatis%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-MySQL-%EC%97%B0%EB%8F%99%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/T8Tgw/hyHXk1AnyO/q4ygsWjKq5s2xKKe2jCqq1/img.jpg?width=1000&amp;amp;height=662&amp;amp;face=307_182_425_311,https://scrap.kakaocdn.net/dn/cBJeeE/hyHXtc9ADw/VJtZLjczzrf01UkIGsv7Fk/img.jpg?width=1000&amp;amp;height=662&amp;amp;face=307_182_425_311,https://scrap.kakaocdn.net/dn/7AAeT/hyHWm016IB/rBkwkNKSdxII7vBe03lHB1/img.png?width=970&amp;amp;height=847&amp;amp;face=0_0_970_847');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Spring-boot : MyBatis를 이용하여 MySQL 연동하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;MyBatis를 사용하는 이유? 우선 MyBatis를 알기 전에 JDBC를 먼저 알아야한다. 간단하게 JDBC는 Java에서 DB연동하기 위한 API다. 이 JDBC만 사용하게 되면 Java소스 와 Query소스가 겹치게 되고 관리가 어려워&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;따라하다보면 안되는 부분은 필자에 적혀있는거 보고 따라치면 된다.&lt;/p&gt;</description>
      <category>코딩/Spring</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/122</guid>
      <comments>https://code-nen.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 21 Oct 2020 14:31:47 +0900</pubDate>
    </item>
    <item>
      <title>Spring message properties 메시지 설정하는 법</title>
      <link>https://code-nen.tistory.com/121</link>
      <description>&lt;p&gt;spring에서는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러개의 언어를 설정할때, 여러가지 html을 만들지 않으려고 message properties를 지원한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ex)&lt;/p&gt;
&lt;p&gt;index_ko.html&lt;/p&gt;
&lt;p&gt;index_us.html&lt;/p&gt;
&lt;p&gt;index_jp.html&lt;/p&gt;
&lt;p&gt;등등&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러가지 html을 만들기 보다.&lt;/p&gt;
&lt;p&gt;한가지 html에서 properties를 사용하여 여러가지 언어를 지원하는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스프링 부트를 사용하지 않으면 직접 properties를 설정해줘야하는 번거로움이 있다. (필자는 부트를 사용했다. 아닌 사람들을 위해 소스코드 하나를 올려둔다)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600255203823&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Configuration
public class MessageConfig {

    @Bean
    public MessageSource messageSource() {
        ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
        messageSource.setBasenames(&quot;properties가 있는 이름(ex:messages)&quot;);
        messageSource.setDefaultEncoding(&quot;UTF-8&quot;);
        return messageSource;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;여기서 주의할 점은 빈으로 등록한 이름이 반드시 messageSource이어야 한다는 것이다.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스프링 부트를 사용하면 일단 properties 하나를 작성해 보자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uyk8R/btqIYaZpl6B/BWE197QFqoJKckyhCWiz60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uyk8R/btqIYaZpl6B/BWE197QFqoJKckyhCWiz60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uyk8R/btqIYaZpl6B/BWE197QFqoJKckyhCWiz60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuyk8R%2FbtqIYaZpl6B%2FBWE197QFqoJKckyhCWiz60%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0GVcI/btqIPRmOoEb/xFGGAqAZr1bAl7NLX4c1P0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0GVcI/btqIPRmOoEb/xFGGAqAZr1bAl7NLX4c1P0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0GVcI/btqIPRmOoEb/xFGGAqAZr1bAl7NLX4c1P0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0GVcI%2FbtqIPRmOoEb%2FxFGGAqAZr1bAl7NLX4c1P0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 이제 html로 가서 작성하면 된다. 필자는 thymeleaf를 사용했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600255358064&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang=&quot;en&quot; xmlns:th=&quot;http://www.thymeleaf.org&quot;&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p th:text=&quot;#{title}&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 중요한점은 인텔리제이를 사용하거나 이클립스를 사용하거나 properties에 인코딩을 해주어야한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1Uz0s/btqIX3FY2XC/xYqCEpJ7qZumgakRkmdCh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1Uz0s/btqIX3FY2XC/xYqCEpJ7qZumgakRkmdCh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1Uz0s/btqIX3FY2XC/xYqCEpJ7qZumgakRkmdCh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1Uz0s%2FbtqIX3FY2XC%2FxYqCEpJ7qZumgakRkmdCh0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;설정으로 가서 다음과 같이 해주면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;또 한가지더&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDex1s/btqIX30g0lY/QlHckeamOi5OWIkBKjGfiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDex1s/btqIX30g0lY/QlHckeamOi5OWIkBKjGfiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDex1s/btqIX30g0lY/QlHckeamOi5OWIkBKjGfiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDex1s%2FbtqIX30g0lY%2FQlHckeamOi5OWIkBKjGfiK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기에 있는 static은 정적 페이지이다 그러므로 properties가 적용되지 않는다.&lt;/p&gt;
&lt;p&gt;여기서 2시간정도 시간낭비를...ㅠㅠ&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;새삼 스프링부트의 편함을 느낀다..&lt;/p&gt;</description>
      <category>코딩/Spring</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/121</guid>
      <comments>https://code-nen.tistory.com/121#entry121comment</comments>
      <pubDate>Wed, 16 Sep 2020 20:24:58 +0900</pubDate>
    </item>
    <item>
      <title>[oracle] 오라클 8080포트번호 변경 방법,포트번호 변경법</title>
      <link>https://code-nen.tistory.com/120</link>
      <description>&lt;p&gt;오라클에서 사용하는 포트번호가 8080이고, 톰캣에서 사용하는 포트가 8080이므로 톰캣을 실행할때 충돌이 일어난다. 보통은 톰캣의 포트를 변경하면 되지만 필자는 오라클의 포트 번호를 변경하려 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 db를 접속한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;필자는 9090으로 미리 변경했기 때문에 아마 대부분 8080으로 되어 있을 것 이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #1b711d;&quot;&gt;&lt;i&gt;&lt;b&gt;SELECT DBMS_XDB.GETHTTPPORT() FROM DUAL;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B6jRk/btqHzDRlL4a/vBv3HvQNtLSH2KDnmlRxJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B6jRk/btqHzDRlL4a/vBv3HvQNtLSH2KDnmlRxJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B6jRk/btqHzDRlL4a/vBv3HvQNtLSH2KDnmlRxJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB6jRk%2FbtqHzDRlL4a%2FvBv3HvQNtLSH2KDnmlRxJ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그후&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;i&gt;&lt;b&gt;EXEC&amp;nbsp;DBMS_XDB.SETHTTPPORT(원하는&amp;nbsp;포트번호);&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3AFUD/btqHBSs7XVt/GM196b8K89mg4d3Ed6eUlK/img.png&quot; data-image-src=&quot;https://blog.kakaocdn.net/dn/3AFUD/btqHBSs7XVt/GM196b8K89mg4d3Ed6eUlK/img.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;를 입력하면 포트가 변경되었다고 뜬후 다시&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;SELECT DBMS_XDB.GETHTTPPORT() FROM DUAL;&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;이 명령어로 확인해보자!&lt;/p&gt;</description>
      <category>코딩/DB</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/120</guid>
      <comments>https://code-nen.tistory.com/120#entry120comment</comments>
      <pubDate>Mon, 31 Aug 2020 16:08:31 +0900</pubDate>
    </item>
    <item>
      <title>[Spring]  @Autowired 애노테이션</title>
      <link>https://code-nen.tistory.com/119</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스프링 빈에 의존하는 다른 빈을 자동으로 주입하고 싶을때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;스프링을 사용하다보면 많은 빈을 설정하게 되는데 @Autowired를 이용하여 자동 주입을 하는것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyaWAf/btqGuFO9Fky/gvJqpZbFuZk5bddcKaYOFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyaWAf/btqGuFO9Fky/gvJqpZbFuZk5bddcKaYOFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyaWAf/btqGuFO9Fky/gvJqpZbFuZk5bddcKaYOFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyaWAf%2FbtqGuFO9Fky%2FgvJqpZbFuZk5bddcKaYOFk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;@Autowired 애노테이션을 의존 주입 대상에 붙이면 스프링 설정 클래스의 @Bean 메서드에서 의존 주입을 위한 코드를 작성하지 않아도 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EX)&lt;/p&gt;
&lt;pre id=&quot;code_1597130847420&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@Bean
public Member member(){
	Member member = new Member();
    //생성자나 세터 메서드를 사용하지 않아도
    //스프링 컨테이너가 @Autowired를 붙인 필드에
    //자동으로 해당 타입의 빈 객체를 주입한다.
    return member;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>코딩/Java</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/119</guid>
      <comments>https://code-nen.tistory.com/119#entry119comment</comments>
      <pubDate>Tue, 11 Aug 2020 16:27:30 +0900</pubDate>
    </item>
    <item>
      <title>Intellij 인텔리제이 한글 깨짐 해결 방법</title>
      <link>https://code-nen.tistory.com/118</link>
      <description>&lt;p&gt;한글 깨졌을때 방법은&lt;/p&gt;
&lt;p&gt;edit 단에서는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;file -&amp;gt; setting 클릭후&lt;/p&gt;
&lt;p&gt;Editor 에서 file Encodings 클릭후&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dkBCh2/btqGri0sI8D/GaCV6i1j5k2XVqXK4K6pj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dkBCh2/btqGri0sI8D/GaCV6i1j5k2XVqXK4K6pj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dkBCh2/btqGri0sI8D/GaCV6i1j5k2XVqXK4K6pj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdkBCh2%2FbtqGri0sI8D%2FGaCV6i1j5k2XVqXK4K6pj1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;를 해준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 아래가 중요!하다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;help -&amp;gt; Edit Custom VM Options 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eo98bb/btqGqRovjZR/NEbUuqmfxKQLkwKNbt9CQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eo98bb/btqGqRovjZR/NEbUuqmfxKQLkwKNbt9CQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eo98bb/btqGqRovjZR/NEbUuqmfxKQLkwKNbt9CQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feo98bb%2FbtqGqRovjZR%2FNEbUuqmfxKQLkwKNbt9CQ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;맨아래에 &lt;b&gt;-Dfile.encoding=UTF-8&lt;/b&gt; 이것을 추가한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ryADU/btqGqbHzP7H/pw44tk0d8tH3tSpPm0ZpwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ryADU/btqGqbHzP7H/pw44tk0d8tH3tSpPm0ZpwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ryADU/btqGqbHzP7H/pw44tk0d8tH3tSpPm0ZpwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FryADU%2FbtqGqbHzP7H%2Fpw44tk0d8tH3tSpPm0ZpwK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 후 인텔리제이를 재시작 하면 해결된다!&lt;/p&gt;</description>
      <category>IDE</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/118</guid>
      <comments>https://code-nen.tistory.com/118#entry118comment</comments>
      <pubDate>Sun, 9 Aug 2020 19:54:40 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 새로운 뷰 만드는 법</title>
      <link>https://code-nen.tistory.com/117</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6qjeX/btqGewyyjmD/k69VkEgxOHxk4kD5BSLPM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6qjeX/btqGewyyjmD/k69VkEgxOHxk4kD5BSLPM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6qjeX/btqGewyyjmD/k69VkEgxOHxk4kD5BSLPM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6qjeX%2FbtqGewyyjmD%2Fk69VkEgxOHxk4kD5BSLPM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MyButton 이라는 자바 클래스 파일 하나를 생성한다.&lt;/p&gt;
&lt;p&gt;생성후 AppCompatButton를 상속 받는다. (이 클래스를 button으로 만들어주기 위해 상속받는다)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;init라는 메소드를 만들어 그안에서 배경색과 글자색을 지정해주고 dimen이라는 xml파일을 생성해 textsize를 지정해주었다.&lt;/p&gt;
&lt;pre id=&quot;code_1596542173785&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public MyButton(Context context) {
    super(context);

    init(context);
}

public MyButton(Context context, AttributeSet attrs) {
    super(context, attrs);

    init(context);
}

public void init(Context context) {
    setBackgroundColor(Color.CYAN);
    setTextColor(Color.BLACK);

    float textSize = getResources().getDimension(R.dimen.text_size);
    setTextSize(textSize);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdiswf/btqGfswhsPp/lxSVUoxCl412oAinn20eY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdiswf/btqGfswhsPp/lxSVUoxCl412oAinn20eY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdiswf/btqGfswhsPp/lxSVUoxCl412oAinn20eY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcdiswf%2FbtqGfswhsPp%2FlxSVUoxCl412oAinn20eY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 코드는 버튼을 눌렀을때 색깔이 변경되는 코드이다.&lt;/p&gt;
&lt;pre id=&quot;code_1596542237212&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        Log.d(&quot;MyButton&quot;, &quot;onDraw 호출됨&quot;);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        Log.d(&quot;MyButton&quot;, &quot;onTouchEvent 호출됨&quot;);

        int action = event.getAction();
        switch (action) {
            case MotionEvent.ACTION_DOWN:
                setBackgroundColor(Color.BLUE);
                setTextColor(Color.RED);
                break;
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_OUTSIDE:
            case MotionEvent.ACTION_UP:
                setBackgroundColor(Color.CYAN);
                setTextColor(Color.BLACK);
                break;
        }
        invalidate(); //화면에 보이는게 유효하지 않다. 다시 그려주는 함수다.

        return true;
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;후 main_activity.xml 에서는 버튼을 추가해 주어야한다.&lt;/p&gt;
&lt;pre id=&quot;code_1596542349595&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;org.techtown.view.MyButton
        android:id=&quot;@+id/button&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;확인&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintEnd_toEndOf=&quot;parent&quot;
        app:layout_constraintStart_toStartOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot; /&amp;gt;
&amp;lt;/androidx.constraintlayout.widget.ConstraintLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uDHuV/btqGeaPXl75/KqEhgo9RmLHMcP6KWustuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uDHuV/btqGeaPXl75/KqEhgo9RmLHMcP6KWustuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uDHuV/btqGeaPXl75/KqEhgo9RmLHMcP6KWustuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuDHuV%2FbtqGeaPXl75%2FKqEhgo9RmLHMcP6KWustuk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 버튼이 나오는걸 확인할 수 있다.&lt;/p&gt;</description>
      <category>코딩/Android</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/117</guid>
      <comments>https://code-nen.tistory.com/117#entry117comment</comments>
      <pubDate>Tue, 4 Aug 2020 20:59:40 +0900</pubDate>
    </item>
    <item>
      <title>Fragment 로 activity 화면에 보여주기</title>
      <link>https://code-nen.tistory.com/116</link>
      <description>&lt;p&gt;메인 액티비티를 하나 생성.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 액티비티 위에 띄워줄 프래그먼트 생성&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chavZ7/btqF4UtA4rN/h1XIwriRvpa8IKe27SoBd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chavZ7/btqF4UtA4rN/h1XIwriRvpa8IKe27SoBd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chavZ7/btqF4UtA4rN/h1XIwriRvpa8IKe27SoBd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchavZ7%2FbtqF4UtA4rN%2Fh1XIwriRvpa8IKe27SoBd1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;app/res/layout 에서 우클릭 후 new -&amp;gt; layout resource file 클릭후 프래그먼트 생성&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctO73n/btqF5zvIcjS/gu726hoPcr9YnEoKFoYIo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctO73n/btqF5zvIcjS/gu726hoPcr9YnEoKFoYIo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctO73n/btqF5zvIcjS/gu726hoPcr9YnEoKFoYIo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctO73n%2FbtqF5zvIcjS%2Fgu726hoPcr9YnEoKFoYIo1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;f&lt;span style=&quot;color: #333333;&quot;&gt;ragment.java파일 생성 후 코드 입력&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1596011376190&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;```java
package org.techtown.tab;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

public class Fragment1 extends Fragment {
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment1, container, false);
    }
}
```&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;i&gt;&lt;b&gt;여기서 inflater란? xml로 정의된 view를 실제 객체화 시키는 용도이다.&lt;/b&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;ex) 약간 복잡한 구조의 view를 java 코드로 만들게 되면 생성하고 속성을 넣느라 코드가 길어질 수 있는데, 그걸 미리 xml로 만들어 놓고 java코드에서는 inflater를 활용하여 바로 view를 생성할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;메인 엑티비티.java 에서는&lt;/p&gt;
&lt;pre id=&quot;code_1596011408499&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;```java
package org.techtown.tab;

import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.os.Bundle;

import com.google.android.material.tabs.TabLayout;

public class MainActivity extends AppCompatActivity {

    Fragment1 fragment1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fragment1 = new Fragment1();
				getSupportFragmentManager().beginTransaction().replace(R.id.container, fragment1).commit();
                

    }
}
```&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;로 프래그먼트를 메인엑티비티에 띄울 수 있다.&lt;/p&gt;</description>
      <category>코딩/Android</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/116</guid>
      <comments>https://code-nen.tistory.com/116#entry116comment</comments>
      <pubDate>Wed, 29 Jul 2020 17:30:18 +0900</pubDate>
    </item>
    <item>
      <title>안드로이드 Parcelable 의 오브젝트 전달법</title>
      <link>https://code-nen.tistory.com/115</link>
      <description>&lt;p&gt;앱을 만들다 보면 인텐트를 통해 단순히 String, int, boolean 같은 기본 타입 뿐 아니고 커스텀 클래스나 오브젝트를 다른 컴포넌트에 전달해 줘야 할 경우가 많다. 그 경우 단순히 그냥 인텐트에 putExtra() 로는 넣어줄 수가 없다. 안드로이드에서는 그런 경우를 위해 자바의 Serialization 개념과 유사한 Parcelable이라는 클래스가 있다.&lt;/p&gt;
&lt;p&gt;먼저 이런것이 왜 필요한가 살펴보겠다. 예를 들어 다음과 같은 클래스가 있다고 하자.&lt;/p&gt;
&lt;pre id=&quot;code_1595776345699&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class BookData {
  int _id;
  String title;
  String author;
  String publisher;
  int price;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도서관리 앱에서 ListView로 화면에 표시하기 위해 ArrayList에 책들의 정보를 넣어 인텐트로 넘겨주려고 하면 BookData 클래스를 그대로 사용할수는 없다.&lt;/p&gt;
&lt;p&gt;오브젝트를 Parcelable 클래스로 만들어 주려면 android.os.Parcelable 인터페이스를 구현해야 한다. 그러므로 아래와 같이 클래스 정의를 변경한다.&lt;/p&gt;
&lt;pre id=&quot;code_1595776363597&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class BookData implements Parcelable {
  int _id;
  String title;
  String author;
  String publisher;
  int price;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 android.os.Parcelable 인터페이스에 있는 2개의 메소드를 오버라이드 해 줘야만 한다.&lt;/p&gt;
&lt;p&gt;describeContents() - Parcel 하려는 오브젝트의 종류를 정의한다. writeToParcel(Parcel dest, int flags) - 실제 오브젝트 serialization/flattening을 하는 메소드. 오브젝트의 각 엘리먼트를 각각 parcel해줘야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595776384049&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void writeToParcel(Parcel dest, int flags) {
  dest.writeInt(_id);
  dest.writeString(title);
  dest.writeString(author);
  dest.writeString(publisher);
  dest.writeInt(price);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음으로 해야 할 일은 Parcel에서 데이터를 un-marshal/de-serialize하는 단계를 추가해줘야 한다. 그러기 위해서 Parcelable.Creator 타입의 CREATOR라는 변수를 정의해야 한다. 이 변수를 정의하지 않으면 안드로이드는 다음과 같은 익셉션을 발생한다.&lt;/p&gt;
&lt;p&gt;Parcelable protocol requires a Parcelable.Creator object called CREATOR&lt;/p&gt;
&lt;p&gt;아래는 위의 예제인 BookData 클래스를 위한 Parcelable.Creator의 코드이다.&lt;/p&gt;
&lt;pre id=&quot;code_1595776405000&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class CustomCreator implements Parcelable.Creator&amp;lt;BookData&amp;gt; {
  public BookData createFromParcel(Parcel src) {
    return new BookData(src);
  }

  public BookData[] newArray(int size) {
    return new BookData[size];
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BookData.java에 모든 parcel된 데이터를 복구하는 생성자를 정의해 줘야만 한다.&lt;/p&gt;
&lt;p&gt;public BookData(Parcel src) { _id = src.readInt(); title = src.readString(); author = src.readString(); publisher = src.readString(); price = src.readInt(); }&lt;/p&gt;
&lt;p&gt;주의할것은 writeToParcel() 메소드에서 기록한 순서와 동일하게 복구해야만 한다.&lt;/p&gt;
&lt;p&gt;전체 코드는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595776426723&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
public class BookData implements Parcelable {
    private String title;
    private String author;
    private String publisher;
    private String isbn;
    private String description;
    private int price;
    private String photoUrl;

    public BookData() {
    }

    public BookData(Parcel in) {
       readFromParcel(in);
    }

    public BookData(String _title, String _author, String _pub, String _isbn, String _desc, int _price, String _photoUrl) {
         this.title = _title;
         this.author = _author;
         this.publisher = _pub;
         this.isbn = _isbn;
         this.description = _desc;
         this.price = _price;
         this.photoUrl = _photoUrl;
    }

// -------------------------------------------------------------------------
// Getters &amp;amp; Setters section - 각 필드에 대한 get/set 메소드들
// 여기서는 생략했음
// ....
// ....
// -------------------------------------------------------------------------


   public void writeToParcel(Parcel dest, int flags) {
           dest.writeString(title);
           dest.writeString(author);
           dest.writeString(publisher);
           dest.writeString(isbn);
           dest.writeString(description);
           dest.writeString(photoUrl);
           dest.writeInt(price);
   }

   private void readFromParcel(Parcel in){
           title = in.readString();
           author = in.readString();
           publisher = in.readString();
           isbn = in.readString();
           description = in.readString();
           photoUrl = in.readString();
           price = in.readInt();
   }

   public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public BookData createFromParcel(Parcel in) {
             return new BookData(in);
       }

       public BookData[] newArray(int size) {
            return new BookData[size];
       }
   };
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Parcelable 오브젝트를 인텐트로 보내는 경우는 다음과 같이 하면 된다.&lt;/p&gt;
&lt;p&gt;BookData book = new BookData(); // 각 필드에 값을 넣어줌&lt;/p&gt;
&lt;pre id=&quot;code_1595776440999&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Intent i = new Intent(this, ShowBook.class);
i.putExtra(&quot;bookInfo&quot;, book);
startActivity(i);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;인텐트를 받을 ShowBook.java에서는 다음과 같이 Parcelable 오브젝트를 복구하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1595776467117&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Bundle bundle = getIntent().getExtras();
BookData book = bundle.getParcelable(&quot;bookInfo&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ArrayList인 경우는 Intent를 만들어 보내는 쪽에서는 다음과 같이 하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1595776482317&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ArrayList&amp;lt;BookData&amp;gt; bookList = new ArrayList&amp;lt;BookData&amp;gt;();
...
// bookList.add() 메소드를 사용해서 bookList에 BookData 엔트리를 추가
...

Intent i = new Intent(this, BookList.class);
i.putParcelableArrayListExtra(&quot;myBooks&quot;, bookList);
startActivity(i);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;BookList.java (인텐트에 의해 호출되는 액티비티)에서는 다음과 같이 오브젝트를 복구하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595776502191&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ArrayList&amp;lt;BookData&amp;gt; bookList;
...
Intent i = getIntent();
bookList = i.getParcelableArrayListExtra(&quot;myBooks&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;출처 :&amp;nbsp;&lt;a href=&quot;https://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html&quot;&gt;https://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1595776525034&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Parcelable을 사용한 오브젝트 전달 (Object serialization using Parcelable)&quot; data-og-description=&quot;앱을 만들다 보면 인텐트를 통해 단순히 String, int, boolean 같은 기본 타입 뿐 아니고 커스텀 클래스나 오브젝트를 다른 컴포넌트에 전달해 줘야 할 경우가 많다. 그 경우 단순히 그냥 인텐트에 putE&quot; data-og-host=&quot;arsviator.blogspot.com&quot; data-og-source-url=&quot;https://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html&quot; data-og-url=&quot;https://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arsviator.blogspot.com/2010/10/parcelable%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%B8%8C%EC%A0%9D%ED%8A%B8-%EC%A0%84%EB%8B%AC-object.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Parcelable을 사용한 오브젝트 전달 (Object serialization using Parcelable)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;앱을 만들다 보면 인텐트를 통해 단순히 String, int, boolean 같은 기본 타입 뿐 아니고 커스텀 클래스나 오브젝트를 다른 컴포넌트에 전달해 줘야 할 경우가 많다. 그 경우 단순히 그냥 인텐트에 putE&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;arsviator.blogspot.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아주 좋게 설명이 되어 있어 가져왔다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오브젝트를 만들 클래스 생성 후 다음과 같이 입력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595776584206&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.techtown.parcelable;

import android.os.Parcel;
import android.os.Parcelable;

public class SimpleData implements Parcelable {

    int code;
    String message;

    public SimpleData(int code, String message) {
        this.code = code;
        this.message = message;
    }

    public SimpleData(Parcel src) {
        code = src.readInt();
        message = src.readString();
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
        public SimpleData createFromParcel(Parcel in) {
            return new SimpleData(in);
        }

        public SimpleData[] newArray(int size) {
            return new SimpleData[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel parcel, int i) {
        parcel.writeInt(code);
        parcel.writeString(message);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 후&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오브젝트 형태로 보내기위해 Parcelable이 상속되어 있는 SimplleData함수에 값을 입력 후&lt;/p&gt;
&lt;pre id=&quot;code_1595776617262&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.techtown.parcelable;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
                SimpleData data = new SimpleData(200, &quot;OK&quot;);
                intent.putExtra(&quot;data&quot;, data);
                startActivity(intent);
            }
        });
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 받아왔다.&lt;/p&gt;
&lt;pre id=&quot;code_1595776702571&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package org.techtown.parcelable;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MenuActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

        Intent intent = getIntent();
        processIntent(intent);
    }

    public void processIntent(Intent intent) {
        if (intent != null) {
            Bundle bundle = intent.getExtras();
            SimpleData data = bundle.getParcelable(&quot;data&quot;);
            if (data != null) {
                Toast.makeText(this, &quot;전달받은 객체 : &quot; + data.code + &quot;, &quot; + data.message, Toast.LENGTH_LONG).show();
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;한번 Parcelable을 쓰지않고 해봤는데 당연히 안되었다. 반드시 오브젝트를 Intent로 넘길때는 Parcelable을 사용하도록하자.&lt;/p&gt;</description>
      <category>코딩/Android</category>
      <category>Intent</category>
      <category>Java</category>
      <category>parcelable</category>
      <category>안드로이드</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/115</guid>
      <comments>https://code-nen.tistory.com/115#entry115comment</comments>
      <pubDate>Mon, 27 Jul 2020 00:19:42 +0900</pubDate>
    </item>
    <item>
      <title>javascript json파일 읽어오기</title>
      <link>https://code-nen.tistory.com/114</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;심심해서 검색하다가 롤 캐릭터와 캐릭터의 정보를 가지고 있는 json형태의 파일을 찾았다.&lt;/p&gt;
&lt;p&gt;여기서 json이란? -&amp;gt; &lt;a href=&quot;https://ko.wikipedia.org/wiki/JSON&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;요기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1595079537056&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;JSON - 위키백과, 우리 모두의 백과사전&quot; data-og-description=&quot;위키백과, 우리 모두의 백과사전. JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍( attribute&amp;ndash;value pairs and array data types (or any other serializable value)) 또는 &amp;quot;키-값 쌍&amp;quot;으로 이루어진 데이터 오브젝트를&quot; data-og-host=&quot;ko.wikipedia.org&quot; data-og-source-url=&quot;https://ko.wikipedia.org/wiki/JSON&quot; data-og-url=&quot;https://ko.wikipedia.org/wiki/JSON&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cmfTCg/hyGPdQi4fE/R1gkYzqSiF82g9SS285J20/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/qQvKI/hyGNEPxfPh/kRv3FUbo4XthA6egRaWVN0/img.jpg?width=220&amp;amp;height=293&amp;amp;face=92_60_121_91&quot;&gt;&lt;a href=&quot;https://ko.wikipedia.org/wiki/JSON&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ko.wikipedia.org/wiki/JSON&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cmfTCg/hyGPdQi4fE/R1gkYzqSiF82g9SS285J20/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/qQvKI/hyGNEPxfPh/kRv3FUbo4XthA6egRaWVN0/img.jpg?width=220&amp;amp;height=293&amp;amp;face=92_60_121_91');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;JSON - 위키백과, 우리 모두의 백과사전&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;위키백과, 우리 모두의 백과사전. JSON(제이슨[1], JavaScript Object Notation)은 속성-값 쌍( attribute&amp;ndash;value pairs and array data types (or any other serializable value)) 또는 &quot;키-값 쌍&quot;으로 이루어진 데이터 오브젝트를&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;ko.wikipedia.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;내가 찾은 파일이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://ddragon.leagueoflegends.com/cdn/10.14.1/data/en_US/&quot;&gt;http://ddragon.leagueoflegends.com/cdn/10.14.1/data/en_US/&lt;/a&gt;&lt;a href=&quot;http://ddragon.leagueoflegends.com/cdn/10.14.1/data/en_US/champion.json&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;champion.json&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 여기에 들어가면 다양한 정보들이 있다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://developer.riotgames.com/docs/lol#data-dragon_champions&quot;&gt;https://developer.riotgames.com/docs/lol#data-dragon_champions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1595079560835&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Riot Developer Portal&quot; data-og-description=&quot;League of Legends Overview This set of documentation will help you gain a better understanding of how to use the APIs and developer resources related to League of Legends. It is designed to help you begin developing your own tools and products for the Leag&quot; data-og-host=&quot;developer.riotgames.com&quot; data-og-source-url=&quot;https://developer.riotgames.com/docs/lol#data-dragon_champions&quot; data-og-url=&quot;https://developer.riotgames.com/docs/lol#data-dragon_champions&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.riotgames.com/docs/lol#data-dragon_champions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.riotgames.com/docs/lol#data-dragon_champions&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Riot Developer Portal&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;League of Legends Overview This set of documentation will help you gain a better understanding of how to use the APIs and developer resources related to League of Legends. It is designed to help you begin developing your own tools and products for the Leag&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;developer.riotgames.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;쨋든, json 파일을 javascript로 읽어와 보자!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595079649654&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &amp;lt;button onclick=&quot;click()&quot;&amp;gt;click&amp;lt;/button&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이러한 버튼태그를 생성!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595079677114&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; function click(){
            var ourRequest = new XMLHttpRequest();
            ourRequest.open('GET','http://ddragon.leagueoflegends.com/cdn/10.14.1/data/en_US/champion.json');
       	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;XMLHttpRequest를 생성하여 ourRequest 인스턴스를 생성한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 json 파일을 get 방식으로 open()함수 사용!&lt;/p&gt;
&lt;pre id=&quot;code_1595079743251&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ourRequest.send();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;send()함수를 사용하여 요청하고,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1595079830425&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  ourRequest.onload = function(){
                console.log(ourRequest.responseText);
            }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;를 추가한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 클릭을 해보면!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0IPqY/btqFND5L3YE/4JmwN0naOfeIDEu1ULZkKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0IPqY/btqFND5L3YE/4JmwN0naOfeIDEu1ULZkKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0IPqY/btqFND5L3YE/4JmwN0naOfeIDEu1ULZkKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0IPqY%2FbtqFND5L3YE%2F4JmwN0naOfeIDEu1ULZkKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;json 파일을 읽어 온 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/JavaScript</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/114</guid>
      <comments>https://code-nen.tistory.com/114#entry114comment</comments>
      <pubDate>Sat, 18 Jul 2020 22:49:00 +0900</pubDate>
    </item>
    <item>
      <title>(2) 머신러닝을 사용하여 닮은꼴 연예인 학습시키기</title>
      <link>https://code-nen.tistory.com/113</link>
      <description>&lt;p&gt;머신러닝이란? -&amp;gt; &lt;a href=&quot;https://happywww.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;요기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594708043646&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;구글 Teachable Machine 머신러닝 무료 서비스 공개 (사용법 간단)&quot; data-og-description=&quot;&amp;nbsp;요즘 핫하게 사용되고 있는 머신러닝을 구글에서 일반인들도 쉽게 사용할 수 있도록 공개했습니다. &amp;nbsp;머신러닝이란 말 그대로 기계학습을 말합니다. 기계라고 하면 일반적으로 컴퓨터를 생각�&quot; data-og-host=&quot;happywww.tistory.com&quot; data-og-source-url=&quot;https://happywww.tistory.com/26&quot; data-og-url=&quot;https://happywww.tistory.com/26&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d8Q8Wa/hyGMyzOWhJ/SSOBYV35AIWxg3j2SkV8Ak/img.png?width=612&amp;amp;height=438&amp;amp;face=0_0_612_438,https://scrap.kakaocdn.net/dn/cV4Xk0/hyGLcSGK1Z/h1kmoWJ0BvBHwi6qYY6RWk/img.png?width=612&amp;amp;height=438&amp;amp;face=0_0_612_438,https://scrap.kakaocdn.net/dn/m8fFO/hyGK5svkcP/mzLrIvDj5mItY77fOfiwh0/img.png?width=1041&amp;amp;height=702&amp;amp;face=170_232_326_275&quot;&gt;&lt;a href=&quot;https://happywww.tistory.com/26&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://happywww.tistory.com/26&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d8Q8Wa/hyGMyzOWhJ/SSOBYV35AIWxg3j2SkV8Ak/img.png?width=612&amp;amp;height=438&amp;amp;face=0_0_612_438,https://scrap.kakaocdn.net/dn/cV4Xk0/hyGLcSGK1Z/h1kmoWJ0BvBHwi6qYY6RWk/img.png?width=612&amp;amp;height=438&amp;amp;face=0_0_612_438,https://scrap.kakaocdn.net/dn/m8fFO/hyGK5svkcP/mzLrIvDj5mItY77fOfiwh0/img.png?width=1041&amp;amp;height=702&amp;amp;face=170_232_326_275');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;구글 Teachable Machine 머신러닝 무료 서비스 공개 (사용법 간단)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;요즘 핫하게 사용되고 있는 머신러닝을 구글에서 일반인들도 쉽게 사용할 수 있도록 공개했습니다. &amp;nbsp;머신러닝이란 말 그대로 기계학습을 말합니다. 기계라고 하면 일반적으로 컴퓨터를 생각�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;happywww.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://teachablemachine.withgoogle.com/&quot;&gt;https://teachablemachine.withgoogle.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594708075363&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Teachable Machine&quot; data-og-description=&quot;Train a computer to recognize your own images, sounds, &amp;amp; poses. A fast, easy way to create machine learning models for your sites, apps, and more &amp;ndash; no expertise or coding required.&quot; data-og-host=&quot;teachablemachine.withgoogle.com&quot; data-og-source-url=&quot;https://teachablemachine.withgoogle.com/&quot; data-og-url=&quot;https://teachablemachine.withgoogle.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdtDyL/hyGLeXf2vP/jClaBbJHNXlFvlIhUCsLrK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=181_465_241_530,https://scrap.kakaocdn.net/dn/elM6gZ/hyGMyGAG93/oTy74PckKqxoixGIriAKwk/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=181_465_241_530&quot;&gt;&lt;a href=&quot;https://teachablemachine.withgoogle.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://teachablemachine.withgoogle.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdtDyL/hyGLeXf2vP/jClaBbJHNXlFvlIhUCsLrK/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=181_465_241_530,https://scrap.kakaocdn.net/dn/elM6gZ/hyGMyGAG93/oTy74PckKqxoixGIriAKwk/img.jpg?width=1200&amp;amp;height=675&amp;amp;face=181_465_241_530');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Teachable Machine&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Train a computer to recognize your own images, sounds, &amp;amp; poses. A fast, easy way to create machine learning models for your sites, apps, and more &amp;ndash; no expertise or coding required.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;teachablemachine.withgoogle.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구글에서 제공하는 머신러닝 페이지 이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우리는 이 teachable machine을 사용하여 연예인 사진을 학습 시킬 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuVt1k/btqFD6UmUJi/SoeneNBnXWRsVqrK7T73Ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuVt1k/btqFD6UmUJi/SoeneNBnXWRsVqrK7T73Ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuVt1k/btqFD6UmUJi/SoeneNBnXWRsVqrK7T73Ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuVt1k%2FbtqFD6UmUJi%2FSoeneNBnXWRsVqrK7T73Ck%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;접속을 하여 Get Started 클릭&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l0MC7/btqFElKw5qF/ymTko5zBcG8hJVFvH4NpQ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l0MC7/btqFElKw5qF/ymTko5zBcG8hJVFvH4NpQ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l0MC7/btqFElKw5qF/ymTko5zBcG8hJVFvH4NpQ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl0MC7%2FbtqFElKw5qF%2FymTko5zBcG8hJVFvH4NpQ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사진을 학습 시키기 위하여 Image Project를 클릭&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;소리도 학습시킬 수 있고 모션캡쳐도 학습 시킬 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xDbQr/btqFCpmTn57/PG2d0kVLS1c8WCeznKKAa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xDbQr/btqFCpmTn57/PG2d0kVLS1c8WCeznKKAa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xDbQr/btqFCpmTn57/PG2d0kVLS1c8WCeznKKAa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxDbQr%2FbtqFCpmTn57%2FPG2d0kVLS1c8WCeznKKAa1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;upload를 클릭하여 각 이름에 맞는 파일들을 복사하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b56PMv/btqFCpHaajH/UrbeqkhdnvHAVo6pPIECGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b56PMv/btqFCpHaajH/UrbeqkhdnvHAVo6pPIECGk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b56PMv/btqFCpHaajH/UrbeqkhdnvHAVo6pPIECGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb56PMv%2FbtqFCpHaajH%2FUrbeqkhdnvHAVo6pPIECGk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;먼저 연습으로 두 연예인만 학습 시켜보자!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAN6el/btqFCouHjql/qFOofTA0ALg5Klwwk3QpE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAN6el/btqFCouHjql/qFOofTA0ALg5Klwwk3QpE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAN6el/btqFCouHjql/qFOofTA0ALg5Klwwk3QpE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAN6el%2FbtqFCouHjql%2FqFOofTA0ALg5Klwwk3QpE0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Train Model 클릭&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/loskr/btqFDwMzQRj/7lT3AvG6Cb8tpXtVT5Adl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/loskr/btqFDwMzQRj/7lT3AvG6Cb8tpXtVT5Adl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/loskr/btqFDwMzQRj/7lT3AvG6Cb8tpXtVT5Adl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Floskr%2FbtqFDwMzQRj%2F7lT3AvG6Cb8tpXtVT5Adl0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 하여 이미지를 넣어 누가 더 닮았는지 퍼센트로 알려준다.&lt;/p&gt;
&lt;p&gt;이제 이미지 파일을 전부 넣어보자!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;50명의 연예인을 전부 다 넣었다.. 후....&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boC396/btqFDwlt9Gi/6PawyGcQj0jWfOtA31olsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boC396/btqFDwlt9Gi/6PawyGcQj0jWfOtA31olsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boC396/btqFDwlt9Gi/6PawyGcQj0jWfOtA31olsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboC396%2FbtqFDwlt9Gi%2F6PawyGcQj0jWfOtA31olsK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 학습을 시키자!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;export your model을 클릭한다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yOiQM/btqFDbWcbyi/SxKZi573jhkDJEijsa2dyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yOiQM/btqFDbWcbyi/SxKZi573jhkDJEijsa2dyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yOiQM/btqFDbWcbyi/SxKZi573jhkDJEijsa2dyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyOiQM%2FbtqFDbWcbyi%2FSxKZi573jhkDJEijsa2dyK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;후 upload를 클릭하여 클라우드에 저장하여 저장한 주소를 가져오도록 하여 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eh9MRT/btqFGNM7Zmc/jFfTNJ4LIfizQZBaXpfKV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eh9MRT/btqFGNM7Zmc/jFfTNJ4LIfizQZBaXpfKV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eh9MRT/btqFGNM7Zmc/jFfTNJ4LIfizQZBaXpfKV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feh9MRT%2FbtqFGNM7Zmc%2FjFfTNJ4LIfizQZBaXpfKV0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;라고 적혀있는곳 카피!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;카피를 하여 body태그 안에 붙여 넣어준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VjSuE/btqFFVdRhE6/EEo1xXoKEQSAtzhyGujIyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VjSuE/btqFFVdRhE6/EEo1xXoKEQSAtzhyGujIyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VjSuE/btqFFVdRhE6/EEo1xXoKEQSAtzhyGujIyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVjSuE%2FbtqFFVdRhE6%2FEEo1xXoKEQSAtzhyGujIyK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 페이지를 실행하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWqab2/btqFGyCG5j6/r0roEnck9sfQKdgkrQacdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWqab2/btqFGyCG5j6/r0roEnck9sfQKdgkrQacdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWqab2/btqFGyCG5j6/r0roEnck9sfQKdgkrQacdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWqab2%2FbtqFGyCG5j6%2Fr0roEnck9sfQKdgkrQacdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;start를 누르면 웹캠이 켜지며 밑에 숫자들이 움직인다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2Ck8P/btqFGOedyZD/tGCDOz7btnsJ46J3LZkc0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2Ck8P/btqFGOedyZD/tGCDOz7btnsJ46J3LZkc0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2Ck8P/btqFGOedyZD/tGCDOz7btnsJ46J3LZkc0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2Ck8P%2FbtqFGOedyZD%2FtGCDOz7btnsJ46J3LZkc0K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩/머신러닝</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/113</guid>
      <comments>https://code-nen.tistory.com/113#entry113comment</comments>
      <pubDate>Tue, 14 Jul 2020 16:15:38 +0900</pubDate>
    </item>
    <item>
      <title>(1) Python으로 웹상의 이미지 가져오기</title>
      <link>https://code-nen.tistory.com/112</link>
      <description>&lt;p&gt;Python으로 이미지를 크롤링 하는 방법은 -&amp;gt; &lt;a href=&quot;https://code-nen.tistory.com/111&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;요기&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594649791900&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Python 네이버 실검 크롤링&quot; data-og-description=&quot;네이버 실시간 검색어를 크롤링 해보자! 하고 해보고 있는데... beautifulsoup 라이브러리를 다운받은 후 bs4가 없기 때문에 터미널 창에 -&amp;gt;pip install bs4 를 사용하여 다운 받았다. 이제 한번 써보자! spa&quot; data-og-host=&quot;code-nen.tistory.com&quot; data-og-source-url=&quot;https://code-nen.tistory.com/111&quot; data-og-url=&quot;https://code-nen.tistory.com/111&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4m1qs/hyGK3nb98K/CXZ0BF3J8EQ8jnpsO4QzQ0/img.png?width=800&amp;amp;height=433&amp;amp;face=0_0_800_433,https://scrap.kakaocdn.net/dn/bdQ5gZ/hyGK2u3Y7R/GCNANz2cvGHHik7SAksDok/img.png?width=800&amp;amp;height=433&amp;amp;face=0_0_800_433,https://scrap.kakaocdn.net/dn/fxjt6/hyGK5L4NuF/mVyJAEdz5SAhPcjUpXUjJk/img.png?width=1920&amp;amp;height=1040&amp;amp;face=0_0_1920_1040&quot;&gt;&lt;a href=&quot;https://code-nen.tistory.com/111&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code-nen.tistory.com/111&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4m1qs/hyGK3nb98K/CXZ0BF3J8EQ8jnpsO4QzQ0/img.png?width=800&amp;amp;height=433&amp;amp;face=0_0_800_433,https://scrap.kakaocdn.net/dn/bdQ5gZ/hyGK2u3Y7R/GCNANz2cvGHHik7SAksDok/img.png?width=800&amp;amp;height=433&amp;amp;face=0_0_800_433,https://scrap.kakaocdn.net/dn/fxjt6/hyGK5L4NuF/mVyJAEdz5SAhPcjUpXUjJk/img.png?width=1920&amp;amp;height=1040&amp;amp;face=0_0_1920_1040');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Python 네이버 실검 크롤링&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;네이버 실시간 검색어를 크롤링 해보자! 하고 해보고 있는데... beautifulsoup 라이브러리를 다운받은 후 bs4가 없기 때문에 터미널 창에 -&amp;gt;pip install bs4 를 사용하여 다운 받았다. 이제 한번 써보자! spa&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;code-nen.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594649848571&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from google_images_download import google_images_download

response = google_images_download.googleimagesdownload()

arguments = {&quot;keywords&quot;:&quot;이미지 검색 이름&quot;,&quot;limit&quot;:60,&quot;print_urls&quot;:True,&quot;format&quot;:&quot;jpg&quot;}
paths = response.download(arguments)
print(paths)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 코드를 이용하여 원하는 이미지를 다운을 받자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct7LzB/btqFCogvGpU/5rT22ufa01NeW34SULhKRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct7LzB/btqFCogvGpU/5rT22ufa01NeW34SULhKRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct7LzB/btqFCogvGpU/5rT22ufa01NeW34SULhKRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct7LzB%2FbtqFCogvGpU%2F5rT22ufa01NeW34SULhKRk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcAl8q/btqFEkjUTL6/I1SLwVvKU67ufjFTA4QXo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcAl8q/btqFEkjUTL6/I1SLwVvKU67ufjFTA4QXo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcAl8q/btqFEkjUTL6/I1SLwVvKU67ufjFTA4QXo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcAl8q%2FbtqFEkjUTL6%2FI1SLwVvKU67ufjFTA4QXo1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;너무많다.. ㅠㅠ 분명 한꺼번에 이미지 크롤링을 할 수 있을텐데, 모르겠으니 무식하게 한명씩 이미지를 가져왔다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 이미지에서 인물 얼굴 외에 사진이 들어가 있거나 다른사람 또는, 전신사진이 나온건 삭제 하도록 한다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;일단 이걸로 닮은꼴을 위한 연예인 사진은 싹 가져왔다!!&lt;/p&gt;</description>
      <category>코딩/머신러닝</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/112</guid>
      <comments>https://code-nen.tistory.com/112#entry112comment</comments>
      <pubDate>Mon, 13 Jul 2020 23:19:41 +0900</pubDate>
    </item>
    <item>
      <title>Python 네이버 실검 크롤링</title>
      <link>https://code-nen.tistory.com/111</link>
      <description>&lt;p&gt;네이버 실시간 검색어를 크롤링 해보자! 하고 해보고 있는데...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;beautifulsoup 라이브러리를 다운받은 후 bs4가 없기 때문에 터미널 창에&lt;/p&gt;
&lt;p&gt;-&amp;gt;pip install bs4&lt;/p&gt;
&lt;p&gt;를 사용하여 다운 받았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 한번 써보자!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5poge/btqFzAIyicq/18N5onMJX2rwKKI7Mt6C2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5poge/btqFzAIyicq/18N5onMJX2rwKKI7Mt6C2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5poge/btqFzAIyicq/18N5onMJX2rwKKI7Mt6C2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5poge%2FbtqFzAIyicq%2F18N5onMJX2rwKKI7Mt6C2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;span태그에 있는 것들이 정상적으로 나왔다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 네이버에 있는 실검을 가져와야한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u3P5f/btqFzBncydV/YGVy4CYLF0HIOCKNNs5581/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u3P5f/btqFzBncydV/YGVy4CYLF0HIOCKNNs5581/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u3P5f/btqFzBncydV/YGVy4CYLF0HIOCKNNs5581/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu3P5f%2FbtqFzBncydV%2FYGVy4CYLF0HIOCKNNs5581%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;class = keyword고 태그가 span태그 이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7q9sy/btqFzc2tTwZ/muSakFdk3YWi1NqkZBhslk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7q9sy/btqFzc2tTwZ/muSakFdk3YWi1NqkZBhslk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7q9sy/btqFzc2tTwZ/muSakFdk3YWi1NqkZBhslk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7q9sy%2FbtqFzc2tTwZ%2FmuSakFdk3YWi1NqkZBhslk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변경 후 실행 하였지만 아무것도 나오지 않았다.. 왜 안될까? 하고 검색을 해보던 중.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.inflearn.com/questions/22012&quot;&gt;https://www.inflearn.com/questions/22012&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594461280836&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;네이버 검색 순위 크롤링 관련 - 인프런&quot; data-og-description=&quot;질문 - 네이버 검색 순위 크롤링 관련 lists의 사이즈가 0입니다. 제가 혹시 간과한 부분이 있는지 여쭙습니다. 참고로 status code는 200, bs 변수에도 정상적으로 값이 할당되는듯합니다. 감사합니다.&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/questions/22012&quot; data-og-url=&quot;https://www.inflearn.com/questions/22012&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/mWNu2/hyGIoGauld/C7KU01z8wZp8mtuuS0ahdK/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/ibw18/hyGJQ8Tw7V/CDRNWcMdfaHiCJ5qQlXEe1/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/saoiY/hyGJLGvpDI/atEmItovn3RF6L5snYfQWk/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/questions/22012&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/questions/22012&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/mWNu2/hyGIoGauld/C7KU01z8wZp8mtuuS0ahdK/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/ibw18/hyGJQ8Tw7V/CDRNWcMdfaHiCJ5qQlXEe1/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/saoiY/hyGJLGvpDI/atEmItovn3RF6L5snYfQWk/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;&gt;네이버 검색 순위 크롤링 관련 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;질문 - 네이버 검색 순위 크롤링 관련 lists의 사이즈가 0입니다. 제가 혹시 간과한 부분이 있는지 여쭙습니다. 참고로 status code는 200, bs 변수에도 정상적으로 값이 할당되는듯합니다. 감사합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 글이 있었다. 즉, 2020-01-17 부로 네이버 실검이 ajax통신 방식으로 변경 되었다는거다. 해당 데이터가 html에 직접 뿌려주는걸 받아와서 쓰면 위 코드가 정상적으로 작동하지만 ajax방식으로 변경됨에 따라 위 코드로 실검이 가져와지지 않는 것 이였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;주소창 아래에 친절히 수정코드도 있어 참고를 해보았다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 아래 방법은&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://jaeho0613.tistory.com/112&quot;&gt;https://jaeho0613.tistory.com/112&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1594462482037&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Python Crawling] - 네이버 실검 크롤링 #1&quot; data-og-description=&quot;현재 네이버 실시간 검색어 크롤링 방법이 달라졌다. 유튜브, 블로그 등에 많은 예제가 있지만 현재는 네이버 실시간 검색어가 동적으로 정보를 받게 바뀌어서 기존 예제들로 실시간 검색어를 �&quot; data-og-host=&quot;jaeho0613.tistory.com&quot; data-og-source-url=&quot;https://jaeho0613.tistory.com/112&quot; data-og-url=&quot;https://jaeho0613.tistory.com/112&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bUMjqX/hyGIwdaQXm/UKmzygVKoOuDS4mokJvFJk/img.png?width=728&amp;amp;height=90&amp;amp;face=0_0_728_90,https://scrap.kakaocdn.net/dn/tYmjY/hyGIozpUJb/RClElVgDJj6j4fY6jsDjyk/img.png?width=728&amp;amp;height=90&amp;amp;face=0_0_728_90,https://scrap.kakaocdn.net/dn/ftQe7/hyGIqRvt5v/dV7g3p7bM8XqSErwCJ6Do0/img.png?width=303&amp;amp;height=389&amp;amp;face=0_0_303_389&quot;&gt;&lt;a href=&quot;https://jaeho0613.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://jaeho0613.tistory.com/112&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bUMjqX/hyGIwdaQXm/UKmzygVKoOuDS4mokJvFJk/img.png?width=728&amp;amp;height=90&amp;amp;face=0_0_728_90,https://scrap.kakaocdn.net/dn/tYmjY/hyGIozpUJb/RClElVgDJj6j4fY6jsDjyk/img.png?width=728&amp;amp;height=90&amp;amp;face=0_0_728_90,https://scrap.kakaocdn.net/dn/ftQe7/hyGIqRvt5v/dV7g3p7bM8XqSErwCJ6Do0/img.png?width=303&amp;amp;height=389&amp;amp;face=0_0_303_389');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Python Crawling] - 네이버 실검 크롤링 #1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;현재 네이버 실시간 검색어 크롤링 방법이 달라졌다. 유튜브, 블로그 등에 많은 예제가 있지만 현재는 네이버 실시간 검색어가 동적으로 정보를 받게 바뀌어서 기존 예제들로 실시간 검색어를 �&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;jaeho0613.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;이곳을 참고 하였다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bh1vy/btqFzc2udDW/k5OL93kkxlBjc6n3kqpWOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bh1vy/btqFzc2udDW/k5OL93kkxlBjc6n3kqpWOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bh1vy/btqFzc2udDW/k5OL93kkxlBjc6n3kqpWOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBh1vy%2FbtqFzc2udDW%2Fk5OL93kkxlBjc6n3kqpWOk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1594461869276&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests
from bs4 import BeautifulSoup
from urllib.request import urlopen

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36'}
url = 'https://datalab.naver.com/keyword/realtimeList.naver?where=main'
res = requests.get(url, headers = headers)
soup = BeautifulSoup(res.content, 'html.parser')
data = soup.select('span.item_title')
for item in data:
    print(item.get_text())&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 방법과&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인프런에서 나온 방법으로는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEQHtN/btqFAqE1zKA/CAkW56Kh5XKvkySokALYa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEQHtN/btqFAqE1zKA/CAkW56Kh5XKvkySokALYa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEQHtN/btqFAqE1zKA/CAkW56Kh5XKvkySokALYa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEQHtN%2FbtqFAqE1zKA%2FCAkW56Kh5XKvkySokALYa1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저 주소로 들어가보니&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1RQKL/btqFAOMotYT/SVKTt2DEbRqOJrjcKpfDa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1RQKL/btqFAOMotYT/SVKTt2DEbRqOJrjcKpfDa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1RQKL/btqFAOMotYT/SVKTt2DEbRqOJrjcKpfDa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1RQKL%2FbtqFAOMotYT%2FSVKTt2DEbRqOJrjcKpfDa0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 받아오고 있었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 json에서 data의 항목의 값만 출력&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLnDuD/btqFz2LpyFx/p5jGKpbH9Ks8mYrzYzjQ60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLnDuD/btqFz2LpyFx/p5jGKpbH9Ks8mYrzYzjQ60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLnDuD/btqFz2LpyFx/p5jGKpbH9Ks8mYrzYzjQ60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLnDuD%2FbtqFz2LpyFx%2Fp5jGKpbH9Ks8mYrzYzjQ60%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAf1xa/btqFzcVKjHN/qb6REmyQHpKk2gC8uShzd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAf1xa/btqFzcVKjHN/qb6REmyQHpKk2gC8uShzd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAf1xa/btqFzcVKjHN/qb6REmyQHpKk2gC8uShzd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAf1xa%2FbtqFzcVKjHN%2Fqb6REmyQHpKk2gC8uShzd0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터 값만 출력하고 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vNwSo/btqFz1Ms7Xo/NP2CFCxW9k7ziYfH5zs9k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vNwSo/btqFz1Ms7Xo/NP2CFCxW9k7ziYfH5zs9k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vNwSo/btqFz1Ms7Xo/NP2CFCxW9k7ziYfH5zs9k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvNwSo%2FbtqFz1Ms7Xo%2FNP2CFCxW9k7ziYfH5zs9k0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;여기서 rank 는 1, keyword 는 요요미, keyword_synonyms 는 []이렇게 되어 있다. 여기서 나는 keyword를 사용하여 값을 가져올 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cYR3tn/btqFzHAIsqR/QBPYxqcNo27eJc3849UzB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cYR3tn/btqFzHAIsqR/QBPYxqcNo27eJc3849UzB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cYR3tn/btqFzHAIsqR/QBPYxqcNo27eJc3849UzB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcYR3tn%2FbtqFzHAIsqR%2FQBPYxqcNo27eJc3849UzB1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;keyword값만 확실히 가져왔다.&lt;/p&gt;
&lt;p&gt;사실상 이 방법은 Beautifulsoup라이브러리를 사용하지 않고 json데이터를 직접 가져온 것 이다.&lt;/p&gt;
&lt;pre id=&quot;code_1594462796858&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import requests

json = requests.get(&quot;https://www.naver.com/srchrank?frm=main&quot;).json()
# print(json)

ranks = json.get(&quot;data&quot;)
# print(ranks)

for r in ranks:
    keyword = r.get(&quot;keyword&quot;)
    print(keyword)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;따라서 크롤링은 맨 위에 방법으로 가져오는게 맞는거 같다.&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <category>Ajax</category>
      <category>Python</category>
      <category>네이버 실검</category>
      <category>네이버 실검 크롤링</category>
      <category>크롤링</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/111</guid>
      <comments>https://code-nen.tistory.com/111#entry111comment</comments>
      <pubDate>Sat, 11 Jul 2020 19:16:06 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 pickle 모듈</title>
      <link>https://code-nen.tistory.com/110</link>
      <description>&lt;p&gt;&lt;b&gt;pickle 모듈이란?&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;텍스트 이외의 자료형을 파일로 저장하기 위해 pickle이라는 모듈을 사용하여 파일을 저장한다.&lt;/li&gt;
&lt;li&gt;pickle은 객체의 형태를 그대로 유지하면서 파일을 저장하고 불러올 수 있게 하는 모듈이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZcAV5/btqFyfpYM7m/wh297UgLLrEkJkCKvfwI21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZcAV5/btqFyfpYM7m/wh297UgLLrEkJkCKvfwI21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZcAV5/btqFyfpYM7m/wh297UgLLrEkJkCKvfwI21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZcAV5%2FbtqFyfpYM7m%2Fwh297UgLLrEkJkCKvfwI21%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위에서 test.txt로 딕셔너리 형태로 저장했다. pick.dump()를 사용해 딕셔너리 형태로 저장후 종료&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 다음에&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcm7N2/btqFyp6ZeQa/kKPkzak9AUh6VZcHoF4mM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcm7N2/btqFyp6ZeQa/kKPkzak9AUh6VZcHoF4mM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcm7N2/btqFyp6ZeQa/kKPkzak9AUh6VZcHoF4mM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbcm7N2%2FbtqFyp6ZeQa%2FkKPkzak9AUh6VZcHoF4mM1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;파일을 열면 test.txt파일이 딕셔너리 형태 그대로 저장되어 있는 것을 알 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;pickle 모듈을 사용할 때&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;- pickle을 import 해줘야 한다.&lt;/p&gt;
&lt;p&gt;- 위에서 그림에서 같이 open()을 사용할때 데이터 open방식을 'w'로 사용하면 String 형으로 저장된다.&lt;/p&gt;
&lt;p&gt;- 즉 pickle로 데이터를 저장할 때는 wb로 open()후 rb로 읽어준다.&lt;/p&gt;
&lt;p&gt;- 파이썬의 모든 데이터 객체를 저장할 수 있다.&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/110</guid>
      <comments>https://code-nen.tistory.com/110#entry110comment</comments>
      <pubDate>Thu, 9 Jul 2020 19:10:26 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 내장 함수 모음(python function)</title>
      <link>https://code-nen.tistory.com/109</link>
      <description>&lt;p&gt;&lt;b&gt;abs()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 절댓값을 돌려주는 함수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CPRXf/btqFt5aQQlX/04vxKb38Q13lZ2A9aVXvsK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CPRXf/btqFt5aQQlX/04vxKb38Q13lZ2A9aVXvsK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CPRXf/btqFt5aQQlX/04vxKb38Q13lZ2A9aVXvsK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCPRXf%2FbtqFt5aQQlX%2F04vxKb38Q13lZ2A9aVXvsK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/x3p41/btqFt5232Sg/AMtuaVoM8Xb7ag6aJaP3kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/x3p41/btqFt5232Sg/AMtuaVoM8Xb7ag6aJaP3kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/x3p41/btqFt5232Sg/AMtuaVoM8Xb7ag6aJaP3kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fx3p41%2FbtqFt5232Sg%2FAMtuaVoM8Xb7ag6aJaP3kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;all()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 반복 가능한 자료형 x를 입력 인수로 받으며 이 x가 모두 참이면 true, 거짓이 하나라도 있으면 false를 반환한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blAmGd/btqFvvNfBWq/UuS9IxmWnzSQSXLedMEg70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blAmGd/btqFvvNfBWq/UuS9IxmWnzSQSXLedMEg70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blAmGd/btqFvvNfBWq/UuS9IxmWnzSQSXLedMEg70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblAmGd%2FbtqFvvNfBWq%2FUuS9IxmWnzSQSXLedMEg70%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;any()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: x중 하나라도 참이 있으면 true를 반환하고, x가 모두 거짓일 때에만 false를 돌려준다. all()의 반대.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqm63W/btqFvHGENsu/mCRKALFdZvQWR6Xd7Knybk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqm63W/btqFvHGENsu/mCRKALFdZvQWR6Xd7Knybk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqm63W/btqFvHGENsu/mCRKALFdZvQWR6Xd7Knybk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqm63W%2FbtqFvHGENsu%2FmCRKALFdZvQWR6Xd7Knybk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt3iUa/btqFvHmk24S/n9tWKpkkBciK29BBwYVoc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt3iUa/btqFvHmk24S/n9tWKpkkBciK29BBwYVoc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt3iUa/btqFvHmk24S/n9tWKpkkBciK29BBwYVoc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt3iUa%2FbtqFvHmk24S%2Fn9tWKpkkBciK29BBwYVoc0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;chr()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: &lt;a href=&quot;https://m.blog.naver.com/PostView.nhn?blogId=jamduino&amp;amp;logNo=220833819592&amp;amp;proxyReferer=https:%2F%2Fwww.google.com%2F&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;아스키 코드&lt;/a&gt; 값을 입력받아 그 코드에 해당하는 문자를 출력하는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgrzqo/btqFt5BWldy/XfrNz015ySdMamOMAam0UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgrzqo/btqFt5BWldy/XfrNz015ySdMamOMAam0UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgrzqo/btqFt5BWldy/XfrNz015ySdMamOMAam0UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdgrzqo%2FbtqFt5BWldy%2FXfrNz015ySdMamOMAam0UK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;dir()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 객체가 자체적으로 가지고 있는 변수나 함수를 보여준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n7PRW/btqFt5BWogY/RTEY1R7Kv5Kev9Yj8Xs55K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n7PRW/btqFt5BWogY/RTEY1R7Kv5Kev9Yj8Xs55K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n7PRW/btqFt5BWogY/RTEY1R7Kv5Kev9Yj8Xs55K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn7PRW%2FbtqFt5BWogY%2FRTEY1R7Kv5Kev9Yj8Xs55K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;divmod(a,b)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 2개의 숫자를 입력받아 a를 b로 나눈 몫과 나머지를 튜플 형태로 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkyXo1/btqFwkqGMb9/OD37QtblwTAkynCa5mTluk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkyXo1/btqFwkqGMb9/OD37QtblwTAkynCa5mTluk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkyXo1/btqFwkqGMb9/OD37QtblwTAkynCa5mTluk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkyXo1%2FbtqFwkqGMb9%2FOD37QtblwTAkynCa5mTluk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;enumerate()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 순서가 있는 자료형을 입력 받아 인덱스 값을 포함하는 enumerate 객체를 돌려준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mwSOS/btqFtKrezMy/ZfJkLpzb65iD990KgESKD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mwSOS/btqFtKrezMy/ZfJkLpzb65iD990KgESKD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mwSOS/btqFtKrezMy/ZfJkLpzb65iD990KgESKD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmwSOS%2FbtqFtKrezMy%2FZfJkLpzb65iD990KgESKD0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;eval()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 실행 가능한 문자열을 입력받아 문자열을 실행한 결괏값을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6QKXB/btqFt5Wfx8e/IiRuxA0MIjxbKjfK6XitHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6QKXB/btqFt5Wfx8e/IiRuxA0MIjxbKjfK6XitHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6QKXB/btqFt5Wfx8e/IiRuxA0MIjxbKjfK6XitHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6QKXB%2FbtqFt5Wfx8e%2FIiRuxA0MIjxbKjfK6XitHk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;filter()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 첫 번째 인수로 함수 이름을, 두 번째 인수로 그 함수에 차례로 들어갈 반복 가능한 자료형을 받는다. 그리고 두 번째 인수인 반복 가능한 자료형 요소가 첫 번째 인수인 함수에 입력되었을 때 반환 값이 참인 것만 묶어서 돌려준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWdAvT/btqFvIZTLF5/RykCwIztNQUhiEzaK11MXk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWdAvT/btqFvIZTLF5/RykCwIztNQUhiEzaK11MXk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWdAvT/btqFvIZTLF5/RykCwIztNQUhiEzaK11MXk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWdAvT%2FbtqFvIZTLF5%2FRykCwIztNQUhiEzaK11MXk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBxrDT/btqFtK5QvKF/nBoXiFMKg7kEeKiQGsosO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBxrDT/btqFtK5QvKF/nBoXiFMKg7kEeKiQGsosO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBxrDT/btqFtK5QvKF/nBoXiFMKg7kEeKiQGsosO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBxrDT%2FbtqFtK5QvKF%2FnBoXiFMKg7kEeKiQGsosO1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;lambda()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 좀 더 간결한 코드를 작성할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUz0cZ/btqFt59Lwgx/RzRLTIdsvq6OpwCDnUoqEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUz0cZ/btqFt59Lwgx/RzRLTIdsvq6OpwCDnUoqEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUz0cZ/btqFt59Lwgx/RzRLTIdsvq6OpwCDnUoqEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUz0cZ%2FbtqFt59Lwgx%2FRzRLTIdsvq6OpwCDnUoqEK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;hex()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 정수 값을 입력받아 16진수로 변환하여 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2XqNb/btqFuVMmWp5/ShgOqKiaLKrWQ8iAJaLG9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2XqNb/btqFuVMmWp5/ShgOqKiaLKrWQ8iAJaLG9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2XqNb/btqFuVMmWp5/ShgOqKiaLKrWQ8iAJaLG9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2XqNb%2FbtqFuVMmWp5%2FShgOqKiaLKrWQ8iAJaLG9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;id()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 객체를 입력받아 객체의 고유 주소 값을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VCopo/btqFwkc941m/Ncbt9htesMmVI4kfs48qe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VCopo/btqFwkc941m/Ncbt9htesMmVI4kfs48qe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VCopo/btqFwkc941m/Ncbt9htesMmVI4kfs48qe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVCopo%2FbtqFwkc941m%2FNcbt9htesMmVI4kfs48qe0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;input()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 사용자 입력을 받는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b98SLd/btqFvgQlPkd/IuODIjmjWqWNTpmdS4pu80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b98SLd/btqFvgQlPkd/IuODIjmjWqWNTpmdS4pu80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b98SLd/btqFvgQlPkd/IuODIjmjWqWNTpmdS4pu80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb98SLd%2FbtqFvgQlPkd%2FIuODIjmjWqWNTpmdS4pu80%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;int()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 문자열 형태의 숫자나 소수점이 있는 숫자 등을&amp;nbsp; 정수 형태로 돌려주는 함수다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RY2I6/btqFvfDVkEp/LqhBdGBHZTq44I9m3RSdg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RY2I6/btqFvfDVkEp/LqhBdGBHZTq44I9m3RSdg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RY2I6/btqFvfDVkEp/LqhBdGBHZTq44I9m3RSdg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRY2I6%2FbtqFvfDVkEp%2FLqhBdGBHZTq44I9m3RSdg0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;isinstance()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 첫 번째&amp;nbsp; 인수로 인스턴스, 두 번째 인수로 클래스 이름을 받는다. 입력받은 인스턴스가 그 클래스의 인스턴스인지를 판단하여 참이면 true, 거짓이면 false를 돌려준다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXdmCc/btqFtw0460k/Suoq86uMW34yTAtXy5DM0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXdmCc/btqFtw0460k/Suoq86uMW34yTAtXy5DM0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXdmCc/btqFtw0460k/Suoq86uMW34yTAtXy5DM0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXdmCc%2FbtqFtw0460k%2FSuoq86uMW34yTAtXy5DM0k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cB2M7S/btqFv2jvf4a/MXfJ59daaDejB9jUBiCKc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cB2M7S/btqFv2jvf4a/MXfJ59daaDejB9jUBiCKc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cB2M7S/btqFv2jvf4a/MXfJ59daaDejB9jUBiCKc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcB2M7S%2FbtqFv2jvf4a%2FMXfJ59daaDejB9jUBiCKc0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sI0aF/btqFtwGMvpi/Ke2fKYt99tlDDQLoA0XE9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sI0aF/btqFtwGMvpi/Ke2fKYt99tlDDQLoA0XE9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sI0aF/btqFtwGMvpi/Ke2fKYt99tlDDQLoA0XE9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsI0aF%2FbtqFtwGMvpi%2FKe2fKYt99tlDDQLoA0XE9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOTBoP/btqFvHzT3Bf/sxiwtL0NSXufq6SXPt5sSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOTBoP/btqFvHzT3Bf/sxiwtL0NSXufq6SXPt5sSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOTBoP/btqFvHzT3Bf/sxiwtL0NSXufq6SXPt5sSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOTBoP%2FbtqFvHzT3Bf%2FsxiwtL0NSXufq6SXPt5sSK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;len()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;:&amp;nbsp; 입력값 s의 길이를 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oEabv/btqFv1Zb6HV/Aop1f2GLK6A6tclWqLb99K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oEabv/btqFv1Zb6HV/Aop1f2GLK6A6tclWqLb99K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oEabv/btqFv1Zb6HV/Aop1f2GLK6A6tclWqLb99K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoEabv%2FbtqFv1Zb6HV%2FAop1f2GLK6A6tclWqLb99K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;list()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 반복 가능한 자료형 s를 입력받아 리스트로 만들어 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYy02i/btqFwiNbC7k/6pGHjO7ufMwQ3HkAPakzeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYy02i/btqFwiNbC7k/6pGHjO7ufMwQ3HkAPakzeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYy02i/btqFwiNbC7k/6pGHjO7ufMwQ3HkAPakzeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYy02i%2FbtqFwiNbC7k%2F6pGHjO7ufMwQ3HkAPakzeK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;map(f, iterable)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 함수와 반복 가능한 자료형을 입력받아 입력받은 자료형의 각 요소를 함수 f가 수행한 결과를 묶어서 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzN7B4/btqFvIMmlZj/DCggdsGNsLdbbgqNc0ukhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzN7B4/btqFvIMmlZj/DCggdsGNsLdbbgqNc0ukhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzN7B4/btqFvIMmlZj/DCggdsGNsLdbbgqNc0ukhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzN7B4%2FbtqFvIMmlZj%2FDCggdsGNsLdbbgqNc0ukhk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNac1W/btqFvwehz7q/sSFwBBkMLJCYXWVTUHUwuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNac1W/btqFvwehz7q/sSFwBBkMLJCYXWVTUHUwuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNac1W/btqFvwehz7q/sSFwBBkMLJCYXWVTUHUwuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNac1W%2FbtqFvwehz7q%2FsSFwBBkMLJCYXWVTUHUwuk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;max()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 인수로 반복 가능한 자료형을 입력받아 그 최댓값을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9zB91/btqFuXclpNE/kKgAyBAe25CIPZ2GjTfw1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9zB91/btqFuXclpNE/kKgAyBAe25CIPZ2GjTfw1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9zB91/btqFuXclpNE/kKgAyBAe25CIPZ2GjTfw1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9zB91%2FbtqFuXclpNE%2FkKgAyBAe25CIPZ2GjTfw1K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;min()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: max와 반대되는 함수로, 인수로 반복 가능한 자료형을 입력받아 그 최솟값을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bre7YK/btqFvHGF02W/FdtbS20lpk5VlznrCrYryK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bre7YK/btqFvHGF02W/FdtbS20lpk5VlznrCrYryK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bre7YK/btqFvHGF02W/FdtbS20lpk5VlznrCrYryK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbre7YK%2FbtqFvHGF02W%2FFdtbS20lpk5VlznrCrYryK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;oct()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 정수 형태의 숫자를 8진수 문자열로 바꾸어 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cmrUBU/btqFuWR3PlO/4KqE37HquARgJ19iuDY7tk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cmrUBU/btqFuWR3PlO/4KqE37HquARgJ19iuDY7tk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cmrUBU/btqFuWR3PlO/4KqE37HquARgJ19iuDY7tk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcmrUBU%2FbtqFuWR3PlO%2F4KqE37HquARgJ19iuDY7tk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;open()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: '파일 이름'과 '읽기 방법'을 입력받아 파일 객체를 돌려주는 함수이다. 읽기 방법을 생략하면 디폴트 값인 읽기 전용 모드로 파일 객체를 만들어 돌려준다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;모드&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;w&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;쓰기 모드로 파일 열기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;r&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;읽기 모드로 파일 열기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;a&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;추가 모드로 파일 열기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;b&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;바이너리 모드로 파일 열기&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;ord()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 문자의 아스키 코드 값을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAZYN1/btqFtxTe3Zx/uiQVltbSAmkLcmzbNQ3zaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAZYN1/btqFtxTe3Zx/uiQVltbSAmkLcmzbNQ3zaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAZYN1/btqFtxTe3Zx/uiQVltbSAmkLcmzbNQ3zaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAZYN1%2FbtqFtxTe3Zx%2FuiQVltbSAmkLcmzbNQ3zaK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;i&gt;&lt;u&gt;※ ord 함수는 chr 함수와 반대이다.&lt;/u&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;pow(x,y)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: x의 y제곱한 결괏값을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WJ0hI/btqFujtbKLQ/2Pgyn36N6EoMK1iiKmbJKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WJ0hI/btqFujtbKLQ/2Pgyn36N6EoMK1iiKmbJKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WJ0hI/btqFujtbKLQ/2Pgyn36N6EoMK1iiKmbJKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWJ0hI%2FbtqFujtbKLQ%2F2Pgyn36N6EoMK1iiKmbJKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;range()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어 반환한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byBnaG/btqFtJFUufH/KnUx8tq9YyuwYwaMTNkaM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byBnaG/btqFtJFUufH/KnUx8tq9YyuwYwaMTNkaM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byBnaG/btqFtJFUufH/KnUx8tq9YyuwYwaMTNkaM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyBnaG%2FbtqFtJFUufH%2FKnUx8tq9YyuwYwaMTNkaM0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;round()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 숫자를 입력받아 반올림 해주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UK7m6/btqFtxTe8JU/iyEp3bQzwfQQQUCkf42mcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UK7m6/btqFtxTe8JU/iyEp3bQzwfQQQUCkf42mcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UK7m6/btqFtxTe8JU/iyEp3bQzwfQQQUCkf42mcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUK7m6%2FbtqFtxTe8JU%2FiyEp3bQzwfQQQUCkf42mcK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sorted()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 입력값을 정렬한 후 그 결과를 리스트로 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbj14Q/btqFtwfI3ro/zn4ueqmXZoLYOu1szBpcuK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbj14Q/btqFtwfI3ro/zn4ueqmXZoLYOu1szBpcuK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbj14Q/btqFtwfI3ro/zn4ueqmXZoLYOu1szBpcuK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbj14Q%2FbtqFtwfI3ro%2Fzn4ueqmXZoLYOu1szBpcuK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;str()&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 문자열 형태로 객체를 반환하여 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcAIue/btqFt6gC1bC/ZznYmAKD6WuBuflZ2yISuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcAIue/btqFt6gC1bC/ZznYmAKD6WuBuflZ2yISuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcAIue/btqFt6gC1bC/ZznYmAKD6WuBuflZ2yISuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcAIue%2FbtqFt6gC1bC%2FZznYmAKD6WuBuflZ2yISuk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;sum()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 입력받은 리스트나 튜플의 모든 요소의 합을 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bs2OCU/btqFtKkyaUF/OVvt90sKizuJKXZgKFfB21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bs2OCU/btqFtKkyaUF/OVvt90sKizuJKXZgKFfB21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bs2OCU/btqFtKkyaUF/OVvt90sKizuJKXZgKFfB21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbs2OCU%2FbtqFtKkyaUF%2FOVvt90sKizuJKXZgKFfB21%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;tuple()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;:&amp;nbsp; 반복 가능한 자료형을 입력받아 튜플 형태로 바꾸어 돌려주는 함수이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3pZI1/btqFuh91yxZ/JkaUoGGy6eak4h7KG9nf3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3pZI1/btqFuh91yxZ/JkaUoGGy6eak4h7KG9nf3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3pZI1/btqFuh91yxZ/JkaUoGGy6eak4h7KG9nf3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3pZI1%2FbtqFuh91yxZ%2FJkaUoGGy6eak4h7KG9nf3k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;type()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 입력값의 자료형이 무엇인지 알려 주는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pvb7J/btqFvJkcuoq/zliuf9TL3QppFNxsYaka5K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pvb7J/btqFvJkcuoq/zliuf9TL3QppFNxsYaka5K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pvb7J/btqFvJkcuoq/zliuf9TL3QppFNxsYaka5K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpvb7J%2FbtqFvJkcuoq%2Fzliuf9TL3QppFNxsYaka5K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;zip()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;: 동일한 개수로 이루어진 자료형을 묶어 주는 역할을 하는 함수이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SfKm9/btqFvuAMvlZ/pJUy5QbydD48h4aH9dzODk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SfKm9/btqFvuAMvlZ/pJUy5QbydD48h4aH9dzODk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SfKm9/btqFvuAMvlZ/pJUy5QbydD48h4aH9dzODk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSfKm9%2FbtqFvuAMvlZ%2FpJUy5QbydD48h4aH9dzODk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/109</guid>
      <comments>https://code-nen.tistory.com/109#entry109comment</comments>
      <pubDate>Wed, 8 Jul 2020 23:49:51 +0900</pubDate>
    </item>
    <item>
      <title>python에서 __init__.py의 용도</title>
      <link>https://code-nen.tistory.com/108</link>
      <description>&lt;p&gt;__init__.py 파일은 해당 디렉터리가 패키지의 일부임을 알려주는 역할을 한다.&lt;/p&gt;
&lt;p&gt;만약 어떠한 패키지에 포함된 디렉터리(폴더)에 __init__.py 파일이 없다면 패키지로 인식되지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0xiLl/btqFp4DCTlR/N4SZFzKVIkSo0YQ8pDWLf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0xiLl/btqFp4DCTlR/N4SZFzKVIkSo0YQ8pDWLf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0xiLl/btqFp4DCTlR/N4SZFzKVIkSo0YQ8pDWLf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0xiLl%2FbtqFp4DCTlR%2FN4SZFzKVIkSo0YQ8pDWLf1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이러한 에러가 나왔을때는 어떠한 파일(필자는 echo였음)을 찾지 못하는 것인데.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt;&amp;gt;from 패키지명.파일명. import *&lt;/p&gt;
&lt;p&gt;&amp;gt;&amp;gt;&amp;gt; 함수()&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;를 불러오면 저러한 에러가 뜬다.&lt;/p&gt;
&lt;p&gt;어떠한 함수 이름이 정의되지가 않은 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;특정 디렉터리의 모듈을 *를 사용하여 import 할때는 __init__.py 파일에 __all__변수를 설정하고 import할 수 있는 모듈을 정의해 주어야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/81d4y/btqFrbhUfLw/hyk0KlrLJidcvTO8DjZKrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/81d4y/btqFrbhUfLw/hyk0KlrLJidcvTO8DjZKrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/81d4y/btqFrbhUfLw/hyk0KlrLJidcvTO8DjZKrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F81d4y%2FbtqFrbhUfLw%2Fhyk0KlrLJidcvTO8DjZKrK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 __all__이란?&lt;/p&gt;
&lt;p&gt;-&amp;gt; 상위 디렉터리에서 *를 사용하여 import 했을 경우 __init__.py파일에서 echo모듈만 import한다는 의미이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 후 함수를 불러오면 제대로 출력이 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/108</guid>
      <comments>https://code-nen.tistory.com/108#entry108comment</comments>
      <pubDate>Tue, 7 Jul 2020 18:06:53 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 튜플 한개만 추가 할때</title>
      <link>https://code-nen.tistory.com/107</link>
      <description>&lt;p&gt;파이썬에서는 튜플이라는 자료형이 있다.&lt;/p&gt;
&lt;p&gt;리스트와 거의 비슷하지만 튜플은 ()로 둘러싸고&lt;/p&gt;
&lt;p&gt;튜플은 한번 생성된 값을 변경할 수 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 튜플에서 값만 추가하고 싶을때&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biOtiu/btqFmtwrQPT/kLEdHpAsdjgHGHs5IW2Sik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biOtiu/btqFmtwrQPT/kLEdHpAsdjgHGHs5IW2Sik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biOtiu/btqFmtwrQPT/kLEdHpAsdjgHGHs5IW2Sik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiOtiu%2FbtqFmtwrQPT%2FkLEdHpAsdjgHGHs5IW2Sik%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이러한 에러가 나온다&lt;/p&gt;
&lt;p&gt;튜플만 튜플에 연결이 가능하다는건데 ()로 되어있기때문에 당연히 튜플이라고 생각했는데.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mLUpL/btqFogvOfsd/Chu8nCAuIq0QPfZnjJoou1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mLUpL/btqFogvOfsd/Chu8nCAuIq0QPfZnjJoou1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mLUpL/btqFogvOfsd/Chu8nCAuIq0QPfZnjJoou1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmLUpL%2FbtqFogvOfsd%2FChu8nCAuIq0QPfZnjJoou1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;int형이다.. 한개만 있을때 튜플로 쓰려면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb7W7b/btqFlllbmGp/umNcUvwgKql3fWRNoOvaX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb7W7b/btqFlllbmGp/umNcUvwgKql3fWRNoOvaX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb7W7b/btqFlllbmGp/umNcUvwgKql3fWRNoOvaX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb7W7b%2FbtqFlllbmGp%2FumNcUvwgKql3fWRNoOvaX1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;뒤에 콤마를 붙여주는 것을 잊지말자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTerhG/btqFnFbTIiG/OHMi6D3MHNEf3othscx4Sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTerhG/btqFnFbTIiG/OHMi6D3MHNEf3othscx4Sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTerhG/btqFnFbTIiG/OHMi6D3MHNEf3othscx4Sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTerhG%2FbtqFnFbTIiG%2FOHMi6D3MHNEf3othscx4Sk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;정삭적으로 튜플이 나온다^^&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/107</guid>
      <comments>https://code-nen.tistory.com/107#entry107comment</comments>
      <pubDate>Sat, 4 Jul 2020 16:53:26 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 함수</title>
      <link>https://code-nen.tistory.com/106</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;절대값&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GeFBb/btqFljUJC6J/74PMEGmL4JYEKadSDIoIZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GeFBb/btqFljUJC6J/74PMEGmL4JYEKadSDIoIZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GeFBb/btqFljUJC6J/74PMEGmL4JYEKadSDIoIZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGeFBb%2FbtqFljUJC6J%2F74PMEGmL4JYEKadSDIoIZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;제곱&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dOKiBI/btqFmuVYOYa/UGnPbjpZnmf8K6RFgB4Lg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dOKiBI/btqFmuVYOYa/UGnPbjpZnmf8K6RFgB4Lg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dOKiBI/btqFmuVYOYa/UGnPbjpZnmf8K6RFgB4Lg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdOKiBI%2FbtqFmuVYOYa%2FUGnPbjpZnmf8K6RFgB4Lg1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;최댓값&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buX8Vu/btqFnZUL36l/LwJi9HAUesU3pX7K2nj5Kk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buX8Vu/btqFnZUL36l/LwJi9HAUesU3pX7K2nj5Kk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buX8Vu/btqFnZUL36l/LwJi9HAUesU3pX7K2nj5Kk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuX8Vu%2FbtqFnZUL36l%2FLwJi9HAUesU3pX7K2nj5Kk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;최솟값&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;-min() 가장 작은 값을 반환해줌-&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;반올림&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LIDdp/btqFk6gXqcD/Vy2INEZkgg3JWPY17qlKG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LIDdp/btqFk6gXqcD/Vy2INEZkgg3JWPY17qlKG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LIDdp/btqFk6gXqcD/Vy2INEZkgg3JWPY17qlKG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLIDdp%2FbtqFk6gXqcD%2FVy2INEZkgg3JWPY17qlKG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;내림&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chPoEw/btqFkUHPqHm/A0uVjeupO5LF4Hb9mx8E40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chPoEw/btqFkUHPqHm/A0uVjeupO5LF4Hb9mx8E40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chPoEw/btqFkUHPqHm/A0uVjeupO5LF4Hb9mx8E40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchPoEw%2FbtqFkUHPqHm%2FA0uVjeupO5LF4Hb9mx8E40%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;올림&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rBrwK/btqFljNVlvY/yYHQZZ3T7fU4WzBFSFI0Hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rBrwK/btqFljNVlvY/yYHQZZ3T7fU4WzBFSFI0Hk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rBrwK/btqFljNVlvY/yYHQZZ3T7fU4WzBFSFI0Hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrBrwK%2FbtqFljNVlvY%2FyYHQZZ3T7fU4WzBFSFI0Hk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;제곱근&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJrNDG/btqFnDSdonl/NKsLtzztKuiGczKQMRtxK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJrNDG/btqFnDSdonl/NKsLtzztKuiGczKQMRtxK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJrNDG/btqFnDSdonl/NKsLtzztKuiGczKQMRtxK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJrNDG%2FbtqFnDSdonl%2FNKsLtzztKuiGczKQMRtxK0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;랜덤 함수&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b06Ade/btqFnFoVGcQ/7k0khUy9AmbCUlb8O5TEb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b06Ade/btqFnFoVGcQ/7k0khUy9AmbCUlb8O5TEb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b06Ade/btqFnFoVGcQ/7k0khUy9AmbCUlb8O5TEb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb06Ade%2FbtqFnFoVGcQ%2F7k0khUy9AmbCUlb8O5TEb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/106</guid>
      <comments>https://code-nen.tistory.com/106#entry106comment</comments>
      <pubDate>Fri, 3 Jul 2020 20:28:16 +0900</pubDate>
    </item>
    <item>
      <title>깃허브란?</title>
      <link>https://code-nen.tistory.com/105</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자신의 컴퓨터에서 작업한 뒤 그 컴퓨터안에서 커밋을 저장하는 것을 우리는 &lt;i&gt;지역 저장소(local repository)&lt;/i&gt;라고 부른다.&lt;/p&gt;
&lt;p&gt;만약 실수로 지역 저장소를 삭제한다면 그동안 작업물이 사라진다. 즉 이런 작업물을 지역 저장소에만 저장하는 것은 안전하지 않기 때문에 작업하는 컴퓨터가 아닌 다른곳에 저장 공간을 마련한다.&lt;/p&gt;
&lt;p&gt;이때 사용하는 것이 원격 저장소이다. &lt;i&gt;원격 저장소란?&amp;nbsp;&amp;nbsp;&lt;/i&gt;지역 저장소가 아닌 컴퓨터나 서버에서 만든 저장소를 말한다.&lt;/p&gt;
&lt;p&gt;원격 저장소는 지역 저장소와 연결되어 있으면서 '백업'과 '협업'이라는 중요한 역할을 한다. 특히 규모가 큰 프로젝트를 진행한다면 다른 사람과 협업해야 하는 경우가 많다. 이때 원격 저장소의 역활이 중요하다. 원격 저장소는 직접 구축할 수 있지만 유지비용이 많이든다. 그래서 인터넷에서 원격 저장소를 제공하는 서비스를 이용하는데, 그중에서 깃과 관련해 가장 많이 사용하는 서비스가 깃허브이다. 깃허브에서는 지역 저장소의 파일을 원격 저장소로 백업을 하고 팀끼리의 소스코드를 공유할 수 도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dI3ajq/btqFgHUzOun/wISQJUBHyvcfsMK3Ini540/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dI3ajq/btqFgHUzOun/wISQJUBHyvcfsMK3Ini540/img.png&quot; data-alt=&quot;출처 : Do it! 지옥에서 온 문서 관리자 깃&amp;amp;amp;amp;깃허브 입문&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dI3ajq/btqFgHUzOun/wISQJUBHyvcfsMK3Ini540/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdI3ajq%2FbtqFgHUzOun%2FwISQJUBHyvcfsMK3Ini540%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;figcaption&gt;출처 : Do it! 지옥에서 온 문서 관리자 깃&amp;amp;깃허브 입문&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/105</guid>
      <comments>https://code-nen.tistory.com/105#entry105comment</comments>
      <pubDate>Tue, 30 Jun 2020 23:54:03 +0900</pubDate>
    </item>
    <item>
      <title>git bash 작업트리에서 수정한 파일 되돌리기</title>
      <link>https://code-nen.tistory.com/104</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RL22n/btqFcubuead/GSU6kyoLAFZKkYzccqtOr1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RL22n/btqFcubuead/GSU6kyoLAFZKkYzccqtOr1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RL22n/btqFcubuead/GSU6kyoLAFZKkYzccqtOr1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRL22n%2FbtqFcubuead%2FGSU6kyoLAFZKkYzccqtOr1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 vim 파일이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIzLnh/btqFcOtYQXg/JHbtTRbnFEkMtzvhsjmCQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIzLnh/btqFcOtYQXg/JHbtTRbnFEkMtzvhsjmCQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIzLnh/btqFcOtYQXg/JHbtTRbnFEkMtzvhsjmCQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIzLnh%2FbtqFcOtYQXg%2FJHbtTRbnFEkMtzvhsjmCQ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;수정된 파일이 아직 스테이지에 올라가 있지 않고, 작업트리의 변경사항을 취소하려면 restore을 사용하라고 적혀있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGC4OB/btqFeNtGdpV/MVOfUARRzHKdXQpboU4Ac0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGC4OB/btqFeNtGdpV/MVOfUARRzHKdXQpboU4Ac0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGC4OB/btqFeNtGdpV/MVOfUARRzHKdXQpboU4Ac0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGC4OB%2FbtqFeNtGdpV%2FMVOfUARRzHKdXQpboU4Ac0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 작업트리에서 수정한 파일이 변경사항이 취소된다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n0R9l/btqFdsxfUiT/X0ZzEmf8trWE0RCzPPK1MK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n0R9l/btqFdsxfUiT/X0ZzEmf8trWE0RCzPPK1MK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n0R9l/btqFdsxfUiT/X0ZzEmf8trWE0RCzPPK1MK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn0R9l%2FbtqFdsxfUiT%2FX0ZzEmf8trWE0RCzPPK1MK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;또한 스테이지에서 내리고 싶다면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTnNvT/btqFeNHcx8F/QPKLu9ZQk1cEY9cs1lMAI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTnNvT/btqFeNHcx8F/QPKLu9ZQk1cEY9cs1lMAI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTnNvT/btqFeNHcx8F/QPKLu9ZQk1cEY9cs1lMAI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTnNvT%2FbtqFeNHcx8F%2FQPKLu9ZQk1cEY9cs1lMAI0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;git restore --staged&amp;lt;filename&amp;gt; 이라고 치면된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KmGUs/btqFfutD0eC/VqanWlcnMcVPZDaGk2bHS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KmGUs/btqFfutD0eC/VqanWlcnMcVPZDaGk2bHS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KmGUs/btqFfutD0eC/VqanWlcnMcVPZDaGk2bHS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKmGUs%2FbtqFfutD0eC%2FVqanWlcnMcVPZDaGk2bHS0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;commit 된 파일 을 내리고 싶다면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;git reset HEAD^&lt;/p&gt;
&lt;p&gt;를 치면 된다.&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/104</guid>
      <comments>https://code-nen.tistory.com/104#entry104comment</comments>
      <pubDate>Mon, 29 Jun 2020 22:40:30 +0900</pubDate>
    </item>
    <item>
      <title>깃 저장소 만들기</title>
      <link>https://code-nen.tistory.com/103</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;mkdir 로 디렉토리 생성후&lt;/p&gt;
&lt;p&gt;cd로 디렉토리에 들어간후&lt;/p&gt;
&lt;p&gt;git init를 친다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZIE1R/btqFdLpMxTc/BPyjFB85BnlKQ1mJ6lO8B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZIE1R/btqFdLpMxTc/BPyjFB85BnlKQ1mJ6lO8B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZIE1R/btqFdLpMxTc/BPyjFB85BnlKQ1mJ6lO8B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZIE1R%2FbtqFdLpMxTc%2FBPyjFB85BnlKQ1mJ6lO8B0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ls -la 후 git 디렉터리 생성이 되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciVa9X/btqFfuUG49X/UodspmMrGsVpVRcR05k0BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciVa9X/btqFfuUG49X/UodspmMrGsVpVRcR05k0BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciVa9X/btqFfuUG49X/UodspmMrGsVpVRcR05k0BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciVa9X%2FbtqFfuUG49X%2FUodspmMrGsVpVRcR05k0BK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;윈도우 탐색기에서 볼 경우에는 숨김파일 처리가 되어있으므로 숨김파일을 해제하여 보도록한다.&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/103</guid>
      <comments>https://code-nen.tistory.com/103#entry103comment</comments>
      <pubDate>Mon, 29 Jun 2020 22:00:38 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 문자열 포매팅</title>
      <link>https://code-nen.tistory.com/102</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'벌써 8시네?'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 문장을 출력한다고 치자.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또 이런 문장을&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;'벌써 10시네?'&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;를 출력할때 숫자 8과 10만 변경되었다. 이러한 특정한 값을 변경할때 사용하는 것을 &lt;b&gt;문자열 포매팅&lt;/b&gt; 이라고 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsGTz1/btqFdtQofDf/4KQkcfbn5tvvGI1WkrLKSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsGTz1/btqFdtQofDf/4KQkcfbn5tvvGI1WkrLKSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsGTz1/btqFdtQofDf/4KQkcfbn5tvvGI1WkrLKSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsGTz1%2FbtqFdtQofDf%2F4KQkcfbn5tvvGI1WkrLKSK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;쳤을때&lt;/p&gt;
&lt;p&gt;a는&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lxK2K/btqFdtQofWm/aihFEc11ME65Hgkf28n0IK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lxK2K/btqFdtQofWm/aihFEc11ME65Hgkf28n0IK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lxK2K/btqFdtQofWm/aihFEc11ME65Hgkf28n0IK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlxK2K%2FbtqFdtQofWm%2FaihFEc11ME65Hgkf28n0IK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;값을 반환한다. 여기서 숫자가 아니고 문자열(String)값을 넣으려면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oCDwP/btqFcNIAP2C/k3UIUKoLNeGXtkj3sFYlK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oCDwP/btqFcNIAP2C/k3UIUKoLNeGXtkj3sFYlK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oCDwP/btqFcNIAP2C/k3UIUKoLNeGXtkj3sFYlK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoCDwP%2FbtqFcNIAP2C%2Fk3UIUKoLNeGXtkj3sFYlK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdr2XN/btqFcOOhEFw/TwfHdA1qEZy4M3o9xZii00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdr2XN/btqFcOOhEFw/TwfHdA1qEZy4M3o9xZii00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdr2XN/btqFcOOhEFw/TwfHdA1qEZy4M3o9xZii00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbdr2XN%2FbtqFcOOhEFw%2FTwfHdA1qEZy4M3o9xZii00%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;int 값은 %d를 사용하고 String값은 %s를 사용한다.&lt;/p&gt;
&lt;p&gt;(변수를 대입할때는 %d를 사용한다)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 여러개의 값을 넣을때는 어떻게 사용해야 할까??&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csLMle/btqFdKxCy3s/HVky0W6tltSu9Nsoj1o6hK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csLMle/btqFdKxCy3s/HVky0W6tltSu9Nsoj1o6hK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csLMle/btqFdKxCy3s/HVky0W6tltSu9Nsoj1o6hK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsLMle%2FbtqFdKxCy3s%2FHVky0W6tltSu9Nsoj1o6hK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/T6oXa/btqFcNoj2JI/LhgRjLVMxprkfBPewIPRh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/T6oXa/btqFcNoj2JI/LhgRjLVMxprkfBPewIPRh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/T6oXa/btqFcNoj2JI/LhgRjLVMxprkfBPewIPRh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FT6oXa%2FbtqFcNoj2JI%2FLhgRjLVMxprkfBPewIPRh1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 콤마를 넣어 각각의 값을 구분해주면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 문자열과 정수형 외에도&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KC6EC/btqFdLQN1wc/Z6Z1wzVKPsdDk7JN36nDwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KC6EC/btqFdLQN1wc/Z6Z1wzVKPsdDk7JN36nDwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KC6EC/btqFdLQN1wc/Z6Z1wzVKPsdDk7JN36nDwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKC6EC%2FbtqFdLQN1wc%2FZ6Z1wzVKPsdDk7JN36nDwk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 사용하면 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 여기서 중요할 점은 %를 사용하고 싶다면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;%% 두개를 사용해야 %를 출력할 수 있다.&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 format 함수도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l2q3u/btqFeCTpPRI/1OfU0Tlunktk3NEujO58r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l2q3u/btqFeCTpPRI/1OfU0Tlunktk3NEujO58r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l2q3u/btqFeCTpPRI/1OfU0Tlunktk3NEujO58r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl2q3u%2FbtqFeCTpPRI%2F1OfU0Tlunktk3NEujO58r0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V6RVT/btqFdKxCMMp/nkqGkbmgs9FffK6e0G8U9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V6RVT/btqFdKxCMMp/nkqGkbmgs9FffK6e0G8U9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V6RVT/btqFdKxCMMp/nkqGkbmgs9FffK6e0G8U9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV6RVT%2FbtqFdKxCMMp%2FnkqGkbmgs9FffK6e0G8U9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게도 사용이 가능하다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한 공백 채우기도 가능.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sWC7A/btqFe4onBSK/qKGvEzoJErmACk2m5JJWP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sWC7A/btqFe4onBSK/qKGvEzoJErmACk2m5JJWP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sWC7A/btqFe4onBSK/qKGvEzoJErmACk2m5JJWP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsWC7A%2FbtqFe4onBSK%2FqKGvEzoJErmACk2m5JJWP0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWbmr1/btqFfuf3TN1/7H6KTQ4AoJzpklC1TY8R2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWbmr1/btqFfuf3TN1/7H6KTQ4AoJzpklC1TY8R2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWbmr1/btqFfuf3TN1/7H6KTQ4AoJzpklC1TY8R2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWbmr1%2FbtqFfuf3TN1%2F7H6KTQ4AoJzpklC1TY8R2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가운데 정렬도 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cGZd8Q/btqFe3JMz30/BjJAzgnh883UXy6Be3EJm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cGZd8Q/btqFe3JMz30/BjJAzgnh883UXy6Be3EJm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cGZd8Q/btqFe3JMz30/BjJAzgnh883UXy6Be3EJm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcGZd8Q%2FbtqFe3JMz30%2FBjJAzgnh883UXy6Be3EJm1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2GRW4/btqFec1IJSO/rMe1pU02ZimUS4K3JVAf9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2GRW4/btqFec1IJSO/rMe1pU02ZimUS4K3JVAf9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2GRW4/btqFec1IJSO/rMe1pU02ZimUS4K3JVAf9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2GRW4%2FbtqFec1IJSO%2FrMe1pU02ZimUS4K3JVAf9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자바를 공부하다가 전혀 보지 못한 함수들이 있어서 신기하다...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;------------수정---------------&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬 3.6 버전부터는&lt;/p&gt;
&lt;p&gt;어떠한 값 앞에 f를 눌러 format 시킬 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;f&quot;------&quot;&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/102</guid>
      <comments>https://code-nen.tistory.com/102#entry102comment</comments>
      <pubDate>Mon, 29 Jun 2020 21:24:10 +0900</pubDate>
    </item>
    <item>
      <title>Pycharm 단축키</title>
      <link>https://code-nen.tistory.com/101</link>
      <description>&lt;p&gt;f12 : 코드 따라가기&lt;/p&gt;
&lt;p&gt;ctrl + Alt + left : back&lt;/p&gt;
&lt;p&gt;ctrl + Alt + Right : forward&lt;/p&gt;
&lt;p&gt;ctrl + / :주석&lt;/p&gt;
&lt;p&gt;ctrl + b : 함수 정의 부분으로 이동&lt;/p&gt;
&lt;p&gt;alt + b : 단축키 수동 설정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;f11 : 북마크 토글&lt;/p&gt;
&lt;p&gt;shift + f11 북마크 모두 보기&lt;/p&gt;
&lt;p&gt;shift + Ctrl + 1,2,3,4...:번호 지정 북마크 추가&lt;/p&gt;
&lt;p&gt;ctrl + 1,2,3,4 ... : 번호지정 북마크 이동&lt;/p&gt;
&lt;p&gt;alt + 2 :북마크바&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ctrl+d : 라인복제&lt;/p&gt;
&lt;p&gt;ctrl + y :라인 삭제&lt;/p&gt;
&lt;p&gt;ctrl + shift + 위아래 방향키 : 현재라인 위아래 이동&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ctrl + shift + f10 : 현재 소스 실행&lt;/p&gt;
&lt;p&gt;alt + shift + f10 : 소스선택 실행&lt;/p&gt;
&lt;p&gt;shift + f10 : 최근소스 재실행&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ctrl + fhift + f : 전체검색&lt;/p&gt;
&lt;p&gt;ctrl + r : 찾아 바꾸기&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/101</guid>
      <comments>https://code-nen.tistory.com/101#entry101comment</comments>
      <pubDate>Mon, 29 Jun 2020 01:08:42 +0900</pubDate>
    </item>
    <item>
      <title>파이썬으로 할 수 있는 것</title>
      <link>https://code-nen.tistory.com/100</link>
      <description>&lt;p&gt;시스템 유틸리티 제작&lt;/p&gt;
&lt;p&gt;- 메모리 청소나 프로그램 종료같은 시스템 유틸리티를 제작 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GUI 프로그래밍&lt;/p&gt;
&lt;p&gt;- 그래픽 유저 인터페이스를 이용한 프로그램을 만들 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C와 C++의 결합이 가능하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;웹 프로그래밍&lt;/p&gt;
&lt;p&gt;- django -&amp;gt; 웹 프레임 워크&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;수치 연산 프로그래밍&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터베이스 프로그래밍&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;데이터 분석, 사물 인터넷&lt;/p&gt;
&lt;p&gt;- 주식 등을 분석 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 파이썬으로는&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모바일 프로그래밍과 시스템과 밀접한 프로그래밍 영역은 할 수 없다!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/Python</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/100</guid>
      <comments>https://code-nen.tistory.com/100#entry100comment</comments>
      <pubDate>Mon, 29 Jun 2020 00:10:33 +0900</pubDate>
    </item>
    <item>
      <title>깃&amp;amp;깃허브 깃 명렁어, 리눅스 기본 명령어</title>
      <link>https://code-nen.tistory.com/99</link>
      <description>&lt;p&gt;윈도우에서 폴더를 리눅스에서는 '디럭터리' 라고 부른다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v48up/btqFbkyKCfJ/7HjHSVJmSvqN7kYoKw2dlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v48up/btqFbkyKCfJ/7HjHSVJmSvqN7kYoKw2dlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v48up/btqFbkyKCfJ/7HjHSVJmSvqN7kYoKw2dlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv48up%2FbtqFbkyKCfJ%2F7HjHSVJmSvqN7kYoKw2dlK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;리눅스에서 물결 표시는 홈디럭터리에 있다는 의미이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 520px;&quot; border=&quot;1&quot; data-ke-style=&quot;style13&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;명령어&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;pwd&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;현재 위치의 경로&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;ls&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;디렉터리와 파일 이름이 나옴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;clear&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;화면 정리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;-l&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;상세정보&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;-a&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;숨긴파일과 디렉터리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;-r&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;파일의 정렬 순서를 거꾸로&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;-t&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;파일 작성 시간 순으로 내림차순&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;cd&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;디렉터리 사이를 이동할때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;cd ..&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;현재위치에서 상위 디렉터리로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;cd ~&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;홈 디렉터리로 돌아간다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;mkdir&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;디렉터리 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;rm&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;디렉터리 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;rm -r&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;하위 디렉터리와 함께 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;vim&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;편집기 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;L.A&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;vim 상태에서 입력모드로 변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;:wq&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;w 는 저장 q는 종료&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;cat&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;텍스트 문서 내용 확인&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;cat 파일1,파일2,파일n&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;파일 n개를 차례로 연결해서 새로운 파일 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;cat 파일1&amp;gt;&amp;gt;파일2&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;파일1의 내용을 파일2 끝에 연결합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;추가&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 200px;&quot; border=&quot;1&quot; data-ke-style=&quot;style9&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;명령어&lt;/td&gt;
&lt;td style=&quot;width: 50%; text-align: center; height: 20px;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git branch&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;깃에서 브랜치를 확인하는 명령어&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git branch &amp;lt;이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;브랜치 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git log --oneline&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git의 log에서 한줄에 한 커밋씩 나타내준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git checkout &amp;lt;브랜치이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;해당 브랜치로 이동&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git add .&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;현재 저장소에서 수정된 파일을 한꺼번에 스테이지로&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git log --branches&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;각 브랜치의 커밋을 함께 볼 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git log --branches --graph&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;커밋된 브랜치의 그래프를 볼 수 있다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git log master..&amp;lt;브랜치이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;브랜치에만 있는 커밋을 보여준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git merge &amp;lt;브랜치이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;해당 브랜치이름의 안에 파일들을 가져와 병합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git branch -b&amp;lt;브랜치이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;해당 브랜치 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git reset &amp;lt;커밋해시&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;HEAD가 가리키고 있는 브랜치의 최신 커밋을 원하는 커밋으로 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git stash&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;커밋하지 않은 수정 내용을 어딘가에 보관함&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git stash list&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;감춘 파일 목록을 확인하기위해&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git stash pop&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;stash 목록에서 가장 최근 항목을 되돌림&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git stash apply&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;stash목록에 저장된 수정 내용을 나중에 또 사용할때&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git stash drop&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;stash 목록에서 가장 최근 항목을 삭제&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;추가&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 100px;&quot; border=&quot;1&quot; data-ke-style=&quot;style10&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;명령어&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px; text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git remote add origin &amp;lt;주소&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;원격저장소에 origin(깃허브 저장소 주소)을 추가하는것&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git remote -v&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;원격저장소에 연결되었는지 확인하는 명령어&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git push -u origin master&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;지역저장소의 브랜치를 원격 저장소의 master브랜치로 push&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (-u)는 지역저장소의 브랜치를 원격 저장소의 master브랜치에 연결하기 위한 것으로 처음에만 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;git pull origin master&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;origin(원격저장소)의 내용을 지역저장소 master 브랜치로 가져옴&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;ssh-keygen&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;ssh키 생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;git push origin &amp;lt;브랜치이름&amp;gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;origin에 브랜치 push&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/99</guid>
      <comments>https://code-nen.tistory.com/99#entry99comment</comments>
      <pubDate>Sat, 27 Jun 2020 23:44:06 +0900</pubDate>
    </item>
    <item>
      <title>깃 설치하는법</title>
      <link>https://code-nen.tistory.com/98</link>
      <description>&lt;p&gt;사이트 - &lt;a href=&quot;https://git-scm.com/&quot;&gt;https://git-scm.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1593262468410&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Git&quot; data-og-description=&quot;&quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/&quot; data-og-url=&quot;https://git-scm.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dIDYGW/hyGy6kmI3q/KD8PMMuPdJ8L2syxFKQuoK/img.png?width=778&amp;amp;height=502&amp;amp;face=0_0_778_502&quot;&gt;&lt;a href=&quot;https://git-scm.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dIDYGW/hyGy6kmI3q/KD8PMMuPdJ8L2syxFKQuoK/img.png?width=778&amp;amp;height=502&amp;amp;face=0_0_778_502');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Git&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;git-scm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;접속!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KdjdE/btqFbkS4Qqp/HSYyYOAcKeo4czJkfVvqfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KdjdE/btqFbkS4Qqp/HSYyYOAcKeo4czJkfVvqfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KdjdE/btqFbkS4Qqp/HSYyYOAcKeo4czJkfVvqfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKdjdE%2FbtqFbkS4Qqp%2FHSYyYOAcKeo4czJkfVvqfk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파일 다운&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bV2Gig/btqFct9BWJp/2nkBqpCFTb8GzrSNqI9Hm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bV2Gig/btqFct9BWJp/2nkBqpCFTb8GzrSNqI9Hm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bV2Gig/btqFct9BWJp/2nkBqpCFTb8GzrSNqI9Hm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbV2Gig%2FbtqFct9BWJp%2F2nkBqpCFTb8GzrSNqI9Hm1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Next!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Vj6x7/btqFafZFfS1/0KGIDIasFeMWvqC8nzaMh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Vj6x7/btqFafZFfS1/0KGIDIasFeMWvqC8nzaMh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Vj6x7/btqFafZFfS1/0KGIDIasFeMWvqC8nzaMh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVj6x7%2FbtqFafZFfS1%2F0KGIDIasFeMWvqC8nzaMh0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Next!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciAVNu/btqFcvfgVvc/HOndqjZYh1C8VFWQUJR7BK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciAVNu/btqFcvfgVvc/HOndqjZYh1C8VFWQUJR7BK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciAVNu/btqFcvfgVvc/HOndqjZYh1C8VFWQUJR7BK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciAVNu%2FbtqFcvfgVvc%2FHOndqjZYh1C8VFWQUJR7BK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Install&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p9eP8/btqFaNhlFGu/FAK99f9KRo5PfrpVaPKI9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p9eP8/btqFaNhlFGu/FAK99f9KRo5PfrpVaPKI9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p9eP8/btqFaNhlFGu/FAK99f9KRo5PfrpVaPKI9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp9eP8%2FbtqFaNhlFGu%2FFAK99f9KRo5PfrpVaPKI9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;윈도우 탐색기에 git이라고 치면 git Bash가 깔려있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wf76O/btqFa7zFMJ3/p3WBFwKgK2CniXEHa2Y3U1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wf76O/btqFa7zFMJ3/p3WBFwKgK2CniXEHa2Y3U1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wf76O/btqFa7zFMJ3/p3WBFwKgK2CniXEHa2Y3U1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWf76O%2FbtqFa7zFMJ3%2Fp3WBFwKgK2CniXEHa2Y3U1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;git이라고 친후 여러 옵션이 표시되면 깃이 제대로 설치된거다.&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/98</guid>
      <comments>https://code-nen.tistory.com/98#entry98comment</comments>
      <pubDate>Sat, 27 Jun 2020 23:01:17 +0900</pubDate>
    </item>
    <item>
      <title>깃 이란??</title>
      <link>https://code-nen.tistory.com/97</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 버전 관리&lt;/p&gt;
&lt;p&gt;깃은 문서를 수정할 때마다 언제 수정했는지, 어떤 것을 변경했는지 편하고 구체적으로 기록하기 위한 버전관리 시스템이다.&lt;/p&gt;
&lt;p&gt;2. 백업하기&lt;/p&gt;
&lt;p&gt;파일이 유실되기 전에 현재 컴퓨터에 있는 자료를 다른 컴퓨터에 복제 하는것. 이때 백업 공간을 제공하는 인터넷 서비스가 있는데, 이런 서비스가 깃허브 이다.&lt;/p&gt;
&lt;p&gt;3. 협업하기&lt;/p&gt;
&lt;p&gt;깃을 사용하여 팀원들이 파일을 편하게 주고받으며 일을 할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;깃 프로그램 종류&lt;/p&gt;
&lt;p&gt;-깃허브 데스크톱&lt;/p&gt;
&lt;p&gt;GUI로된 깃 온라인 저장소 서비스이다, GUI로 되어 쉽게 배울 수 있다는 장점이 있다.&lt;/p&gt;
&lt;p&gt;-토너스 깃&lt;/p&gt;
&lt;p&gt;토너스깃은 윈도우 전용 프로그램으로 윈도우 탐색기의 빠른 메뉴에 추가되는 프로그램이다.&lt;/p&gt;
&lt;p&gt;-소스트리&lt;/p&gt;
&lt;p&gt;깃의 기본 기능부터 고급 기능까지 사용할 수 있는 프로그램이다.&lt;/p&gt;
&lt;p&gt;-커맨드 라인 인터페이스&lt;/p&gt;
&lt;p&gt;터미널 창에 직접 명령을 입력해서 깃을 사용하는 방식입니다, 리눅스 명령어를 알아야함!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>git&amp;amp;github</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/97</guid>
      <comments>https://code-nen.tistory.com/97#entry97comment</comments>
      <pubDate>Sat, 27 Jun 2020 21:46:30 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 물음표 해결 방법, 인코딩</title>
      <link>https://code-nen.tistory.com/96</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MySQL 경로로 간다.&lt;/p&gt;
&lt;p&gt;경로 -&amp;gt; C:/Program Files/MySQL/MySQL Server 5.7&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/78USi/btqE00g5OyK/yON3KYX8d5eO3uvydlP8qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/78USi/btqE00g5OyK/yON3KYX8d5eO3uvydlP8qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/78USi/btqE00g5OyK/yON3KYX8d5eO3uvydlP8qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F78USi%2FbtqE00g5OyK%2FyON3KYX8d5eO3uvydlP8qk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이경로에 my.ini 파일이 있으면 클릭!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;없다면!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C:/&lt;span style=&quot;color: #ee2323;&quot;&gt;ProgramData&lt;/span&gt;/MySQL/MySQL Server 5.7 에 있다!! 필자는 여기에 있었다.&lt;/p&gt;
&lt;p&gt;-&amp;gt;&lt;u&gt;&lt;i&gt;programData입니다!!&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqwor9/btqE13qsxhq/oUIMK6Ru6miEQFOENUgklk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqwor9/btqE13qsxhq/oUIMK6Ru6miEQFOENUgklk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqwor9/btqE13qsxhq/oUIMK6Ru6miEQFOENUgklk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqwor9%2FbtqE13qsxhq%2FoUIMK6Ru6miEQFOENUgklk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클릭 후&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btT5ks/btqE13KL5aU/YbEcRZjTti6zLnjEJxbzkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btT5ks/btqE13KL5aU/YbEcRZjTti6zLnjEJxbzkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btT5ks/btqE13KL5aU/YbEcRZjTti6zLnjEJxbzkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtT5ks%2FbtqE13KL5aU%2FYbEcRZjTti6zLnjEJxbzkK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;default-character-set=utf8&lt;/p&gt;
&lt;p&gt;변경&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mHDyJ/btqE1DZMawF/HDmbXGf1usjNDm1IXRYLk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mHDyJ/btqE1DZMawF/HDmbXGf1usjNDm1IXRYLk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mHDyJ/btqE1DZMawF/HDmbXGf1usjNDm1IXRYLk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmHDyJ%2FbtqE1DZMawF%2FHDmbXGf1usjNDm1IXRYLk0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;basedir 맞는지 확인 후&lt;/p&gt;
&lt;p&gt;character-set-server=utf8&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변경 후 저장 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;윈도우 검색기에 '서비스' 검색 후&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwh9LV/btqE2tIZxgk/SvBFUC7sDQRYUD8BFyHkUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwh9LV/btqE2tIZxgk/SvBFUC7sDQRYUD8BFyHkUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwh9LV/btqE2tIZxgk/SvBFUC7sDQRYUD8BFyHkUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbwh9LV%2FbtqE2tIZxgk%2FSvBFUC7sDQRYUD8BFyHkUK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;MySQL5.7 을 다시 시작하고 mysql을 실행하시면 물음표가 사라져 있을껍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cc1AJy/btqE1uviYvy/04LeK4xjT7c8SpHkDLxIBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cc1AJy/btqE1uviYvy/04LeK4xjT7c8SpHkDLxIBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cc1AJy/btqE1uviYvy/04LeK4xjT7c8SpHkDLxIBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcc1AJy%2FbtqE1uviYvy%2F04LeK4xjT7c8SpHkDLxIBK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 변경 되어 있으면 성공&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgUNiL/btqE00Bvo4p/igphfnJpUFOcVy0zyq7Tl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgUNiL/btqE00Bvo4p/igphfnJpUFOcVy0zyq7Tl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgUNiL/btqE00Bvo4p/igphfnJpUFOcVy0zyq7Tl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgUNiL%2FbtqE00Bvo4p%2FigphfnJpUFOcVy0zyq7Tl0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/DB</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/96</guid>
      <comments>https://code-nen.tistory.com/96#entry96comment</comments>
      <pubDate>Mon, 22 Jun 2020 13:03:30 +0900</pubDate>
    </item>
    <item>
      <title>putty 명령어 모음</title>
      <link>https://code-nen.tistory.com/93</link>
      <description>&lt;p&gt;&lt;span&gt;방화벽 설치 확인&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;rpm -qa | grep firewalld&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;방화벽 설치 링크 -&lt;a href=&quot;https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html&quot;&gt;https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592396175082&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;RHEL/CentOS 7 에서 방화벽(firewalld) 설정하기&quot; data-og-description=&quot;포트 추가/변경, IP 추가/변경는 --reload 옵션을 실행해야 반영됨.&quot; data-og-host=&quot;www.lesstif.com&quot; data-og-source-url=&quot;https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html&quot; data-og-url=&quot;https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.lesstif.com/system-admin/rhel-centos-7-firewalld-22053128.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;RHEL/CentOS 7 에서 방화벽(firewalld) 설정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;포트 추가/변경, IP 추가/변경는 --reload 옵션을 실행해야 반영됨.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.lesstif.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;방화벽 시작&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;systemctl start firewalld&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;방화벽 활성화&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;systemctl enable firewalld&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;방화벽 비활성화&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;sudo&amp;nbsp;systemctl disable firewalld&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;방화벽 중지&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;systemctl stop firewalld&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;포트 추가&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;firewall-cmd --permanent --zone=public --add-port=3306/tcp&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방화벽 리로드&lt;/p&gt;
&lt;p&gt;firewall-cmd --reload&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용가능한 포트/서비스&lt;/p&gt;
&lt;p&gt;firewall-cmd --list-all&lt;/p&gt;</description>
      <category>코딩/server</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/93</guid>
      <comments>https://code-nen.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 17 Jun 2020 21:17:46 +0900</pubDate>
    </item>
    <item>
      <title>네이버클라우드플렛폼 서버 만들기</title>
      <link>https://code-nen.tistory.com/92</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnqaYX/btqETBG2Kt2/64ogVnSGeMbOGbkhK6yPg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnqaYX/btqETBG2Kt2/64ogVnSGeMbOGbkhK6yPg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnqaYX/btqETBG2Kt2/64ogVnSGeMbOGbkhK6yPg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnqaYX%2FbtqETBG2Kt2%2F64ogVnSGeMbOGbkhK6yPg0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;네이버 클라우드 플랫폼에 접속을한다.&lt;/p&gt;
&lt;p&gt;주소 -&amp;gt; &lt;a href=&quot;https://www.ncloud.com/&quot;&gt;https://www.ncloud.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592293977964&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;NAVER CLOUD PLATFORM&quot; data-og-description=&quot;cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification&quot; data-og-host=&quot;www.ncloud.com&quot; data-og-source-url=&quot;https://www.ncloud.com/&quot; data-og-url=&quot;https://www.ncloud.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdvAW7/hyGrwvW0UP/KUPKSU3MV7KBp2Q2OR2ol0/img.jpg?width=526&amp;amp;height=274&amp;amp;face=0_0_526_274&quot;&gt;&lt;a href=&quot;https://www.ncloud.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.ncloud.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdvAW7/hyGrwvW0UP/KUPKSU3MV7KBp2Q2OR2ol0/img.jpg?width=526&amp;amp;height=274&amp;amp;face=0_0_526_274');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;NAVER CLOUD PLATFORM&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;cloud computing services for corporations, IaaS, PaaS, SaaS, with Global region and Security Technology Certification&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.ncloud.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;로그인을 하시면 오른쪽 상단위에 콘솔을 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtMHUc/btqETCMLgcp/bsvOQ9Of2wosjgrgl5CVr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtMHUc/btqETCMLgcp/bsvOQ9Of2wosjgrgl5CVr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtMHUc/btqETCMLgcp/bsvOQ9Of2wosjgrgl5CVr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtMHUc%2FbtqETCMLgcp%2FbsvOQ9Of2wosjgrgl5CVr0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CV5XR/btqESq0KNKc/GETwXIwzzMyl8edHaqJJdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CV5XR/btqESq0KNKc/GETwXIwzzMyl8edHaqJJdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CV5XR/btqESq0KNKc/GETwXIwzzMyl8edHaqJJdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCV5XR%2FbtqESq0KNKc%2FGETwXIwzzMyl8edHaqJJdk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Products&amp;amp;Services 클릭후 server를 클릭한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xl1oV/btqERQlk80b/9XdWTNPZn5xJpkrV1nUyB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xl1oV/btqERQlk80b/9XdWTNPZn5xJpkrV1nUyB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xl1oV/btqERQlk80b/9XdWTNPZn5xJpkrV1nUyB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXl1oV%2FbtqERQlk80b%2F9XdWTNPZn5xJpkrV1nUyB0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;서버생성을 클릭!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클릭 후, 자신이 원하는 걸 선택&lt;/p&gt;
&lt;p&gt;필자는 MySQL을 선택했다. 지금 서버를 생성하면 3개월 무료 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;10만원 들어오는걸로 알고있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgQYNg/btqEShps1Ga/MKxTFUaYMWBaD9ywMl7cT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgQYNg/btqEShps1Ga/MKxTFUaYMWBaD9ywMl7cT1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgQYNg/btqEShps1Ga/MKxTFUaYMWBaD9ywMl7cT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgQYNg%2FbtqEShps1Ga%2FMKxTFUaYMWBaD9ywMl7cT1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;월요금제는 항상 서버를 켜놓고있으면 월요금제가 싸고, 원할때 마다 키면서 사용하면 시간 요금제가 싸다!&lt;/p&gt;
&lt;p&gt;서버이름은 서버에서의 데이터베이스 이름이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxFEl0/btqERQTd3Vp/zJcvBHIhEWIjcD8LsQ8oRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxFEl0/btqERQTd3Vp/zJcvBHIhEWIjcD8LsQ8oRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxFEl0/btqERQTd3Vp/zJcvBHIhEWIjcD8LsQ8oRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxFEl0%2FbtqERQTd3Vp%2FzJcvBHIhEWIjcD8LsQ8oRK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인증키를 이미 있으면 선택할 수 있고 새로 생성을한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dgoxZi/btqESHH1ijx/b7f20qzsKNJiLcmZ3WdT11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dgoxZi/btqESHH1ijx/b7f20qzsKNJiLcmZ3WdT11/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dgoxZi/btqESHH1ijx/b7f20qzsKNJiLcmZ3WdT11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdgoxZi%2FbtqESHH1ijx%2Fb7f20qzsKNJiLcmZ3WdT11%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;필자는 이미 만들어둔 상태지만 신규 ACG를 생성하면 될 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3QBd2/btqERsLLjyi/hKBFHTyEKGXIsWeqi0eM21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3QBd2/btqERsLLjyi/hKBFHTyEKGXIsWeqi0eM21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3QBd2/btqERsLLjyi/hKBFHTyEKGXIsWeqi0eM21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3QBd2%2FbtqERsLLjyi%2FhKBFHTyEKGXIsWeqi0eM21%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음을 누른 후 서버 생성을 클릭하면 서버가 생성된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dPsiuE/btqESgD56x8/ZNiEXUSkrrSsGflp0tmk4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dPsiuE/btqESgD56x8/ZNiEXUSkrrSsGflp0tmk4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dPsiuE/btqESgD56x8/ZNiEXUSkrrSsGflp0tmk4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdPsiuE%2FbtqESgD56x8%2FZNiEXUSkrrSsGflp0tmk4k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩/server</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/92</guid>
      <comments>https://code-nen.tistory.com/92#entry92comment</comments>
      <pubDate>Tue, 16 Jun 2020 17:02:15 +0900</pubDate>
    </item>
    <item>
      <title>외부 통신 크로스 도메인 해결 방법</title>
      <link>https://code-nen.tistory.com/91</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CROS 도메인 에러는 외부 자료를 가져올때 발생한다.&lt;/p&gt;
&lt;p&gt;-HTTPS에서 HTTP 자료를 가져올때&lt;/p&gt;
&lt;p&gt;-서로 다른 도메인에서 자료를 가져올때&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;만들고 있는 포트폴리오 중에서 동적인 자료를 만드는데 사용할때&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QgaT8/btqEPvuvoJw/GY2Q1AtzvjQk3mJQMXLXaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QgaT8/btqEPvuvoJw/GY2Q1AtzvjQk3mJQMXLXaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QgaT8/btqEPvuvoJw/GY2Q1AtzvjQk3mJQMXLXaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQgaT8%2FbtqEPvuvoJw%2FGY2Q1AtzvjQk3mJQMXLXaK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;크로스 도메인 에러로 다음 자료가 가져와지지 않는다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해결방법은 3가지로&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://infotake.tistory.com/88&quot;&gt;https://infotake.tistory.com/88&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592184345140&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Javascript] 자바스크립트 Ajax 외부 통신 크로스 도메인 해결 - CORS&quot; data-og-description=&quot;촌놈입니다! 웹 개발들 많이 하시죠? 제가 웹 개발을 처음 할때는 IE6 - 익스플로러6 이 대다수 사용하고 있었는데 지금은 대세가 Chrome으로 바뀌고 익스플로러도 Edge 까지 나왔으니 정말 많이 변��&quot; data-og-host=&quot;infotake.tistory.com&quot; data-og-source-url=&quot;https://infotake.tistory.com/88&quot; data-og-url=&quot;https://infotake.tistory.com/88&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/LhFJF/hyGoWXvRIJ/Ww8x9Av3TEYU8Kammafl3K/img.png?width=500&amp;amp;height=249&amp;amp;face=0_0_500_249,https://scrap.kakaocdn.net/dn/cWiErw/hyGqa7HO2H/2cKbqcpfVz9LvVp1iLYS81/img.png?width=500&amp;amp;height=249&amp;amp;face=0_0_500_249,https://scrap.kakaocdn.net/dn/tZhyu/hyGqi5KkeV/Iv1YneIVVNz8js7yqEal5k/img.jpg?width=580&amp;amp;height=435&amp;amp;face=0_0_580_435&quot;&gt;&lt;a href=&quot;https://infotake.tistory.com/88&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://infotake.tistory.com/88&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/LhFJF/hyGoWXvRIJ/Ww8x9Av3TEYU8Kammafl3K/img.png?width=500&amp;amp;height=249&amp;amp;face=0_0_500_249,https://scrap.kakaocdn.net/dn/cWiErw/hyGqa7HO2H/2cKbqcpfVz9LvVp1iLYS81/img.png?width=500&amp;amp;height=249&amp;amp;face=0_0_500_249,https://scrap.kakaocdn.net/dn/tZhyu/hyGqi5KkeV/Iv1YneIVVNz8js7yqEal5k/img.jpg?width=580&amp;amp;height=435&amp;amp;face=0_0_580_435');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Javascript] 자바스크립트 Ajax 외부 통신 크로스 도메인 해결 - CORS&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;촌놈입니다! 웹 개발들 많이 하시죠? 제가 웹 개발을 처음 할때는 IE6 - 익스플로러6 이 대다수 사용하고 있었는데 지금은 대세가 Chrome으로 바뀌고 익스플로러도 Edge 까지 나왔으니 정말 많이 변��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;infotake.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기에 잘 나와있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;필자는 일단 맨 마지막 방법인 jQUERY 기반 플러그인을 사용해보려 한다.&lt;/p&gt;
&lt;p&gt;이방법은 너무 바꿀께 많아서&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;xdomain.js 파일을 다운받아&lt;/p&gt;
&lt;p&gt;요청하는 url에 붙여주는 방식을 사용했다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwZN28/btqERQjWoiS/SwFiRnov2SLaMwdVKE7iUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwZN28/btqERQjWoiS/SwFiRnov2SLaMwdVKE7iUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwZN28/btqERQjWoiS/SwFiRnov2SLaMwdVKE7iUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwZN28%2FbtqERQjWoiS%2FSwFiRnov2SLaMwdVKE7iUk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>코딩/Jquery</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/91</guid>
      <comments>https://code-nen.tistory.com/91#entry91comment</comments>
      <pubDate>Mon, 15 Jun 2020 14:43:54 +0900</pubDate>
    </item>
    <item>
      <title>eclipse 파일 불러오기(import)</title>
      <link>https://code-nen.tistory.com/89</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;구글링해서 가져온 디자인 템플릿을 eclipse로 가져오고 싶다면 일단&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oHSrI/btqEjoWgC8i/akrsqGr54lVWd7bcHrNxu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oHSrI/btqEjoWgC8i/akrsqGr54lVWd7bcHrNxu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oHSrI/btqEjoWgC8i/akrsqGr54lVWd7bcHrNxu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoHSrI%2FbtqEjoWgC8i%2FakrsqGr54lVWd7bcHrNxu0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이런 프로젝트 파일이 있는데&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;dynamic web project에 오른쪽 클릭 -&amp;gt; import -&amp;gt; import&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/37768/btqEhP1CjaW/jkOothPnVodQkylRAqRkSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/37768/btqEhP1CjaW/jkOothPnVodQkylRAqRkSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/37768/btqEhP1CjaW/jkOothPnVodQkylRAqRkSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F37768%2FbtqEhP1CjaW%2FjkOothPnVodQkylRAqRkSk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;General 에서 file system 선택&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tr3CD/btqEg0IZxiX/ohmbuTK9msdX6aacb7Ogtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tr3CD/btqEg0IZxiX/ohmbuTK9msdX6aacb7Ogtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tr3CD/btqEg0IZxiX/ohmbuTK9msdX6aacb7Ogtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftr3CD%2FbtqEg0IZxiX%2FohmbuTK9msdX6aacb7Ogtk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;가져오기 원하는 파일들의 상위폴더 프로젝트를 폴더선택&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6U739/btqEjqsXL1l/6Vs1Glw2pndkgRQjFvJmaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6U739/btqEjqsXL1l/6Vs1Glw2pndkgRQjFvJmaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6U739/btqEjqsXL1l/6Vs1Glw2pndkgRQjFvJmaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6U739%2FbtqEjqsXL1l%2F6Vs1Glw2pndkgRQjFvJmaK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;전체를 select All 한후 finish&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mf6LR/btqEjDyR9z9/oBNqtDOlPkhYxNFy3fKTO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mf6LR/btqEjDyR9z9/oBNqtDOlPkhYxNFy3fKTO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mf6LR/btqEjDyR9z9/oBNqtDOlPkhYxNFy3fKTO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmf6LR%2FbtqEjDyR9z9%2FoBNqtDOlPkhYxNFy3fKTO1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;정상적으로 잘들어가진걸 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLrri6/btqEjqGyzek/uM2XUiMRA0xWyzwsAC9Hn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLrri6/btqEjqGyzek/uM2XUiMRA0xWyzwsAC9Hn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLrri6/btqEjqGyzek/uM2XUiMRA0xWyzwsAC9Hn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLrri6%2FbtqEjqGyzek%2FuM2XUiMRA0xWyzwsAC9Hn1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IDE/eclipse 설정</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/89</guid>
      <comments>https://code-nen.tistory.com/89#entry89comment</comments>
      <pubDate>Thu, 21 May 2020 09:22:11 +0900</pubDate>
    </item>
    <item>
      <title>조치 우선순위 결정(애플리케이션테스트수행)</title>
      <link>https://code-nen.tistory.com/84</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;소프트웨어 테스트 기법&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. 단위 테스트 기법&lt;/p&gt;
&lt;p&gt;&amp;nbsp;1) JUnit을 활용한 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;java 환경이라면 대부분 JUnit이라는 단위 테스트 프레임워크를 통해 표와 같이 단위 테스트를 할 수 있어야 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yfaY5/btqDOI8kzzR/oEe8mlp9SD8V1SiNpPCQfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yfaY5/btqDOI8kzzR/oEe8mlp9SD8V1SiNpPCQfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yfaY5/btqDOI8kzzR/oEe8mlp9SD8V1SiNpPCQfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyfaY5%2FbtqDOI8kzzR%2FoEe8mlp9SD8V1SiNpPCQfK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;2) Mock 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(가) 단위 테스트 시 Mock객체를 사용하여 테스트 하는 기법을 말하며, 특정 기능 또는 모듈에 대한 응답 결과를&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;미리 정의해 놓고 테스트한다. 이는 특정 모듈이나 기능이 완벽히 개발 완료되지 않은 상태에서도 진행할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(나) 테스트 전용 객체를 테스트 더블 이라고 부르며, 이는 테스트를 위해 실제 객체를 대신해서 사용되는 용어이고 객체 유형은 표와 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/esUDml/btqDPLwJjE1/mkQvKmudshcUYMbRkDkOj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/esUDml/btqDPLwJjE1/mkQvKmudshcUYMbRkDkOj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/esUDml/btqDPLwJjE1/mkQvKmudshcUYMbRkDkOj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FesUDml%2FbtqDPLwJjE1%2FmkQvKmudshcUYMbRkDkOj1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XSbql/btqDL3FPUcd/Z3NQf2WyzeDUz3CKpfdg0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XSbql/btqDL3FPUcd/Z3NQf2WyzeDUz3CKpfdg0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XSbql/btqDL3FPUcd/Z3NQf2WyzeDUz3CKpfdg0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXSbql%2FbtqDL3FPUcd%2FZ3NQf2WyzeDUz3CKpfdg0k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3njxc/btqDNnjhUS7/KNkclGiEw2KCxsHl8EFu7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3njxc/btqDNnjhUS7/KNkclGiEw2KCxsHl8EFu7K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3njxc/btqDNnjhUS7/KNkclGiEw2KCxsHl8EFu7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3njxc%2FbtqDNnjhUS7%2FKNkclGiEw2KCxsHl8EFu7K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d8VWVB/btqDOjOtlxk/OubqT91QZQBenWZ8lD9Ihk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d8VWVB/btqDOjOtlxk/OubqT91QZQBenWZ8lD9Ihk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d8VWVB/btqDOjOtlxk/OubqT91QZQBenWZ8lD9Ihk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd8VWVB%2FbtqDOjOtlxk%2FOubqT91QZQBenWZ8lD9Ihk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GoPgl/btqDMHPOOXC/A8HZwiAwTX305PkzQmQWU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GoPgl/btqDMHPOOXC/A8HZwiAwTX305PkzQmQWU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GoPgl/btqDMHPOOXC/A8HZwiAwTX305PkzQmQWU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGoPgl%2FbtqDMHPOOXC%2FA8HZwiAwTX305PkzQmQWU0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dXeeGN/btqDOk7EJWs/aamTkfjBOnc94hknMivBh0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dXeeGN/btqDOk7EJWs/aamTkfjBOnc94hknMivBh0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dXeeGN/btqDOk7EJWs/aamTkfjBOnc94hknMivBh0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdXeeGN%2FbtqDOk7EJWs%2FaamTkfjBOnc94hknMivBh0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wVSxl/btqDMjhqbj3/kcImDMlP1Pj2g4GMcXMQZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wVSxl/btqDMjhqbj3/kcImDMlP1Pj2g4GMcXMQZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wVSxl/btqDMjhqbj3/kcImDMlP1Pj2g4GMcXMQZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwVSxl%2FbtqDMjhqbj3%2FkcImDMlP1Pj2g4GMcXMQZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nhGxZ/btqDNnKkZK7/PJiNPtEFgzP9D1TJ5lb3U1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nhGxZ/btqDNnKkZK7/PJiNPtEFgzP9D1TJ5lb3U1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nhGxZ/btqDNnKkZK7/PJiNPtEFgzP9D1TJ5lb3U1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnhGxZ%2FbtqDNnKkZK7%2FPJiNPtEFgzP9D1TJ5lb3U1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsAFc1/btqDO17GN2L/ns3Xju6f48CBVJNAVXKnW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsAFc1/btqDO17GN2L/ns3Xju6f48CBVJNAVXKnW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsAFc1/btqDO17GN2L/ns3Xju6f48CBVJNAVXKnW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsAFc1%2FbtqDO17GN2L%2Fns3Xju6f48CBVJNAVXKnW0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KVanR/btqDLDN5Yaz/x8LBZ000S4KGcTOCYpenX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KVanR/btqDLDN5Yaz/x8LBZ000S4KGcTOCYpenX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KVanR/btqDLDN5Yaz/x8LBZ000S4KGcTOCYpenX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKVanR%2FbtqDLDN5Yaz%2Fx8LBZ000S4KGcTOCYpenX0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HAOOO/btqDMktMo9s/kokXUGACWxkpUGm3VeQZvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HAOOO/btqDMktMo9s/kokXUGACWxkpUGm3VeQZvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HAOOO/btqDMktMo9s/kokXUGACWxkpUGm3VeQZvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHAOOO%2FbtqDMktMo9s%2FkokXUGACWxkpUGm3VeQZvk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF0byg/btqDMHvygMi/KbHBK2SabUDKjQOYJkdJaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF0byg/btqDMHvygMi/KbHBK2SabUDKjQOYJkdJaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF0byg/btqDMHvygMi/KbHBK2SabUDKjQOYJkdJaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF0byg%2FbtqDMHvygMi%2FKbHBK2SabUDKjQOYJkdJaK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>정보처리산업기사 필기 공부/애플리케이션 테스트 수행</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/84</guid>
      <comments>https://code-nen.tistory.com/84#entry84comment</comments>
      <pubDate>Wed, 29 Apr 2020 12:48:55 +0900</pubDate>
    </item>
    <item>
      <title>결함관리(애플리케이션테스트수행)</title>
      <link>https://code-nen.tistory.com/83</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;결함의 정의&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. 결함은 프로그램과 명세서 간의 차이, 업무 내용 불일치이다.&lt;/p&gt;
&lt;p&gt;2. 결함은 기대 결과와 실제 관찰 결과 간의 차이이다.&lt;/p&gt;
&lt;p&gt;3. 시스템이 사용자가 기대하는 타당한 기대치를 만족시키지 못할 때 변경이 필요한 모든 것은 결함이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;결함관리 프로세스&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bC3Gbs/btqDOjOr65z/2isA1y9bhMR4MTI9pOb3O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bC3Gbs/btqDOjOr65z/2isA1y9bhMR4MTI9pOb3O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bC3Gbs/btqDOjOr65z/2isA1y9bhMR4MTI9pOb3O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbC3Gbs%2FbtqDOjOr65z%2F2isA1y9bhMR4MTI9pOb3O1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 결함관리 계획&lt;/p&gt;
&lt;p&gt;결함관리 계획은 전체 프로세스에서 결함관리에 대한 일정, 인력, 업무 프로세스를 확보하여 계획을 수립하는 것을 말한다.&lt;/p&gt;
&lt;p&gt;2. 결함 기록&lt;/p&gt;
&lt;p&gt;테스터는 발견된 결함에 대한 정보를 결함관리 DB에 기록한다.&lt;/p&gt;
&lt;p&gt;3. 결함 검토&lt;/p&gt;
&lt;p&gt;등록된 결함에 있어서 주요 내용을 검토하고, 결함을 수정할 개발자에게 전달한다.&lt;/p&gt;
&lt;p&gt;4. 결함 수정&lt;/p&gt;
&lt;p&gt;개발자는 할당된 결함의 프로그램을 수정한다.&lt;/p&gt;
&lt;p&gt;5. 결함 재확인&lt;/p&gt;
&lt;p&gt;테스터는 개발자가 수정한 내용을 확인하고 다시 테스트를 수행한다.&lt;/p&gt;
&lt;p&gt;6. 결함 상태 추적 및 모니터링 활동&lt;/p&gt;
&lt;p&gt;결함관리 팀장은 결함관리 데이터베이스를 이용하여 대시보드 또는 게시판 형태의 서비스를 제공한다.&lt;/p&gt;
&lt;p&gt;7. 최종 결함 분석 및 보고서 작성&lt;/p&gt;
&lt;p&gt;발견된 결함에 대한 내용과 이해관계자들의 의견이 반영된 보고서를 작성하고 결함관리를 종료한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;결함의 상태 및 추적&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;결함은 여러 상태를 가지고 있으며, 이 상태의 변화를 지속적으로 추적 관리하는 것이 결함관리의 주요 작업중 하나이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wPCd5/btqDMj2IbNh/yvIFads4bY8Em32Kt5kPqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wPCd5/btqDMj2IbNh/yvIFads4bY8Em32Kt5kPqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wPCd5/btqDMj2IbNh/yvIFads4bY8Em32Kt5kPqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwPCd5%2FbtqDMj2IbNh%2FyvIFads4bY8Em32Kt5kPqK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 결함 등록&lt;/p&gt;
&lt;p&gt;테스터와 품질관리(QA) 담장자에 의해 결함이 처음 발견되어 등록되었지만, 아직 분석이 되지 않은 상태이다.&lt;/p&gt;
&lt;p&gt;2. 결함 검토&lt;/p&gt;
&lt;p&gt;등록된 결함을 담당 모듈 개발자, 테스터, 프로그램 리더, 품질 관리(QA) 담당자와 검토하는 상태이다.&lt;/p&gt;
&lt;p&gt;3. 결함 할당&lt;/p&gt;
&lt;p&gt;결함의 영향 분석 및 수정을 위해 개발자와 문제 해결 담당자에게 할당된 상태이다.&lt;/p&gt;
&lt;p&gt;4. 결함 수정&lt;/p&gt;
&lt;p&gt;개발자에 의해 결함 수정이 완료된 상태이다.&lt;/p&gt;
&lt;p&gt;5. 결함 조치 보류&lt;/p&gt;
&lt;p&gt;수정이 필요한 결함이지만 현재 수정이 불가능해서 연기된 상태로서 우선순위, 일정 등을 고려하여 재오픈을 준비하는 상태이다.&lt;/p&gt;
&lt;p&gt;6. 결함 종료&lt;/p&gt;
&lt;p&gt;발견된 결함이 해결되고 테스터와 품질 관리(QA) 담당자에 의해 종료 승인을 한 상태이다.&lt;/p&gt;
&lt;p&gt;7. 결함 해제&lt;/p&gt;
&lt;p&gt;테스터, 프로그램 리더, 품질 관리 담당자가 결함을 검토한 결과, 결함이 아니라고 판명된 경우이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;결함 분류&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;결함은 여러 가지 유형으로 나뉘며, 결함을 분석하는 단계에서 이러한 유형을 나누어야 한다. 결함 유형은 시스템 결함, 기능 결함, GUI 결함, 문서 결함 등 크게 4가지 유형으로 분류된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 시스템 결함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;비정상적인 종료/중단, 응답 시간 지연, 데이터베이스 에러 등 주로 애플리케이션 환경과 데이터베이스 처리에서 발생하는 결함을 말한다.&lt;/p&gt;
&lt;p&gt;1) 비정상적인 종류/중단&lt;/p&gt;
&lt;p&gt;&amp;nbsp;특정 기능 실행 시 응용 프로그램의 작동 정지, 종료, 시스템 다운이 되는 경우이다.&lt;/p&gt;
&lt;p&gt;2) 응답 시간 지연&lt;/p&gt;
&lt;p&gt;&amp;nbsp;응용 프로그램 작동 후 조회 또는 보고서 출력 시 지연되는 경우와 메모리 부족, 하드웨어와 소프트웨어의 비일관성&lt;/p&gt;
&lt;p&gt;&amp;nbsp;으로 발생되는 경우이다.&lt;/p&gt;
&lt;p&gt;3) 데이터베이스 에러&lt;/p&gt;
&lt;p&gt;&amp;nbsp;응용 프로그램 작동 후 사용자 데이터의 등록, 수정, 삭제, 조회가 정상적으로 작동하지 않는 경우이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 기능 결함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;사용자의 요구사항 미반영/불일치, 부정확한 비즈니스 프로세스, 스크립트 에러, 타 시스템 연동시 오류 등 기획, 설계, 업무 시나리오 단계에서 발생된 결함을 말한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 요구사항 미반영/불일치&lt;/p&gt;
&lt;p&gt;&amp;nbsp;요구사항에 명시된 기능이 응용 프로그램에 구현되지 않은 경우와, 다르게 구현되어 작동하는 경우이다.&lt;/p&gt;
&lt;p&gt;2) 부정확한 비즈니스 프로세스&lt;/p&gt;
&lt;p&gt;&amp;nbsp;기능 자체는 수행되나 내부 프로세스 로직의 문제로 부정확한 결과를 내는 경우이다.&lt;/p&gt;
&lt;p&gt;3) 스크립트 에러&lt;/p&gt;
&lt;p&gt;&amp;nbsp;특정 기능 실행 시 웹 브라우저에서 스크립트 오류가 발생하는 경우이다.&lt;/p&gt;
&lt;p&gt;4) 타 시스템 연동 시 오류&lt;/p&gt;
&lt;p&gt;&amp;nbsp;기존 시스템과의 연동을 통해 데이터를 주고받는 과정에서 오류가 발생하는 경우이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. GUI 결함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;GUI 결함은 응용 프로그램의 UI 비일관성, 부정확한 커서/메시지, 데이터 타입의 표시 오류 등으로 사용자 화면 설계에서 발생된 결함을 말한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 응용 프로그램 UI 비일관성&lt;/p&gt;
&lt;p&gt;프로젝트에서 정의한 UI 표준과 상이하게 구현된 경우이다.&lt;/p&gt;
&lt;p&gt;2) 부정확한 커서/메시지&lt;/p&gt;
&lt;p&gt;커서의 위치가 입력 대상의 첫 번째 필드에 위치해 있지 않거나, 탭 시퀀스가 순차적으로 동작하지 않는 경우, 각 기능에서 제공하는 메시지 내용이 부정확한 내용을 보여주는 경우이다.&lt;/p&gt;
&lt;p&gt;3) 데이터 타입의 표시 오류&lt;/p&gt;
&lt;p&gt;입력 필드에 지정된 형식과 다르게 입력해도 저장이 되는 경우와 입력 필드에 유효하지 않은 데이터(Invalid Data)를 입력했을 때 오류가 나는 경우이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 문서 결함&lt;/p&gt;
&lt;p&gt;&amp;nbsp;기획자, 사용자, 개발자 간의 의사소통과 기록이 원활하지 않은 경우에 발생하는 결함으로 사용자의 온라인/오프라인 매뉴얼의 불일치, 요구사항 분석서와 기능 요구사항의 불일치로 인한 불완전한 상태의 문서의 경우를 말한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yARwn/btqDOJe57Wr/pnadOzowzSWGd8vtfmPsx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yARwn/btqDOJe57Wr/pnadOzowzSWGd8vtfmPsx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yARwn/btqDOJe57Wr/pnadOzowzSWGd8vtfmPsx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyARwn%2FbtqDOJe57Wr%2FpnadOzowzSWGd8vtfmPsx0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>정보처리산업기사 필기 공부/애플리케이션 테스트 수행</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/83</guid>
      <comments>https://code-nen.tistory.com/83#entry83comment</comments>
      <pubDate>Wed, 29 Apr 2020 12:42:29 +0900</pubDate>
    </item>
    <item>
      <title>테스트 수행(애플리케이션테스트수행)</title>
      <link>https://code-nen.tistory.com/82</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;테스트의 개요&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;테스트 과정에 필요한 역할은 소프트웨어 아키텍트와 테스트 매니저이다. 그림과 같이 두 역할은 소프트웨어 생명 주기(Life Cycle)의 V 모델에서 각각 좌측과 우측의 핵심 역할을 담당하고 서로 보완 관계에 있다.&lt;/p&gt;
&lt;p&gt;소프트웨어 생명 주기는 요구사항, 분석, 디자인, 구현 또는 개발 순으로 진행되며, 프로젝트 특성과 방법론에 따라 반복적(Iteration)으로 수행하는 경우도 있다.&lt;/p&gt;
&lt;p&gt;테스트는 단위 테스트, 통합 테스트, 시스템 테스트, 인수 테스트의 순으로 진행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cka5ng/btqDMjIrTU3/HFWE8kokuRf17Cvk0e1Y9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cka5ng/btqDMjIrTU3/HFWE8kokuRf17Cvk0e1Y9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cka5ng/btqDMjIrTU3/HFWE8kokuRf17Cvk0e1Y9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcka5ng%2FbtqDMjIrTU3%2FHFWE8kokuRf17Cvk0e1Y9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 프로젝트 수행 단계에 따른 테스트의 분류&lt;/p&gt;
&lt;p&gt;1) 단위 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;작은 소프트웨어 단위(컴포넌트 또는 모듈)를 테스트하는 것으로서, 일반적으로 개발자 자신에 의해 행해진다. 과거에는 시간 부족을 이유로 단위 테스트가 생략되었으나 최근에는 개발 도구의 발전으로 개발 과정 중에 자동으로 진행된다. 단위 테스트는 아주 중요한 부분이므로 개발 도구에서 지원하지 않아도 반드시 수행해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) 통합 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;모듈 사이의 인터페이스, 통합된 컴포넌트 간의 상호 작용을 테스트하는 것으로, 하나의 프로세스가 완성된 경우 부분적으로 통합 테스트를 수행하는 경우도 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) 시스템 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;통합된 단위 시스템의 기능이 시스템에서 정상적으로 수행되는지를 테스트 하는 것으로 성능 및 장애 테스트가 여기에 포함된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) 인수 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;일반적으로 최종 사용자와 업무에 따른 이해관계자 등이 테스트를 수행함으로써 개발된 제품에 대해 운영 여부를 결정하는 테스트로, 실제 업무 적용 전에 수행한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;프로젝트 수행 단계에 따른 테스트의 접근 방법&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;1. 단위 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;테스트 가능한 단위로 작게 분리된 소프트웨어 내에서 결함을 찾고 기능을 검증하는 테스트 활동이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 특징&lt;/p&gt;
&lt;p&gt;&amp;nbsp;구조적 테스트, 기능성 테스트, 리소스 관련 테스트, 강건성 테스트 등 특정 비기능성 테스트 등이 포함되어 수행되며, 컴포넌트 명세, 소프트웨어 상세설계, 데이터 모델 명세 등을 이용하여 테스트한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) 방법과 목적&lt;/p&gt;
&lt;p&gt;&amp;nbsp;단위 테스트는 구조 기반과 명세 기반 테스트로 나누어지며, 표 와 같이 기본적으로 개발된 코드 및 모듈의 범위 내에서 정상적인 작동과 사용자의 요구사항 등을 테스트하는 데 목적이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; (가) 구조 기반은 업무 단위별 제어 흐름과 조건 결정에 따른 결과를 테스트하는 데 목적이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; (나) 명세 기반은 동등 분할과 경계 값 분석을 위하여 사용자의 입력, 출력, 내부 이벤트 등을 확인하는 데 목적이 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWkbpP/btqDMHWxTZ3/XqO8UVVBnkIwKmvpuFWQ61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWkbpP/btqDMHWxTZ3/XqO8UVVBnkIwKmvpuFWQ61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWkbpP/btqDMHWxTZ3/XqO8UVVBnkIwKmvpuFWQ61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWkbpP%2FbtqDMHWxTZ3%2FXqO8UVVBnkIwKmvpuFWQ61%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;2. 통합 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;통합 테스트는 컴포넌트 간 인터페이스 테스트를 하고 운영체제(OS), 파일 시스템, 하드웨어 또는 시스템 간 인터페이스와 같은 각각 다른 부분과 상호 연동이 정상적으로 작동하는지 여부를 테스트한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 특징&lt;/p&gt;
&lt;p&gt;&amp;nbsp;일반적으로 빅뱅 방식보다는 순차적(Incremental) 형태와 아키텍처에 대한 이해를 바탕으로 진행한다.&lt;/p&gt;
&lt;p&gt;2) 종류&lt;/p&gt;
&lt;p&gt;&amp;nbsp;빅뱅, 상향, 하향, 샌드위치, Central, Collaboration, 레이어 통합 등의 테스트가 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 시스템 테스트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;컴퓨터 시스템을 완벽하게 검사하기 위한 목적 또는 성능 목표를 가지고 테스트한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 특징&lt;/p&gt;
&lt;p&gt;&amp;nbsp;시스템 테스트는 개발 프로젝트 차원에서 정의된 전체 시스템의 동작과 관련되어 있다. 환경 제한적 장애 관련 리스크를 최소화하기 위하여 실제의 최종 사용자 환경과 유사하게 시스템 성능, 관련된 고객의 기능, 비기능적인 요구사항 등이 완벽하게 수행 되는지를 테스트하며, 이때 요구사항 명세서, 비즈니스 절차, 유스케이스, 리스크 분석 결과 등을 이용한다.&lt;/p&gt;
&lt;p&gt;2) 테스트 방법&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDl3NO/btqDMjuQbbs/F22n2GPrbxg684tFfEz1jK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDl3NO/btqDMjuQbbs/F22n2GPrbxg684tFfEz1jK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDl3NO/btqDMjuQbbs/F22n2GPrbxg684tFfEz1jK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDl3NO%2FbtqDMjuQbbs%2FF22n2GPrbxg684tFfEz1jK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 인수 테스트&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ostrP/btqDOH9mWE7/pwKhbpGlTMxQTMO4IFL290/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ostrP/btqDOH9mWE7/pwKhbpGlTMxQTMO4IFL290/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ostrP/btqDOH9mWE7/pwKhbpGlTMxQTMO4IFL290/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FostrP%2FbtqDOH9mWE7%2FpwKhbpGlTMxQTMO4IFL290%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QVEtA/btqDOImUF32/Wc1QXAynQcZ9E6gS4bh2kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QVEtA/btqDOImUF32/Wc1QXAynQcZ9E6gS4bh2kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QVEtA/btqDOImUF32/Wc1QXAynQcZ9E6gS4bh2kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQVEtA%2FbtqDOImUF32%2FWc1QXAynQcZ9E6gS4bh2kK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;테스트 자동화 도구&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 배경&lt;/p&gt;
&lt;p&gt;&amp;nbsp;소프트웨어 테스트는 소프트웨어 개발에 소요되는 총 시간과 비용의 절반 이상을 차지하기도 할 정도로 많은 자원이 투입되는 프로세스이다. 따라서 테스트의 정확성을 유지하면서 시간과 비용을 줄일 수 있는 자동화 도구가 매우 중요하게 되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 테스트 자동화&lt;/p&gt;
&lt;p&gt;1) 테스트 자동화의 개념&lt;/p&gt;
&lt;p&gt;&amp;nbsp;테스트 자동화란 사람이 하던 반복적 테스트 절차를 자동화 도구를 활용하여 준비, 구현, 수행, 분석 등을 스크립트 형태로 구현함으로써, 시간과 인력 투입의 부담을 최소화 하면서 운영 중인 시스템의 모니터링 또는 UI가 없는 서비스의 경우에도 정밀한 테스트가 가능하도록 하는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) 테스트 도구의 장점&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(가) 테스트 데이터의 재입력과 재구성 같은 반복 작업의 자동화를 통하여 테스트 인력과 시간을 최소화한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(나) 향상된 요구사항 정의, 성능 및 스트레스 테스트, 품질 측정을 최적화한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(다) 빌드확인, 회귀, 다중 플랫폼 호환성, 소프트웨어 구성, 기본 테스트 등의 향상된 테스트 품질을 보장한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3) 테스트 도구의 단점&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(가) 도입 후 테스트 도구 전문가를 양성 또는 고용이 필요하며, 초기에 프로세스 적용에 대한 시간, 비용, 노력에 대한 추가 투자가 필요하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(나) 비공개 상용 소프트웨어의 경우 고가이며, 인력과 교육에 대한 유지관리 비용이 높다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) 테스트 자동화 수행 시의 고려사항&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(가) 테스트 절차를 고려하여 재사용 및 측정이 불가능한 테스트 프로그램은 제외해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(나) 설계기준 고려하여 반복적인 빌드에서 스크립트 재사용성이 가능해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(다) 도구의 한계성으로 모든 수동 테스트 과정을 자동화 할 수 있는 도구는 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;따라서 용도에 맞는 적절한 도구 사용이 필요하다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(라) 도구 환경 설정과 도구 습득 기간을 고려하여 프로젝트의 지연을 방지해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;(마) 테스트 엔지니어 늦은 투입은 프로젝트의 이해 부족으로 불완전한 테스트를 초래할 수 있으므로, 적절한 투입&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;시기와 계획을 프로젝트 초기에 수립해야 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 테스트 도구 평가방법 및 요소&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/skttR/btqDMjVY31r/HvODcaq29VMdtMBlMkLkJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/skttR/btqDMjVY31r/HvODcaq29VMdtMBlMkLkJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/skttR/btqDMjVY31r/HvODcaq29VMdtMBlMkLkJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FskttR%2FbtqDMjVY31r%2FHvODcaq29VMdtMBlMkLkJ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nyq0w/btqDL4kmfxt/Oq5lTcWFsAp8PzFiD9li70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nyq0w/btqDL4kmfxt/Oq5lTcWFsAp8PzFiD9li70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nyq0w/btqDL4kmfxt/Oq5lTcWFsAp8PzFiD9li70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNyq0w%2FbtqDL4kmfxt%2FOq5lTcWFsAp8PzFiD9li70%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>정보처리산업기사 필기 공부/애플리케이션 테스트 수행</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/82</guid>
      <comments>https://code-nen.tistory.com/82#entry82comment</comments>
      <pubDate>Wed, 29 Apr 2020 12:21:31 +0900</pubDate>
    </item>
    <item>
      <title>UI테스트(화면 구현)</title>
      <link>https://code-nen.tistory.com/81</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;사용성 테스트(Usability Test)&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;1. 목적&lt;/p&gt;
&lt;p&gt;1) 사용성 테스트 기법은 UI 테스트에 대한 보편적인 방법으로, 크게 사용성 테스트에 대한 계획 수립, 사용성 테스트 설계, 사용성 테스트 수행과 결과 검토로 구분하여 진행된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2) 사용자의 제품 만족도 제고, 제품의 완성까지의 노력 대비 높은 효율성, 개발 생산성 대비 낮은 에러, 쉬운 학습 이해도, 높은 품질의 완성도 상승, 사용자 실수 최소화 등의 효과를 달성할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 특징&lt;/p&gt;
&lt;p&gt;1) 사용자가 웹 사이트를 사용하는 것을 전제로 분석하여 사이트 구성 메뉴의 문제점과 요구사항의 반영 여부를 점검하는 것이다.&lt;/p&gt;
&lt;p&gt;2) 웹 사이트가 개발된 조건을 바탕으로 사용자가 접근하고 이용하는 측면에서 선호할 만한 웹 사이트의 기능을 테스트하는 것이다.&lt;/p&gt;
&lt;p&gt;3) 사용자의 요구사항에 맞는 웹사이트를 만들어 내기 위하여 구현 전체 절차에 사용자의 재 요구사항이 반영되도록 하는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 사용성 테스트의 주의사항&lt;/p&gt;
&lt;p&gt;1) 사용성에만 치중한 나머지 고객의 감성적인 측면에 그칠 수 있다.&lt;/p&gt;
&lt;p&gt;2) 기본 기능이 정확히 구현되었는지 검사하는 기본적인 기능 테스트에 대한 누락이 발생하지 않도록 주의한다.&lt;/p&gt;
&lt;p&gt;3) 테스트에 참여하는 인원이 자율적으로 테스트할 수 있는 환경이어야 좋은 품질 보장이 가능하다.&lt;/p&gt;
&lt;p&gt;4) 테스트 할 때 자세한 기능 설명, 구현 방법에 대해서 충분한 테스트가 가능하도록 제공되어야 한다.&lt;/p&gt;
&lt;p&gt;5) 테스트가 오랜 시간 진행될 경우 중간에 어떤 사유에서 지연되는지 체크해야 한다.&lt;/p&gt;</description>
      <category>정보처리산업기사 필기 공부/화면 구현</category>
      <author>영넨이</author>
      <guid isPermaLink="true">https://code-nen.tistory.com/81</guid>
      <comments>https://code-nen.tistory.com/81#entry81comment</comments>
      <pubDate>Mon, 27 Apr 2020 12:47:35 +0900</pubDate>
    </item>
  </channel>
</rss>