<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>cth-release.log</title>
        <link>https://velog.io/</link>
        <description>그냥 뭐.... 개발자에요</description>
        <lastBuildDate>Mon, 15 Jul 2024 12:10:33 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>cth-release.log</title>
            <url>https://velog.velcdn.com/images/cth-release/profile/80a9aa11-c039-48f8-b294-4be83a12ece6/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. cth-release.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/cth-release" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[Hello Solidity, 솔리디티 강좌 2. 데이터 타입과 이더, 가스]]></title>
            <link>https://velog.io/@cth-release/Hello-Solidity-%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EA%B0%95%EC%A2%8C-2.-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%9D%B4%EB%8D%94-%EA%B0%80%EC%8A%A4</link>
            <guid>https://velog.io/@cth-release/Hello-Solidity-%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EA%B0%95%EC%A2%8C-2.-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85%EA%B3%BC-%EC%9D%B4%EB%8D%94-%EA%B0%80%EC%8A%A4</guid>
            <pubDate>Mon, 15 Jul 2024 12:10:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/cth-release/post/9166103c-0a20-422e-8cc9-ad7543433970/image.png" alt=""></p>
<p>자, 오늘은 간단하게 <strong>데이터 타입과, 이더(ether), 가스(gas)</strong> 에 대해서 알아보도록 하겠다.</p>
<h1 id="데이터-타입">데이터 타입</h1>
<pre><code class="language-sol">    string public hello = &quot;Hello, World!&quot;;

    bool public bool1 = true; // true or false

    // ! || == &amp;&amp; 를 사용할 수 있음.
    bool public bool2 = !false;
    bool public bool3 = false || true;
    bool public bool4 = false == true;
    bool public bool5 = false &amp;&amp; true;

    // address &lt;-- 지갑 주소나 이더리움 주소 등등 주소를 나타낼 때 사용함
    address public addr = 0xD4Fc541236927E2EAf8F27606bD7309C1Fc2cbee;

    // bytes
    bytes public bt = &quot;0x1&quot;;
    bytes4 public bt4 = 0x12345678;

    // int, uint
    int public it1 = 0;
    uint8 public it2 = 1;
    uint256 public it3 = 2;</code></pre>
<h1 id="가스-이더-wei-gwei">가스? 이더? wei? gwei?</h1>
<p>스마트 컨트랙을 사용할 때, 비용이 상출이 되는데 개발자가 스마트컨트렉을 얼마나 길게 만들었는지에 따라 결정된다.</p>
<pre><code>// 1 ether = 10^9 Gwei = 10 ^ 18 = wei
// 0.00000000000000001 ether = 1 ^- 18 = 1 wei
// 0.01 ether = 10 ^ 16 wei</code></pre><p>아래 링크 27페이지에서 얼마나 소모 되는지 자세하게 적혀있다.
<a href="https://ethereum.github.io/yellowpaper/paper.pdf">https://ethereum.github.io/yellowpaper/paper.pdf</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Hello Solidity, 솔리디티 강좌 (1. 시작)]]></title>
            <link>https://velog.io/@cth-release/Hello-Solidity-%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EA%B0%95%EC%A2%8C</link>
            <guid>https://velog.io/@cth-release/Hello-Solidity-%EC%86%94%EB%A6%AC%EB%94%94%ED%8B%B0-%EA%B0%95%EC%A2%8C</guid>
            <pubDate>Sun, 14 Jul 2024 14:06:04 GMT</pubDate>
            <description><![CDATA[<h1 id="solidity-솔리디티란-무엇인가">Solidity, 솔리디티란 무엇인가?</h1>
<p><img src="https://velog.velcdn.com/images/cth-release/post/eba1ec9d-e925-4e67-8f60-f605543d3e0a/image.png" alt="https://soliditylang.org"></p>
<p>Solidity는 &quot;스마트 컨트랙트&quot;를 구현하기 위한 컨트랙트 기반의 고급 프로그래밍 언어입니다.</p>
<p>그래서 &quot;스마트 컨트랙트&quot;가 뭔데?</p>
<p><strong>스마트 컨트랙트란 블록체인 기반으로 금융거래, 부동산 계약, 공증 등 다양한 형태의 계약을 체결하고 이행하는 것을 말한다. 
블록체인 2.0이라고도 한다.</strong></p>
<p>미리 정의된 조건이 충족이 되면, 블록체인에 저장된 프로그램이 작동되는 것. 이라고 이해하면 편함.</p>
<h1 id="아무튼-개발이나-하자">아무튼 개발이나 하자</h1>
<p>그래, 우린 개발하려 온거지 <strong>누가 요즘 나무 심을 때 씨앗부터 키우는가</strong>. 바로 개발을 시작해보자.</p>
<h1 id="사용할-ide">사용할 IDE</h1>
<p><img src="https://velog.velcdn.com/images/cth-release/post/4e120f37-8721-4a61-b97b-67896b0782b8/image.png" alt="https://remix.ethereum.org/"></p>
<p><a href="https://remix.ethereum.org/">https://remix.ethereum.org/</a></p>
<p>솔리디티를 체험하기에 가장 빠르게 체험할 수 있는...
REMIX IDE를 사용할 것이다. ( 추후 변경 할수도 있음 )</p>
<p>아무튼
<img src="https://velog.velcdn.com/images/cth-release/post/3ed50089-5c5a-49bf-8fb2-a5a84a01eaef/image.png" alt=""></p>
<p>해당 링크로 입장하면 이런식으로 나오는데 폴더를 먼저 만들자. (아무렇게나 쓰셈)
<img src="https://velog.velcdn.com/images/cth-release/post/5de59cc7-36b2-4bdb-82d9-26663f3ec02e/image.png" alt=""></p>
<p>또한 파일도 하나 만들자 이때 주의할 점은 <strong>Solidity</strong>의 확장자는 <strong>*.sol</strong> 이다.</p>
<h1 id="솔리디티-개발-시작-가장-첫번째로-해야할-것은">솔리디티 개발 시작, 가장 첫번째로 해야할 것은?</h1>
<p>우리는 빈 공간의 .sol 파일에서 무엇을 가장 첫번째로 해야하는가?</p>
<p>그것은 <strong>&quot;라이센스&quot;</strong>를 명시하는 것 이다.</p>
<p>솔리디티는 맨 윗줄에 라이센스를 명시해주지 않으면 에러가 나기 때문</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/7eb50f6c-9bfa-4aee-88a4-f4c12dbd3ca7/image.png" alt=""></p>
<p>명시는 이런식으로 하면 된다.</p>
<p>SPDX-License-Identifier: GPL-30
(<strong>SPDX-License-Identifier</strong>라고 대소문자 지켜서 쓰셔야 함. 나 방금 글 쓰면서 컴파일 하다가 경고 떴자너 ㅋㅋ)
<del><strong>GPL-30</strong> 밖에 몰라서 이거 씀</del></p>
<h2 id="그-다음으로-해줘야할-것이-남아있다"><strong>그 다음으로 해줘야할 것이 남아있다.</strong></h2>
<p>그것은 바로 컴파일 버전 명시이다.
<img src="https://velog.velcdn.com/images/cth-release/post/10e6edfe-f09a-4f4a-8df3-4ab6e9c88982/image.png" alt=""></p>
<p>이런식으로</p>
<p><strong>pragma solidity &gt;= 0.7.0 &lt; 0.9.0;</strong>
(당연히 알겠지만 0.7.0 이상 0.9.0까지의 버전을 쓰겠다는 거임, 이거 알잘딱 못하면 센스부터 배우셈.)</p>
<h1 id="자-이제-그럼-hello-world-해-봐야겠지-ㅋ">자, 이제 그럼 Hello World 해 봐야겠지? ㅋ</h1>
<p>음... 사실 Solidity에는 print 함수가 없다.</p>
<p>주로 트랜잭션 로그를 사용하는데, 음.. 이건 아직 너무 빠른 것 같으니 변수를 설정해서 Deploy를 통해서 출력을 해보이겠다.</p>
<p>(아무튼 글자 보이면 출력이잖음 ㅋㅋ)</p>
<p>일단 우리 contract라는 걸 정의해줘야한다.
<img src="https://velog.velcdn.com/images/cth-release/post/b573004c-1962-4b8b-907a-038e4a018b3d/image.png" alt=""></p>
<p>요런식으로.</p>
<h2 id="contract가-뭔데">contract가 뭔데?</h2>
<p>나는 &quot;초 감각적인&quot; 느낌으로 딱 Java의 Class 같은 느낌일 것 같다 했는데 혹시 모르니 <strong>Chat-GPT</strong> 성님께 물어봤다.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/d3aecd8e-c49f-4462-81a6-46c134c0de44/image.png" alt=""></p>
<p>대충 읽자.. ㅇㅇ (긴거 싫어함)</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/2d25f980-620d-4a37-bc08-a4c63534e1f9/image.png" alt=""></p>
<p>이런식으로 변수를 넣어봤다.</p>
<p>이제 컴파일 해보자.
<img src="https://velog.velcdn.com/images/cth-release/post/680a7161-2eef-4deb-acf9-80c450dd16ad/image.png" alt=""></p>
<p>IDE 왼쪽을 보면, 솔리디티 아이콘이 있을 것이다. 클릭.
<img src="https://velog.velcdn.com/images/cth-release/post/1e5e85ad-206c-41fd-8503-42f29f3f8e88/image.png" alt=""></p>
<p>이런식으로 나온다. 대충 뭐해야할지 짐작이 오쟈? </p>
<p>바로 <strong>파</strong>란색 컴파일 버튼 누르자.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/cb555c29-0d39-46db-9761-43e260fc6402/image.png" alt=""></p>
<p>대충 체크 초록색 체크 생기면 님도 이제 어엿~ 한 솔리디티 개발자가 된겨~ ㅋ</p>
<p>자, 이제 <strong>배포(Deploy)</strong>해서 출력해보자.
<img src="https://velog.velcdn.com/images/cth-release/post/680a7161-2eef-4deb-acf9-80c450dd16ad/image.png" alt=""></p>
<p>저~~ 기 컴파일 아이콘(솔리디티 아이콘) 밑에 이더리움 아이콘 있지? 저거 눌러봅시다.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/9eb2dc93-9d85-4fb4-a5e2-e2c4954ecb1b/image.png" alt=""></p>
<p>이런식으로 뜰 텐데 우린 멍청하니까 컨트랙트만 일단 먼저 보자.</p>
<blockquote>
<p>cth - cth/lec1.sol</p>
</blockquote>
<p>딱 보니까 느낌 오지?
cth라는 컨트랙 - cth 폴더안에 있는 lec1.sol</p>
<p>이거 진짜 모르면 문제 있다는거임 ㅇㅈ? 아니면 니가 글을 안읽었던가..</p>
<p>일단 바로 눌러보자 배포
<img src="https://velog.velcdn.com/images/cth-release/post/1d56b138-c1c7-4ddb-8eb9-617d5222702d/image.png" alt=""></p>
<p>대충 배포 성공하고, 밑에 쫘악 내려봐 그럼 <strong>배포된 컨트랙트</strong>가 있을겨 눌러보셈.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/5ef73796-3ff3-4889-8437-bbcaad491db7/image.png" alt=""></p>
<p>따악 봐도 여기 hello 버튼 내 변수 hello 같지? ㅋㅋ 함 눌러봅세!</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/6b63c9c2-8120-45a3-b17b-7420163a8e7f/image.png" alt=""></p>
<p>아 잘나오자너 ㅋㅋ 좋다 좋아~</p>
<h3 id="아무튼-앞으로-solidity-관련-강좌-자주-올릴게-자주-와라-게이야-ㅋ">아무튼 앞으로 Solidity 관련 강좌? 자주 올릴게~ 자주 와라 게이야 ㅋ</h3>
<p><a href="https://discord.gg/C5Hv3V5NSs">https://discord.gg/C5Hv3V5NSs</a>
** ^^^ cth.release 교단에서 커뮤질 (정신건강에 해로움) ^^^ **</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자바의 특징]]></title>
            <link>https://velog.io/@cth-release/%EC%9E%90%EB%B0%94%EC%9D%98-%ED%8A%B9%EC%A7%95-glmzpjin</link>
            <guid>https://velog.io/@cth-release/%EC%9E%90%EB%B0%94%EC%9D%98-%ED%8A%B9%EC%A7%95-glmzpjin</guid>
            <pubDate>Thu, 14 Mar 2024 01:08:22 GMT</pubDate>
            <description><![CDATA[<p>다음은 자바를 정의하는 단어이다. 이 가운데 자바의 8가지 중요한 특징을 살펴보자.</p>
<blockquote>
<p>A simple, object-oriented, distributed, interpreted, robust, secured, architecture neutral, portable, high-performance, platform independent, multi-threaded, and dynamic language</p>
</blockquote>
<ol>
<li>간단하다 (Simple)</li>
<li>객체 지향적이다 (Object-oriented)</li>
<li>인터프리터 언어이다 (Interpreted)</li>
<li>강력하다 (robust)</li>
<li>안전하다 (Secured)</li>
<li>플랫폼이 독립적이다 (Platform independent)</li>
<li>멀티 스레드를 지원한다 (Multithreaded)</li>
<li>동적이다 (Dynamic)</li>
</ol>
<h1 id="간단하다-simple">간단하다. (Simple)</h1>
<p>자바는 C++에 가깝지만 훨씬 간단하다. 자바는 고급 언어에 들어 있는 여러 요소 중에서 불필요하다고 판단되는 것을 모두 제거했다.</p>
<h1 id="객체-지향적이다-object-oriented">객체 지향적이다 (Object-oriented)</h1>
<p>자바는 숫자(int, float, long 등)나 논릿값(true, false)을 제외하면 거의 모두 객체로 구성된다. 실제로 자바는 Object 클래스에서 모든 클래스를 파생한다.</p>
<blockquote>
<p>자바에서는 int, float, long, true, false 등을 원시 자료형이라고 한다.</p>
</blockquote>
<p>객체 지향 프로그래밍의 특징은 다음과 같다.</p>
<blockquote>
<ul>
<li>프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다는 점.</li>
<li>코드의 변경을 최소화하고 유지보수를 하는 데 유리</li>
<li>코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현</li>
<li>인간 친화적이고 직관적인 코드</li>
<li><em>추상화*</em>, <strong>상속</strong>, <strong>다형성</strong>, <strong>캡슐화</strong>
총 4가지로 나뉠 수 있다.</li>
</ul>
</blockquote>
<h1 id="인터프리터-언어이다-interpreted">인터프리터 언어이다 (Interpreted)</h1>
<p>자바는 정확하게 말하면 컴파일 언어인 동시에 인터프리터 언어이다. 
자바는 먼저 텍스트 소스를 컴파일하여 이진 파일(클래스 파일)로 만든 다음, 자바 런타임이 이 클래스 파일을 인터프리트 interpret 하면서 실행한다. 
자바는 먼저 시스템과 무관한 이진 파일을 만듦으로써 컴파일 언어에 가까운 속도와 함께 시스템의 독립성을 얻을 수 있었다.</p>
<blockquote>
<p>인터프리터 언어는 코드를 한 줄씩 작성하고 실행하여 결과를 바로 확인할 수 있다.</p>
</blockquote>
<h1 id="강력하다-robust">강력하다 (robust)</h1>
<p>자바는 포인터 연산을 지원하지 않는다. 
이는 잘못된 주소를 가리킬 가능성을 사전에 없앤 것이다. 
자바는 모든 메모리 접근을 자바 시스템이 관리하고 제한하며, 또한 예외 처리까지 하므로 시스템이 붕괴될 우려가 없다. 
예를 들어 자바는 리소스 관리(garbage collection)를 하는데 사용이 끝난 리소스를 시스템이 메모리에서 삭제하는 방식을 채택하고 있어 프로그래머가 메모리 유출을 걱정할 필요가 없다.</p>
<blockquote>
<p>포인터 연산은 C 또는 C++와 같은 언어에서 메모리 주소를 조작하는 연산으로 배열이나 구조체 멤버에 접근할 때 사용한다.</p>
</blockquote>
<h1 id="안전하다-secured">안전하다 (Secured)</h1>
<p>자바는 프로그램을 작성할 때 자료형 타입에 매우 민감하다. 
이것은 마치 코딩할 때 잔소리꾼이 끊임없이 따라다니며 잘못된 코드를 작성하지 않게 지적하는 것과 같다. 
그래서 자바는 일단 컴파일만 되면 실행할 때 오류 발생률이 다른 언어에 비해 현저히 낮다. 파이썬과 같은 동적 언어에 익숙한 프로그래머라면 자바의 고지식한 면을 싫어할 수도 있다. 
하지만 자바의 이런 족쇄 같은 자료형 체크는 코드를 매우 명확하게 만들어 준다.</p>
<h1 id="플랫폼이-독립적이다-platform-independent">플랫폼이 독립적이다 (Platform independent)</h1>
<p>자바의 실행 파일은 이진 코드(클래스)이므로 자바 런타임을 설치한 시스템에서는 어디서나 실행할 수 있다. 
즉, 자바로 작성한 프로그램이라면 운영체제와 상관없이 어디서든 실행할 수 있다는 뜻이다. 
왜냐하면 자바 프로그램은 가상 머신으로 실행되기 때문이다. 
처음에는 이 방식이 느리고 부담스러웠지만, 지금은 하드웨어의 눈부신 발전과 여러 기술이 개발되면서 이러한 단점은 대부분 사라져 버렸다.</p>
<h1 id="멀티-스레드를-지원한다-multithreaded">멀티 스레드를 지원한다 (Multithreaded)</h1>
<p>멀티 스레드를 지원하면 프로그램 단위가 같은 스레드를 동시에 수행할 수 있다. 자바는 멀티 프로세서 하드웨어를 지원하도록 설계되었으므로 멀티 CPU 시스템에서 효율이 높다.</p>
<h1 id="동적이다-dynamic">동적이다 (Dynamic)</h1>
<p>자바 인터페이스를 이용하면 모듈을 갱신할 때 다른 모듈까지 모두 갱신할 필요가 없다. 
인터페이스가 인스턴스 변수와 도구의 실행문을 모두 배제한 채 객체 간의 상호 작용을 정의하기 때문이다.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/2b3d8376-d102-4143-8bef-3434d68ce46d/image.png" alt="">
출처: <a href="https://wikidocs.net/199">https://wikidocs.net/199</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[AI 코드 에디터]]></title>
            <link>https://velog.io/@cth-release/AI-%EC%BD%94%EB%93%9C-%EC%97%90%EB%94%94%ED%84%B0</link>
            <guid>https://velog.io/@cth-release/AI-%EC%BD%94%EB%93%9C-%EC%97%90%EB%94%94%ED%84%B0</guid>
            <pubDate>Wed, 13 Mar 2024 07:07:46 GMT</pubDate>
            <description><![CDATA[<p>짠 사실.. 아이콘만 봤을 땐 별로 호감이 안 갈거다.
<del>이해 한다. 나도 그랬다..</del></p>
<p>하지만 그 내용물은 게시물 추천을 <strong>100연타</strong> 갈 길 정도의 내용물이 있다.
<a href="https://cursor.sh/">https://cursor.sh/</a></p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/cc56b11f-c0e9-461b-9414-80712a1db23c/image.png" alt=""></p>
<p>짠.. 일단 우리가 사용하던 vscode의 extenstion을 불러와준다.</p>
<p>또한,, 디자인도 vscode랑 비슷한
개꿀임 그냥 오히려.. 난 이게 더 편한 듯 ㅇㅇ...
<img src="https://velog.velcdn.com/images/cth-release/post/723032b5-1860-4f08-ad64-89b3d88d6195/image.png" alt="">
가장 중요한건 가장 우측에 위치하고 있는 요 GPT를 사용해봐야겠지?</p>
<p>그전에,,, more을 보면.. 
<img src="https://velog.velcdn.com/images/cth-release/post/d67ea64a-ad6a-4dc0-bf8e-4ee92f4471bb/image.png" alt="">
미친.. 특정 언어로 반환하게 할 수 있게 해놨네 개꿀이네 ㅅㅅ</p>
<h3 id="가장-중요한건">가장 중요한건</h3>
<p>내가 <strong>openAI가서 API키</strong> 안뽑아와도 된다는 점? &lt;&lt; 뽑아서 쓸 수 있음 
그지같은 vscode extension 설정하는거
코딩보다 익스텐션 설정하는 게.. 어려우니까 ㅇㅇ... 
암튼 기능 써보자.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/43ced745-8ec6-4c91-9f36-982d2f4c9831/image.png" alt="">
GBSW 경북 소프트웨어 고등학교의 oj 문제를.. 가져와봤다 ㅋㅋ</p>
<pre><code class="language-한">하지만 전시가 되어 있는 그림에 따라, 조명에 따라 밝기가 제각각이라 사진을 그대로 넣었다간 갑자기 변화하는 밝기에 사용자의 시력을 담당하는 기관이 고통을 호소할 가능성이 있다.
모든 이미지의 밝기를 통일화 하기 이미지의 밝기 수치를 측정한다.
단, 이미지의 심한 왜곡을 우려하여 이미지의 밝기를 측정하는 부분은 두 꼭지점의 형태로 직사각형의 범위를 박물관에서 지정하여 준다.```

입력 설명:
```첫 번째 줄에는 그림의 크기 X, Y 와 밝기를 측정하는 부분의 개수 N이 주어진다.
다음 X 개의 줄에 Y 의 수만큼 그림의 밝기 데이터 B(1&lt;B&lt;500) 가 입력된다.
다음 N개의 줄에는 사진의 일부분인 두 꼭지점x1, y1과 x2 ,y2가 입력된다.```

출력 설명 :
```N개의 밝기 평균을 출력한다.```

입력 예시:
```5 6 1
4 1 3 4 9 5
1 2 8 7 5 5
8 1 2 5 3 2
1 5 3 4 2 5
5 2 1 2 3 5
2 2 4 5```

출력 예시 :
```3```</code></pre>
<p>위와 같이 입력해주고 돌려보았다.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/6c07695e-b7eb-42b9-808d-326a7e494b7d/image.png" alt=""></p>
<h3 id="오-잘뽑아주네-ㅋㅋㅋㅋㅋㅋㅋㅋ">오 잘뽑아주네? ㅋㅋㅋㅋㅋㅋㅋㅋ</h3>
<p>개꿀이다. 바로 한번 oj 사이트에 제출해서 검사를 해보겠다.</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/9d231b2d-92fd-45e6-8e3b-d94193d873dd/image.png" alt=""></p>
<h3 id="엌ㅋㅋㅋㅋㅋ-개꿀-문제-하나-받아갑니다">엌ㅋㅋㅋㅋㅋ 개꿀 문제 하나 받아갑니다~</h3>
<p>근데 이 cursor editor의 매력은 여기서 끝나지 않는다.
Ctrl + K를 누르면 
<img src="https://velog.velcdn.com/images/cth-release/post/ab9ef6f5-82de-4a8b-be48-d122bd9e5992/image.png" alt=""></p>
<h3 id="이런식으로-채팅만이-아닌-코드-상에서도-쓸-수-있따">이런식으로 채팅만이 아닌.. 코드 상에서도 쓸 수 있따!!</h3>
<p><img src="https://velog.velcdn.com/images/cth-release/post/4a30c8a2-ad97-4ea0-9818-86c3bc00ee06/image.png" alt=""></p>
<h3 id="보이는가-이런-미친-기능이">보이는가? 이런 미친 기능이!!!!!</h3>
<p>빼액!!! 좋아좋아좋아</p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/018c2dfb-8527-4f1e-baf5-3c95a92f53c2/image.png" alt=""></p>
<p>아<del>무튼 필자는 vscode + ai 같은 이 cursor editor 지지합니다.
님들도 쓰시면서 날먹 코딩하세요</del>
ㅋㅋ 그렇다고.. 공부도 안하고 gpt만 믿고 살진 마시구요..</p>
<p><a href="https://cursor.sh/">https://cursor.sh/</a>
설치는 여기에서 하실 수 있음~</p>
<p>vscode, cursor 용량 차이는 이정도 납니다. 
<img src="https://velog.velcdn.com/images/cth-release/post/40854c96-5371-4401-b07e-53fdac356c1f/image.png" alt="">
<img src="https://velog.velcdn.com/images/cth-release/post/82c50a9a-0da8-4efd-9c7c-40c82406bdae/image.png" alt=""></p>
<p>&gt;&gt; <a href="https://discord.gg/bU7tkNMmCn">https://discord.gg/bU7tkNMmCn</a> &lt;&lt;
^^^^^ cth 교단에서 커뮤질 ㅆㄱㄴ</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Node js DDOS 방어]]></title>
            <link>https://velog.io/@cth-release/Node-js-DDOS-%EB%B0%A9%EC%96%B4</link>
            <guid>https://velog.io/@cth-release/Node-js-DDOS-%EB%B0%A9%EC%96%B4</guid>
            <pubDate>Thu, 12 Oct 2023 03:15:09 GMT</pubDate>
            <description><![CDATA[<h3 id="nodejs-ddos-방어">Node.js DDos 방어..?</h3>
<p><a href="https://www.npmjs.com/package/express-rate-limit">https://www.npmjs.com/package/express-rate-limit</a></p>
<p><img src="https://velog.velcdn.com/images/cth-release/post/8d2fa92e-2d00-4c6c-89f3-65319a3ff8a8/image.png" alt=""></p>
<p>그냥.. 웹 서핑하다가 찾은 엄청나 보이는 package..</p>
<p>간단하게 설치는</p>
<pre><code class="language-shell"># Using npm
&gt; npm install express-rate-limit
# Using yarn or pnpm
&gt; yarn/pnpm add express-rate-limit
</code></pre>
<p>이런식으로 간단하게 하시면 될 듯.</p>
<pre><code class="language-js">const rateLimit = require(&quot;express-rate-limit&quot;);

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, 
  max: n // n회 제한
});

app.use(limiter);</code></pre>
<p>매우 간단하게 사용도 가능해서 찾아보길 바란다.</p>
<pre><code class="language-js">import { rateLimit } from &#39;express-rate-limit&#39;

const limiter = rateLimit({
    windowMs: 15 * 60 * 1000, // 15분
    limit: 100, // 각 IP 주소당 `window` (여기서는 15분)마다 최대 100번의 요청 허용
    standardHeaders: &#39;draft-7&#39;, // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
legacyHeaders: false, // `X-RateLimit-*` 헤더 비활성화
    // store: ... , // 정확한 속도 제한을 위해 외부 저장소 사용
})

// 모든 요청에 대한 속도 제한 미들웨어 적용
app.use(limiter)</code></pre>
<p>이런식으로 미들웨어 대한 적용을 할 수 있다.</p>
<p>제일 밑에 있는<code>app.use(limiter)</code> 이 부분을</p>
<pre><code class="language-js">app.use(&#39;/api&#39;, apiLimiter)</code></pre>
<p>로 수정한다면 <code>/api</code>로 시작하는 요청들을 모두 적용 시킨다.</p>
<pre><code class="language-js">const createAccountLimiter = rateLimit({
    windowMs: 60 * 60 * 1000, // 1 hour
    limit: 5, // Limit each IP to 5 create account requests per `window` (here, per hour)
    message:
        &#39;Too many accounts created from this IP, please try again after an hour&#39;,
    standardHeaders: &#39;draft-7&#39;, // draft-6: `RateLimit-*` headers; draft-7: combined `RateLimit` header
    legacyHeaders: false, // Disable the `X-RateLimit-*` headers
})

app.post(&#39;/create-account&#39;, createAccountLimiter, (req, res) =&gt; {
    //...
})
</code></pre>
<p>이런식으로도 가능 위 코드는 <code>/create-account</code>으로 오는 요청만 설정한 듯 보이네요.</p>
<p>더 자세한 내용은
위에 써드린
<a href="https://www.npmjs.com/package/express-rate-limit">https://www.npmjs.com/package/express-rate-limit</a> &lt;= 에서 볼 수 있습니다!</p>
<p>이번 포스트는 여기까지 쓰겠습니다.</p>
<p>감사합니다.</p>
<p><a href="https://github.com/th-release">cth.release 깃헙</a>
<a href="https://th-release.github.io">cth.release 포트폴리오</a></p>
<h1 id="cthrelease">cth.release</h1>
]]></description>
        </item>
    </channel>
</rss>