<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>템닉의 개발저장소</title>
    <link>https://tempnixk.tistory.com/</link>
    <description>개발 관련된 히스토리들을 남겨놓는 블로그입니다.
22년도에는 앱 개발, 23-24년도에는 웹 개발을 주로 했습니다.
25년도부터 게임 개발에 집중하려 합니다.</description>
    <language>ko</language>
    <pubDate>Fri, 21 Aug 2026 12:37:34 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>템닉_</managingEditor>
    <image>
      <title>템닉의 개발저장소</title>
      <url>https://tistory1.daumcdn.net/tistory/4405462/attach/3a87870be17046d2a6e34aa0ca9fc612</url>
      <link>https://tempnixk.tistory.com</link>
    </image>
    <item>
      <title>함수에서의 포인터 사용</title>
      <link>https://tempnixk.tistory.com/entry/%ED%95%A8%EC%88%98%EC%97%90%EC%84%9C%EC%9D%98-%ED%8F%AC%EC%9D%B8%ED%84%B0-%EC%82%AC%EC%9A%A9</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;함수에서 포인터를 사용하는 경우는 보통 다음과 같은 세가지 경우가 있다고 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 매개 변수가 포인터&lt;br /&gt;출력을 매개변수에 저장해서 보내는 것이 아닐까 추측하면 대부분 맞음.&lt;/p&gt;
&lt;pre id=&quot;code_1714548767343&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void Add(int a, int b, int *c) {
	*c = a + b;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 반환 값을 여러 개 받고 싶은 경우&lt;br /&gt;C++에서는 보통 반환값을 하나 밖에 받지 못한다. (ex: return X;)&lt;br /&gt;함수를 실행 시켰을때 반환 값을 여러개 받(는 것처럼 하)고 싶다면,&lt;/p&gt;
&lt;pre id=&quot;code_1714548930183&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;void Add(int a, int b, int *c, int *d) {
	*c = a + b;
	*d = a - b;
}&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;3. 크기가 엄청 큰 배열을 함수로 넘겨줄 때&lt;/p&gt;
&lt;pre id=&quot;code_1714734896381&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool IsEqual(const char str1[], const char str2[])
{
    int i=0;
    while(i&amp;lt;kMaxStr) {
        for(int j=0; j&amp;lt;kMaxStr;j++) {
            
            if(str1[i]!=str2[i])
                return false;
            else
                return true;
            i++;
        }
    }
    return true;
}

int main()
{
    const char str1[kMaxStr] = &quot;stop&quot;;
    while (1)
    {
        char str2[kMaxStr];
        cin &amp;gt;&amp;gt; str2;

        if(IsEqual(str1, str2)) 
        {
            cout &amp;lt;&amp;lt; &quot;종료합니다.\n&quot;;
            break;            
        } else
            cout&amp;lt;&amp;lt;&quot;계속합니다.\n&quot;;
    }

    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 IsEqual함수의 매개변수는 사실 배열이 아니라 포인터이다. 배열이 시작하는 곳의 주소.&lt;br /&gt;sizeof(str1), sizeof(str2)를 해보면 둘다 포인터기 때문에 8바이트가 나온다. (크기가 100인 배열이면 100바이트가 나와야함) 문자의 배열 두개를 넘겨주는 &lt;b&gt;것처럼&amp;nbsp;&lt;/b&gt;호출을 하고 있으나 내부적으로는 포인터이고, 아예&lt;/p&gt;
&lt;pre id=&quot;code_1714735014145&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool IsEqual(const char *str1, const char *str2)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&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번이 잘 이해가 안가서 wrtn.ai에게 물어보았고 답변 결과는 다음과 같았다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;C++에서 배열을 함수의 매개변수로 사용할 때, 실제로는 포인터가 사용됩니다. 이를 이해하기 위해선 배열과 포인터의 관계, 그리고 C++에서의 배열 인자 처리 방식에 대해 자세히 살펴볼 필요가 있습니다.&lt;br /&gt;&lt;b&gt;1. 배열과 포인터의 관계&lt;/b&gt;&lt;br /&gt;C++에서 배열 이름은 배열의 첫 번째 요소를 가리키는 포인터로 사용될 수 있습니다. 예를 들어, int arr[10];이라는 배열이 있다면, arr은 &amp;amp;arr[0]을 의미하는 포인터로 해석될 수 있습니다. 배열의 이름 자체가 배열의 첫 번째 원소를 가리키는 주소로 변환됩니다.&lt;br /&gt;&lt;b&gt;2. 함수에서의 배열 인자&lt;/b&gt;&lt;br /&gt;함수에 배열을 인자로 넘길 때, &lt;b&gt;배열의 크기 정보는 전달되지 않습니다&lt;/b&gt;. 대신, 배열의 이름(즉, 배열의 첫 번째 요소를 가리키는 포인터)만이 함수에 전달됩니다. 따라서, IsEqual(const char str1[], const char str2[]) 함수 선언에서 str1과 str2는 사실상 const char* str1, const char* str2와 동일하게 처리됩니다. 여기서 const 키워드는 포인터가 가리키는 데이터를 변경할 수 없음을 의미합니다.&lt;br /&gt;&lt;b&gt;3. 함수 내 배열 접근&lt;/b&gt;&lt;br /&gt;함수 내에서 이 포인터(즉, 배열 이름)를 사용하여 배열의 각 요소에 접근할 수 있습니다. 포인터 산술을 사용하거나 배열 인덱싱 문법을 사용하여 이를 수행할 수 있으며, 이는 내부적으로 포인터 산술로 처리됩니다.&lt;br /&gt;&lt;b&gt;4. 결론&lt;/b&gt;&lt;br /&gt;따라서, IsEqual 함수에서 const char str1[], const char str2[]를 매개변수로 사용할 때, 이들은 실제로는 const char* 타입의 포인터로 처리되며, 이 포인터들은 각각 문자열 str1과 str2의 첫 번째 문자를 가리키게 됩니다. 이를 통해 함수 내에서 문자열의 각 문자에 접근하여 비교할 수 있는 것입니다.&lt;br /&gt;간단히 말해서, const char str1[]와 같은 매개변수는 포인터이며, 이는 함수에 전달될 때 배열의 크기 정보 없이 배열의 시작 주소만을 전달하기 때문입니다. 이런 방식으로 배열을 함수에 전달하는 것은 C++에서 일반적인 배열 처리 방법입니다.&lt;/blockquote&gt;</description>
      <category>게임 개발/C++언어</category>
      <category>C++</category>
      <category>포인터</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/115</guid>
      <comments>https://tempnixk.tistory.com/entry/%ED%95%A8%EC%88%98%EC%97%90%EC%84%9C%EC%9D%98-%ED%8F%AC%EC%9D%B8%ED%84%B0-%EC%82%AC%EC%9A%A9#entry115comment</comments>
      <pubDate>Wed, 1 May 2024 16:38:51 +0900</pubDate>
    </item>
    <item>
      <title>[인프런] 언리얼 엔진 5 스파르타 클래스 - 심화편 후기</title>
      <link>https://tempnixk.tistory.com/entry/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%96%B8%EB%A6%AC%EC%96%BC-%EC%97%94%EC%A7%84-5-%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%8B%AC%ED%99%94%ED%8E%B8-%ED%9B%84%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;이번에 인프런에서 주최한 이벤트인 찍먹클럽 1기에 운좋게 당첨이 되었습니다. &lt;br&gt;자세한 내용은 아래 링크에 첨부해 놓겠습니다.&lt;br&gt;&lt;a href=&quot;https://kr.linkedin.com/posts/inflab_%EC%9D%B8%ED%94%84%EB%9F%B0%EC%97%90%EC%84%9C-%EA%B0%95%EC%9D%98-%EC%B2%B4%ED%97%98%EB%8B%A8-%EC%B0%8D%EB%A8%B9%ED%81%B4%EB%9F%BD-1%EA%B8%B0%EB%A5%BC-%EB%AA%A8%EC%A7%91%ED%95%A9%EB%8B%88%EB%8B%A4-%EC%B0%8D%EB%A8%B9%ED%81%B4%EB%9F%BD%EC%9D%B4%EB%9E%80-activity-7170678913872908288--xO6&quot; target=&quot;_self&quot;&gt;&lt;span&gt;인프런 찍먹클럽이 궁금하다면?&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;879&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlIIgp/btsGAcdiT1z/2krkWf1XKDkwwKS6I155s0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlIIgp/btsGAcdiT1z/2krkWf1XKDkwwKS6I155s0/img.jpg&quot; data-alt=&quot;얏호~! &quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlIIgp/btsGAcdiT1z/2krkWf1XKDkwwKS6I155s0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlIIgp%2FbtsGAcdiT1z%2F2krkWf1XKDkwwKS6I155s0%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;919&quot; height=&quot;879&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;879&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;얏호~! &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;br&gt;덕분에 고퀄리티의 언리얼 강좌를 잠시 맛볼 수 있어서 후기를 남기려고 합니다.&lt;br&gt;먼저 제가 신청한 강의는 YAL강사님의 ‘언리얼 엔진 5 스파르타 클래스 - 심화편‘ 이었습니다.&lt;br&gt;&lt;a href=&quot;https://bit.ly/3T7YBbd&quot; target=&quot;_self&quot;&gt;&lt;span&gt;강의 바로가기 링크&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIIlaB/btsGzcecUD0/x0XTXyKmG7BKvP1sXWU8Hk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIIlaB/btsGzcecUD0/x0XTXyKmG7BKvP1sXWU8Hk/img.jpg&quot; data-alt=&quot;심화편이지만 그렇게 어려운 느낌은 들지 않았습니다. 설명이 좋아서일까요.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIIlaB/btsGzcecUD0/x0XTXyKmG7BKvP1sXWU8Hk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIIlaB%2FbtsGzcecUD0%2Fx0XTXyKmG7BKvP1sXWU8Hk%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;663&quot; height=&quot;842&quot; data-origin-width=&quot;663&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;심화편이지만 그렇게 어려운 느낌은 들지 않았습니다. 설명이 좋아서일까요.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;그래서 한달 동안 강의를 듣고 느낀점을 이야기해보려고 합니다. &lt;br&gt;강의수는 총 92강입니다. 하지만 강사님이 계속해서 강의를 업데이트 하시는 것 같습니다. &lt;br&gt;강의 목차는 다음과 같습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;2360&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/A0nIn/btsGw3oXoiG/Ii3jvzVXXU4JKAwYiYiuQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/A0nIn/btsGw3oXoiG/Ii3jvzVXXU4JKAwYiYiuQK/img.png&quot; data-alt=&quot;생각보다 본격적인 내용의 강의가 많습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/A0nIn/btsGw3oXoiG/Ii3jvzVXXU4JKAwYiYiuQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FA0nIn%2FbtsGw3oXoiG%2FIi3jvzVXXU4JKAwYiYiuQK%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;1640&quot; height=&quot;2360&quot; data-origin-width=&quot;1640&quot; data-origin-height=&quot;2360&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생각보다 본격적인 내용의 강의가 많습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;거의 이론 + 실습으로 구성되어 있는 강의인데, 현재 제가 군대에 있어서 실습을 진행하진 못했습니다. &lt;br&gt;강의 미리보기 기간이 끝난 뒤에도 재구매해서 실습을 하고 싶을 정도로 재미있는 내용으로 구성이 되어있더라구요.&lt;br&gt;투사체 발사, 투사체 최적화 등등 부터 애니메이션, AI에 대한 내용들까지 다루는데 안타깝게도 진도를 다 나가질 못했습니다.&lt;br&gt;&lt;br&gt;섹션 1~5까지는 일반적인 CS지식에 언리얼을 감싸서 먹여줍니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2360&quot; data-origin-height=&quot;1640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvvxB6/btsGyD3155K/lgNZnVHfcXS9RvAks9hkl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvvxB6/btsGyD3155K/lgNZnVHfcXS9RvAks9hkl0/img.png&quot; data-alt=&quot;(출처: 언리얼 엔진 5 스파르타 클래스 - 심화편, 섹션3. 총알 최적화하기 - Line Trace)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvvxB6/btsGyD3155K/lgNZnVHfcXS9RvAks9hkl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvvxB6%2FbtsGyD3155K%2FlgNZnVHfcXS9RvAks9hkl0%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;2360&quot; height=&quot;1640&quot; data-origin-width=&quot;2360&quot; data-origin-height=&quot;1640&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;(출처: 언리얼 엔진 5 스파르타 클래스 - 심화편, 섹션3. 총알 최적화하기 - Line Trace)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;섹션 6~12까지는 애니메이션에 대한 구체적인 강의들로 구성이 되어있습니다. &lt;br&gt;섹션 13~16까지는 AI관련 내용인데, 비유하자면 Escape From Tarkov에 나오는 Scav 진영을 어떻게 구현했을지 에 대해서 알 수 있습니다. AI 봇의 정찰에 대한 내용을 담고 있습니다.&lt;br&gt;&lt;br&gt;지금 가격으로는 110,000원이고 충분히 돈값 하는 강의라고 생각합니다.&lt;br&gt;혹시 너무 광고같다고 생각하시는 분들이 있다면&amp;nbsp;&amp;nbsp;YAL 강사님의 언리얼 엔진 5 스파르타 클래스 - 실전편을 한번 들어보시고 고민해보시는 것도 괜찮을 것 같습니다.&lt;br&gt;&lt;br&gt;개인적으로는 심화편의 섹션 1이 감명깊었습니다. 심화편임에도 불구하고 초심자들을 배려해주는 내용이라, 빠진 기초지식을 채워넣고 독학하면서 도움이 꽤 되었습니다.&lt;br&gt;유니티 찍먹할때 배웠던 부분이 이 강의에서 섹션 5까지 겹치는 걸 생각했을때 이 강의가 상당히 많은 부분을 커버하고 있음이 느껴집니다. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;</description>
      <category>강의후기</category>
      <category>게임개발</category>
      <category>게임개발강의</category>
      <category>게임개발자</category>
      <category>인강후기</category>
      <category>인프런</category>
      <category>인프런강의</category>
      <category>인프런강의후기</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/114</guid>
      <comments>https://tempnixk.tistory.com/entry/%EC%9D%B8%ED%94%84%EB%9F%B0-%EC%96%B8%EB%A6%AC%EC%96%BC-%EC%97%94%EC%A7%84-5-%EC%8A%A4%ED%8C%8C%EB%A5%B4%ED%83%80-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%8B%AC%ED%99%94%ED%8E%B8-%ED%9B%84%EA%B8%B0#entry114comment</comments>
      <pubDate>Thu, 11 Apr 2024 22:35:12 +0900</pubDate>
    </item>
    <item>
      <title>[유지보수 일기] NoSuchMethodError 발생</title>
      <link>https://tempnixk.tistory.com/entry/%EC%9C%A0%EC%A7%80%EB%B3%B4%EC%88%98-%EC%9D%BC%EA%B8%B0-NoSuchMethodError-%EB%B0%9C%EC%83%9D</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;운영중인 체계에서 11월 20일부터 DB에 메일 발송 내역이 쌓이지 않는 것을 발견하였다.&lt;br&gt;깃에 올라와있는 당일 변경 내역은 메일 발송에 크게 영향을 주는 부분이 아니었어서 약간 당황스러웠다.&lt;br&gt;변경 내역이 DB쪽과 충돌을 일으키나 싶어서 DB에 입력되어있는 ID값을 확인해봤는데 DB에도 잘 적용이 되어있었다. &lt;br&gt;흠… 디버깅 모드를 켰지만 내가 아직 디버그에 미숙한건지 발견해내지 못했다.&lt;br&gt;포스트맨으로 확인해보려고 했으나 body에 넣어줘야할 값들이 41개정도 들어가는 걸로 확인을 해서 다른 방법을 찾으려 했다.&lt;br&gt;일단 크론탭으로 돌아가는 시스템이기에 서버로그에 메일발송 관련 로그가 찍혀있을것이라고 생각을 했다.&lt;br&gt;그런데 메일발송완료 로그는 찍혀있었다. 당일로부터 5일 내외를 확인해봤는데 모두 로그가 찍혀있었다.&lt;br&gt;서버 로그 확인시에 11월 20일자에 서버가 한번 셧다운되었다가 다시 작동하기는 했었다.&lt;br&gt;그 이후로 NoSuchMethodError가 발생하기 시작했다.&lt;br&gt;관련해서 자료를 찾아보았는데, 아마 최신 버전 수정후 배포할때 문제가 있지 않았을까 생각이들었다.&lt;br&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;/li&gt;&lt;li&gt;메소드가 아예 없는가?&lt;/li&gt;&lt;li&gt;타이핑 오류가 있는가?&lt;/li&gt;&lt;li&gt;클래스,&amp;nbsp;&amp;nbsp;jar가 정상적으로 올라가 있는가?&lt;/li&gt;&lt;li&gt;내부에서 참조하는 lib가 빠졌는가?&lt;/li&gt;&lt;li&gt;classpath 상에서 중복되는 class가 있어서 메서드를 정상적으로 찾지 못하는가?&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;우선 1~3 까지 인텔리제이에서 확인했을때는 문제가 없었다.&lt;br&gt;매개변수 잘못 사용했는지 확인하려고 스택트레이스 에러메시지를 읽으면서 관련부분을 찾았다.&lt;br&gt;Djava. Ljava 이런식으로 나오는 로그에 대해서도 알게되었다.&lt;br&gt;&lt;br&gt; &lt;br&gt;&lt;a href=&quot;https://okky.kr/articles/338405&quot; target=&quot;_blank&quot;&gt;&lt;span&gt;https://okky.kr/articles/338405&lt;/span&gt;&lt;/a&gt;&lt;br&gt;이 글을 참고하니 도움이 많이 되었다.&lt;br&gt;&lt;br&gt;따라서 이때 코드상의 문제가 아니라 배포하면서 문제가 생겼을 것이라고 확신했다.&lt;br&gt;&lt;br&gt;이때 자바 디컴파일러를 처음 사용해봤다. gui버전이라서 그렇게 어렵지 않았다. &lt;br&gt;파일질라에서 운영 서버 접속후 문제가 되는 것처럼 보이는 클래스를 로컬에 저장하고, 디렉토리 따라 파일만 찾아주면 디컴파일하는데 시간은 걸리지만 바로 어떤 클래스가 돌아가고 있었는지를 확인 할 수 있었다.&lt;br&gt;&lt;br&gt;확인해본 결과 깃에 올라온 버전은 수정이 된 버전인데 서버에 붙어있는 파일은 예전 버전이라서 실제로 메소드가 없었던 것이다.&lt;br&gt;&lt;br&gt;깃에 올라온 코드를 전적으로 신뢰하면 안된다는 것을 느꼈다. CICD가 구축되는 환경이라면 이런일도 없었을텐데.. 라는 아쉬움도 들고 나중에 CI/CD 공부를 해보긴 해야겠다는 생각도 하게되었다.&lt;/p&gt;</description>
      <category>웹 개발/Spring Boot</category>
      <category>Java</category>
      <category>NoSuchMethodError</category>
      <category>백엔드</category>
      <category>유지보수</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/113</guid>
      <comments>https://tempnixk.tistory.com/entry/%EC%9C%A0%EC%A7%80%EB%B3%B4%EC%88%98-%EC%9D%BC%EA%B8%B0-NoSuchMethodError-%EB%B0%9C%EC%83%9D#entry113comment</comments>
      <pubDate>Wed, 17 Jan 2024 15:02:36 +0900</pubDate>
    </item>
    <item>
      <title>Codea의 Parameters에 대해서 알아보자!</title>
      <link>https://tempnixk.tistory.com/entry/Codea-Parameters</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Parameter에는 세가지 대분류가 있다.&lt;/p&gt;
&lt;div style=&quot;color: #4a615f; text-align: start;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Creating Parameters&lt;br /&gt;2. Watching Expressions&lt;br /&gt;3. Clearing the Parameter List&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;Creating Parameters에는 총 6가지 기능이 존재한다. (&lt;a href=&quot;https://codea.io/reference/&quot;&gt;https://codea.io/reference/&lt;/a&gt;)&lt;br /&gt;parameter.number, parameter.integer, parameter.color, parameter.boolean, parameter.text, parameter.action&lt;br /&gt;이 프로젝트에서는 number와 integer만 쓰였다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;Creating Parameters&lt;/h3&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;1. parameter.number&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 함수는 뷰어 안에 코드에서 전역 변수로 사용할 수 있는 시각적 슬라이더를 만들어줍니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;마치 유니티 인스펙터에 Range 코드를 통해 슬라이더를 만드는 것과 비슷한 것 같다.&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.number( name )&lt;br /&gt;parameter.number( name, min, max )&lt;br /&gt;parameter.number( name, min, max, initial )&lt;br /&gt;parameter.number( name, min, max, initial, callback )&lt;br /&gt;&lt;br /&gt;-- name: string. 파라미터 함수는 name으로 전역 변수를 생성합니다.&lt;br /&gt;-- min: int 또는 float. 매개변수가 가질 수 있는 최솟값을 지정합니다.&lt;br /&gt;--&amp;nbsp;max: int 또는 float. 매개변수가 가질 수 있는 최댓값을 지정합니다.&lt;br /&gt;--&amp;nbsp;initial: int 또는 float. 매개변수의 초깃값(시작값)을 지정합니다.&lt;br /&gt;--&amp;nbsp;callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #374151; text-align: start;&quot;&gt;일반적으로 setup() 함수 내에서 parameter.number() 함수를 호출합니다.&lt;/span&gt;&lt;br /&gt;위와 같이 사용하며 name 문자열은 버튼에 지정되는 레이블이며 전역변수로 노출됩니다.&lt;br /&gt;callback 인수는 버튼을 눌렀을 때 호출할 콜백 함수를 지정하는데 사용하며, 유일한 인수로는 버튼의 name이 전달됩니다.&lt;br /&gt;name에 지정한 문자열은 코드에서 사용할 수 있는 전역 변수로 표시됩니다. 뷰어에서 슬라이더를 조정하면 변수가 적절하게 설정됩니다. min, max, initial을 통해 최솟값, 최댓값, 초깃값을 각각 설정할 수 있습니다. 초깃값이 지정되지 않은 경우, 파라미터는 최솟값으로 설정됩니다. 최솟값이나 최댓값이 지정되지 않은 경우 [0, 10] 범위를 디폴트값으로 가집니다.&lt;br /&gt;optional callback 인수는 파라미터 슬라이더가 변경될 때 호출할 콜백 함수를 지정합니다. 이 콜백 함수는 파라미터의 값을 단일 인수로 받습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2. parameter.integer&lt;/span&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 함수는 뷰어 안에 코드에서 전역 변수로 사용할 수 있는 시각적 슬라이더를 만들어줍니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.integer( name )&lt;br /&gt;parameter.integer( name, min, max )&lt;br /&gt;parameter.integer( name, min, max, initial )&lt;br /&gt;parameter.integer( name, min, max, initial, callback )&lt;br /&gt;&lt;br /&gt;--&amp;nbsp;name: string. parameter.integer 함수는 name으로 전역 변수를 생성합니다.&lt;br /&gt;--&amp;nbsp;min: int 또는 float. 매개변수가 가질 수 있는 최솟값을 지정합니다.&lt;br /&gt;--&amp;nbsp;max: int 또는 float. 매개변수가 가질 수 있는 최댓값을 지정합니다.&lt;br /&gt;--&amp;nbsp;initial: int 또는 float. 매개변수의 초깃값(시작값)을 지정합니다.&lt;br /&gt;--&amp;nbsp;callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로 setup() 함수 내에서 parameter.integer() 함수를 호출합니다.&lt;br /&gt;위와 비슷하나, 이 함수는 name으로 선언된 변수를 항상 정수값으로 설정합니다. 따라서, 최솟값, 최댓값, 초기값이 정수여야합니다.&lt;br /&gt;name에 지정한 문자열은 코드에서 사용할 수 있는 전역 변수로 표시됩니다. 뷰어에서 슬라이더를 조정하면 변수가 적절하게 설정됩니다. min, max, initial을 통해 최솟값, 최댓값, 초깃값을 각각 설정할 수 있습니다. 초깃값이 지정되지 않은 경우, 파라미터는 최솟값으로 설정됩니다. 최솟값이나 최댓값이 지정되지 않은 경우 [0, 10] 범위를 디폴트값으로 가집니다.&lt;br /&gt;optional callback 인수는 파라미터 슬라이더가 변경될 때 호출할 콜백 함수를 지정합니다. 이 콜백 함수는 파라미터의 값을 단일 인수로 받습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;3. parameter.color&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 기능은 코드의 전역 색상 변수를 조정하는 데 사용할 수 있는 시각적 색상 샘플을 뷰어에 만듭니다.&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.color( name )&lt;br /&gt;parameter.color( name, color )&lt;br /&gt;parameter.color( name, color, callback )&lt;br /&gt;&lt;br /&gt;parameter.color( name )&lt;br /&gt;parameter.color( name, red, green, blue )&lt;br /&gt;parameter.color( name, red, green, blue, callback )&lt;br /&gt;&lt;br /&gt;parameter.color( name )&lt;br /&gt;parameter.color( name, red, green, blue, alpha )&lt;br /&gt;parameter.color( name, red, green, blue, alpha, callback )&lt;br /&gt;&lt;br /&gt;parameter.color( name )&lt;br /&gt;parameter.color( name, gray )&lt;br /&gt;parameter.color( name, gray, callback )&lt;br /&gt;&lt;br /&gt;parameter.color( name )&lt;br /&gt;parameter.color( name, gray, alpha )&lt;br /&gt;parameter.color( name, gray, alpha, callback )&lt;br /&gt;&lt;br /&gt;--&amp;nbsp;name: 문자열, 이 매개변수 함수는 이 이름으로 전역 색상 변수를 생성합니다.&lt;br /&gt;--&amp;nbsp;red: 정수, 색상의 빨간 구성 요소의 초기 값을 지정합니다.&lt;br /&gt;--&amp;nbsp;green: 정수, 색상의 녹색 구성 요소의 초기 값을 지정합니다.&lt;br /&gt;--&amp;nbsp;blue: 정수, 색상의 파란 구성 요소의 초기 값을 지정합니다.&lt;br /&gt;--&amp;nbsp;gray: 정수, 색상의 회색 값 지정&lt;br /&gt;--&amp;nbsp;alpha: 정수, 색상의 알파 구성 요소의 초기 값 지정&lt;br /&gt;--&amp;nbsp;callback: 함수, 매개변수가 변경될 때 호출되는 함수로, 이 함수는 색상 값이 변경될 때의 값을 인수로 받습니다.&lt;/blockquote&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로 setup() 함수 내에서 parameter.color() 함수를 호출합니다. name으로 지정한 문자열은 색상 형식의 전역 변수로 노출됩니다.&lt;br /&gt;이것은 코드 내에서 사용할 수 있습니다. 뷰어에서 컬러 샘플을 탭하면 interactive color picker가 표시되어 코드가 실행되는 동안 변수를 실시간으로 조정할 수 있습니다. 또한 color object, 그레이 스케일 값 또는 RGB triplet(알파 값을 포함할 수도 있음)로 색상의 초기 값을 설정할 수 있습니다.&lt;br /&gt;optional callback 인수는 색상 값이 변경될 때 호출될 콜백 함수를 지정합니다. 이 콜백 함수는 색상 형식의 새 값이 포함된 단일 인수를 받습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;4. parameter.boolean&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 기능은 코드의 부울 변수를 조정하는 데 사용할 수 있는 시각적 스위치를 뷰어에 만듭니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.boolean( name )&lt;br /&gt;parameter.boolean( name, initial )&lt;br /&gt;parameter.boolean( name, initial, callback )&lt;br /&gt;parameter.boolean( name, callback )&lt;br /&gt;&lt;br /&gt;-- name: 문자열, 이 매개변수 함수는 이 이름으로 전역 변수를 생성합니다.&lt;br /&gt;-- initial:&amp;nbsp;boolean. boolean 매개변수의 초깃값(시작값)을 지정합니다.&lt;br /&gt;--&amp;nbsp;callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로 setup() 함수 내에서 parameter.boolean() 함수를 호출합니다.&lt;br /&gt;name으로 지정한 문자열은 코드 내에서 사용될 수 있는 전역 변수로 노출됩니다.&lt;br /&gt;뷰어에서 스위치를 조절하면 변수가 적절히 설정됩니다. 또한 스위치의 초기 값을 지정할 수 있습니다. true로 설정하면 스위치가 ON 상태로 설정되고, false로 설정하면 OFF 상태로 설정됩니다.&lt;br /&gt;optional callback 인수는 매개변수 스위치가 변경될 때 호출될 콜백 함수를 지정합니다. 이 콜백 함수는 매개변수의 값을 단일 인수로 받습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;5. parameter.text&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 기능은 뷰어에 시각적인 텍스트 상자를 만듭니다. 이 컨트롤에 입력하여 이름으로 정의된 해당 문자열 값의 내용을 조정할 수 있습니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.text( name )&lt;br /&gt;parameter.text( name, initial )&lt;br /&gt;parameter.text( name, initial, callback )&lt;br /&gt;parameter.text( name, callback )&lt;br /&gt;&lt;br /&gt;-- name: string. 이 매개변수 함수는 이 이름으로 전역 변수를 생성합니다.&lt;br /&gt;-- initial: string. 매개변수의 초깃값을 지정합니다.&lt;br /&gt;--&amp;nbsp;callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.&lt;/blockquote&gt;
&lt;p style=&quot;color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로 setup() 함수 내에서 parameter.text() 함수를 호출합니다. name으로 지정한 문자열은 코드 내에서 사용할 수 있는 전역 변수로 노출됩니다.&lt;br /&gt;parameter.text 컨트롤에 텍스트를 입력하면 name으로 정의된 변수가 적절히 설정됩니다. 또한 initial을 문자열로 설정하여 텍스트 변수의 초기 내용을 지정할 수 있습니다.&lt;br /&gt;optional callback 인수는 매개변수 텍스트가 변경될 때 호출될 콜백 함수를 지정합니다. 이 콜백 함수는 매개변수의 값을 단일 인수로 받습니다.&lt;/p&gt;
&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;6. parameter.action&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;이 기능은 뷰어 사이드바에 시각적 버튼을 만듭니다. 버튼을 누르면 콜백으로 정의된 기능을 호출합니다. name 인수는 버튼의 레이블을 설정합니다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Syntax&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;parameter.action( name, callback )&lt;br /&gt;&lt;br /&gt;-- name: string. 이 매개변수 함수는 이 이름으로 전역 변수를 생성합니다.&lt;br /&gt;--&amp;nbsp;callback: function. callback은 매개변수가 변경될 때마다 호출되며 매개변수 값이 인수로 전달됩니다.&lt;/blockquote&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;p style=&quot;color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;name 인수는 버튼의 라벨을 설정합니다.&lt;br /&gt;일반적으로 setup() 함수 내에서 parameter.action() 함수를 호출합니다. name으로 지정한 문자열은 뷰어에 나타나는 버튼의 라벨로 사용됩니다. 전역 변수로 노출되지 않습니다.&lt;br /&gt;callback 인수는 버튼이 눌렸을 때 호출될 콜백 함수를 지정합니다. 이 함수는 버튼의 이름을 유일한 인수로 받습니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;Watching Expressions&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;1. parameter.watch(expression)&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.watch( expression )&lt;br /&gt;&lt;br /&gt;-- expression: 문자열, 모니터링할 전역 변수 또는 표현식&lt;/blockquote&gt;
&lt;p style=&quot;color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 함수는 뷰어 내에서 Lua 표현식의 값을 모니터링할 수 있게 해줍니다. 일반적으로 메인 파일의 setup() 함수에서 parameter.watch() 함수를 호출합니다.&lt;/p&gt;
&lt;h3 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size23&quot;&gt;Clearing the Parameter List&lt;/h3&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;1. parameter.clear()&lt;/h4&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;parameter.clear()&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;span&gt;이 함수는 모든 parameter widgets 및 watch values의 parameter list를 지웁니다. 그런 다음 함수들의 parameter group을 사용하여 파라미터를 다시 추가할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;2. output.clear()&lt;/h4&gt;
&lt;/div&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Syntax&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;output.clear()&lt;/blockquote&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div id=&quot;txtTarget&quot; style=&quot;color: #000000;&quot;&gt;&lt;span&gt;이 함수는 print() 함수의 출력 버퍼를 지웁니다.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>게임 개발/Lua script &amp;amp; Codea</category>
      <category>Codea</category>
      <category>LUA</category>
      <category>lua script</category>
      <category>Parameter</category>
      <category>루아</category>
      <category>루아 스크립트</category>
      <category>코디아</category>
      <category>파라미터</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/112</guid>
      <comments>https://tempnixk.tistory.com/entry/Codea-Parameters#entry112comment</comments>
      <pubDate>Sun, 10 Dec 2023 23:29:33 +0900</pubDate>
    </item>
    <item>
      <title>Codea의 Lines 예제를 살펴보자!</title>
      <link>https://tempnixk.tistory.com/entry/Lines</link>
      <description>&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;Codea 에서 기본적으로 제공해주는 예제인 Lines이다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;pre class=&quot;Python&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;Python&quot;&gt;&lt;code&gt;function setup()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Expose parameters to control our line

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- The start point
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameter.number(&quot;x1&quot;,0,WIDTH,100)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameter.number(&quot;y1&quot;,0,HEIGHT,100)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- The end point
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameter.number(&quot;x2&quot;,0,WIDTH,WIDTH-100)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameter.number(&quot;y2&quot;,0,HEIGHT,HEIGHT-100)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- The stroke width
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameter.number(&quot;width&quot;,1,100,10)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- The line cap type
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;parameter.integer(&quot;lineCap&quot;,0,2,0)
end

function draw()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;background(10,10,20)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Set stroke and fill color to white
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fill(255,0,0)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;stroke(255)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Update stroke width
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strokeWidth(width)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if width &amp;lt; 3 then
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Disable smoothing for low widths
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;noSmooth()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;smooth()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;end

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Set the line cap mode
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lineCapMode(lineCap)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-- Draw the line
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;line(x1,y1,x2,y2)
end

&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: justify;&quot; data-ke-size=&quot;size16&quot;&gt;SQL 문법처럼 대시 두개가 주석의 역할을 하는 것 같다.&lt;br /&gt;&lt;br /&gt;background를 주석처리 해봤더니 이전의 선들이 안지워진다. &lt;s&gt;프레임 워크 자체 버그인지 백그라운드가 저 선들을 가려주는 건지는 아직 모르겠다. &lt;/s&gt;&amp;nbsp;&lt;a href=&quot;https://talk.codea.io/t/when-i-removed-background/16273&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;관련 커뮤니티에 질문을 남겨봤다.&lt;/a&gt; 백그라운드 함수 자체가 이전 화면을 클리어시켜주고, 그 이후에 백그라운드 색을 채색시키는 함수였다. 그래서 이전의 선들이 그대로 남아있던 것이다.&lt;br /&gt;&lt;br /&gt;setup 함수에 파라미터들을 넣어주고 선을 자유롭게 변경할 수 있도록 되어있다.&lt;br /&gt;parameter로 만들수 있게끔 해주는 자체 기능인것 같다.&lt;/p&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;Codea의 Parameter에 대해서는 다음 글에 포스팅을 해 두었다.&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;&lt;a href=&quot;https://tempnixk.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Codea의 Parameter에 대해서 알아보자!&lt;/a&gt;
&lt;figure id=&quot;og_1702218794907&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;Codea - Parameters&quot; data-og-description=&quot;Parameter에는 세가지 대분류가 있다. 1. Creating Parameters 2. Watching Expressions 3. Clearing the Parameter List Creating Parameters에는 총 6가지 기능이 존재한다. (https://codea.io/reference/) parameter.number, parameter.integer, pa&quot; data-og-host=&quot;tempnixk.tistory.com&quot; data-og-source-url=&quot;https://tempnixk.tistory.com/112&quot; data-og-url=&quot;https://tempnixk.tistory.com/112&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dgpaVm/hyULYkSTZb/YlEC0gFcB4IsXn4Cfknt40/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cSfpoI/hyUIwcwbTP/HIgCZ9F0Q554Vr2WGgCmf0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cr7GZx/hyUL3zJbKK/uWv8Gkp9sZ21gE3j45L7I1/img.jpg?width=4096&amp;amp;height=4161&amp;amp;face=0_0_4096_4161&quot;&gt;&lt;a href=&quot;https://tempnixk.tistory.com/112&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tempnixk.tistory.com/112&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dgpaVm/hyULYkSTZb/YlEC0gFcB4IsXn4Cfknt40/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cSfpoI/hyUIwcwbTP/HIgCZ9F0Q554Vr2WGgCmf0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cr7GZx/hyUL3zJbKK/uWv8Gkp9sZ21gE3j45L7I1/img.jpg?width=4096&amp;amp;height=4161&amp;amp;face=0_0_4096_4161');&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;Codea - Parameters&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Parameter에는 세가지 대분류가 있다. 1. Creating Parameters 2. Watching Expressions 3. Clearing the Parameter List Creating Parameters에는 총 6가지 기능이 존재한다. (https://codea.io/reference/) parameter.number, parameter.integer, pa&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tempnixk.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;/div&gt;</description>
      <category>게임 개발/Lua script &amp;amp; Codea</category>
      <category>Codea</category>
      <category>LUA</category>
      <category>Parameter</category>
      <category>게임 엔진</category>
      <category>루아</category>
      <category>코디아</category>
      <category>파라미터</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/110</guid>
      <comments>https://tempnixk.tistory.com/entry/Lines#entry110comment</comments>
      <pubDate>Thu, 16 Nov 2023 23:50:55 +0900</pubDate>
    </item>
    <item>
      <title>STL 공부할때 도움이 될만한 블로그입니다.</title>
      <link>https://tempnixk.tistory.com/entry/STL-%EA%B3%B5%EB%B6%80%ED%95%A0%EB%95%8C-%EB%8F%84%EC%9B%80%EC%9D%B4-%EB%90%A0%EB%A7%8C%ED%95%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%9E%85%EB%8B%88%EB%8B%A4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://it-hhhj2.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://it-hhhj2.tistory.com/49&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1693113786120&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++ STL에 관한 공부자료&quot; data-og-description=&quot;노션 바로가기 노션에 정리해두니 편리하더군요 ... !!!!!!! 제가 얼레발레 공부하면서 알게된 STL 라이브러리에 대해 적은 거지만, 도움이 될까 공유합니다. C++로 코테 공부하는 컴공생 및 IT 회사 &quot; data-og-host=&quot;it-hhhj2.tistory.com&quot; data-og-source-url=&quot;https://it-hhhj2.tistory.com/49&quot; data-og-url=&quot;https://it-hhhj2.tistory.com/49&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGTGbg/hyTMeh2vr3/EL0qMdxP4l0jFZJm9lftGk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/E2GE9/hyTIHGaOQL/90ikStYCxCCnPRzPQRq6q1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://it-hhhj2.tistory.com/49&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://it-hhhj2.tistory.com/49&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGTGbg/hyTMeh2vr3/EL0qMdxP4l0jFZJm9lftGk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/E2GE9/hyTIHGaOQL/90ikStYCxCCnPRzPQRq6q1/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;c++ STL에 관한 공부자료&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;노션 바로가기 노션에 정리해두니 편리하더군요 ... !!!!!!! 제가 얼레발레 공부하면서 알게된 STL 라이브러리에 대해 적은 거지만, 도움이 될까 공유합니다. C++로 코테 공부하는 컴공생 및 IT 회사&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;it-hhhj2.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;노션만 들어가면 튕기는 컴퓨터를 사용하고 있어서 나중에 다시 볼 용도로 포스팅해보았습니다.&lt;/p&gt;</description>
      <category>도움이 될만한 블로그</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/104</guid>
      <comments>https://tempnixk.tistory.com/entry/STL-%EA%B3%B5%EB%B6%80%ED%95%A0%EB%95%8C-%EB%8F%84%EC%9B%80%EC%9D%B4-%EB%90%A0%EB%A7%8C%ED%95%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%9E%85%EB%8B%88%EB%8B%A4#entry104comment</comments>
      <pubDate>Sun, 27 Aug 2023 14:23:27 +0900</pubDate>
    </item>
    <item>
      <title>게임개발에 도움이 될 만한 블로그입니다.</title>
      <link>https://tempnixk.tistory.com/entry/%EA%B2%8C%EC%9E%84%EA%B0%9C%EB%B0%9C%EC%97%90-%EB%8F%84%EC%9B%80%EC%9D%B4-%EB%90%A0-%EB%A7%8C%ED%95%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%9E%85%EB%8B%88%EB%8B%A4</link>
      <description>&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://m.blog.naver.com/sorang226/221733319411&quot;&gt;https://m.blog.naver.com/sorang226/221733319411&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1692801609848&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;[게임 메카닉스] 개요, 1장 게임 메카닉 디자인&quot; data-og-description=&quot;책을 읽으면서 대략적으로 요약 정리 --------------------------------------------- 개요 게임을 심층적...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://m.blog.naver.com/sorang226/221733319411&quot; data-og-url=&quot;https://blog.naver.com/sorang226/221733319411&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lSEbB/hyTIEIvlQD/bx6RfDAtUP2nQgipvks4QK/img.png?width=510&amp;amp;height=600&amp;amp;face=0_0_510_600&quot;&gt;&lt;a href=&quot;https://m.blog.naver.com/sorang226/221733319411&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://m.blog.naver.com/sorang226/221733319411&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lSEbB/hyTIEIvlQD/bx6RfDAtUP2nQgipvks4QK/img.png?width=510&amp;amp;height=600&amp;amp;face=0_0_510_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;[게임 메카닉스] 개요, 1장 게임 메카닉 디자인&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;책을 읽으면서 대략적으로 요약 정리 --------------------------------------------- 개요 게임을 심층적...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>도움이 될만한 블로그</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/103</guid>
      <comments>https://tempnixk.tistory.com/entry/%EA%B2%8C%EC%9E%84%EA%B0%9C%EB%B0%9C%EC%97%90-%EB%8F%84%EC%9B%80%EC%9D%B4-%EB%90%A0-%EB%A7%8C%ED%95%9C-%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%9E%85%EB%8B%88%EB%8B%A4#entry103comment</comments>
      <pubDate>Wed, 23 Aug 2023 23:39:33 +0900</pubDate>
    </item>
    <item>
      <title>톰캣이란 무엇일까요?</title>
      <link>https://tempnixk.tistory.com/entry/%ED%86%B0%EC%BA%A3%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전 시간에 배운 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 스프링부트 동작 원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 내장 톰캣을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #dddddd;&quot;&gt;(2) 서블릿 컨테이너&lt;/span&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 data-ke-size=&quot;size16&quot;&gt;오늘은 (2) 서블릿 컨테이너를 배우기 전에 Tomcat에 대한 공부를 먼저 할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http: 소켓으로 만들어짐.&amp;nbsp;&lt;br /&gt;http같은 프로그램이 운영체제를 통해 소켓을 불러와서 쓰는 것이 시스템 콜이라고한다. (시스템이 들고 있는 기능을 콜함)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;톰캣과 웹 서버에 대한 차이를 알아야하고, 웹 서버에 대해서 이해를 해야한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;을이 갑에게 request(요청)하는 형식, request할때는 IP주소를 알아야하고, 어떤 Data가 필요한지 URL을 알아야한다. (자원을 요청하는 주소) URL의 L은 Location의 L이다. Request가 들어가면 갑이 Response를 해준다. 이때 갑이 웹서버이다. 갑은 을의 IP주소를 모르고 요청할때만 응답해주는 구조이다. 요청하지 않았을때 응답을 못함.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소켓통신은 연결되어있기 때문에 언제나 데이터를 전달해 줄 수 있지만, 웹서버는 갑이 을의 IP주소를 모르기 때문에 데이터를 요청시에만 보낼 수 있다. 이때 자원들은 Static자원이라고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;그래서 톰캣이 뭐냐?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히 사용하는 웹서버 중 하나가 아파치이다. 컴퓨터에 특정 폴더인 C/Work라는 폴더를 공유한다고 하자. .JSP(자바코드)를 request을 하면, 아파치는 자바 코드를 이해하지 못해서 응답하지 못한다. 그렇기 때문에 톰캣을 달아서 이해하지 못하는 요청에 대한 제어권을 톰캣에게 넘기고, 톰캣은 JSP파일을 자바 파일로 컴파일하며, .html에 덮어씌운다. 그리고 아파치에게 돌려주고, 그 html파일을 아파치가 response하는 구조이다. 또한 웹브라우저도 JSP를 이해하지 못하기에 톰캣이 컴파일해서 돌려줘야 이해할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음시간에 배울 내용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(2) 서블릿 컨테이너 (진짜)&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다.&amp;nbsp;&lt;br /&gt;다음은 강사님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard&quot;&gt;강의 링크&lt;/a&gt;입니다. 무료 강의라서 가입만 하면 볼 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard&quot;&gt;(강의 링크)&lt;/a&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>웹 개발/Spring Boot</category>
      <category>Apache</category>
      <category>JSP</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>tomcat</category>
      <category>스프링</category>
      <category>스프링부트</category>
      <category>아파치</category>
      <category>웹서버</category>
      <category>톰캣</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/96</guid>
      <comments>https://tempnixk.tistory.com/entry/%ED%86%B0%EC%BA%A3%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94#entry96comment</comments>
      <pubDate>Mon, 14 Aug 2023 22:17:58 +0900</pubDate>
    </item>
    <item>
      <title>HTTP가 무엇일까요?</title>
      <link>https://tempnixk.tistory.com/entry/HTTP%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전 시간에 배운 것&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;1. JPA란?&lt;/b&gt;&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;&lt;b&gt;JPA는 Java Persistence API이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 ORM 기술이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 반복적인 CRUD 작업을 생략하게 해준다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 영속성 컨텍스트를 가지고 있다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 쉽지만 어렵다.&lt;/b&gt;&lt;/li&gt;
&lt;/ul&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;1. 스프링부트 동작 원리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(1) 내장 톰캣을 가진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;톰캣을 따로 설치할 필요가 없다. 즉시 실행 가능.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Socket: 운영체제가 가지고 있는 것. A라는 대상이 있고, B라는 대상이 있는데 메시지를 교환하려고 함. 이때 소켓을 이용한다.&lt;br /&gt;처음에 A가 소켓을 오픈한다. 5000번 포트를 열고 소켓을 오픈 했다. B가 A와 통신하고 싶다면, 5000번 포트와 A가 있는 IP주소를 넣어서 전송한다.&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;888&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lIyCE/btspXkzNL79/Wz5MVU4bnkV0MRB9vTdYAK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lIyCE/btspXkzNL79/Wz5MVU4bnkV0MRB9vTdYAK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lIyCE/btspXkzNL79/Wz5MVU4bnkV0MRB9vTdYAK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlIyCE%2FbtspXkzNL79%2FWz5MVU4bnkV0MRB9vTdYAK%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;888&quot; height=&quot;383&quot; data-origin-width=&quot;888&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C가 A와 통신을 하고 싶어하는데, B와 A간의 통신에 5000번 포트를 사용하고 있기 때문에, C가 5000번 포트로 연결할 수 없음.&lt;br /&gt;따라서 5000번 포트는 연결용으로만 쓰고, 연결이 된 이후의 통신은 랜덤한 포트(편의상 5001)를 사용하는 시스템을 사용.&amp;nbsp;&lt;br /&gt;그런데 만약에 5001번 포트를 통해서 B와 A가 통신할때, CPU는 모든 자원을 5001번 포트의 통신에다가 쓰게 되어 5000번 포트가 작동하지를 못함. 따라서 5001번에는 새로운 스레드를 만들어주어야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5000번에는 메인 스레드, 새로운 사용자의 요청을 받는다.&lt;br /&gt;5001번에는 스레드 1, B와 통신하는 스레드&lt;br /&gt;이런 시스템을 통해 C는 5000번에 연결하고, 5002번에 스레드 2가 만들어지면서 5000번 연결이 끊기고, 5002번에 연결되면서 통신하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소켓통신 , time slice, 동시 동작&lt;br /&gt;-&amp;gt; 연결이 끊어지지 않기 때문에 부하가 크고, 연결이 많아질 경우 느려질수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;http 통신은 stateless방식을 사용. A, B 가 C와 연결해서 데이터를 받으려고 한다.&lt;br /&gt;근데 Http는 문서를 전달하는 통신인데, A가 C에게 a.txt 달라고 80번 소켓에 연결. 다이렉트로 돌려주고 통신선을 끊음&lt;br /&gt;B도 마찬가지로 b.txt.파일을 응답해주고 끊어버린다.&lt;br /&gt;-&amp;gt; 연결이 끊어져서 부하가 적지만, 다시 연결될때 새로운 사람으로 인식함.&lt;br /&gt;http는 cern연구소에서 다양하게 퍼져있는 논문들을 하나의 서버로 모아놓고 필요할때만 html문서를 꺼내쓰는 것이 목적이었기 때문에 연결을 끊는 방식을 채택했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 단점들을 보완한게 Web Server임.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 시간에 배울 내용&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;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;...더 보기&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다.&amp;nbsp;&lt;br /&gt;다음은 강사님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard&quot;&gt;강의 링크&lt;/a&gt;입니다. 무료 강의라서 가입만 하면 볼 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard&quot;&gt;(강의 링크)&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>웹 개발/Spring Boot</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/95</guid>
      <comments>https://tempnixk.tistory.com/entry/HTTP%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94#entry95comment</comments>
      <pubDate>Thu, 3 Aug 2023 22:48:19 +0900</pubDate>
    </item>
    <item>
      <title>OOP 관점에서 모델링이란 무엇일까요?</title>
      <link>https://tempnixk.tistory.com/entry/OOP-%EA%B4%80%EC%A0%90%EC%97%90%EC%84%9C-%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이전 시간에 배운 것&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;b&gt;1. JPA란?&lt;/b&gt;&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;&lt;b&gt;JPA는 Java Persistence API이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 ORM 기술이다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 반복적인 CRUD 작업을 생략하게 해준다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 영속성 컨텍스트를 가지고 있다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;JPA는 DB와 OOP의 불일치성을 해결하기 위한 방법론을 제공한다. (DB는 객체저장 불가능)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;JPA는 OOP의 관점에서 모델링을 할 수 있게 해준다. (상속, 콤포지션, 연관관계)&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1690885124007&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Class Car {
    int id;
    String name:
    String color:
    Engine engine; // &amp;lt;- 컴포지션
}

Class Engine {
    int id;
    int power;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 만든 엔진을 차에 상속하고 싶지만, 엔진이 차의 부모가 되는 관계가 형성이 되면 말이 안된다. 컴포지션이라는 방법을 써야한다. (결합)&amp;nbsp;&amp;nbsp;&lt;br /&gt;JPA는 DB를 먼저만들고 그 테이블을 통해 Car클래스를 모델링하는게 아니라, 클래스를 먼저 만들고 이를 토대로 자동생성을 해서 DB에 테이블을 만들어주기 때문에 다음처럼 만들어진다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;472&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ei8akM/btspsGRt3fW/KtEerwtmU0rU8UkBpnGR91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ei8akM/btspsGRt3fW/KtEerwtmU0rU8UkBpnGR91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ei8akM/btspsGRt3fW/KtEerwtmU0rU8UkBpnGR91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fei8akM%2FbtspsGRt3fW%2FKtEerwtmU0rU8UkBpnGR91%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;1039&quot; height=&quot;472&quot; data-origin-width=&quot;1039&quot; data-origin-height=&quot;472&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;pre id=&quot;code_1690885522410&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Class EntityDate{
    Timestamp createDate;
    Timestamp updateDate;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이처럼 EntityDate 클래스를 만들고 각 클래스에 상속시킨다.&lt;/p&gt;
&lt;pre id=&quot;code_1690885577950&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Class Car extends EntityDate {
    int id;
    String name:
    String color:
    Engine engine; // &amp;lt;- 컴포지션
}

Class Engine extends EntityDate {
    int id;
    int power;
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;방언 처리가 용이하여 Migration하기 좋음. 유지보수에도 좋음&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링을 JPA를 이용해서 DB에 접근을 한다. 이때 JPA가 무조건 MySQL만 지원을 한다면 DB접근이 MySQL밖에 안됨. 하지만 Dialect( 오라클, 마리아, MSSQL, PostgreSQL)들이 있기때문에 JPA에 추상화객체가 붙어있어서 각 Dialect에 연결되는 구조.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nPRmO/btspxp9GsHE/JrbkQlPPzeqIpdDjzpaxT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nPRmO/btspxp9GsHE/JrbkQlPPzeqIpdDjzpaxT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nPRmO/btspxp9GsHE/JrbkQlPPzeqIpdDjzpaxT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnPRmO%2Fbtspxp9GsHE%2FJrbkQlPPzeqIpdDjzpaxT0%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;967&quot; height=&quot;438&quot; data-origin-width=&quot;967&quot; data-origin-height=&quot;438&quot;/&gt;&lt;/span&gt;&lt;/figure&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;JPA는 쉽지만 어렵다.&lt;br /&gt;&lt;br /&gt;&lt;/b&gt;개념이 조금 헷갈림. 기존에 사용하던 방식과 다르고 생소한 개념들이 많이 나오는데, 적응하면 쉬워짐. 적응하다 보면 또 무자비한 Select 때문에 해결하기 어려워짐.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;이 블로그 포스팅은 인프런 최주호님의 스프링부트 개념정리(이론) 강의에 대한 정리 포스팅입니다.&amp;nbsp;&lt;br /&gt;다음은 강사님의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard&quot;&gt;강의 링크&lt;/a&gt;입니다. 무료 강의라서 가입만 하면 볼 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #0070d1;&quot; href=&quot;https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8-%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC/dashboard&quot;&gt;(강의 링크)&lt;/a&gt;&lt;/blockquote&gt;</description>
      <category>웹 개발/Spring Boot</category>
      <category>Composition</category>
      <category>Dialect</category>
      <category>JPA</category>
      <category>OOP</category>
      <category>Spring</category>
      <category>spring boot</category>
      <category>객체지향</category>
      <category>스프링</category>
      <category>스프링부트</category>
      <category>컴포지션</category>
      <author>템닉_</author>
      <guid isPermaLink="true">https://tempnixk.tistory.com/89</guid>
      <comments>https://tempnixk.tistory.com/entry/OOP-%EA%B4%80%EC%A0%90%EC%97%90%EC%84%9C-%EB%AA%A8%EB%8D%B8%EB%A7%81%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C%EC%9A%94#entry89comment</comments>
      <pubDate>Tue, 1 Aug 2023 19:31:09 +0900</pubDate>
    </item>
  </channel>
</rss>