<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>관심있는 것들 정리</title>
    <link>https://manime.tistory.com/</link>
    <description>이것저것 관심있는 것들 및 작성한 소스코드 게시 블로그입니다.

소스코드 퍼가실 땐 간단한 댓글 부탁드려요</description>
    <language>ko</language>
    <pubDate>Thu, 9 Jul 2026 17:49:28 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>내공강화</managingEditor>
    <image>
      <title>관심있는 것들 정리</title>
      <url>https://t1.daumcdn.net/cfile/tistory/180CD3494F4869860A</url>
      <link>https://manime.tistory.com</link>
    </image>
    <item>
      <title>c++ std::istream을 이용해 입력 처리하기</title>
      <link>https://manime.tistory.com/entry/c-stdistream%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EC%9E%85%EB%A0%A5-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;std::cin을 이용해 console에서 character 입력을 받는 것은 익숙한데, 이를 googletest를 이용해 시험을 하려 해 보면,&lt;br /&gt;cin &amp;gt;&amp;gt; a와 같이 수행 시 keyboard로 입력을 해 주지 않으면 문제가 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 경우, 다음과 같이 stringstream을 이용해서 처리할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1725149442636&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// istream::get example
#include &amp;lt;iostream&amp;gt;     // std::cin, std::cout
#include &amp;lt;fstream&amp;gt;      // std::ifstream
#include &amp;lt;string&amp;gt;
#include &amp;lt;sstream&amp;gt;      // std::istringstream

using namespace std;
string readTest(std::istream&amp;amp; in)
{
    string a;
    std::cout &amp;lt;&amp;lt; &quot;Enter the name what you want: &quot;;
    in &amp;gt;&amp;gt; a;
    return a;
}

int main () {
    string result = readTest(std::cin);
    cout &amp;lt;&amp;lt; result &amp;lt;&amp;lt; endl;

    string testStr=&quot;wow&quot;;
    istringstream fakeInput(testStr);

    string result2 = readTest(fakeInput);
    cout &amp;lt;&amp;lt; result2 &amp;lt;&amp;lt; endl;
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요지는 std::istream을 함수 입력으로 받도록 하면, 일반 테스트 시에는 std::cin을..(default로 처리해도 됨), googletest와 같이 자동 테스트 수행 시, 위와 같이 istringstream을 받도록 하면 문제가 해결된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컴파일 후 실행하면&lt;/p&gt;
&lt;pre id=&quot;code_1725149567187&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./test 
Enter the name what you want: hhh
hhh
Enter the name what you want: wow
$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 입력은 hhh를 입력 후 enter를 눌렀기 때문에 다음 라인에 입력값 받은 내용이 출력이 되고,&lt;br /&gt;두번째 출력은 istringstream으로 입력 받은 내용이 출력된 것이라, 같은 라인에 출력된 후 프로그램은 종료된다.&lt;/p&gt;</description>
      <category>programming</category>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/286</guid>
      <comments>https://manime.tistory.com/entry/c-stdistream%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EC%9E%85%EB%A0%A5-%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0#entry286comment</comments>
      <pubDate>Sun, 1 Sep 2024 09:14:04 +0900</pubDate>
    </item>
    <item>
      <title>map간 병합할 때 중복항목 제거하고 merge 하는 방법</title>
      <link>https://manime.tistory.com/entry/map%EA%B0%84-%EB%B3%91%ED%95%A9%ED%95%A0-%EB%95%8C-%EC%A4%91%EB%B3%B5%ED%95%AD%EB%AA%A9-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B3%A0-merge-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;c로 코딩을 할 경우, sorting 순서, 중복항목 체크를 직접해 주어야 하지만 c++의 경우 이를 간단히 처리해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;map에서 key 값을 기준으로 sorting하면서 merge가 되며, 간단히 int 타입을 key로 하는 map에 대한 예제는 다음과 같다.&lt;/p&gt;
&lt;pre id=&quot;code_1725107825323&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;map&amp;gt;
#inclucde&amp;lt;string&amp;gt;

using namespace std;

int main()
{
    map&amp;lt;int, string&amp;gt; tmap1 = {{10, &quot;10&quot;}, {1, &quot;1&quot;}, {3, &quot;3&quot;}, {20, &quot;20&quot;}};
    map&amp;lt;int, string&amp;gt; tmap1 = {{10, &quot;10&quot;}, {5, &quot;5&quot;}, {6, &quot;6&quot;}, {20, &quot;20&quot;}};
    
    tmap1.insert(tmap2.begin(), tmap2.end());
    
    for(auto&amp;amp; p: tmap1) {
        cout &amp;lt;&amp;lt; p.first &amp;lt;&amp;lt; &quot;   &quot; &amp;lt;&amp;lt; p.second &amp;lt;&amp;lt; &quot;\n&quot;;
    }
    
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 컴파일 후 실행하면&lt;/p&gt;
&lt;pre id=&quot;code_1725107853556&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$./test
1   1
3   3
5   5
6   6
10   10
20   20
$&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;그리고 merge 후 처음 n개 또는 마지막 n개만 남기겠다 라고 한다면, 다음과 같이 iterator를 이용하면 된다.&lt;br /&gt;다음 예는 처음 4개의 항목만 남기는 예제이다&lt;/p&gt;
&lt;pre id=&quot;code_1725108286941&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;
#include&amp;lt;map&amp;gt;
#inclucde&amp;lt;string&amp;gt;

using namespace std;

int main()
{
    map&amp;lt;int, string&amp;gt; tmap1 = {{10, &quot;10&quot;}, {1, &quot;1&quot;}, {3, &quot;3&quot;}, {20, &quot;20&quot;}};
    map&amp;lt;int, string&amp;gt; tmap1 = {{10, &quot;10&quot;}, {5, &quot;5&quot;}, {6, &quot;6&quot;}, {20, &quot;20&quot;}};
    
    tmap1.insert(tmap2.begin(), tmap2.end());
    
    for(auto&amp;amp; p: tmap1) {
        cout &amp;lt;&amp;lt; p.first &amp;lt;&amp;lt; &quot;   &quot; &amp;lt;&amp;lt; p.second &amp;lt;&amp;lt; &quot;\n&quot;;
    }
    
    cout &amp;lt;&amp;lt; &quot;tmap1 size = &quot; &amp;lt;&amp;lt; tmap1.size() &amp;lt;&amp;lt; &quot;\n&quot;;
    
    for(auto len=tmap1.size(); len &amp;gt; 4; --len)
    {
        auto it = tmap1.end();
        it--;
        tmap1.erase(it);
    }
    
    cout &amp;lt;&amp;lt; &quot;tmap1 size = &quot; &amp;lt;&amp;lt; tmap1.size() &amp;lt;&amp;lt; &quot;\n&quot;;
    for(auto&amp;amp; p: tmap1) {
        cout &amp;lt;&amp;lt; p.first &amp;lt;&amp;lt; &quot;   &quot; &amp;lt;&amp;lt; p.second &amp;lt;&amp;lt; &quot;\n&quot;;
    }
    
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드를 컴파일 후 실행하면 (참고로 c++17로 표준을 선택하여 컴파일 하였음)&lt;/p&gt;
&lt;pre id=&quot;code_1725108386272&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$./test
1   1
3   3
5   5
6   6
10   10
20   20
tmap1 size = 6
tmap1 size = 4
1   1
3   3
5   5
6   6
$&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>programming</category>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/285</guid>
      <comments>https://manime.tistory.com/entry/map%EA%B0%84-%EB%B3%91%ED%95%A9%ED%95%A0-%EB%95%8C-%EC%A4%91%EB%B3%B5%ED%95%AD%EB%AA%A9-%EC%A0%9C%EA%B1%B0%ED%95%98%EA%B3%A0-merge-%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95#entry285comment</comments>
      <pubDate>Sat, 31 Aug 2024 21:37:55 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 실무로 통하는 클린 코드</title>
      <link>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%8B%A4%EB%AC%B4%EB%A1%9C-%ED%86%B5%ED%95%98%EB%8A%94-%ED%81%B4%EB%A6%B0%EC%BD%94%EB%93%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 코딩을 처음배울 때는 내가 사용하는 언어의 문법을 배우는 데 바쁘고, 그 언어를 이용해 기능을 구현하는 것에 관심이 있어, 클린 코드라는 것을 들어도 귀에 들어오지 않는다. 이는 회사에 취직해서 회사의 플랫폼에 맞춰, 주어진 업무를 빠른 시간내에 구현하는 초기 개발자에게도 해당하는 이야기일 수 있다. 회사가 만드는 프로그램의 수명에 따라, 어떤 곳은 단품을 만들면 새로 코드를 만들어야 하고 어떤 곳은 10년이 지나도 동일한 코드 베이스에서 계속해서 기능 개발 및 버그 수정을 해야하는 곳이 있다. 후자의 경우, 시간이 지나면 지날 수록, 또 새로운 기능을 계속 개발하면 개발할 수록, 이전에 급한 일정때문에 기능에만 몰두해 개발한 코드는 부채처럼 나에게 계속 코드 관리의 어려움, 테스트의 어려움, 그리고 여기를 고치면 저기서 튀어나오는 버그들의 어려움으로 개발이 점점 더 어려워지게 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이와 같은 경험은 크던 작던 수년 이상 개발을 업으로 하는 분들에게는 적어도 한번 이상 해 본 경험일 것이다. 시간이 지나고 좋은 프로그래머가 되면 이런 경험은 사라지지는 않지만 많이 줄어들 것이다. 그러면 좋은 프로그래머는 어떤 프로그래머인가? 이런 고민을 할 때 켄트 벡이나 엉클밥(로버트 C. 마틴)의 책들에서 하는 이야기에 대해 관심을 기울이게 된다.&lt;br /&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;400&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n6fFR/btsJdRNnKCc/jxiJxJBMZZKRkKIWF6flj1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n6fFR/btsJdRNnKCc/jxiJxJBMZZKRkKIWF6flj1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n6fFR/btsJdRNnKCc/jxiJxJBMZZKRkKIWF6flj1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn6fFR%2FbtsJdRNnKCc%2FjxiJxJBMZZKRkKIWF6flj1%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;400&quot; height=&quot;514&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 엉클밥의 클린 코드를 읽었을 때 내심 공감이 되는 부분이 아주 많다. 그리고 책의 예제를 참조해서 이렇게 나도 코드에 적용해봐야지 하는 의욕도 넘치게 된다. 그런데, 클린 코드라는 것이 많은 경험을 통해 저자가 작성을 한 것이다보니, 저자의 의도를 이해했다 하더라도, 어떤 경우에 어떻게 사용해야하는 지, 막상 적용하려 했을 때 막막한 경우가 많이 있을 수 있다. &amp;ldquo;실무로 통하는 클린 코드&amp;rdquo;는 원제 그대로 Clean Code Cookbook 으로, 프로그래머들이 실제 프로그램을 작성하거나 오랜지시간 유지 보수를 하면서 마주하는 다양한 경우를 체계적으로 정리하고 그에 대한 해결책, 해결책의 의미를 다양한 언어를 이용하여 예시를 통해 설명을 하고 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 책은 다른 Cookbook과 달리 책 전체를 관통하는 MAPPER라는 개념을 도입해, 프로그램과 실세계를 수학의 전단사 개념을 통해, 개발자가 추상적으로 생각하며 빠져들 수 있는 함정과 이를 실세계에 반영했을 때 어떻게 문제가 될 수 있는지도 함께 설명을 한다. 처음에는 코드에 무슨 전단사? 라고 생각할 수 있지만, 책을 읽어나가다보면, 이렇게 생각하는 훈련을 해 보는게 도움이 된다는 것을 느낄 수 있게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nB0DB/btsJfBPstZf/LlEq3Mhk40TEUyvsws9euk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nB0DB/btsJfBPstZf/LlEq3Mhk40TEUyvsws9euk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nB0DB/btsJfBPstZf/LlEq3Mhk40TEUyvsws9euk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnB0DB%2FbtsJfBPstZf%2FLlEq3Mhk40TEUyvsws9euk%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;900&quot; height=&quot;443&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 책은 개발자가 겪게 되는 여러 문제들을 문제-해결-설명의 구조로, 어떤 경우에 어떻게 해결책을 생각해 볼 수 있는지 설명을 해 나가는데, 이런 구조는 생각보다 효율적이라 생각된다. 막상 클린 코드, TDD, 리팩터링 등의 책을 읽어보면, 읽을 때 아 그렇지&amp;hellip; 하고 해당 부분에 대해서 공감하고 지나가지만, 그 외에 경우에 이것이 맞는 것인가? 라고 헷갈리거나 적용을 주저하게 되는 경우들이 많다. 이런 경우에 책에서 해당 부분을 찾아 보면, 쉽게 해당 부분이 눈에 들어오는 것은 물론 다양한 책에서 설명하는 이론들 중 어떤 부분이 이 내용과 연결되는 지도 좀 더 쉽게 이해를 할 수 있게 된다. 다음은 SoC(Separation of Concern)이라는 부분과 연결되는 책의 레시피 중 한 예시이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;370&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bf4i3c/btsJfEFmwdM/ArN6cksry6R8KJdk0UDHdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bf4i3c/btsJfEFmwdM/ArN6cksry6R8KJdk0UDHdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bf4i3c/btsJfEFmwdM/ArN6cksry6R8KJdk0UDHdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbf4i3c%2FbtsJfEFmwdM%2FArN6cksry6R8KJdk0UDHdk%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;900&quot; height=&quot;370&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;370&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;529&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZIi6Z/btsJeBbPP73/h1MZKKqZKr7AzkAWaU0ofK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZIi6Z/btsJeBbPP73/h1MZKKqZKr7AzkAWaU0ofK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZIi6Z/btsJeBbPP73/h1MZKKqZKr7AzkAWaU0ofK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZIi6Z%2FbtsJeBbPP73%2Fh1MZKKqZKr7AzkAWaU0ofK%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;900&quot; height=&quot;529&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;529&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cyXj0C/btsJdIW2IKi/QKIeEy0FEeQfA7UeajQsBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cyXj0C/btsJdIW2IKi/QKIeEy0FEeQfA7UeajQsBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cyXj0C/btsJdIW2IKi/QKIeEy0FEeQfA7UeajQsBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcyXj0C%2FbtsJdIW2IKi%2FQKIeEy0FEeQfA7UeajQsBk%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;900&quot; height=&quot;452&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;452&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTu6wl/btsJdIvXyPZ/4VOmHDI6V4Nihicp9AXc31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTu6wl/btsJdIvXyPZ/4VOmHDI6V4Nihicp9AXc31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTu6wl/btsJdIvXyPZ/4VOmHDI6V4Nihicp9AXc31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTu6wl%2FbtsJdIvXyPZ%2F4VOmHDI6V4Nihicp9AXc31%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;900&quot; height=&quot;298&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;298&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 저자는 다양한 언어를 통해 가장 주제를 잘 설명할 수 있는 언어로, 각 주제에 대해 설명을 하고 있는데, 이 부분은 독자에 따라 호불호가 될 수 있을 것으로 보인다. 개발을 수년 이상 해 본 프로그래머는 적어도 하나 이상의 언어를 배워 현상에서 사용하는 경험을 해 보았겠지만, 그렇지 않은 경우라면, 예시가 이해가 되지 않는 경우 매번 어떤 언어인지도 모르는 언어들을 원리도 원리지만 동작이 어떻게 되는지 코드를 확인해보는 것이 책의 흥미를 떨어뜨리는 요소가 될 수 있다. 요즘은 ChatGPT와 같은 AI 툴들이 있어 좀 더 쉽게 예제를 파악할 수 있겠지만, 이 역시 책에 대한 집중을 떨어뜨릴 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그럼에도 이 책은 개발자가 고민할만한 많은 &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;900&quot; data-origin-height=&quot;319&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TAgns/btsJe874CJb/koUWR3Qt5NgGL2sjQ3wE2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TAgns/btsJe874CJb/koUWR3Qt5NgGL2sjQ3wE2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TAgns/btsJe874CJb/koUWR3Qt5NgGL2sjQ3wE2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTAgns%2FbtsJe874CJb%2FkoUWR3Qt5NgGL2sjQ3wE2K%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;900&quot; height=&quot;319&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;319&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;620&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YXUhO/btsJdGSqNM8/OpEDcys5rUB8rvSyXEKCjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YXUhO/btsJdGSqNM8/OpEDcys5rUB8rvSyXEKCjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YXUhO/btsJdGSqNM8/OpEDcys5rUB8rvSyXEKCjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYXUhO%2FbtsJdGSqNM8%2FOpEDcys5rUB8rvSyXEKCjk%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;900&quot; height=&quot;620&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;620&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 많은 레시피를 읽고나면 다 기억을 못할 것 같은데? 라고 생각하시는 분이 있을 수 있다. 맞는 말인데, 그런 점에서 이 책의 베타리더분이 작성한 다음 내용이 공감이 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;900&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWFMsM/btsJfTChZb4/hMK5vNvmj0I9H1CZKM2MP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWFMsM/btsJfTChZb4/hMK5vNvmj0I9H1CZKM2MP1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWFMsM/btsJfTChZb4/hMK5vNvmj0I9H1CZKM2MP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWFMsM%2FbtsJfTChZb4%2FhMK5vNvmj0I9H1CZKM2MP1%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;1068&quot; height=&quot;353&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 리뷰를 마치며 든 생각은, 개인마다 호불호가 있겠지만&amp;hellip; ebook으로 제공받아 리뷰를 하였는데, 이러한 cookbook 성격의 책은 ebook보다는 offline 책이 더 효율적일 것 같다는 생각이 든다. ebook도 노란색으로 중요한 부분을 하이라이트 해 두고 그 부분을 찾아가며 빠르게 검색할 수 있지만, 아직은 중요한 내용에 형광펜으로 표기하고, 관련된 부분들을 tagging 해 두어 주루룩 넘기면서 빨리 찾아보는 것이 더 좋을 것 같다 ^^.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;한빛미디어 &amp;lt; 나는리뷰어다 &amp;gt; 활동을 위해서 책을 제공받아 작성된 서평입니다.&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/284</guid>
      <comments>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%8B%A4%EB%AC%B4%EB%A1%9C-%ED%86%B5%ED%95%98%EB%8A%94-%ED%81%B4%EB%A6%B0%EC%BD%94%EB%93%9C#entry284comment</comments>
      <pubDate>Sun, 25 Aug 2024 09:59:27 +0900</pubDate>
    </item>
    <item>
      <title>MacOS에서 googletest 수행해보기</title>
      <link>https://manime.tistory.com/entry/MacOS%EC%97%90%EC%84%9C-googletest-%EC%88%98%ED%96%89%ED%95%B4%EB%B3%B4%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;googletest가 나온지 상당히 오래됐고, 회사에서 사용한지도 꽤 오래됐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 집에 있는 Mac 머신에서도 googletest 수행해보려고 해 보면 자꾸 에러가 나서,&amp;nbsp;&lt;br /&gt;간단히 컴파일하는 방법과 관련 CMakeLists.txt 파일을 정리해 둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. googletest 개발용 header와 library 설치&lt;/h4&gt;
&lt;pre id=&quot;code_1724419206928&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git clone https://github.com/google/googletest.git
$ cd googletest
$ mkdir install
$ cd install
$ cmake ../
$ make
$ sudo make install
$ export CPLUS_INCLUDE_PATH=/usr/local/include
$ export LIBRARY_PATH=/usr/local/lib&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면, 개발된 library가 /usr/local 디렉토리 아래에 설치된다. 추후 컴파일 등에 문제가 없도록 export 수행한 환경 변수 PATH 설정 내용은 bash shell이라면 .bashrc 또는 .bash_profile에, zsh 이라면 .zshrc에 내용을 추가해 주자.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. simple program 작성, 컴파일 및 수행&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 디렉토리나 하나 생성한 후 다음과 같은 테스트 코드를 생성하자.&lt;br /&gt;(어디선가 복붙한 내용인데... 어디서 찾아온 것인지 기억이.. ㅠㅠ)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;summer.cpp&lt;/p&gt;
&lt;pre id=&quot;code_1724419479670&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include&amp;lt;iostream&amp;gt;

double summer(double arr[], int size)
{
    double sum = 0;
    for(int i=0; i &amp;lt; size; ++i) sum += arr[i];
    return sum;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;summerMain.cpp&lt;/p&gt;
&lt;pre id=&quot;code_1724419532640&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

//include the google test dependencies
#include &amp;lt;gtest/gtest.h&amp;gt;

//declare the function(s) that you are testing
double summer(double[], int);

//our first unit test
TEST(IntegerInputsSuite, simpleSum)
{
  //first, set up any inputs to your
  const int SIZE = 3;
  double arr[SIZE]  = {1, 2, 3};
  //then, make an assertion to test
  EXPECT_EQ(summer(arr, SIZE), 6) &amp;lt;&amp;lt; &quot;The sum is not correct&quot;;
}

TEST(IntegerInputsSuite, oneElement)
{
  const int SIZE = 1;
  double arr[SIZE]  = {33};
  EXPECT_EQ(summer(arr, SIZE), 33) &amp;lt;&amp;lt; &quot;The sum is not correct for array of size 1&quot;;
}

TEST(DoubleInputsSuite, simpleSum)
{
  const int SIZE = 3;
  double arr[SIZE]  = {1.1, 1.1, 1};
  EXPECT_EQ(summer(arr, SIZE), 3.2) &amp;lt;&amp;lt; &quot;The sum is not correct using     double inputs&quot;;
}

int main(int argc, char **argv) {
  testing::InitGoogleTest(&amp;amp;argc, argv);
  return RUN_ALL_TESTS();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드들을 컴파일할 CMakeLists.txt 파일은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CMakeLists.txt&lt;/p&gt;
&lt;pre id=&quot;code_1724419648301&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cmake_minimum_required(VERSION 3.14)
project(sumProgram)

# GoogleTest requires at least C++14
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

enable_testing()

add_executable(
    ${PROJECT_NAME}
    summer.cpp
    summerMain.cpp
)

target_link_libraries(
    ${PROJECT_NAME}
    gtest
    gtest_main
)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;디렉토리 구조는 다음과 같다&lt;/p&gt;
&lt;pre id=&quot;code_1724420399848&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;❯ tree
.
├── CMakeLists.txt
├── Makefile
├── summer.cpp
└── summerMain.cpp&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;install 디렉토리를 만들고 이동하여 cmake와 make를 다음과 같이 수행한다.&lt;/p&gt;
&lt;pre id=&quot;code_1724420477880&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ mkdir install;cd install;cmake ../;make
-- The C compiler identification is AppleClang 15.0.0.15000309
-- The CXX compiler identification is AppleClang 15.0.0.15000309
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /Library/Developer/CommandLineTools/usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Library/Developer/CommandLineTools/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done (0.4s)
-- Generating done (0.0s)
-- Build files have been written to: /Users/slux78/Documents/gtest/install
[ 33%] Building CXX object CMakeFiles/sumProgram.dir/summer.cpp.o
[ 66%] Building CXX object CMakeFiles/sumProgram.dir/summerMain.cpp.o
[100%] Linking CXX executable sumProgram
[100%] Built target sumProgram&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 Makefile을 이용한다면 다음과 같이 하면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1724420301601&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CFLAGS=-std=c++14 
LDFLAGS=-lgtest -lgtest_main -pthread
OBJS=summer.o summerMain.o
PROGNAME=sumProgram

all: $(PROGNAME)

$(PROGNAME): $(OBJS)
	g++ -o $@ $(OBJS) $(LDFLAGS) -o $(PROGNAME)

summer.o: summer.cpp
	g++ -c -o $@ $(CFLAGS) $&amp;lt;

summerMain.o: summerMain.cpp
	g++ -c -o $@ $(CFLAGS) $&amp;lt;

clean:
	@rm -rf $(OBJS) $(PROGNAME)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Makefile을 이용할 경우 make 라고만 입력하면 컴파일된다. (생성 파일 위치만 달라진다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 파일을 실행하면 다음과 같은 결과를 볼 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1724420560867&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ./sumProgram
[==========] Running 3 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 2 tests from IntegerInputsSuite
[ RUN      ] IntegerInputsSuite.simpleSum
[       OK ] IntegerInputsSuite.simpleSum (0 ms)
[ RUN      ] IntegerInputsSuite.oneElement
[       OK ] IntegerInputsSuite.oneElement (0 ms)
[----------] 2 tests from IntegerInputsSuite (0 ms total)

[----------] 1 test from DoubleInputsSuite
[ RUN      ] DoubleInputsSuite.simpleSum
[       OK ] DoubleInputsSuite.simpleSum (0 ms)
[----------] 1 test from DoubleInputsSuite (0 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 2 test suites ran. (0 ms total)
[  PASSED  ] 3 tests.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/283</guid>
      <comments>https://manime.tistory.com/entry/MacOS%EC%97%90%EC%84%9C-googletest-%EC%88%98%ED%96%89%ED%95%B4%EB%B3%B4%EA%B8%B0#entry283comment</comments>
      <pubDate>Fri, 23 Aug 2024 22:43:32 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 업무에 활용하는 node.js</title>
      <link>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%97%85%EB%AC%B4%EC%97%90-%ED%99%9C%EC%9A%A9%ED%95%98%EB%8A%94-nodejs</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;B5038538340_l.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIyZlL/btsH9s7k2AR/ZPFY0g2GngtYuLbBvYnsdk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIyZlL/btsH9s7k2AR/ZPFY0g2GngtYuLbBvYnsdk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIyZlL/btsH9s7k2AR/ZPFY0g2GngtYuLbBvYnsdk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIyZlL%2FbtsH9s7k2AR%2FZPFY0g2GngtYuLbBvYnsdk%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;400&quot; height=&quot;514&quot; data-filename=&quot;B5038538340_l.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;514&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; 이제는 Javascript가 중요해졌다 라고 이야기하기에는 그렇게 된지 너무 오래되어 진부한 표현인 것 같다. Javascript, CSS, HTML 을 이용하여 웹개발을 하는 것은 너무 당연한 일이 되었고, Frontend를 어떻게 개발하는 것이 효율적인지, Backend를 어떻게 개발하면 효율적인지를 알려주는 친절한 책이 많이 나와 있어, 본인이 익혀야 할 필요가 있는 기술들, 흥미가 있는 기술들을 선택적으로 많이 공부하는 경우가 많다. 그래서 많은 책들을 살펴보면 비슷비슷해 보이기도 한다. 한빛미디어에서 출간된 본 도서는 그러면 어떤 부분이 다른 책들과 차이가 있을까? 라는 생각으로 책을 읽기 시작했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 지금은 그렇지 않지만, 오픈소스에 관심을 많이 가지지 않던 시절에는 문서가 잘 작성된 오픈소스가 많지 않았다. 그런 경우, 감사하게도 제공되는 튜토리얼이 있는 경우, 해당 튜토리얼을 반복 연습하면서 동작 방식을 이해해 갔었고, 이해가 되지 않는 부분이나 튜토리얼에서 이해가 되지 않는 부분들은 구글링을 하거나 또 다른 책을 찾아가며 해결책을 직접 찾아야했기 때문에, 전체적인 개발의 흐름이나 시스템 전반적인 동작의 흐름을 익히기에 개인의 노력이 많이 필요했었는데, 본 도서는 비슷하게 흐름을 이끌어가되, 독자가 궁금해 할만한 내용들을 하나씩 짚어주는 방식으로 설명을 하고 있어 불필요한 시간 낭비를 줄여준다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 이 책은 웹 개발에 있어 node.js를 이용해 frontend와 backend 개발 과정을 하나 하나 튜토리얼식으로 따라하면서 익히도록 가이드를 하고 있다. 책에서 설명하는 단계를 하나 하나 따라하면서 설명을 읽다보면, 전체적으로 이렇게 개발하면 되겠구나 하는 감을 익히기 쉬울 것이다. 그래서, frontend에서 REST API를 통해 받은 입력을 어떻게 처리하는지, 그리고 frontend에서 받은 입력을 backend로 전달해 어떻게 처리하는 지 흐름을 직접 입력해가면서, 이렇게 개발을 하는구나 라고 흐름을 익히게 되면, 그 다음부터는 좀 더 다양한 방법을 찾아 자신만의 기술을 늘려나갈 수 있도록 해 줄 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 책의 장점을 좀 두루뭉술하게 기술했는데, 이 책은 사용된 기술들을 깊이 이해하는 것이 아니라 빠르게 흐름을 익히고 다음 단계로 나가기 위한, 그리고 빨리 개발에 적용해 볼 수 있게 해 주는 책으로 생각된다. 이 책의 저자가 설명하는 Node.js를 제외한 다양한 기술들, Redis, Docker, Nginx, Jquery, React, Next.js, performance tuning 등은 단순히 하나 하나의 기술들인 경우도 있으나, 관련하여 더 깊게 관련된 기술들이 있어서, 웹개발을 이제 막 시작하려는 분들에게는 따라하는 것만으로 벅찰 수도 있을 수 있다. 그래서 이 책의 내용을 반복해서 익힌 후, 궁금한 내용을 하나하나 깊게 공부해 나가기를 추천한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 그래서 Node.js를 익히면서, 관련되어 나오는 기술들도 함께 깊은 지식을 원하는 분이라면 이 책은 원하는 책이 아닐 수 있음을 언급해 두고 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&quot;&lt;/span&gt;한빛미디어&lt;span&gt; &amp;lt; &lt;/span&gt;나는리뷰어다&lt;span&gt; &amp;gt; &lt;/span&gt;활동을&lt;span&gt; &lt;/span&gt;위해서&lt;span&gt; &lt;/span&gt;책을&lt;span&gt; &lt;/span&gt;제공받아&lt;span&gt; &lt;/span&gt;작성된&lt;span&gt; &lt;/span&gt;서평입니다&lt;span&gt;.&quot;&lt;/span&gt;&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/282</guid>
      <comments>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EC%97%85%EB%AC%B4%EC%97%90-%ED%99%9C%EC%9A%A9%ED%95%98%EB%8A%94-nodejs#entry282comment</comments>
      <pubDate>Sat, 22 Jun 2024 18:25:59 +0900</pubDate>
    </item>
    <item>
      <title>오래전 구입한 앨범</title>
      <link>https://manime.tistory.com/entry/%EC%98%A4%EB%9E%98%EC%A0%84-%EA%B5%AC%EC%9E%85%ED%95%9C-%EC%95%A8%EB%B2%94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;처음에 대학교때라고 생각을 했었는데... 시간이 안 맞네.. 아무래도 오래전 샀던 다른 것과 헷갈린듯하다. 어쨌든 오래전...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;교보문고에 들렀다가 샀던 음반이 생각나 CD 장에 꽂아두었던 CD를 뒤적이다 그 때 산 CD를 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 대부분의 CD는 RIP해서 Dropbox에 두고, 듣고 싶을 때마다 찾아 듣는데, 왜인지 이유는 모르겠으나, 이 CD는 RIP이 안 되어있었다. 그 때 사서 듣다가, 다른 음반들 이것저것 나오는 것에 치여, 먼지만 쌓여있던 앨범이 Isao sasaki 의 (이 분 이름도 잊어버리고 있었...) 앨범이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;STOMP 뮤직에서 2009년에 발매한 Stars&amp;amp;Waves 라는 앨범인데, 그 때는 그다지 듣기 좋다는 생각이 없었다가, 다음해인가 발매된 Missing you 라는 앨범을 사서 들으면서 이 뮤지션의 음악을 이것저것 찾아보았던 기억이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각해보면, 입사 후 얼마지나지 않아 샀던 것이니 벌써 아주 오래전 앨범들인데, 그런 생각은 없이, 연도만 보고 오래전이라는 생각이 드는 건 무슨 생각의 불일치인지...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2009년이면 15년 전인가? 15년이 지났어도 음악은 여전히 그대로인데, 나만 변하는 것 같아 좀 쓸쓸하기도 하다...&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/281</guid>
      <comments>https://manime.tistory.com/entry/%EC%98%A4%EB%9E%98%EC%A0%84-%EA%B5%AC%EC%9E%85%ED%95%9C-%EC%95%A8%EB%B2%94#entry281comment</comments>
      <pubDate>Sat, 8 Jun 2024 11:41:45 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 더 나은 프로그래머가 되는 법</title>
      <link>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EB%8D%94-%EB%82%98%EC%9D%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EA%B0%80-%EB%90%98%EB%8A%94-%EB%B2%95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;B2842485463_l.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pb50F/btsHBrCEY9n/KezkmDroFrw9dLUP5atfP1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pb50F/btsHBrCEY9n/KezkmDroFrw9dLUP5atfP1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pb50F/btsHBrCEY9n/KezkmDroFrw9dLUP5atfP1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpb50F%2FbtsHBrCEY9n%2FKezkmDroFrw9dLUP5atfP1%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;400&quot; height=&quot;514&quot; data-filename=&quot;B2842485463_l.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;프로그램을 작성하는 일을 하는 사람들이 아주 많은 요즘이다. 대학에서 다양한 내용을 배우고 회사에 취직해서 선배들로부터 업무를 배우고, 그에 맞춰 업무가 진행되는 방식대로 프로그램을 작성해 나간다. 영업과 제품 기획 부서에서 고객의 요구에 맞는 기획을 하고 새로운 프로젝트가 시작되면, 설계 부서에서 그에 맞는 구조 설계를 진행하고 등등.. 많은 부분은 회사에 짜여진 틀에 맞춰 진행이 된다. 이러한 과정 속에 프로그래머는 목표에 맞는 기능을 작성하기 위해, 기능에 맞는 목표, 그에 따른 기능 협의, 기능 설계, 상세 설계, testcast 설계, 코딩, UT, BT 등의 테스트 과정을 처리해 나가며 주어진 업무가 완료될 때까지 진행해 나간다. 이와 같은 업무 과정들이 숙달이 되고, 밀려드는 업무를 처리하는 것을 해치우고, QA에서 몰려드는 문제점, 완성 제품이 고객사에서 동작 중 이상 동작을 하여 이를 대응하는 비상 상황을 해결해 나가다보면 정신없이 시간이 흘러가게 된다. 이럴 때, 누군가의 조언이 필요하고 능력있는 선배에게 조언을 구하면 무언가 이러한 상황을 헤쳐나가는 데 도움이 될 것 같지만 실상 주변에 보면 선배들도 나와 상황이 다르지 않은 것을 느끼는 경우도 많고, 또 내가 만족할 만한 실천적인 조언을 들을 수 없는 경우도 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;프로그램을 작성하면서 누구나 겪는 일들을 나열하면서 본 리뷰를&lt;span&gt;&amp;nbsp; &lt;/span&gt;시작하였다. 이런 경우, 보통 다른 사람은 어떻게 프로그램을 작성할까? 큰 프로젝트를 성공적으로 진행할 때 어떤 기술이 필요할까? 와 같은 여러 고민들을 하게되고 여러 서적도 읽어보고 주위 동료, 선배들과 이야기하며 여러 현실적인 조언을 얻을 수 있다. 그러한 조언 중 나에게 도움이 되는 것을 얻을 수 있다면 좋지만 그렇지 않은 경우도 많다. 이 책도 그러한 조언들을 모아놓은 책이다. 책의 저자가 오랜 시간 프로그래머로서 일을 하면서 경험하고 느낀 것 생각한 것들을 5 가지 주제로 나누고 각 주제에 맞춰 여러가지 조언들을 이야기 형식으로 읽기 쉽게 설명해주고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;처음부터 차근 차근 책을 읽어나가다보면, 읽는 사람에 따라 조금씩은 다를 수 있지만, 많은 부분을 공감할 수 있을 것이다. 물론 아직 프로그래머가 되기 위한 과정에 있는 분들이라면, 피상적인 도덕책처럼 느낄 수 있을 수도 있겠지만, 수년간 개발을 해 보신 분들에게는 지금 하고 있는 일, 과거 진행해온 일들에 비추어 생각해 볼 수 있는 부분이 많을 것으로 생각된다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;이 책은 전체 다섯개의 주제에 맞게, 여러 가지 경우들을 하나 하나 챕터들로 나누어 설명을 하며 각 챕터들의 마지막에는 챕터의 요약하는 특이하지 않은 방식으로 구성되어 있다. 읽기 쉬운 산문 형식으로 진행된다. 엉클밥의 책과는 달리 상황 설명 및 코드를 이용하여 하나씩 짚어주며 이럴 때는 이렇게 와 같은 방식으로 설명을 하지는 않는다. 초반부에는 이해를 돕기 위해 이런 경우는 코드가 있었으면 더 좋지 않았을까? 라는 생각도 있었지만, 만약 그랬다면 오히려 책 전체의 흐름과 맞지 않았을 것이라 생각된다. 각 챕터의 의미를 관통하는 재미있는 그림을 제시하여, 이야기에 대해 다시한번 생각해 볼 수 있도록 하여, 굳이 코드와 같은 도구 없이도 해당 챕터의 내용을 이해할 수 있도록 해 두었다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-05-26 오전 8.17.22.png&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crKxEI/btsHBPpIUAs/v2Y9V3nV2NkKJ4htczVzVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crKxEI/btsHBPpIUAs/v2Y9V3nV2NkKJ4htczVzVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crKxEI/btsHBPpIUAs/v2Y9V3nV2NkKJ4htczVzVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrKxEI%2FbtsHBPpIUAs%2Fv2Y9V3nV2NkKJ4htczVzVK%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;1018&quot; height=&quot;780&quot; data-filename=&quot;스크린샷 2024-05-26 오전 8.17.22.png&quot; data-origin-width=&quot;1018&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 권의 책을 여러 역자들이 번역을 하면 생기는, 일관성없는 번역에 대한 우려도 전혀 없었다. 역자 분들 각자의 스타일이 있게 마련인데, 이 책을 읽는 동안 그러한 부분을 느끼지 못한 것 역시 이 책의 장점이 아닌가 싶다.&lt;span&gt;&amp;nbsp; &lt;/span&gt;책의 마지막에 국내 현업 개발자들의 이야기가 실려있는데, 이 부분도 책의 내용과 더불어 많은 도움이 되는 부분이라 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;책을 다 읽고나서 이 책의 조언들을 이를 어떻게 활용하는 것이 좋을까? 생각할 수 있다. 너무 당연한 내용이지만 이 책의 가장 중요한 내용이라 생각이 되는, 책의 서문에 필자가 작성한 다음 내용을 언급하며 본 리뷰를 마친다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&amp;ldquo;읽는 순서보다 더. 중요한 것은 내용을 받아들이는 방식이다. 실제로 더. 나아지기 위해서는 읽은 내용을 직접 적용해봐야 한다&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;한빛미디어&amp;nbsp;&amp;lt;나는&amp;nbsp;리뷰어다&amp;gt;&amp;nbsp;활동을&amp;nbsp;위해서&amp;nbsp;책을&amp;nbsp;제공받아&amp;nbsp;작성된&amp;nbsp;서평입니다&lt;/span&gt;&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/280</guid>
      <comments>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EB%8D%94-%EB%82%98%EC%9D%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EA%B0%80-%EB%90%98%EB%8A%94-%EB%B2%95#entry280comment</comments>
      <pubDate>Sun, 26 May 2024 08:47:48 +0900</pubDate>
    </item>
    <item>
      <title>c++ 공부 관련 사이트들 모음</title>
      <link>https://manime.tistory.com/entry/c-%EA%B3%B5%EB%B6%80-%EA%B4%80%EB%A0%A8-%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%93%A4-%EB%AA%A8%EC%9D%8C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;선언과 정의의 차이&lt;br /&gt;&lt;a href=&quot;https://banaba.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://banaba.tistory.com/41&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715064680453&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;선언과 정의(declaration and definition)&quot; data-og-description=&quot;0. 개요프로그래밍에서 선언(declaration)과 정의(definition)는 명백히 다른 역할을 하지만 혼동하여 사용하기 쉽습니다. 선언과 정의의 가장 큰 차이는 &amp;quot;메모리를 할당하는가&amp;quot; 입니다.메모리를 할당&quot; data-og-host=&quot;banaba.tistory.com&quot; data-og-source-url=&quot;https://banaba.tistory.com/41&quot; data-og-url=&quot;https://banaba.tistory.com/41&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/d3v8wJ/hyV2phgWE1/vj8D95o5KM8mx0jjBQSvj1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6Mkww/hyV2D7FUVG/iB9k488CXLvQUcjE3LEfsK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://banaba.tistory.com/41&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://banaba.tistory.com/41&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/d3v8wJ/hyV2phgWE1/vj8D95o5KM8mx0jjBQSvj1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/6Mkww/hyV2D7FUVG/iB9k488CXLvQUcjE3LEfsK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&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;선언과 정의(declaration and definition)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;0. 개요프로그래밍에서 선언(declaration)과 정의(definition)는 명백히 다른 역할을 하지만 혼동하여 사용하기 쉽습니다. 선언과 정의의 가장 큰 차이는 &quot;메모리를 할당하는가&quot; 입니다.메모리를 할당&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;banaba.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c++ 17 정리 잘되어 있는 사이트&lt;br /&gt;&lt;a href=&quot;https://devhycho1107.tistory.com/53&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://devhycho1107.tistory.com/53&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715060955864&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;C++ 17 에서 업데이트 된 기능 정리.&quot; data-og-description=&quot;이 글은 17년에 표준화 된 C++ 17 의 새로운 기능에 대한 정리한 글 입니다. 1. Class Template argument Deduction ( 클래스 템플릿 인자 추론 ) 기존에는 함수 템플릿 인자 추론이 가능했는데, 이제는 클래스 &quot; data-og-host=&quot;devhycho1107.tistory.com&quot; data-og-source-url=&quot;https://devhycho1107.tistory.com/53&quot; data-og-url=&quot;https://devhycho1107.tistory.com/53&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IyoFR/hyV2xl3RCf/tg9wEK5XsSojrnr10JR0l0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Cy5FA/hyV2vofSg2/mFGj13t1wkzPAk0nsWXrX0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/pz04d/hyVZeaCfu9/a6ElX97JKYY9cZHZvUNGJk/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a href=&quot;https://devhycho1107.tistory.com/53&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://devhycho1107.tistory.com/53&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IyoFR/hyV2xl3RCf/tg9wEK5XsSojrnr10JR0l0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Cy5FA/hyV2vofSg2/mFGj13t1wkzPAk0nsWXrX0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/pz04d/hyVZeaCfu9/a6ElX97JKYY9cZHZvUNGJk/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&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;C++ 17 에서 업데이트 된 기능 정리.&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이 글은 17년에 표준화 된 C++ 17 의 새로운 기능에 대한 정리한 글 입니다. 1. Class Template argument Deduction ( 클래스 템플릿 인자 추론 ) 기존에는 함수 템플릿 인자 추론이 가능했는데, 이제는 클래스&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;devhycho1107.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std::optional 및 variant 정리&lt;br /&gt;&lt;a href=&quot;https://modoocode.com/309&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://modoocode.com/309&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715060993465&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;씹어먹는 C++ - &amp;lt;17 - 5. C++ 17 의 std::optional, variant, tuple 살펴보기&amp;gt;&quot; data-og-description=&quot;optional 을 통해 원하는 데이터를 가지거나 가지지 않는 객체를 만들 수 있습니다. variant 를 통해 여러 타입 들 중 하나 를 나타내는 객체를 만들 수 있습니다. tuple 을 통해 여러 서로다른 타입들&quot; data-og-host=&quot;modoocode.com&quot; data-og-source-url=&quot;https://modoocode.com/309&quot; data-og-url=&quot;https://modoocode.com/309&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://modoocode.com/309&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://modoocode.com/309&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; data-ke-size=&quot;size16&quot;&gt;씹어먹는 C++ - &amp;lt;17 - 5. C++ 17 의 std::optional, variant, tuple 살펴보기&amp;gt;&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;optional 을 통해 원하는 데이터를 가지거나 가지지 않는 객체를 만들 수 있습니다. variant 를 통해 여러 타입 들 중 하나 를 나타내는 객체를 만들 수 있습니다. tuple 을 통해 여러 서로다른 타입들&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;modoocode.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;&amp;nbsp;&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/279</guid>
      <comments>https://manime.tistory.com/entry/c-%EA%B3%B5%EB%B6%80-%EA%B4%80%EB%A0%A8-%EC%82%AC%EC%9D%B4%ED%8A%B8%EB%93%A4-%EB%AA%A8%EC%9D%8C#entry279comment</comments>
      <pubDate>Tue, 7 May 2024 14:50:02 +0900</pubDate>
    </item>
    <item>
      <title>mac에서 코드 리뷰용 툴 찾기가 어렵네..</title>
      <link>https://manime.tistory.com/entry/mac%EC%97%90%EC%84%9C-%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%82%AC%EC%9A%A9%ED%95%A0-%EB%A7%8C%ED%95%9C-%ED%88%B4%EC%9D%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;나와 같은 고민은 꽤 많은 사람이 했을 것으로 생각이 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 vim이나 emacs와 ctags, cscopes, globe 와 같은 툴들을 조합해 코드를 보는 것도 터미널을 이용해서 코딩하는 입장에서야 좋은 방법이라고 생각한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오래전에도 그리 생각했고 여전히 업무에서도 이렇게 하고 있는데... 처음 분석해야하는 어려운 코드 특히 c++로 작성되어 있고, 여러 오픈 소스 라이브러리들과 연계되어 있는 코드를 분석해야 한다면, 코드를 하나하나 쫓아다니는게 쉬운 일은 아닌 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mac과 Windows, Linux 모두를 쓰면서, 코드 리뷰를 위해, code navigation tool, code visualization tool, code trace tool 등 여러가지 키워드를 이용 googling을 해 보면, 몇가지 툴들이 나오는데... Mac에서 딱히 쓸만한 툴을 아직 찾지 못했다. 물론 유료의 고가 툴들이 있을지도 모르는데.. 아직 못 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전에 Source Trail 이라는 툴이 나쁘지 않은 듯하여 몇번 사용해보았는데, 여러가지 문제가 있어 문제가 해결되면 구입해야지 하고 기다렸으나 결국 개발자가 개발을 포기하고 open source로 github에 오픈한 후 2021년 이후 진행상황이 없어 이쪽도 해결책은 되지 않는 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Visual Studio Code에서 Source Insight와 비슷하게 c/c++ 코드 peek 기능을 이용해서 tool tip이 뜨는 시점에 secondary view에 띄워주는 기능 같은 것이 있는지 찾아보고 있지만.. 아직 못 찾았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 어쩔 수 없이, Windows에서 사용 중인 Source Insight를 Cross Over 툴을 이용해 사용중인데, 억지로 Windows EXE 를 Mac 에서 Wine을 이용해 띄워주는 것이라 일부 불편한 점이 있기는 하다. 하지만, 없는 것보다는 나은 것 같다. 하지만 욕심은 끝이 없어서... 계속해서 찾아보게 된다는... ㅠㅠ&lt;/p&gt;</description>
      <category>이것저것 긁적긁적</category>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/278</guid>
      <comments>https://manime.tistory.com/entry/mac%EC%97%90%EC%84%9C-%EC%BD%94%EB%93%9C-%EB%A6%AC%EB%B7%B0%EB%A5%BC-%EC%9C%84%ED%95%B4-%EC%82%AC%EC%9A%A9%ED%95%A0-%EB%A7%8C%ED%95%9C-%ED%88%B4%EC%9D%80#entry278comment</comments>
      <pubDate>Mon, 6 May 2024 17:09:44 +0900</pubDate>
    </item>
    <item>
      <title>[리뷰] 도시를 만드는 기술 이야기</title>
      <link>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EB%8F%84%EC%8B%9C%EB%A5%BC-%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B8%B0%EC%88%A0-%EC%9D%B4%EC%95%BC%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;B3419874351_l.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;506&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUDO6f/btsGVWuxf7h/8WmEK8qmYgIPD0J24ybhlK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUDO6f/btsGVWuxf7h/8WmEK8qmYgIPD0J24ybhlK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUDO6f/btsGVWuxf7h/8WmEK8qmYgIPD0J24ybhlK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUDO6f%2FbtsGVWuxf7h%2F8WmEK8qmYgIPD0J24ybhlK%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;196&quot; height=&quot;248&quot; data-filename=&quot;B3419874351_l.jpg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;506&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 살고 있는 곳은 과거 여러 사람의 노력과 기술이 축적되어 이루어진 결과라 할 수 있다. 하지만 이러한 곳들을 항상 보면서 살고 있기 때문에 너무 당연하다고 느끼며 전혀 이상하다고 느끼지 못하고 살고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 책은 그러한 당연한 것들을, 굳이 알 필요가 있을까? 라고 생각할 수 있는 우리 주변의 다양한 시설들에 대해 설명을 하고 있다. 이 책에서 다루는 주제는 굳이 이러한 것들을 알아야 하나? 라고 생각한다면&amp;hellip; 꼭 알 필요는 없을 수도 있다. 하지만 이 책에서 다루는 내용 중 일부라도 기억하고 있다면, 길을 가다 그 부분을 마주쳤을 때 좀 더 자세히 들여다 볼 수 있을 것이라 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책의&lt;span&gt; &lt;/span&gt;목차를&lt;span&gt; &lt;/span&gt;보면&lt;span&gt; &lt;/span&gt;우리가&lt;span&gt; &lt;/span&gt;살아가는데&lt;span&gt; &lt;/span&gt;반드시&lt;span&gt; &lt;/span&gt;필요한&lt;span&gt; &lt;/span&gt;전기와&lt;span&gt; &lt;/span&gt;관련된&lt;span&gt; &lt;/span&gt;시설부터&lt;span&gt; &lt;/span&gt;시작해&lt;span&gt; &lt;/span&gt;통신&lt;span&gt;, &lt;/span&gt;도로&lt;span&gt;, &lt;/span&gt;철도&lt;span&gt;, &lt;/span&gt;댐과&lt;span&gt; &lt;/span&gt;같은&lt;span&gt; &lt;/span&gt;다양한&lt;span&gt; &lt;/span&gt;분야에&lt;span&gt; &lt;/span&gt;대해&lt;span&gt; &lt;/span&gt;다루는&lt;span&gt; &lt;/span&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2024-04-24 20.38.21.jpg&quot; data-origin-width=&quot;2573&quot; data-origin-height=&quot;1770&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KPfks/btsGTFHyH8w/xzadw8QB010fKaCUdamTM0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KPfks/btsGTFHyH8w/xzadw8QB010fKaCUdamTM0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KPfks/btsGTFHyH8w/xzadw8QB010fKaCUdamTM0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKPfks%2FbtsGTFHyH8w%2Fxzadw8QB010fKaCUdamTM0%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;648&quot; height=&quot;446&quot; data-filename=&quot;2024-04-24 20.38.21.jpg&quot; data-origin-width=&quot;2573&quot; data-origin-height=&quot;1770&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;책의&lt;span&gt; &lt;/span&gt;내용을&lt;span&gt; &lt;/span&gt;보면&lt;span&gt;, &lt;/span&gt;일견&lt;span&gt; &lt;/span&gt;백과&lt;span&gt; &lt;/span&gt;사전을&lt;span&gt; &lt;/span&gt;생각할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;. &lt;/span&gt;백과&lt;span&gt; &lt;/span&gt;사전식으로&lt;span&gt; &lt;/span&gt;주욱&lt;span&gt; &lt;/span&gt;나열했다고&lt;span&gt; &lt;/span&gt;하면&lt;span&gt; &lt;/span&gt;사실&lt;span&gt; &lt;/span&gt;지루하고&lt;span&gt; &lt;/span&gt;재미없을&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;밖에&lt;span&gt; &lt;/span&gt;없었을&lt;span&gt; &lt;/span&gt;것이다&lt;span&gt;. &lt;/span&gt;하지만&lt;span&gt; &lt;/span&gt;이&lt;span&gt; &lt;/span&gt;책에서는&lt;span&gt; &lt;/span&gt;먼저&lt;span&gt; &lt;/span&gt;다루고자&lt;span&gt; &lt;/span&gt;하는&lt;span&gt; &lt;/span&gt;내용을&lt;span&gt; &lt;/span&gt;왼쪽&lt;span&gt; &lt;/span&gt;페이지에는&lt;span&gt; &lt;/span&gt;그림으로&lt;span&gt; &lt;/span&gt;전체를&lt;span&gt; &lt;/span&gt;쉽게&lt;span&gt; &lt;/span&gt;파악할&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있도록&lt;span&gt; &lt;/span&gt;해&lt;span&gt; &lt;/span&gt;두었으며&lt;span&gt; &lt;/span&gt;반대쪽&lt;span&gt; &lt;/span&gt;페이지에는&lt;span&gt; &lt;/span&gt;해당&lt;span&gt; &lt;/span&gt;내용을&lt;span&gt; &lt;/span&gt;설명해&lt;span&gt; &lt;/span&gt;나가고&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;. &lt;/span&gt;그림에&lt;span&gt; &lt;/span&gt;나온&lt;span&gt; &lt;/span&gt;내용에&lt;span&gt; &lt;/span&gt;대해&lt;span&gt; &lt;/span&gt;왜&lt;span&gt; &lt;/span&gt;그리고&lt;span&gt; &lt;/span&gt;어떻게&lt;span&gt; &lt;/span&gt;만들어졌는지&lt;span&gt;, &lt;/span&gt;주변과&lt;span&gt; &lt;/span&gt;연결이&lt;span&gt; &lt;/span&gt;어떤&lt;span&gt; &lt;/span&gt;식으로&lt;span&gt; &lt;/span&gt;이루어지고&lt;span&gt; &lt;/span&gt;어떻게&lt;span&gt; &lt;/span&gt;활용이&lt;span&gt; &lt;/span&gt;되는지에&lt;span&gt; &lt;/span&gt;대해&lt;span&gt; &lt;/span&gt;설명을&lt;span&gt; &lt;/span&gt;하고&lt;span&gt; &lt;/span&gt;있다&lt;span&gt;. &lt;/span&gt;자칫&lt;span&gt; &lt;/span&gt;지루해질&lt;span&gt; &lt;/span&gt;수&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &lt;/span&gt;설명인데&lt;span&gt; &lt;/span&gt;하나의&lt;span&gt; &lt;/span&gt;문장을&lt;span&gt; &lt;/span&gt;짧게하여&lt;span&gt; &lt;/span&gt;문장이&lt;span&gt; &lt;/span&gt;쉽게&lt;span&gt; &lt;/span&gt;눈에&lt;span&gt; &lt;/span&gt;들어오도록&lt;span&gt; &lt;/span&gt;했고&lt;span&gt;, &lt;/span&gt;설명을&lt;span&gt; &lt;/span&gt;여러&lt;span&gt; &lt;/span&gt;예를&lt;span&gt; &lt;/span&gt;함께&lt;span&gt; &lt;/span&gt;들어&lt;span&gt; &lt;/span&gt;흥미를&lt;span&gt; &lt;/span&gt;잃지&lt;span&gt; &lt;/span&gt;않도록&lt;span&gt; &lt;/span&gt;하였다&lt;span&gt;. &lt;/span&gt;또&lt;span&gt; &lt;/span&gt;중요한&lt;span&gt; &lt;/span&gt;용어들은&lt;span&gt; &lt;/span&gt;볼드체로&lt;span&gt; &lt;/span&gt;모두&lt;span&gt; &lt;/span&gt;표시를&lt;span&gt; &lt;/span&gt;해&lt;span&gt; &lt;/span&gt;두어&lt;span&gt; &lt;/span&gt;볼드체만&lt;span&gt; &lt;/span&gt;보아도&lt;span&gt; &lt;/span&gt;어떤&lt;span&gt; &lt;/span&gt;내용에&lt;span&gt; &lt;/span&gt;대한&lt;span&gt; &lt;/span&gt;이야기인지&lt;span&gt; &lt;/span&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;슬라이스 1.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;972&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sM2L6/btsGSPEdfFa/qfKd6p69Uzhc8BHNVsl1ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sM2L6/btsGSPEdfFa/qfKd6p69Uzhc8BHNVsl1ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sM2L6/btsGSPEdfFa/qfKd6p69Uzhc8BHNVsl1ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsM2L6%2FbtsGSPEdfFa%2FqfKd6p69Uzhc8BHNVsl1ok%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;764&quot; height=&quot;519&quot; data-filename=&quot;슬라이스 1.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;972&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각&lt;span&gt; &lt;/span&gt;소챕터&lt;span&gt; &lt;/span&gt;말미에&lt;span&gt; &lt;/span&gt;있는&lt;span&gt; &amp;lsquo;&lt;/span&gt;못다한&lt;span&gt; &lt;/span&gt;이야기&lt;span&gt;' &lt;/span&gt;코너에는&lt;span&gt; &lt;/span&gt;해당&lt;span&gt; &lt;/span&gt;소챕터에서&lt;span&gt; &lt;/span&gt;다룬&lt;span&gt; &lt;/span&gt;주제와&lt;span&gt; &lt;/span&gt;연관되어&lt;span&gt; &lt;/span&gt;독자에게&lt;span&gt; &lt;/span&gt;알려주고&lt;span&gt; &lt;/span&gt;싶은&lt;span&gt; &lt;/span&gt;재미난&lt;span&gt; &lt;/span&gt;내용들을&lt;span&gt; &lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;한번&lt;span&gt; &lt;/span&gt;더&lt;span&gt; &lt;/span&gt;짚어준다&lt;span&gt;. &lt;/span&gt;책을&lt;span&gt; &lt;/span&gt;읽어가다보면&lt;span&gt;, &lt;/span&gt;이&lt;span&gt; &lt;/span&gt;부분에는&lt;span&gt; &lt;/span&gt;어떤&lt;span&gt; &lt;/span&gt;내용이&lt;span&gt; '&lt;/span&gt;못다한&lt;span&gt; &lt;/span&gt;이야기&lt;span&gt;'&lt;/span&gt;에&lt;span&gt; &lt;/span&gt;나올지&lt;span&gt; &lt;/span&gt;궁금할&lt;span&gt; &lt;/span&gt;만큼&lt;span&gt; &lt;/span&gt;흥미롭게&lt;span&gt; &lt;/span&gt;구성해&lt;span&gt; &lt;/span&gt;두어&lt;span&gt; &lt;/span&gt;좀&lt;span&gt; &lt;/span&gt;더&lt;span&gt; &lt;/span&gt;집중해서&lt;span&gt; &lt;/span&gt;책을&lt;span&gt; &lt;/span&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2024-04-24 20.41.35.jpg&quot; data-origin-width=&quot;1819&quot; data-origin-height=&quot;2522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vQC8f/btsGVcY0ADV/pw6AAANYdTdTTTnsVx162K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vQC8f/btsGVcY0ADV/pw6AAANYdTdTTTnsVx162K/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vQC8f/btsGVcY0ADV/pw6AAANYdTdTTTnsVx162K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvQC8f%2FbtsGVcY0ADV%2Fpw6AAANYdTdTTTnsVx162K%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;586&quot; height=&quot;812&quot; data-filename=&quot;2024-04-24 20.41.35.jpg&quot; data-origin-width=&quot;1819&quot; data-origin-height=&quot;2522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끝으로 이 책은 주변에 대한 호기심을 가진 분들이면 누구나 재미있게 읽을 수 있을 것으로 생각한다. 주변 사람들에게 이런 것까지 알고 있다고 자랑을 하려는 사람들에게도 좋은 자료일 수 있을 것이다. 하지만 이 책이 주변에 호기심을 가진 사람들에게 쉽게 그리고 너무 깊고 어려운 내용을 배제하여 설명을 한 것인 만큼, 관련 분야의 전문 지식을 가지신 분들에게는 맞지 않을 수 있을 것으로 생각된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당&lt;span&gt; &lt;/span&gt;포스팅은&lt;span&gt; &lt;/span&gt;한빛미디어&lt;span&gt; &amp;lt;&lt;/span&gt;나는&lt;span&gt; &lt;/span&gt;리뷰어다&lt;span&gt;&amp;gt; &lt;/span&gt;활동을&lt;span&gt; &lt;/span&gt;위해서&lt;span&gt; &lt;/span&gt;책을&lt;span&gt; &lt;/span&gt;제공받아&lt;span&gt; &lt;/span&gt;작성된&lt;span&gt; &lt;/span&gt;서평입니다&lt;span&gt;.&lt;/span&gt;&lt;/p&gt;</description>
      <author>내공강화</author>
      <guid isPermaLink="true">https://manime.tistory.com/277</guid>
      <comments>https://manime.tistory.com/entry/%EB%A6%AC%EB%B7%B0-%EB%8F%84%EC%8B%9C%EB%A5%BC-%EB%A7%8C%EB%93%9C%EB%8A%94-%EA%B8%B0%EC%88%A0-%EC%9D%B4%EC%95%BC%EA%B8%B0#entry277comment</comments>
      <pubDate>Wed, 24 Apr 2024 21:16:17 +0900</pubDate>
    </item>
  </channel>
</rss>