<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Happy things are always here! ꔷ̑◡ꔷ̑</title>
    <link>https://hiolivia.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 1 Jun 2026 07:30:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>hiolivia</managingEditor>
    <image>
      <title>Happy things are always here! ꔷ̑◡ꔷ̑</title>
      <url>https://tistory1.daumcdn.net/tistory/4922524/attach/24f8351bad2d4fceacfb78a23b6d07cc</url>
      <link>https://hiolivia.tistory.com</link>
    </image>
    <item>
      <title>[Javascript] fetch api로 GET/POST 데이터 전송하기</title>
      <link>https://hiolivia.tistory.com/70</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;fetch는 비동기 방식으로 &lt;span style=&quot;background-color: #ffffff; color: #1b1b1b;&quot;&gt;HTTP&lt;span&gt; 요청을 날리고 응답을 받을 수 있는 api입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b1b1b;&quot;&gt;&lt;span&gt;우리가 fetch 예제를 보면 흔히 다음과 같이 사용할 것입니다.&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #1b1b1b;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654760034344&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch('http://localhost/project/example.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
  	name: 'olly',
    age: 20
  })
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 example.php에서 다음과 같은 코드를 작성했다면 값을 받아올 수 있을까요?&lt;/p&gt;
&lt;pre id=&quot;code_1654760284373&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo $_POST['name'];
echo $_POST['age'];&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과를 보면 아무것도 출력되지 않습니다. 그 이유는 body에서 데이터를 json 형태로 전송했기 때문에 php에서 post로 데이터를 받아올 수 없었던 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fetch를 사용해 GET/POST 전송을 하려면 다음의 코드를 참고할 수 있습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1654760444412&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch('http://localhost/project/example.php', {
  method: 'POST',
  headers: {
    &quot;Content-Type&quot;: &quot;application/x-www-form-urlencoded&quot;
  },
  body: new URLSearchParams({
    name: 'olly',
    age: 20
  })
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 header와 body 부분을 변경해주면 POST로 보낸 데이터를 잘 받아오는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fetch와 관련된 더 자세한 내용은 아래의 링크에 잘 나와 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654760544818&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;Fetch 사용하기 - Web API | MDN&quot; data-og-description=&quot;Fetch API는 HTTP 파이프라인을 구성하는 요청과 응답 등의 요소를 JavaScript에서 접근하고 조작할 수 있는 인터페이스를 제공합니다. Fetch API가 제공하는 전역 fetch() (en-US) 메서드로 네트워크의 리소&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-source-url=&quot;https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch&quot; data-og-url=&quot;https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bMqiNW/hyOGTkxGgM/Eq2bLxU44eeA9efWVfnUSk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.mozilla.org/ko/docs/Web/API/Fetch_API/Using_Fetch&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bMqiNW/hyOGTkxGgM/Eq2bLxU44eeA9efWVfnUSk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080');&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;Fetch 사용하기 - Web API | MDN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Fetch API는 HTTP 파이프라인을 구성하는 요청과 응답 등의 요소를 JavaScript에서 접근하고 조작할 수 있는 인터페이스를 제공합니다. Fetch API가 제공하는 전역 fetch() (en-US) 메서드로 네트워크의 리소&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.org&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>JavaScript</category>
      <category>fetch get post 전송</category>
      <category>fetch post 데이터 전송</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/70</guid>
      <comments>https://hiolivia.tistory.com/70#entry70comment</comments>
      <pubDate>Thu, 9 Jun 2022 16:43:06 +0900</pubDate>
    </item>
    <item>
      <title>[php] 외부 api 통신을 위한 curl 인증서 설정 (Window/IIS)</title>
      <link>https://hiolivia.tistory.com/69</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;외부 api와 통신하는 도중 아무리 해도 값을 받아올 수가 없어서 헤메던 중 curl 통신 시 SSL 인증서 설정이 빠졌다는 것을 알게 되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에는 전혀 문제가 없는데도 계속 에러가 뜬다면 curl 설정을 확인해보세요 &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설정이 안되어 있다면 다음의 제가 시도한 방법을 참고하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/cEtENm/btrEgvnborP/LI2reXwTVSOvQFnKVNDjlk/cacert.pem?attach=1&amp;amp;knm=tfile.pem&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;cacert.pem&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.21MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 다음의 인증서를 다운받습니다. 중요한 것은 저장하는 경로인데요, php 파일 안에 ext라는 폴더가 있을거에요. 그 폴더 안에 넣어주세요!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저 같은 경우는 C:\Program Files\PHP\v7.2\ext 폴더에 넣었습니다.&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;다음은 php.ini 파일을 수정해주어야 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1654664760740&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl.cainfo = &quot;C:\Program Files\PHP\v7.2\ext\cacert.pem&quot; 

openssl.cafile= &quot;C:\Program Files\PHP\v7.2\ext\cacert.pem&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl.cainfo, openssl.cafile 이 두가지를 주석 제거해주시고 인증서 다운받은 경로를 정확히 입력해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 웹서버를 다시 시작해주세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;캡처.JPG&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;674&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cX986l/btrEdq8tk2d/MKDQGoVs087zjKZTFlcViK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cX986l/btrEdq8tk2d/MKDQGoVs087zjKZTFlcViK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cX986l/btrEdq8tk2d/MKDQGoVs087zjKZTFlcViK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcX986l%2FbtrEdq8tk2d%2FMKDQGoVs087zjKZTFlcViK%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;945&quot; height=&quot;674&quot; data-filename=&quot;캡처.JPG&quot; data-origin-width=&quot;945&quot; data-origin-height=&quot;674&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 웹서버로 IIS를 쓰고 있습니다. 오른쪽에 다시 시작 버튼을 눌러주세요.&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;curl ssl 인증서 등록이 잘되었는지 확인하려면 phpinfo() 출력문에서 curl 설정에 경로가 잘 지정이 되있는지 확인하시거나 다음의 코드를 입력해 어떤 에러가 뜨는지 확인해보시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1654664985510&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try {
    $c = curl_init();
    curl_setopt($c, CURLOPT_URL, (통신할 외부 api 링크));
    curl_setopt($c, CURLOPT_POST, true);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    $res = curl_exec($c);

    print &quot;&amp;lt;textarea&amp;gt;&quot;;
    print (&quot;curl.cainfo: &quot; . ini_get('curl.cainfo') . PHP_EOL);;
    print(&quot;curl error: &quot; . curl_error($c) . PHP_EOL);
    print(&quot;result: &quot; . htmlentities($res) . PHP_EOL);    
    print &quot;&amp;lt;/textarea&amp;gt;&quot;;
} catch (Exception $e) {
    throw $e;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 외부 api를 호출했을 때 응답을 잘 받아오는 것을 볼 수 있습니다.&amp;nbsp;&lt;/p&gt;</description>
      <category>php</category>
      <category>curl ssl 인증서</category>
      <category>curl ssl 인증서 다운로드</category>
      <category>curl.cainfo</category>
      <category>curl.cainfo 에러</category>
      <category>curl.cainfo 적용</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/69</guid>
      <comments>https://hiolivia.tistory.com/69#entry69comment</comments>
      <pubDate>Wed, 8 Jun 2022 15:00:51 +0900</pubDate>
    </item>
    <item>
      <title>[SSL] http로 접속 시 https로 리다이렉션 (무한 새로고침 방지)</title>
      <link>https://hiolivia.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;현재 가비아에서 호스팅을 쓰고 있는 웹사이트에 SSL을 적용시켜야 할 일이 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래라면 SSL 인증서 구매 후 웹서버에 직접 적용을 시켜야 하지만 저는 가비아 호스팅을 쓰고 있었기 때문에 웹서버로 적용이 불가했습니다.&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;a href=&quot;http://www.mywebsite.co.kr로&quot;&gt;www.mywebsite.co.kr&lt;/a&gt;로 접속을 하면 자동으로 http://&lt;a href=&quot;http://www.mywebsite.co.xn--kr-qj9i/&quot;&gt;www.mywebsite.co.kr&lt;/a&gt; 로 접속이 되었기 때문에 https://&lt;a href=&quot;http://www.mywebsite.co.xn--kr-qj9i/&quot;&gt;www.mywebsite.co.kr&lt;/a&gt; 로 이동하도록 리다이렉션 해주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 가지 방법을 시도해보았지만 무한 새로고침이 되는 것이었습니다... &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 구글링하다가 성공했습니다. 제가 성공한 방법은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로젝트 root 폴더의 .htaccess 파일을 수정해줍니다. .htaccess 파일이 없다면 그냥 하나 생성해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 다음의 코드를 붙여넣기 해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1654585708510&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;RewriteEngine On

RewriteCond %{HTTPS} off

RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 url로 접속해보면 자동으로 자물쇠 아이콘이 보이면서 https로 접속한 것을 확인할 수 있습니다!&lt;/p&gt;</description>
      <category>Library</category>
      <category>http 접속 시 https 리다이렉션</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/68</guid>
      <comments>https://hiolivia.tistory.com/68#entry68comment</comments>
      <pubDate>Tue, 7 Jun 2022 16:10:02 +0900</pubDate>
    </item>
    <item>
      <title>[php] composer 설치 및 사용법 on Window</title>
      <link>https://hiolivia.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;(생활코딩님의 강의를 참고해 실습해보았습니다 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;composer란 package manger라는 소프트웨어입니다. 다른 사람이 만든 코드를 부품으로 자신의 프로젝트을 빠르게 만들 수 있는 기술이라고 할 수 있습니다.&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;composer를 사용하기 위해서는 설치가 필요한데요, 아래의 사이트에서 다운로드 받으시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://getcomposer.org/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653959169297&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;Composer&quot; data-og-description=&quot;A Dependency Manager for PHP Latest: 2.3.5 (changelog) Getting Started Download Documentation Browse Packages Issues GitHub&quot; data-og-host=&quot;getcomposer.org&quot; data-og-source-url=&quot;https://getcomposer.org/&quot; data-og-url=&quot;https://getcomposer.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://getcomposer.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://getcomposer.org/&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;Composer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;A Dependency Manager for PHP Latest: 2.3.5 (changelog) Getting Started Download Documentation Browse Packages Issues GitHub&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;getcomposer.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 중에 developer mode에 체크해주시고, 다운받을 위치는 php가 설치된 경로로 지정하시면 됩니다!&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;설치가 잘 되었다면 cmd 창을 연 다음, 'cd (php가 설치된 경로)'를 입력해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 다음과 같이 입력했습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1653959563609&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd C:\Program Files\PHP\v7.2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;php가 설치된 경로로 들어왔다면 다음의 명령어를 입력해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1653959642668&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;php composer.phar&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;캡처.JPG&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;558&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MNnbB/btrDyn5wNdx/IW1pjPRooA8Uk9ZxAaIvJ1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MNnbB/btrDyn5wNdx/IW1pjPRooA8Uk9ZxAaIvJ1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MNnbB/btrDyn5wNdx/IW1pjPRooA8Uk9ZxAaIvJ1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMNnbB%2FbtrDyn5wNdx%2FIW1pjPRooA8Uk9ZxAaIvJ1%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;965&quot; height=&quot;558&quot; data-filename=&quot;캡처.JPG&quot; data-origin-width=&quot;965&quot; data-origin-height=&quot;558&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 코드를 터미널에 입력하면 php composer.phar를 다 입력하지 않고 composer만 입력해도 위의 화면이 나옵니다.&lt;/p&gt;
&lt;pre id=&quot;code_1653960032696&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;echo @php &quot;%~dp0composer.phar&quot; %*&amp;gt;composer.bat&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.JPG&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;45&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA94rN/btrDyE0bXl3/D8EZ5RqMXAu1Pux6KQg750/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA94rN/btrDyE0bXl3/D8EZ5RqMXAu1Pux6KQg750/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA94rN/btrDyE0bXl3/D8EZ5RqMXAu1Pux6KQg750/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA94rN%2FbtrDyE0bXl3%2FD8EZ5RqMXAu1Pux6KQg750%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;641&quot; height=&quot;48&quot; data-filename=&quot;1.JPG&quot; data-origin-width=&quot;601&quot; data-origin-height=&quot;45&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;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;composer를 전역으로 사용하려면 환경변수의 path를 php가 설치된 경로로 등록해주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 composer를 사용할 준비가 끝났다면 프로젝트 폴더를 생성해주세요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성된 프로젝트 폴더에 composer.json 파일을 생성해주겠습니다.&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;터미널에서 cd (프로젝트 폴더 경로)를 입력해 해당 위치로 간 다음, 다음의 명령어를 입력해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1653962572148&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;composer init&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;json 파일의 설정을 할 수 있는데 필요한 정보는 입력하고 끝까지 엔터 누르면 프로젝트 폴더에 파일들이 생성됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.JPG&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;74&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF4loJ/btrDAld6p0h/iPw5sWhBgG7FJuDi1XxVF0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF4loJ/btrDAld6p0h/iPw5sWhBgG7FJuDi1XxVF0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF4loJ/btrDAld6p0h/iPw5sWhBgG7FJuDi1XxVF0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF4loJ%2FbtrDAld6p0h%2FiPw5sWhBgG7FJuDi1XxVF0%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;628&quot; height=&quot;74&quot; data-filename=&quot;2.JPG&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;74&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 우리의 프로젝트에 필요한 부품 즉, 라이브러리를 사용하려면 &quot;require&quot; : 부분에 추가하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 라이브러리는 여기서 찾으실 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://packagist.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://packagist.org/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1653962716999&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;Packagist&quot; data-og-description=&quot;Define Your Package Put a file named composer.json at the root of your package's repository, containing this information: { &amp;quot;name&amp;quot;: &amp;quot;your-vendor-name/package-name&amp;quot;, &amp;quot;description&amp;quot;: &amp;quot;A short description of what your package does&amp;quot;, &amp;quot;require&amp;quot;: { &amp;quot;php&amp;quot;: &amp;quot;&amp;gt;=7.4&amp;quot;&quot; data-og-host=&quot;packagist.org&quot; data-og-source-url=&quot;https://packagist.org/&quot; data-og-url=&quot;https://packagist.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://packagist.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://packagist.org/&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;Packagist&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Define Your Package Put a file named composer.json at the root of your package's repository, containing this information: { &quot;name&quot;: &quot;your-vendor-name/package-name&quot;, &quot;description&quot;: &quot;A short description of what your package does&quot;, &quot;require&quot;: { &quot;php&quot;: &quot;&amp;gt;=7.4&quot;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;packagist.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 monolog라는 라이브러리를 사용해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.JPG&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;735&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rg5Dh/btrDxowRP9x/3aB9SkzoybniC0zPuy1wr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rg5Dh/btrDxowRP9x/3aB9SkzoybniC0zPuy1wr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rg5Dh/btrDxowRP9x/3aB9SkzoybniC0zPuy1wr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Frg5Dh%2FbtrDxowRP9x%2F3aB9SkzoybniC0zPuy1wr0%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;1238&quot; height=&quot;735&quot; data-filename=&quot;3.JPG&quot; data-origin-width=&quot;1238&quot; data-origin-height=&quot;735&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 라이브러리를 다운 받기 위해 다음의 명령어를 입력해주세요.&lt;/p&gt;
&lt;pre id=&quot;code_1653963620276&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;composer require monolog/monolog&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저는 바로 VS code 터미널을 열어 입력했습니다. 설치가 되면서 require 부분에 다음과 같이 추가가 자동으로 되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.JPG&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;982&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/213TH/btrDvRkZcbv/dXFzWj0D02uGj3bwORo5K1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/213TH/btrDvRkZcbv/dXFzWj0D02uGj3bwORo5K1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/213TH/btrDvRkZcbv/dXFzWj0D02uGj3bwORo5K1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F213TH%2FbtrDvRkZcbv%2FdXFzWj0D02uGj3bwORo5K1%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;903&quot; height=&quot;982&quot; data-filename=&quot;4.JPG&quot; data-origin-width=&quot;903&quot; data-origin-height=&quot;982&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 해서 composer 설치와 의존성을 설정하는 것까지 성공했습니다! 다음 포스팅에서는 이 라이브러리를 어떻게 적용시킬 수 있는지 해보도록 하겠습니다.&lt;/p&gt;</description>
      <category>php</category>
      <category>Composer</category>
      <category>php composer</category>
      <category>php composer 설치</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/66</guid>
      <comments>https://hiolivia.tistory.com/66#entry66comment</comments>
      <pubDate>Tue, 31 May 2022 10:32:54 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] JS session 세션 활용하기</title>
      <link>https://hiolivia.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JS 세션 활용법은 아주 간단한데요, 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1653616542328&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sessionStorage.setItem('name', 'olly'); //key, value
sessionStorage.getItem('name'); //olly
sessionStorage.length; //1
sessionStorage.key(0); //name
sessionStorage.removeItem('name'); // 파라미터 삭제
sessionStorage.claer(); // 세션 초기화&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단하게 세션을 활용할 수 있습니다!&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>JS session</category>
      <category>자바스크립트 세션</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/65</guid>
      <comments>https://hiolivia.tistory.com/65#entry65comment</comments>
      <pubDate>Sat, 28 May 2022 11:56:36 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] url 파라미터 추출하기</title>
      <link>https://hiolivia.tistory.com/64</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;우리가 GET 요청을 날릴 때 파라미터를 추출할 때가 있는데요, new URL() 객체를 사용해 할 수 있습니다.&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;현재 url 가져오기&lt;/p&gt;
&lt;pre id=&quot;code_1653614731808&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.location.href&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 url의 파라미터만 가져오기&lt;/p&gt;
&lt;pre id=&quot;code_1653614763743&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;window.location.search&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 url의 특정 파라미터를 지정해 값 가져오기&lt;/p&gt;
&lt;pre id=&quot;code_1653614891045&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;new URL(원하는 url).searchParams.get('파라미터키');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 파라미터의 키 얻기&lt;/p&gt;
&lt;pre id=&quot;code_1653615289681&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const keys = new URLSearchParams(url).keys()
for(const key of keys) {
  console.log(key);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모든 파라미터의 값 얻기&lt;/p&gt;
&lt;pre id=&quot;code_1653615325437&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const values = new URLSearchParams(url).values()
for(const value of values) {
  console.log(value);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파라미터 추가/변경/삭제 하기&lt;/p&gt;
&lt;pre id=&quot;code_1653615615069&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;new URLSearchParams(url).has(&quot;파라미터키&quot;) //파라미터가 있는지 체크
new URLSearchParams(url).append(&quot;파라미터키&quot;,&quot;파라미터값&quot;) //파라미터 추가
new URLSearchParams(url).set(&quot;파라미터키&quot;,&quot;파라미터값&quot;) //파라미터 수정
new URLSearchParams(url).delete(&quot;파라미터키&quot;) //파라미터 삭제&lt;/code&gt;&lt;/pre&gt;</description>
      <category>JavaScript</category>
      <category>JS url 파라미터</category>
      <category>자바스크립트 url 파라미터 추출</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/64</guid>
      <comments>https://hiolivia.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 27 May 2022 10:42:04 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] 시계(시,분,초) 구현하기</title>
      <link>https://hiolivia.tistory.com/63</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUHxhS/btrCWNh1YdN/9W8HDGWpnWQE9gyMAx2Imk/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUHxhS/btrCWNh1YdN/9W8HDGWpnWQE9gyMAx2Imk/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUHxhS/btrCWNh1YdN/9W8HDGWpnWQE9gyMAx2Imk/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bUHxhS/btrCWNh1YdN/9W8HDGWpnWQE9gyMAx2Imk/img.gif&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;236&quot; height=&quot;110&quot; data-filename=&quot;Animation.gif&quot; data-origin-width=&quot;221&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘은 다음과 같은 시, 분, 초로 구성되어 있는 시계 기능을 JS로 구현해보겠습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1653284431022&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function clock(){
  var date = new Date();
  var h = date.getHours();
  var hour = h&amp;lt;10 ? '0'+h : h;
  var m = date.getMinutes();
  var minute = m&amp;lt;10 ? '0'+m : m;
  var s = date.getSeconds();
  var second = s&amp;lt;10 ? '0'+s : s;
  $(&quot;.clock .time&quot;).text(hour+':'+minute+':'+second);
}
clock();
setInterval(clock,1000);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;clock이라는 함수 안에 현재 시간을 구하는 함수들을 선언하고 setInterval을 사용해 1초에 한번씩 함수를 실행시켜줍니다. 그 결과, 초 단위까지 보이는 시계를 구현할 수 있습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JavaScript</category>
      <category>JS 시계 기능</category>
      <category>자바스크립트 시계</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/63</guid>
      <comments>https://hiolivia.tistory.com/63#entry63comment</comments>
      <pubDate>Mon, 23 May 2022 14:42:54 +0900</pubDate>
    </item>
    <item>
      <title>[React] fetch()로  restful API 구현</title>
      <link>https://hiolivia.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;리액트에서 자바스크립트 메소드인 fetch()를 사용해 resful API를 구현해볼텐데요, fetch의 사용법은 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1653009923124&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch(url, {options})
//url: api 통신을 위해 접근할 url
//options: 매개변수, method를 지정&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;options에는 request (요청), response(응답)의 인터페이스가 들어갑니다.&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 style=&quot;background-color: #f6e199;&quot;&gt;request&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- method&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;method는 우리가 알고 있는 HTTP method가 들어가는데요, 다음의 형식을 따릅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C : POST&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;R : GET&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;U : PUT&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;D: DELETE&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;-&lt;span&gt; header&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;header에는 request header를 지정해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) &quot;Content-Type&quot;: &quot;application/json&quot;&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;- body&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;body에는 전송할 데이터를 넣어주는데, 객체 타입으로 들어갑니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제1 ) POST&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 영단어장에 새로운 단어 등록하기&lt;/p&gt;
&lt;pre id=&quot;code_1653010118190&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch(`http://localhost:3001/words`, {
  method: &quot;POST&quot;,
  headers: {
    &quot;Content-Type&quot;: &quot;application/json&quot;,
  },
  body: JSON.stringify({
    day: day.current.value,
    eng: eng.current.value,
    kor: kor.current.value,
    isDone: false,
  }),
}).then((res) =&amp;gt; {
  if (res.ok) {
    alert(&quot;저장이 완료되었습니다.&quot;);
    navigate(`/list/${day.current.value}`);
  }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요청을 날렸을 때 응답으로 ok, 즉 true를 반환한다면 alert 창을 띄우고, navigate를 사용해 링크를 이동시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제2 ) GET&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 영단어장 가져오기&lt;/p&gt;
&lt;pre id=&quot;code_1653011117192&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch(&quot;http://localhost:3001/words&quot;)
  .then((val) =&amp;gt; {
    return val.json();
  })
  .then((data) =&amp;gt; console.log(data));&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;데이터를 json 형식으로 파싱해준 다음 사용합니다.&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) PUT&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단어 수정하기&lt;/p&gt;
&lt;pre id=&quot;code_1653011325225&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch(`http://localhost:3001/words/${props.word.id}`, {
   method: &quot;PUT&quot;,
   headers: {
     &quot;Content-Type&quot;: &quot;application/json&quot;,
   },
   body: JSON.stringify({
     ...props.word,
     isDone: !done,
   }),
 }).then((res) =&amp;gt; {
   if (res.ok) {
     setDone(!done);
   }
 });&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 단어 학습 완료 시 완료 체크를 하면 상태 수정이 됩니다. props로 전달받은 state의 값을 변경해주기 위해 props.word를 복사해준 다음, isDone을 수정해주었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제4) DELETE&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 단어 삭제하기&lt;/p&gt;
&lt;pre id=&quot;code_1653011696889&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;fetch(`http://localhost:3001/words/${props.word.id}`, {
  method: &quot;DELETE&quot;,
}).then((res) =&amp;gt; {
  if (res.ok) {
    setDel({ id: 0 });
  }
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DELETE에는 전송할 데이터가 없기 때문에 body가 필요없습니다.&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;이렇게 fetch를 이용해 restful API를 구현할 수 있었습니다!&lt;/p&gt;</description>
      <category>React</category>
      <category>react fetch</category>
      <category>react restful API</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/62</guid>
      <comments>https://hiolivia.tistory.com/62#entry62comment</comments>
      <pubDate>Fri, 20 May 2022 10:57:26 +0900</pubDate>
    </item>
    <item>
      <title>[HTML] meta 태그를 이용해 링크 전송 시 썸네일, 정보 수정하기</title>
      <link>https://hiolivia.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;카카오톡이나 다른 방법을 이용해 링크를 전송할 때 뜨는 썸네일과 제목 등의 정보를 수정해보겠습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;meta 태그를 사용해 정말 간단하게 지정해줄 수 있습니다 :)&lt;/p&gt;
&lt;pre id=&quot;code_1652920141230&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;meta property=&quot;og:url&quot; content=&quot;http://dhffl.dothome.co.kr/&quot;&amp;gt;
&amp;lt;meta property=&quot;og:title&quot; content=&quot;PORTFOLIO&quot;&amp;gt;
&amp;lt;meta property=&quot;og:description&quot; content=&quot;안녕하세요 매일 성장하는 웹 개발자 Olly입니다✨&quot;&amp;gt;
&amp;lt;meta property=&quot;og:type&quot; content=&quot;website&quot;&amp;gt;
&amp;lt;meta property=&quot;og:image&quot; content=&quot;./img/olly.png&quot;&amp;gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_20220519_093110407.jpg&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dN5vUk/btrCvJ9Nf3z/ojKdke9jmZVAYRPZKvhYs1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dN5vUk/btrCvJ9Nf3z/ojKdke9jmZVAYRPZKvhYs1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dN5vUk/btrCvJ9Nf3z/ojKdke9jmZVAYRPZKvhYs1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdN5vUk%2FbtrCvJ9Nf3z%2FojKdke9jmZVAYRPZKvhYs1%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;384&quot; height=&quot;382&quot; data-filename=&quot;KakaoTalk_20220519_093110407.jpg&quot; data-origin-width=&quot;828&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;썸네일과 제목, 웹사이트 설명 칸에 잘 들어간 것을 볼 수 있습니다! meta 태그를 이용해 간단하게 설정해주었습니다.&lt;/p&gt;</description>
      <category>HTML</category>
      <category>링크 공유 시 썸네일</category>
      <category>링크 공유 시 정보 수정</category>
      <category>카톡 링크 공유 썸네일</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/61</guid>
      <comments>https://hiolivia.tistory.com/61#entry61comment</comments>
      <pubDate>Thu, 19 May 2022 09:33:01 +0900</pubDate>
    </item>
    <item>
      <title>[php] php mysql 중복되지 않는 랜덤 숫자 생성하기</title>
      <link>https://hiolivia.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 중 중복되지 않는 랜덤 숫자를 생성해 GET 요청을 날려야 했는데요, rand() 함수를 통해 해결했습니다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*php와 mysql에는 rand() 함수가 있지만 서로 사용법이 다릅니다. 제가 사용한 rand()는 php 함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용법은 이러합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;rand(최솟값, 최댓값)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제가 구현해야 하는 건 두가지였는데요,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 6자리의 랜덤 숫자를 생성한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 코드를 참고하시면 됩니다.&lt;/p&gt;
&lt;pre id=&quot;code_1652659187071&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;while(true){
    $rand = rand(100000,999999); //랜덤숫자 생성
    $id = $this-&amp;gt;db-&amp;gt;query(&quot;SELECT * from (테이블명) where (랜덤숫자 컬럼명) = $rand&quot;);
    if($id-&amp;gt;num_rows()==0){ //중복 체크
        break;
    }
}&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 해결했습니다 &lt;/p&gt;</description>
      <category>php</category>
      <category>php mysql 랜덤 숫자</category>
      <category>php rand()</category>
      <author>hiolivia</author>
      <guid isPermaLink="true">https://hiolivia.tistory.com/60</guid>
      <comments>https://hiolivia.tistory.com/60#entry60comment</comments>
      <pubDate>Tue, 17 May 2022 10:01:42 +0900</pubDate>
    </item>
  </channel>
</rss>