<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>To The Moon</title>
        <link>https://velog.io/</link>
        <description>Hello</description>
        <lastBuildDate>Wed, 20 Sep 2023 01:53:54 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>To The Moon</title>
            <url>https://velog.velcdn.com/images/front_mower_man/profile/4c755fd3-0f7e-47ac-be93-00e4ac095ef2/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. To The Moon. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/front_mower_man" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[React Vite aws s3 + cloudfront로 private 배포]]></title>
            <link>https://velog.io/@front_mower_man/React-Vite-aws-s3-cloudfront%EB%A1%9C-%EB%B0%B0%ED%8F%AC</link>
            <guid>https://velog.io/@front_mower_man/React-Vite-aws-s3-cloudfront%EB%A1%9C-%EB%B0%B0%ED%8F%AC</guid>
            <pubDate>Wed, 20 Sep 2023 01:53:54 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/front_mower_man/post/bff84729-42f6-4d6a-8c92-e94ae2f4e05f/image.png" alt=""></p>
<h2 id="s3-스토리지">S3 스토리지</h2>
<h3 id="버킷-생성">버킷 생성</h3>
<p>먼저 S3에 들어가서 버킷을 만들어줍니다. 
<img src="https://velog.velcdn.com/images/front_mower_man/post/2b41ed55-e1fa-4104-9d52-25d8ca421134/image.png" alt=""></p>
<hr>
<h3 id="버킷-이름-리전-선택">버킷 이름, 리전 선택</h3>
<p>원하는 버킷명을 지어주고 AWS 리전은 <strong>아시아 태평양 서울</strong>을 선택해줍니다. 객체 소유권은 ACL 비활성화를 서택해줍니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/a25ccb74-4aeb-49d4-b28d-6b1b60057773/image.png" alt=""></p>
<hr>
<h3 id="퍼블릭-엑세스-차단-설정">퍼블릭 엑세스 차단 설정</h3>
<p>퍼블릭 엑세스 차단을 <code>활성화</code> 한 상태로 넘어갑니다.(public으로 접근하는걸 막고 <code>CloudFront</code>로 접근하는것만 허용)
<img src="https://velog.velcdn.com/images/front_mower_man/post/3b910c53-f794-46d8-a9a6-2e3eeb2dcfbc/image.png" alt=""></p>
<hr>
<h3 id="기타-사항">기타 사항</h3>
<p>밑에 있는 사항들은 그대로 두고 버킷을 생성해줍니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/8fa1f095-8e8b-48df-b0c7-e437928a8357/image.png" alt=""></p>
<hr>
<h3 id="빌드한-파일-폴더-업로드">빌드한 파일, 폴더 업로드</h3>
<p>생성한 버킷에 들어가서 빌드한 파일과 폴더를 <strong>업로드</strong> 해줘야합니다.
<strong>vite</strong>로 생성한 리액트 프로젝트를 빌드하면 결과물이 <strong>dist</strong>폴더안에 담겨있습니다.
여기서 _<strong>주의해야할 사항</strong>_이 있는데 업로드할때 dist폴더를 통째로 업로드하는게 아니라 <strong>dist폴더안에 있는 파일과 폴더를 따로 올려줘야합니다!!</strong>
<img src="https://velog.velcdn.com/images/front_mower_man/post/0f9da85d-a27d-4470-b26b-06880895a0da/image.png" alt="">
<img src="https://velog.velcdn.com/images/front_mower_man/post/5bd00441-0e5f-4e4f-beed-4e6ffcc6113f/image.png" alt=""></p>
<hr>
<p>S3 스토리지 설정은 끝났고 이제 CloudFront 설정을 하면됩니다.</p>
<h2 id="cloudfront">CloudFront</h2>
<h3 id="배포-생성">배포 생성</h3>
<p>CloudFront에 들어가서 배포 생성을 해줍니다.
원본 도메인에 S3에서 생성한 버킷을 선택해서 클릭합니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/5c0b322a-d631-443e-a607-043574a6ced3/image.png" alt="">
<img src="https://velog.velcdn.com/images/front_mower_man/post/8ab11d9f-f0fb-4933-8b3a-1bf66bcc3aee/image.png" alt=""></p>
<h3 id="원본-엑세스-설정">원본 엑세스 설정</h3>
<p>원본 엑세스 제어 설정을 선택한 후 제어 설정 생성을 눌러줍니다. 제어 설정 생성창이 나올텐데 확인하고 생성버튼을 누르면 됩니다.
<strong>S3 버킷 정책 업데이트</strong>는 배포후 설정하는것이라 지금은 넘어가면됩니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/64eb37f2-a700-4271-b400-66ef82a462f0/image.png" alt="">
<img src="https://velog.velcdn.com/images/front_mower_man/post/49d9b494-ad48-4eb6-8a44-b5035e3857c4/image.png" alt=""></p>
<hr>
<h3 id="origin-shield-활성화">Origin Shield 활성화</h3>
<p>Origin shield <strong>활성화를</strong> 해주고 리전은 아시아 태평양(서울)로 선택해줍니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/317d6cdb-52e8-4eff-84ca-0e12c92333c4/image.png" alt=""></p>
<hr>
<h3 id="기본-캐시-동작-설정">기본 캐시 동작 설정</h3>
<p>기본 캐시 동작에서 <strong>뷰어 프로토콜 정책</strong>을 <strong><em>Redirect HTTP to HTTPS</em></strong>를 선택해줍니다.</p>
<p>나머지 사항들은 그대로 두고 함수 연결도 그대로 두고 넘어갑니다.
웹 어플리케이션 방화벽은 비활성화를 선택하고 넘어갑니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/fcd14748-b463-4a5d-ab48-128c8a3c8f0b/image.png" alt=""></p>
<hr>
<h3 id="기본값-루트-객체-설정">기본값 루트 객체 설정</h3>
<p>설정칸에서 나머지는 그대로 두고 루트 객체에 index.html을 넣어줍니다.
<del>/index.html</del>이 아니고 <strong>index.html</strong>만 넣어주면됩니다.
마쳤으면 배포해주면 됩니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/204c1cb6-40a9-4fa0-92f1-8691ef52a829/image.png" alt=""></p>
<h3 id="버킷-정책-업데이트">버킷 정책 업데이트</h3>
<p>생성하고 나면 화면 위에 노란색 창이 나오는데 버킷 정책을 업데이트를 하라고 나옵니다.
이때 오른쪽에 있는 <code>정책 복사</code>를 클릭하고 생성한 s3 버킷에 들어가 <code>권한탭</code>에서 버킷정책에다가 붙여넣기하고 저장하면 됩니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/b0b6fb9e-e600-4ee5-bc5d-bbe0977b5acb/image.png" alt="">
<img src="https://velog.velcdn.com/images/front_mower_man/post/05f88dab-19a0-4183-a2e8-dc7f7eca10f7/image.png" alt=""></p>
<hr>
<h3 id="사용자-정의-오류-응답-생성">사용자 정의 오류 응답 생성</h3>
<p>CloudFront로 돌아와서 배포페이지에 들어가서 <code>오류페이지 탭</code>에 들어가서 <strong><em>사용자 정의 오류 응답</em></strong> 생성을 해줍니다. 
두개를 만들어줘야하는데 403, 404 에러 설정을 해줘야합니다.
HTTP 오류 코드만 403, 404 따로 설정하고 응답페이지 경로, HTTP 응답코드는 같은 값을 넣어주면됩니다.</p>
<p>이걸 설정해주는 이유는 CSR 방식의 프로젝트를 CloudFront로 배포를 하게 되면 <strong>403/404에러가</strong> 발생하는데 이는 React는 react-router-dom을 사용해서 새로고침 대신 서비스 내에서 <strong>redirect를</strong> 발생시키는데 _<strong>CloudFront는 redirect를 에러로 처리</strong>_하기 때문이라고 합니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/b41afb0a-9119-451c-bf94-f2058dbf4498/image.png" alt="">
<img src="https://velog.velcdn.com/images/front_mower_man/post/f32c5c7b-9f21-49b9-b671-5a25f6029d19/image.png" alt=""></p>
<hr>
<h3 id="추가사항">추가사항</h3>
<p>만약 이렇게 설정하고도 안된다면 배포한 CloudFront에 들어가서 <code>무효화 탭</code>에서 객체 경로 추가에 <strong>/*</strong> 넣고 무효화 생성을 하고 좀 있다가 들어가면 해결됩니다.
<img src="https://velog.velcdn.com/images/front_mower_man/post/7ec9c0dc-0b1f-4ed1-b3a6-3805dd1a38e6/image.png" alt=""></p>
<h3 id="배포-끝">배포 끝!!!</h3>
<p>설정을 완료했고 해당 배포 도메인 주소를 복사해서 url창에 넣으면 여러분들이 올려놓은 프로젝트가 화면에 나옵니다~~!</p>
<p>도움이 됐다면 댓글, ❤️</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[백준 node 입출력하는 방법]]></title>
            <link>https://velog.io/@front_mower_man/%EB%B0%B1%EC%A4%80%EC%9E%85%EC%B6%9C%EB%A0%A5</link>
            <guid>https://velog.io/@front_mower_man/%EB%B0%B1%EC%A4%80%EC%9E%85%EC%B6%9C%EB%A0%A5</guid>
            <pubDate>Tue, 12 Sep 2023 02:50:58 GMT</pubDate>
            <description><![CDATA[<p>백준에 처음 입문한 사람이라면 백준 입출력 방식에 난감한 경험이 있을겁니다.
Javascript로 알고리즘 준비를 하고 있어서 <strong>node.js</strong>로 작성하는 팁을 공유합니다.</p>
<h2 id="에디터vscode로-작성하는팁">에디터(vscode)로 작성하는팁</h2>
<p><img src="https://velog.velcdn.com/images/front_mower_man/post/ea342f2d-cf81-41ac-944d-ecebd8bea609/image.png" alt=""></p>
<ol>
<li>먼저 폴더 하나 생성</li>
<li>코드를 작성할 js파일을 하나 생성</li>
<li>예제를 입력할 txt파일을 하나 생성<pre><code class="language-javascript">const input = require(&quot;fs&quot;)
.readFileSync(&quot;example.txt&quot;, &quot;utf8&quot;)
.trim()
.split(&quot;\n&quot;);
</code></pre>
</li>
</ol>
<p>const solution = (input) =&gt; {};</p>
<p>solution(input);</p>
<pre><code>4. 위 자바스크립트 코드를 js파일에다가 넣어줍니다
5. txt 파일에다가 예제를 그대로 복붙해주면 input인자에 **배열형태**로 한줄씩 **문자열**로 예제값들이 담겨져있는걸 확인할 수 있습니다.

### 예제 입출력
```txt
example.txt

백준
1 2 3 4 5</code></pre><pre><code class="language-javascript">// index.js
const input = require(&quot;fs&quot;)
  .readFileSync(&quot;example.txt&quot;, &quot;utf8&quot;)
  .trim()
  .split(&quot;\n&quot;);

const solution = (input) =&gt; {
  console.log(input);
};

solution(input);</code></pre>
<p>이렇게 작성하고 터미널에 <strong>node index.js</strong> 입력 후 출력
<img src="https://velog.velcdn.com/images/front_mower_man/post/f26e493e-2981-4411-8db1-0054fce473a9/image.png" alt=""></p>
<h2 id="백준사이트에-작성하는팁">백준사이트에 작성하는팁</h2>
<p>위에서 작성한 코드는 txt파일에 있는 예제값을 받아서 처리하는거기때문에 백준 사이트에서 작성할때는 input을 다르게 받아줘야합니다</p>
<pre><code class="language-javascript">const input = require(&quot;fs&quot;).readFileSync(&quot;/dev/stdin&quot;, &quot;utf8&quot;).trim().split(&quot;\n&quot;);


const solution = (input) =&gt; {};

solution(input);</code></pre>
<p><strong>solution에 있는 코드는 그대로 두고</strong> <strong>input 변수</strong>에 들어간 코드만 저렇게 바꿔주면 그대로 백준 사이트에서 정답을 확인할 수 있습니다.</p>
<p>도움이 됐다면 ❤️</p>
]]></description>
        </item>
    </channel>
</rss>