<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>신입부터의 기록</title>
    <link>https://makga.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Thu, 27 Aug 2026 00:10:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>MAKGA</managingEditor>
    <item>
      <title>Release 프로그램의 비정상 종료시 덤프를 무조건 남기기</title>
      <link>https://makga.tistory.com/464</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 Release 모드로 빌드한 프로그램이 비정상 종료될 때 덤프가 안남는 경우가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴 땐 마이크로소프트에서 만든 해당 툴을 사용해 프로세스를 감시하면, 비정상 종료시 덤프가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다운로드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/ko-kr/sysinternals/downloads/procdump&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/ko-kr/sysinternals/downloads/procdump&lt;/a&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_1718792481340&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;procdump.exe -mp -w -e -h -64 ProcessName.exe D:\Folder\&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;-mp: mini dump plus (full dump는 오래 걸림)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-w: 대상 프로세스가 실행될 때까지 대기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-e: 프로세스 내에서 처리되지 않는 exception 발생시 dump&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-h: 응답 없음 발생시 dump&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-64: 64비트 dump&lt;/p&gt;</description>
      <category>프로그래밍/C,C++</category>
      <category>dump</category>
      <category>procdump</category>
      <category>Release</category>
      <category>덤프</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/464</guid>
      <comments>https://makga.tistory.com/464#entry464comment</comments>
      <pubDate>Thu, 20 Jun 2024 20:25:46 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 자동 업데이트 확인 및 종료</title>
      <link>https://makga.tistory.com/463</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;AWS에서 실행중이던 MYSQL 서비스가 종료되어 원인을 확인한 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;apt-daily-upgrade 서비스가 활성화 되어있으며 자동으로 업데이트가 진행됐다.&lt;/p&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;pre id=&quot;code_1718785295746&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#apt-daily-upgrade 동작 확인
systemctl status apt-daily-upgrae.timer&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;pre id=&quot;code_1718785380692&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# apt-daily-upgrade 종료
systemctl stop apt-daily-upgrade.timer
systemctl disable apt-daily-upgrade.timer
systemctl daemon-reload&lt;/code&gt;&lt;/pre&gt;</description>
      <category>OS/Linux</category>
      <category>apt-daily-upgrade</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/463</guid>
      <comments>https://makga.tistory.com/463#entry463comment</comments>
      <pubDate>Wed, 19 Jun 2024 18:23:08 +0900</pubDate>
    </item>
    <item>
      <title>ibd 파일로 데이터 복구하기</title>
      <link>https://makga.tistory.com/462</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;mysql 에서 저장된 데이터들은 테이블이름.ibd 파일로 저장된다.&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;t_table 이란 이름으로 예를 들어보자.&lt;/p&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. 복구할 DB에 테이블 스키마로 빈 테이블 생성&lt;/p&gt;
&lt;pre id=&quot;code_1714278980417&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE t_table
[구조]....&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;2. 빈 테이블의 데이터 파일 연결 해제&lt;/p&gt;
&lt;pre id=&quot;code_1714278957930&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE t_table DISCARD TABLESPACE;
FLUSH PRIVILEGES;&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;3. 빈 테이블 ibd 위치에 내가 복구하려는 ibd 파일 복사 및 사용 권한 부여&lt;/p&gt;
&lt;pre id=&quot;code_1714279086634&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cp /home/myaccount/t_table.ibd /var/lib/mysql/databasename/
chown mysql:mysql t_table.ibd&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;4. 테이블에 데이터 파일 연결&lt;/p&gt;
&lt;pre id=&quot;code_1714279102878&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ALTER TABLE t_table IMPORT TABLESPACE;&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;이후 SELECT 문으로 정상 연결 되었는지 확인.&lt;/p&gt;</description>
      <category>DB/MYSQL</category>
      <category>ibd</category>
      <category>MySQL</category>
      <category>백업</category>
      <category>복구</category>
      <category>복원</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/462</guid>
      <comments>https://makga.tistory.com/462#entry462comment</comments>
      <pubDate>Sun, 28 Apr 2024 13:43:44 +0900</pubDate>
    </item>
    <item>
      <title>Unity 1개 프로젝트를 2개의 에디터 열기</title>
      <link>https://makga.tistory.com/461</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;mklink 신규경로 원본경로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mklink D:UnityProject2\Asset D:UnityProject\Asset&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;mklink D:UnityProject2\Packages&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;D:UnityProject\&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Packages&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;mklink D:UnityProject2\ProjectSetting&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;D:UnityProject\ProjectSetting&lt;/p&gt;</description>
      <category>게임/Unity</category>
      <category>2개 띄우기</category>
      <category>editor</category>
      <category>Unity</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/461</guid>
      <comments>https://makga.tistory.com/461#entry461comment</comments>
      <pubDate>Tue, 6 Feb 2024 10:11:19 +0900</pubDate>
    </item>
    <item>
      <title>타입에 따른 템플릿 오버로딩</title>
      <link>https://makga.tistory.com/460</link>
      <description>&lt;pre id=&quot;code_1704876614182&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, const char*&amp;gt; || std::is_same_v&amp;lt;T, const char* const&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		String(_value);
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, std::string&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		String(_value.c_str());
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, bool&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		Bool(_value);
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, int8_t&amp;gt; || std::is_same_v&amp;lt;T, int16_t&amp;gt; || std::is_same_v&amp;lt;T, int32_t&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		Int(_value);
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, uint8_t&amp;gt; || std::is_same_v&amp;lt;T, uint16_t&amp;gt; || std::is_same_v&amp;lt;T, uint32_t&amp;gt;, void&amp;gt;
		AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		Uint(_value);
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, int64_t&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		Int64(_value);
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_same_v&amp;lt;T, uint64_t&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		Uint64(_value);
	}

	template&amp;lt;typename T&amp;gt;
	std::enable_if_t&amp;lt;std::is_floating_point_v&amp;lt;T&amp;gt;, void&amp;gt;
	AddField(const char* _key, const T&amp;amp; _value)
	{
		Key(_key);
		Double(_value);
	}

	void AddFields() {}

	template&amp;lt;typename Key, typename Value, typename... Rest&amp;gt;
	void AddFields(Key&amp;amp;&amp;amp; _key, const Value&amp;amp; _value, const Rest&amp;amp;... _rest)
	{
		AddField(_key, _value);
		AddFields(_rest...);
	}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래밍/C,C++</category>
      <category>가변 템플릿 인자</category>
      <category>오버로딩</category>
      <category>템플릿</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/460</guid>
      <comments>https://makga.tistory.com/460#entry460comment</comments>
      <pubDate>Wed, 10 Jan 2024 17:50:37 +0900</pubDate>
    </item>
    <item>
      <title>Elastic search에 C++로 데이터 입력시에 발생한 문제 1</title>
      <link>https://makga.tistory.com/459</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Elastic search에 C++ http client로 데이터를 밀어넣었을 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫 번째 Post는 정상이였고, 그 이후부터 다음과 같은 에러가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704413323639&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;error&quot;: {
    &quot;root_cause&quot;: [
      {
        &quot;type&quot;: &quot;content_type_header_exception&quot;,
        &quot;reason&quot;: &quot;java.lang.IllegalArgumentException: only one Content-Type header should be provided&quot;
      }
    ],
    &quot;type&quot;: &quot;content_type_header_exception&quot;,
    &quot;reason&quot;: &quot;java.lang.IllegalArgumentException: only one Content-Type header should be provided&quot;,
    &quot;caused_by&quot;: {
      &quot;type&quot;: &quot;illegal_argument_exception&quot;,
      &quot;reason&quot;: &quot;only one Content-Type header should be provided&quot;
    }
  },
  &quot;status&quot;: 400
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;헤더를 한번만 제공해야된다는 얘기인데 내가&lt;/p&gt;
&lt;pre id=&quot;code_1704413372078&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;HTTPClient::HeadersMap requestHeaders.insert({ &quot;Content-Type&quot;, &quot;application/json&quot; });
httpclient.Post(std::format(&quot;http://{0}:{1}/{2}/_doc&quot;, m_ip, m_port, &quot;document&quot;), RequestHeaders, _data, _length, response);&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;근데 Post 요청마다 담은 헤더가 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Post를 한번 보냈으면 다음부터는&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1704413539265&quot; class=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;cpp&quot;&gt;&lt;code&gt;if (m_isFirst)
{
    HTTPClient::HeadersMap requestHeaders;
    requestHeaders.insert({ &quot;Content-Type&quot;, &quot;application/json&quot; });
    HTTPClient::HttpResponse response;
    httpclient.Post(std::format(&quot;http://{0}:{1}/{2}/_doc&quot;, m_ip, m_port, &quot;document&quot;), RequestHeaders, _data, _length, response);
    m_isFirst = false;
}
else
{
    HTTPClient::HeadersMap requestHeaders;
    HTTPClient::HttpResponse response;
    httpclient.Post(std::format(&quot;http://{0}:{1}/{2}/_doc&quot;, m_ip, m_port, &quot;document&quot;), RequestHeaders, _data, _length, response);
}&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;</description>
      <category>Elastric search</category>
      <category>only one Content-Type header should be provided</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/459</guid>
      <comments>https://makga.tistory.com/459#entry459comment</comments>
      <pubDate>Fri, 5 Jan 2024 09:17:16 +0900</pubDate>
    </item>
    <item>
      <title>Redis 다중 설치하기</title>
      <link>https://makga.tistory.com/458</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. Redis 설치하기 (최신버전용)&lt;/p&gt;
&lt;pre id=&quot;code_1701133461327&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo apt-get update
sudo add-apt-repository ppa:redislabs/redis
sudo apt update
sudo apt install -y redis-server&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;2. Redis 설정 파일 복사&lt;/p&gt;
&lt;pre id=&quot;code_1701133555285&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /etc/redis/redis.conf /etc/redis/redis-2.conf (중복X)&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;3. 복사한 conf 파일 수정&lt;/p&gt;
&lt;pre id=&quot;code_1701133637453&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/redis/redis-2.conf (중복X)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1701134088057&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 중복 방지용
port 6379  =&amp;gt; port 6380 (중복X)
pidfile /var/run/redis/redis-server.pid  =&amp;gt; /var/run/redis/redis-server-2.pid (중복X)
logfile /var/log/redis/redis-server.log  =&amp;gt; /var/run/redis/redis-server-2.pid (중복X)
dir /var/lib/redis  =&amp;gt; dir /var/lib/redis-2 (중복X)


// 기타 옵션 수정
bind 127.0.0.1 ::1  =&amp;gt;  # bind 127.0.0.1 ::1
protected-mode yes  =&amp;gt; protected-mode no
databases 16  =&amp;gt; databases 1 (기본 데이터베이스 사용)
stop-writes-on-bgsave-error yes =&amp;gt; stop-writes-on-bgsave-error no&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;4. Redis Service 파일 복사&lt;/p&gt;
&lt;pre id=&quot;code_1701134138350&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo cp /lib/systemd/system/redis-server.service /lib/systemd/system/redis-2.service (중복X)&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;5. service 파일 수정&lt;/p&gt;
&lt;pre id=&quot;code_1701134167688&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /lib/systemd/system/redis-2.service (중복X)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1701134205996&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ExecStart=/usr/bin/redis-server /etc/redis/redis-2.conf --supervised systemd --daemonize no (중복X)
PIDFile=/run/redis/redis-server-2.pid (중복X)
ReadWriteDirectories=/var/run/redis
Alias=redis-2.service (중복X)&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. 디렉토리 권한 부여&lt;/p&gt;
&lt;pre id=&quot;code_1701134275524&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo mkdir /var/lib/redis-2 (중복X)
	
sudo chown -R redis:redis /var/lib/redis-2 (중복X)

sudo chmod 750 /var/lib/redis-2 (중복X)&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. Redis 서비스 등록&lt;/p&gt;
&lt;pre id=&quot;code_1701134310616&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl enable redis-2 (중복X)
sudo service redis-2 start (중복X)&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;8. 포트 오픈&lt;/p&gt;
&lt;pre id=&quot;code_1701134336987&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo ufw allow out 6380/tcp
sudo ufw allow in 6380/tcp&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;2개가 아니라 n개까지 하고싶다면 &amp;nbsp;(중복X) 표시가 되어있는 넘버링만 증가시켜 띄우면 된다.&lt;/p&gt;</description>
      <category>OS/Linux</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/458</guid>
      <comments>https://makga.tistory.com/458#entry458comment</comments>
      <pubDate>Tue, 28 Nov 2023 10:21:04 +0900</pubDate>
    </item>
    <item>
      <title>용어 정리</title>
      <link>https://makga.tistory.com/457</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ANN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #1b3139; text-align: start;&quot;&gt;인공 신경망(Artificial Neural Network)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;합성곱 신경망(Convolutional Neural Network)&lt;/p&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>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/457</guid>
      <comments>https://makga.tistory.com/457#entry457comment</comments>
      <pubDate>Thu, 12 Oct 2023 23:26:50 +0900</pubDate>
    </item>
    <item>
      <title>UTF-8 문자열 관리</title>
      <link>https://makga.tistory.com/456</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;C++20부터 char8_t, u8string등 UTF-8을 지원하기 위한 타입이 추가되었으나, 다른 라이브러리와의 호환등을 위해 개인적으론 아직 char와 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;UTF-8에서 한글은 3바이트를 사용하는데, UTF-8 문자 &quot;가&quot; 는 각 바이트에 234, 176, 128로 저장된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;180&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mw3hI/btsymMHD6xF/BwKbYuo7XCEruszXnWdcq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mw3hI/btsymMHD6xF/BwKbYuo7XCEruszXnWdcq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mw3hI/btsymMHD6xF/BwKbYuo7XCEruszXnWdcq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmw3hI%2FbtsymMHD6xF%2FBwKbYuo7XCEruszXnWdcq0%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;411&quot; height=&quot;180&quot; data-origin-width=&quot;411&quot; data-origin-height=&quot;180&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니코드표에서 &quot;가&quot;를 찾아보면 U+AC00 이라고 되어있고, AC00는 2바이트(172, 0) 값인데, 저렇게 저장되는 이유는 각 바이트는 다음 그림과 같은 기본 규칙이 있기 때문이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;168&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHEdOS/btsyctO6NFS/Zul2sKpHGOC1ukVYoqJ3C1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHEdOS/btsyctO6NFS/Zul2sKpHGOC1ukVYoqJ3C1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHEdOS/btsyctO6NFS/Zul2sKpHGOC1ukVYoqJ3C1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHEdOS%2FbtsyctO6NFS%2FZul2sKpHGOC1ukVYoqJ3C1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;643&quot; height=&quot;168&quot; data-origin-width=&quot;643&quot; data-origin-height=&quot;168&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;표에 의하면 기본적으로 3바이트를 쓰는 한글은 기본 1110xxxx 10xxxxxx 10xxxxxx 값이 정해져 있고, 유니코드의 HEX값은 x에 치환되는 값만 표에 적어둔 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;0xAC00을 0b로 변경하면 1010 110000 000000 인데 해당 비트의 갯수와 위 x의 갯수가 동일한 것을 볼 수 있다.&lt;/p&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하면 11101010 10110000 10000000가 나오는데, 각각 8비트씩 10진수로 변경해보면 아까 봤던 234, 176, 128이 되는 것이다.&lt;/p&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;그럼 앞으로 문자열을 유니코드 code point 값과 쉽게 비교하기 위해 code point로 변환하는 방법을 알아보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞의 &quot;가&quot; 에 대한 설명을 역순으로 계산해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A = 234&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;; // &lt;/span&gt;11101010&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A = A &amp;amp; 0xF (하위 4개 비트만 가져오기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B = 176; //10110000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B = B &amp;amp; 0x3F (하위 6개 비트만 가져오기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C = 128; //10000000&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C = C &amp;amp; 0x3F (하위 6개 비트만 가져오기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CodePoint = (A &amp;lt;&amp;lt; 12) | (B &amp;lt;&amp;lt; 6) | C = AC00;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;으로 계산할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유니코드 블록 목록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://symbl.cc/kr/unicode/blocks/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://symbl.cc/kr/unicode/blocks/&lt;/a&gt;&lt;/p&gt;</description>
      <category>프로그래밍/C,C++</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/456</guid>
      <comments>https://makga.tistory.com/456#entry456comment</comments>
      <pubDate>Thu, 12 Oct 2023 23:23:02 +0900</pubDate>
    </item>
    <item>
      <title>ddd</title>
      <link>https://makga.tistory.com/455</link>
      <description>&lt;pre id=&quot;code_1687922625351&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;struct stst
{
	std::vector&amp;lt;int&amp;gt; vec;
};

std::vector&amp;lt;stst&amp;gt; vec;

template&amp;lt;typename... Args&amp;gt;
stst* findFunc(Args... args)
{
	auto iter = std::find_if(vec.begin(), vec.end(), [args = std::initializer_list&amp;lt;int&amp;gt;{ args... }](const stst&amp;amp; _st) {
		std::size_t argSize = args.size();

		if (_st.vec.size() &amp;lt; argSize)
		{
			return false;
		}

		for (std::size_t i = 0; i &amp;lt; argSize; ++i)
		{
			if (_st.vec[i] != *(args.begin() + i)) {
				return false;
			}
		}
		
		return true;
	});

	if (vec.end() == iter)
	{
		return nullptr;
	}

	return &amp;amp;(*iter);
}


int main()
{
	stst s1, s2, s3;
	s1.vec = { 0, 1, 2, 3 };
	s2.vec = { 4, 5, 6 };
	s3.vec = { 1, 2, 3 };

	vec.push_back(s1);
	vec.push_back(s2);
	vec.push_back(s3);

	auto ptr = findFunc(0, 1, 2, 3);
	if (nullptr != ptr)
	{
		for (auto iter : ptr-&amp;gt;vec)
		{
			std::cout &amp;lt;&amp;lt; iter &amp;lt;&amp;lt; std::endl;
		}
	}

    return 0;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래밍/Morden C++</category>
      <author>MAKGA</author>
      <guid isPermaLink="true">https://makga.tistory.com/455</guid>
      <comments>https://makga.tistory.com/455#entry455comment</comments>
      <pubDate>Wed, 28 Jun 2023 12:23:49 +0900</pubDate>
    </item>
  </channel>
</rss>