<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>사소한것부터 바꾸자</title>
    <link>https://changeminor.tistory.com/</link>
    <description>저같은 비전공자를 위해 보다 자세하게 설명하고자 정말 이해하기 쉽게 기록을 하고자 만든 블로그 입니다. </description>
    <language>ko</language>
    <pubDate>Sun, 5 Apr 2026 16:54:41 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>뷰베</managingEditor>
    <image>
      <title>사소한것부터 바꾸자</title>
      <url>https://tistory1.daumcdn.net/tistory/3742539/attach/8e73157c529647cf96ff7cff62a154d5</url>
      <link>https://changeminor.tistory.com</link>
    </image>
    <item>
      <title>vite.config.js 설정 (1)</title>
      <link>https://changeminor.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vitejs-kr.github.io/guide/why.html#the-problems&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vitejs-kr.github.io/guide/why.html#the-problems&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1651033990847&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;Vite를 사용해야 하는 이유 | Vite&quot; data-og-description=&quot;Vite를 사용해야 하는 이유 이런 문제점이 있었어요 브라우저에서 ESM(ES Modules)을 지원하기 전까지는, JavaScript 모듈화를 네이티브 레벨에서 진행할 수 없었습니다. 따라서 개발자들은 &amp;quot;번들링(Bundl&quot; data-og-host=&quot;vitejs-kr.github.io&quot; data-og-source-url=&quot;https://vitejs-kr.github.io/guide/why.html#the-problems&quot; data-og-url=&quot;https://vitejs-kr.github.io/guide/why.html#the-problems&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btv4rr/hyObnTMklF/kXj2brP9brDf7B9Km9Rcx0/img.png?width=1918&amp;amp;height=1068&amp;amp;face=0_0_1918_1068,https://scrap.kakaocdn.net/dn/TVoxP/hyObrPqmin/INKMTIDxI6YkzZbi7A4cVk/img.png?width=1646&amp;amp;height=1030&amp;amp;face=0_0_1646_1030&quot;&gt;&lt;a href=&quot;https://vitejs-kr.github.io/guide/why.html#the-problems&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://vitejs-kr.github.io/guide/why.html#the-problems&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btv4rr/hyObnTMklF/kXj2brP9brDf7B9Km9Rcx0/img.png?width=1918&amp;amp;height=1068&amp;amp;face=0_0_1918_1068,https://scrap.kakaocdn.net/dn/TVoxP/hyObrPqmin/INKMTIDxI6YkzZbi7A4cVk/img.png?width=1646&amp;amp;height=1030&amp;amp;face=0_0_1646_1030');&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;Vite를 사용해야 하는 이유 | Vite&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Vite를 사용해야 하는 이유 이런 문제점이 있었어요 브라우저에서 ESM(ES Modules)을 지원하기 전까지는, JavaScript 모듈화를 네이티브 레벨에서 진행할 수 없었습니다. 따라서 개발자들은 &quot;번들링(Bundl&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;vitejs-kr.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vite 방문 하면 첫 페이지에 사용해야 하는 이유가 딱 쓰여져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;브라우저에서 ESM(ES Modules)을 지원하기 전까지는, JavaScript 모듈화를 네이티브 레벨에서 진행할 수 없었습니다. 딸라서 개발자들은 '번들링' 이라는 우회적인 방법을 사용할 수 밖에 없었습니다.&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;.... 하지만 말그대로 1000개 10000개의 JavaScript 모듈이 있는 거대한 프로젝트라면 어떨까요? 실제로 이러한 상황을 어렵지 않게 마주 하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 상황에서 보다 빠르게 퍼포먼스를 내주는 vite 사용하지 않을 이유는 없겠지요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vite를 사용하면서 발생했던 여러분들도 곧 마주할 Error 및 오류 부분 들을 소개 해 드립니다. ㅋㅋ&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;참고할 사항은 저는 vue3 프로젝트에 vite 사용 하였습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 배포버전의 console.log 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프론트엔드 개발을 진행 하면서 개발자 분들이라면 console.log는 디버깅 용으로 또는 값 확인 용으로 정말 많이 사용 하곤 합니다. 하지만 개발 할 때 여기저기 막 남발한 console.log를 개발 다된 시점에 배포할때 하나하나 찾아서 삭제 할려면 ..... ..... ;;;;; 그러다 한두개라도 중요정보 관련 log를 남기면 .... .... 그땐 정말 ..... .....&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;그럼 이런생각을 하게 됩니다. 개발할때 맘편히 로그 찍고 배포할때 한번에 처리하는 방법이 있다면 실수 없이 배포할때는 그냥 모든 console.log를 제거 해주는 기능이 있다면 얼마나 좋을까 하고 ㅋㅋ 네 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 설정 들어가지요 vite.config.js 에 아래와 같이&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1651036670935&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import path from 'path';

export default defineConfig({
  plugins: [vue()],
  //build 시에 모든 console.log를 제거
  build: {
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,
        drop_debugger: true
      }
    }
  }

})&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;이렇게 간단하게 로그를 제거 할 수 있습니다.&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-origin-width=&quot;2255&quot; data-origin-height=&quot;177&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cjtD1J/btrAymg692a/KaawyHkCdnkeloc00FZicK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cjtD1J/btrAymg692a/KaawyHkCdnkeloc00FZicK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cjtD1J/btrAymg692a/KaawyHkCdnkeloc00FZicK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcjtD1J%2FbtrAymg692a%2FKaawyHkCdnkeloc00FZicK%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;2255&quot; height=&quot;177&quot; data-origin-width=&quot;2255&quot; data-origin-height=&quot;177&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2246&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6A8KN/btrAzbl2RqF/L58qSkrTK8AJM3kueQfie0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6A8KN/btrAzbl2RqF/L58qSkrTK8AJM3kueQfie0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6A8KN/btrAzbl2RqF/L58qSkrTK8AJM3kueQfie0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6A8KN%2FbtrAzbl2RqF%2FL58qSkrTK8AJM3kueQfie0%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;2246&quot; height=&quot;278&quot; data-origin-width=&quot;2246&quot; data-origin-height=&quot;278&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;2. Router dynamic 하게 사용 할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인 프로젝트 이외의 실제 프로젝트에서 Router를 전부 하드 코딩해서 설정해서 사용 하는 경우는 없다고 생각합니다. 로컬에서 개발 테스트 진행할때 잘 작동하던 dynamic router가 build 후 배포하면 작동이 안될 때 정말 당황 스럽습니다. (자기소개 하기 !!) 원일을 찾는데 아무리 찾아도 답이 나오지 않아 정말 힘들 었습니다. 그렇게 헤매고 있다과 vite 가이드 문서를 보면서 차분한 마음으로 테스트 여러 번에 성공 했습니다. 이전 코드와 변경된 코드 아래에 첨부 합니다. 작업하시면서 비슷한 오류 나타나면 참조 하시길 바랍니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 작성한 dynamic router&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dynamicRoutes.js&lt;/p&gt;
&lt;pre id=&quot;code_1651039802370&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default (paths) =&amp;gt; {
  //route 형식 만들기
  const routes = []
  for (const { menuName, menuComponent, menuPath } of paths) {
      routes.push({
        path: `${menuPath}`,
        name: `${menuName}`,
        component: () =&amp;gt; import(`@/views/${menuComponent}.vue`)
      });
    }
  return routes
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dynamicRoute.js 에서 router에 add 해주면 끝&lt;/p&gt;
&lt;pre id=&quot;code_1651046841389&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const routes = dynamicRoutes(resultData);
for(let index; index &amp;lt; routes.lenth; index++) {
	router.addRoute(routes[index]);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정 한 dynamic router&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dynamicRoutes.js&lt;/p&gt;
&lt;pre id=&quot;code_1651046913434&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;export default (paths) =&amp;gt; {
  //route 형식 만들기
  const routes = []
  for (const { menuName, menuComponent, menuGroup, menuPath } of paths) {
      routes.push({
        path: `${menuPath}`,
        name: `${menuName}`,
        component: `${menuGroup}/${menuComponent}.vue`
      });
    }
  return routes
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- dynamicRoute.js 에서 import.meta.glob 함수를 이용해 모듈을 한 번에 가져올 수 있게 처리&lt;/p&gt;
&lt;pre id=&quot;code_1651047040899&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const routes = dynamicRoutes(resultData);
const modules = import.meta.glob('../views/main/*/*/*.vue');
routes.forEach((item) =&amp;gt; {
	// debugger
   if (item.path) {
   		const route = {
        path: item.path,
        name: item.name,
        component: modules['../views/main/' + item.component],
   		}
      router.addRoute(route);
   }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 주의사항 import.meta.glob('../view/main/*/*/*.vue') 이부분 패턴이 위에 component : `${menuGrop}` 이부분이랑&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main/하위폴터/하위의하위폴더/vue 파일 이렇게 이해가 안되면 댓글로 ....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vitejs-kr.github.io/guide/features.html#glob-import&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vitejs-kr.github.io/guide/features.html#glob-import&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오케이 오늘은 여기까지&lt;/p&gt;</description>
      <category>프론트엔드/vite</category>
      <category>dynamicrouter</category>
      <category>vite</category>
      <category>vite.config.js</category>
      <category>vite설정</category>
      <category>로그제거</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/15</guid>
      <comments>https://changeminor.tistory.com/15#entry15comment</comments>
      <pubDate>Wed, 27 Apr 2022 17:19:45 +0900</pubDate>
    </item>
    <item>
      <title>PermissionDeniedException (User denied permissions to access the device's location.) - 오류 해결</title>
      <link>https://changeminor.tistory.com/14</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;geolocator 패키지를 사용해서 사용자의 위치를 가져오는 기능을 구현 테스트 하는데&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PermissionDeniedException (User denied permissions to access the device's location.) 이런 오류가 계속 발생을 하게 되어&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트 새로 만들고 &lt;a title=&quot;위치추적api&quot; href=&quot;https://pub.dev/packages/geolocator&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://pub.dev/packages/geolocator&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1647572429552&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;geolocator | Flutter Package&quot; data-og-description=&quot;Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.) functions.&quot; data-og-host=&quot;pub.dev&quot; data-og-source-url=&quot;https://pub.dev/packages/geolocator&quot; data-og-url=&quot;https://pub.dev/packages/geolocator&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dgCW4B/hyNJagrl0d/itlSjmgkekheMF6Q8rYv2K/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/bPdneT/hyNKhE0Qqr/bMjVuQj6K6Uu2mKk3E2D60/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640&quot;&gt;&lt;a href=&quot;https://pub.dev/packages/geolocator&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://pub.dev/packages/geolocator&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dgCW4B/hyNJagrl0d/itlSjmgkekheMF6Q8rYv2K/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640,https://scrap.kakaocdn.net/dn/bPdneT/hyNKhE0Qqr/bMjVuQj6K6Uu2mKk3E2D60/img.png?width=1280&amp;amp;height=640&amp;amp;face=0_0_1280_640');&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;geolocator | Flutter Package&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Geolocation plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API for generic location (GPS etc.) functions.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;pub.dev&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1647572450808&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_FINE_LOCATION&quot; /&amp;gt;
&amp;lt;uses-permission android:name=&quot;android.permission.ACCESS_COARSE_LOCATION&quot; /&amp;gt;&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;두개 다 넣고 실행&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;debug 폴더의 AndroidManifest.xml 에 도 넣고 prifile폴더에도 넣고 별별 방법 다해보고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안되서 AVD 삭제도 해보고 AVD버전도 여러번 변경&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;geolocator 버전도 변경해보고 다 해보았으나 결국 실패!&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;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #fe4450;&quot;&gt;LocationPermission&lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt;permission&lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fede5d;&quot;&gt;await&lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #fe4450;&quot;&gt;Geolocator&lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #36f9f6;&quot;&gt;requestPermission&lt;/span&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #ff7edb;&quot;&gt;요렇게 코드 한줄만 넣어주면 해결!&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;147&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wrH9w/btrwgjWzf4a/hM5rUJKqGh1uugLrzFDBH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wrH9w/btrwgjWzf4a/hM5rUJKqGh1uugLrzFDBH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wrH9w/btrwgjWzf4a/hM5rUJKqGh1uugLrzFDBH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwrH9w%2FbtrwgjWzf4a%2FhM5rUJKqGh1uugLrzFDBH1%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;1152&quot; height=&quot;147&quot; data-origin-width=&quot;1152&quot; data-origin-height=&quot;147&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘도 열심히 flutter 공부!&lt;/p&gt;</description>
      <category>앱개발/flutter</category>
      <category>Flutter</category>
      <category>geolocation</category>
      <category>Geolocator</category>
      <category>permission</category>
      <category>오류</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/14</guid>
      <comments>https://changeminor.tistory.com/14#entry14comment</comments>
      <pubDate>Fri, 18 Mar 2022 12:06:49 +0900</pubDate>
    </item>
    <item>
      <title>Drawer</title>
      <link>https://changeminor.tistory.com/13</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;좌측 drawer 메뉴 부분&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1646894920745&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: &amp;lt;Widget&amp;gt;[
            UserAccountsDrawerHeader(
              currentAccountPicture: CircleAvatar(
                backgroundImage: AssetImage('assets/3.jpg'),
                // backgroundColor: Colors.white, // png 파일일 경우 백그라운드 컬러를 설정 가능
              ),
              accountName: Text('BYUBE'),
              accountEmail: Text('jeffkim@korfinholdings.co.kr'),
            )
          ],
        ),
      ),&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;1678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1rCZd/btrvu2OMBxD/2gYeKMuvyPZxhOwGd6dbA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1rCZd/btrvu2OMBxD/2gYeKMuvyPZxhOwGd6dbA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1rCZd/btrvu2OMBxD/2gYeKMuvyPZxhOwGd6dbA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1rCZd%2Fbtrvu2OMBxD%2F2gYeKMuvyPZxhOwGd6dbA1%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;394&quot; height=&quot;729&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;1678&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;위에 헤더 부분 편집 라운드 효과 및 정보 펼치기 버튼 추가 ( 현재는 console 에 글씨만 출력 되게 입력)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1646895244147&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: &amp;lt;Widget&amp;gt;[
            UserAccountsDrawerHeader(
              currentAccountPicture: CircleAvatar(
                backgroundImage: AssetImage('assets/3.jpg'),
                // backgroundColor: Colors.white, // png 파일일 경우 백그라운드 컬러를 설정 가능
              ),
              accountName: Text('BYUBE'),
              accountEmail: Text('kangjunne@naver.com'),
              onDetailsPressed: (){
                print('아래로 펼쳐라');
              }, //클리후 아래로 펼쳐지기
              decoration: BoxDecoration(
                color: Colors.purple[200],
                borderRadius: BorderRadius.only(
                  bottomLeft: Radius.circular(40.0),
                  bottomRight: Radius.circular(40.0)
                )
              ),
            )
          ],
        ),
      ),&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1689&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSEBA7/btrvFBIypkP/CkwO9KKLWE1voy9pUQJt80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSEBA7/btrvFBIypkP/CkwO9KKLWE1voy9pUQJt80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSEBA7/btrvFBIypkP/CkwO9KKLWE1voy9pUQJt80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSEBA7%2FbtrvFBIypkP%2FCkwO9KKLWE1voy9pUQJt80%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;416&quot; height=&quot;748&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1689&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;ListTile&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1646896346170&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    drawer: Drawer(
        child: ListView(
          padding: EdgeInsets.zero,
          children: &amp;lt;Widget&amp;gt;[
            UserAccountsDrawerHeader(
              currentAccountPicture: CircleAvatar(
                backgroundImage: AssetImage('assets/3.jpg'),
                // backgroundColor: Colors.white, // png 파일일 경우 백그라운드 컬러를 설정 가능
              ),
              otherAccountsPictures: [
                CircleAvatar(
                  backgroundImage: AssetImage('assets/1.jpg'),
                ),
              ],
              accountName: Text('BYUBE'),
              accountEmail: Text('kangjunne@naver.com'),
              onDetailsPressed: () {
                print('아래로 펼쳐라');
              }, //클리후 아래로 펼쳐지기
              decoration: BoxDecoration(
                  color: Colors.purple[200],
                  borderRadius: BorderRadius.only(
                      bottomLeft: Radius.circular(40.0),
                      bottomRight: Radius.circular(40.0))),
            ),
            ListTile(
              leading: Icon(
                Icons.home,
                color: Colors.grey[850],
              ),
              title: Text('Home'),
              onTap: (){ //tap 했을때 기능
                print('Home is clicked');
              },
              trailing: Icon(Icons.add), // + 아이콘 추가
            ),
            ListTile(
              leading: Icon(
                Icons.settings,
                color: Colors.grey[850],
              ),
              title: Text('Setting'),
              onTap: (){ //tap 했을때 기능
                print('Setting is clicked');
              },
              trailing: Icon(Icons.add), // + 아이콘 추가
            ),
            ListTile(
              leading: Icon(
                Icons.question_answer,
                color: Colors.grey[850],
              ),
              title: Text('Q&amp;amp;A'),
              onTap: (){ //tap 했을때 기능
                print('Q&amp;amp;A is clicked');
              },
              trailing: Icon(Icons.add), // + 아이콘 추가
            ),
          ],
        ),
      ),&lt;/code&gt;&lt;/pre&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;1690&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUMp2n/btrvCmlAy5b/Y7wBgyp4hsAR9tRCRID2D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUMp2n/btrvCmlAy5b/Y7wBgyp4hsAR9tRCRID2D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUMp2n/btrvCmlAy5b/Y7wBgyp4hsAR9tRCRID2D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUMp2n%2FbtrvCmlAy5b%2FY7wBgyp4hsAR9tRCRID2D1%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;416&quot; height=&quot;765&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;1690&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>앱개발/flutter</category>
      <category>DART</category>
      <category>drawer 설정</category>
      <category>Flutter</category>
      <category>flutter drawer</category>
      <category>플루터</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/13</guid>
      <comments>https://changeminor.tistory.com/13#entry13comment</comments>
      <pubDate>Thu, 10 Mar 2022 15:55:59 +0900</pubDate>
    </item>
    <item>
      <title>App bar Icon Button</title>
      <link>https://changeminor.tistory.com/12</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;leading: 아이콘 버튼이나 간단한 위젯을 왼쪽에 배치할 때&lt;/li&gt;
&lt;li&gt;actions: 복수의 아이콘 버튼 등을 오른쪽에 배치할 때&lt;/li&gt;
&lt;li&gt;onPressed: 함수의 형태로 일반 버튼이나 아이콘 버튼을 터치했을 때 일어나는 이벤트를 정의&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1646893773184&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    appBar: AppBar(
        title: Text('Appbar icon menu'),
        centerTitle: true,
        elevation: 0.0,
        leading: IconButton(
          icon: Icon(Icons.menu),
          onPressed: () {
            print('menu button is clicked');
          },
        ),
        actions: &amp;lt;Widget&amp;gt;[
          IconButton(
            icon: Icon(Icons.shopping_cart),
            onPressed: () {
              print('shopping_cart button is clicked');
            },
          ),
          IconButton(
            icon: Icon(Icons.search),
            onPressed: () {
              print('search button is clicked');
            },
          ),
        ],
      )&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;1724&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ONQbr/btrvClUqmLi/EHF9NEk5T4yK0kr50tWM6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ONQbr/btrvClUqmLi/EHF9NEk5T4yK0kr50tWM6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ONQbr/btrvClUqmLi/EHF9NEk5T4yK0kr50tWM6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FONQbr%2FbtrvClUqmLi%2FEHF9NEk5T4yK0kr50tWM6K%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;477&quot; height=&quot;881&quot; data-origin-width=&quot;934&quot; data-origin-height=&quot;1724&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>앱개발/flutter</category>
      <category>AppBar</category>
      <category>DART</category>
      <category>Flutter</category>
      <category>icon</category>
      <category>플루터</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/12</guid>
      <comments>https://changeminor.tistory.com/12#entry12comment</comments>
      <pubDate>Thu, 10 Mar 2022 15:31:09 +0900</pubDate>
    </item>
    <item>
      <title>1. Jenkins_Centos 7 설치</title>
      <link>https://changeminor.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;두서 없이 또 시작 해볼게요&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요즘 핫한 jenkins 설치 시작 하겠습니다.&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;그냥 핫한데는 이유가 있고 공부 하세요&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 centos 7 에 jdk 설치 되어 있다는 가정하에 시작 하겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1634827312171&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ sudo yum install wget  //wget  있으면 굳이 설치 안해도 
$ sudo yum upgrade       //upgrade 안해서 설치 안되는 경우를 많이 보았음
$ sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
$ sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
$ sudo yum install epel-release # repository that provides 'daemonize'
$ sudo yum install jenkins&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;pre id=&quot;code_1634858737693&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//젠킨스 설치 되었는지 확인
# rpm -qa | grep jenkins
jenkins-2.303.2-1.1.noarch

//젠킨스 실행(전 오류 발생)
# systemctl start jenkins
Job for jenkins.service failed because the control process exited with error code. See &quot;systemctl status jenkins.service&quot; and &quot;journalctl -xe&quot; for details.

//젠킨스 실행 오류 확인
# systemctl status jenkins.service
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: failed (Result: exit-code) since 금 2021-10-22 08:24:00 KST; 22s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 21164 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)

10월 22 08:24:00 localhost.localdomain systemd[1]: Starting LSB: Jenkins Automation Server...
10월 22 08:24:00 localhost.localdomain jenkins[21164]: Starting Jenkins File &quot;/usr/bin/java&quot; is not executable. // 자바를 못찾네
10월 22 08:24:00 localhost.localdomain jenkins[21164]: [실패]
10월 22 08:24:00 localhost.localdomain systemd[1]: jenkins.service: control process exited, code=exited status=1
10월 22 08:24:00 localhost.localdomain systemd[1]: Failed to start LSB: Jenkins Automation Server.
10월 22 08:24:00 localhost.localdomain systemd[1]: Unit jenkins.service entered failed state.
10월 22 08:24:00 localhost.localdomain systemd[1]: jenkins.service failed.&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;pre id=&quot;code_1634859313689&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# which java
/usr/local/lib/jdk1.8.0_301/bin/java

자바를 찾고 경로 복사

# vi /etc/init.d/jenkins
// 아래 부분 찾아서 맨아래에 
// 복사한 자바 경로 붙여넣기
candidates=&quot;
/etc/alternatives/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/lib/jvm/java-11.0/bin/java
/usr/lib/jvm/jre-11.0/bin/java
/usr/lib/jvm/java-11-openjdk-amd64
/usr/bin/java
/usr/local/lib/jdk1.8.0_301/bin/java
&quot;
:wq 저장하고

// 다시 실행
# systemctl start jenkins
Warning: jenkins.service changed on disk. Run 'systemctl daemon-reload' to reload units.
# systemctl daemon-reload
# systemctl status jenkins.service
● jenkins.service - LSB: Jenkins Automation Server
   Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
   Active: active (running) since 금 2021-10-22 08:29:52 KST; 36s ago
     Docs: man:systemd-sysv-generator(8)
   CGroup: /system.slice/jenkins.service
           └─21228 /usr/local/lib/jdk1.8.0_301/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/c...

10월 22 08:29:52 localhost.localdomain systemd[1]: Starting LSB: Jenkins Automation Server...
10월 22 08:29:52 localhost.localdomain jenkins[21224]: Starting Jenkins [  OK  ]
10월 22 08:29:52 localhost.localdomain systemd[1]: Started LSB: Jenkins Automation Server.&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;어제 기본 설치 글 올리고 뭔가 아쉬워서&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;&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;요번장은 가볍게 설치 부분 정리 하였고 다음장은 설치후 접속해서 초기 설정&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;끄적여 보겠습니다.&lt;/p&gt;</description>
      <category>서버/jenkins</category>
      <category>jenkins</category>
      <category>jenkins설치</category>
      <category>젠킨스</category>
      <category>젠킨스설치</category>
      <category>젠킨스초기설정</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/11</guid>
      <comments>https://changeminor.tistory.com/11#entry11comment</comments>
      <pubDate>Thu, 21 Oct 2021 23:46:46 +0900</pubDate>
    </item>
    <item>
      <title>Google-OAth2 - refreshToken 값 받기 2</title>
      <link>https://changeminor.tistory.com/10</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://changeminor.tistory.com/9&quot;&gt;https://changeminor.tistory.com/9&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603414685815&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Google-OAth2 - refreshToken 값 받기 1&quot; data-og-description=&quot;Google API를 사용함에 있어서는 OAth2 를 모르고 refreshToken 값을 받을 줄 모른다면 그냥 googleapi를 사용 할 수 없다고 생각하는게 맞다! 그래서 이 글을 포스팅한다 물론 고수님들은 너무 쉽게 연동하&quot; data-og-host=&quot;changeminor.tistory.com&quot; data-og-source-url=&quot;https://changeminor.tistory.com/9&quot; data-og-url=&quot;https://changeminor.tistory.com/9&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IAGi2/hyHYjBIk4a/8wo2TddLceVJ5jUYipgfB1/img.png?width=800&amp;amp;height=859&amp;amp;face=0_0_800_859,https://scrap.kakaocdn.net/dn/c1znDo/hyHYo35yRj/4ndQkRmWe20FiFBzzdOcO1/img.png?width=800&amp;amp;height=859&amp;amp;face=0_0_800_859,https://scrap.kakaocdn.net/dn/dBSarP/hyHYuDfbTT/YXj9wI8RZAj3t1LoBfnU2K/img.png?width=829&amp;amp;height=891&amp;amp;face=0_0_829_891&quot;&gt;&lt;a href=&quot;https://changeminor.tistory.com/9&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://changeminor.tistory.com/9&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IAGi2/hyHYjBIk4a/8wo2TddLceVJ5jUYipgfB1/img.png?width=800&amp;amp;height=859&amp;amp;face=0_0_800_859,https://scrap.kakaocdn.net/dn/c1znDo/hyHYo35yRj/4ndQkRmWe20FiFBzzdOcO1/img.png?width=800&amp;amp;height=859&amp;amp;face=0_0_800_859,https://scrap.kakaocdn.net/dn/dBSarP/hyHYuDfbTT/YXj9wI8RZAj3t1LoBfnU2K/img.png?width=829&amp;amp;height=891&amp;amp;face=0_0_829_891');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Google-OAth2 - refreshToken 값 받기 1&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Google API를 사용함에 있어서는 OAth2 를 모르고 refreshToken 값을 받을 줄 모른다면 그냥 googleapi를 사용 할 수 없다고 생각하는게 맞다! 그래서 이 글을 포스팅한다 물론 고수님들은 너무 쉽게 연동하&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;changeminor.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;1부분 완성 했다면 이제 2부분으로 가야겠지?&lt;/p&gt;
&lt;p&gt;시작 해보자!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HQ7ir/btqLAyjEazt/mjwb2h9o0BosJKQkdWXFjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HQ7ir/btqLAyjEazt/mjwb2h9o0BosJKQkdWXFjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HQ7ir/btqLAyjEazt/mjwb2h9o0BosJKQkdWXFjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHQ7ir%2FbtqLAyjEazt%2Fmjwb2h9o0BosJKQkdWXFjK%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;API 사용해보기 클릭 해주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;698&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLtSSM/btqLBM2OAFu/PMw1zGbDBpyE9vpgAFZhtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLtSSM/btqLBM2OAFu/PMw1zGbDBpyE9vpgAFZhtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLtSSM/btqLBM2OAFu/PMw1zGbDBpyE9vpgAFZhtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLtSSM%2FbtqLBM2OAFu%2FPMw1zGbDBpyE9vpgAFZhtK%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;882&quot; data-origin-height=&quot;698&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Guides 클릭하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;738&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vL3vt/btqLAzJH7mb/iyLGq8eiRMSK8ytADBx28k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vL3vt/btqLAzJH7mb/iyLGq8eiRMSK8ytADBx28k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vL3vt/btqLAzJH7mb/iyLGq8eiRMSK8ytADBx28k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvL3vt%2FbtqLAzJH7mb%2FiyLGq8eiRMSK8ytADBx28k%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;749&quot; data-origin-height=&quot;738&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Authorize Requests 클릭&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DZjPV/btqLC1yKA4w/9wpaVtckKYpUZ3ITiGvMHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DZjPV/btqLC1yKA4w/9wpaVtckKYpUZ3ITiGvMHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DZjPV/btqLC1yKA4w/9wpaVtckKYpUZ3ITiGvMHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDZjPV%2FbtqLC1yKA4w%2F9wpaVtckKYpUZ3ITiGvMHK%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;454&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Scope에 URL 하나 복사 해서 메모에 저장 (조금 이따가 사용할예정)&lt;/p&gt;
&lt;p&gt;그리고 OAuth 2.0 documentation 클릭&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6-1.png&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;518&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1OFlK/btqLyMbVHAQ/2eebvmspVLa2hVjyo0pPc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1OFlK/btqLyMbVHAQ/2eebvmspVLa2hVjyo0pPc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1OFlK/btqLyMbVHAQ/2eebvmspVLa2hVjyo0pPc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1OFlK%2FbtqLyMbVHAQ%2F2eebvmspVLa2hVjyo0pPc0%2Fimg.png&quot; data-filename=&quot;6-1.png&quot; data-origin-width=&quot;568&quot; data-origin-height=&quot;518&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;OAuth 2.0 Scopes 클릭 해주고&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;728&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1peYl/btqLA3DMBDb/Ik2IdP8OW6mHilqq06izak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1peYl/btqLA3DMBDb/Ik2IdP8OW6mHilqq06izak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1peYl/btqLA3DMBDb/Ik2IdP8OW6mHilqq06izak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1peYl%2FbtqLA3DMBDb%2FIk2IdP8OW6mHilqq06izak%2Fimg.png&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;728&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;서버측 웹 앱용 OAuth 2.0 클릭 하고 드래그 해서 위 사진 처럼 &lt;span style=&quot;color: #333333;&quot;&gt;Authorize Code http로 받는 가이드 까지 내려와 주면됨&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그냥 사진 과 똑같이 생긴거 나올때까지 드래그 해!&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;GET 뒤에 https부터 true까지 복사! (그리고 더 드래그 하면 아래에서 사용할 부분이 나옴 !!!! 아래에서는 그냥 위에서 언급한 드래그 드래그 하면 드래그 해서 나오면 드래그 하게되면 나온다 뭐 이정도로 언급 하겠음 우하하하하하하하 글을 꼼꼼히 봐야 한다는거 다시 한번 강조 합니다)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;147&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eJG0gX/btqLA3X3Fy1/z0JCsuUVT0fNyHtMG5ZmtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eJG0gX/btqLA3X3Fy1/z0JCsuUVT0fNyHtMG5ZmtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eJG0gX/btqLA3X3Fy1/z0JCsuUVT0fNyHtMG5ZmtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeJG0gX%2FbtqLA3X3Fy1%2Fz0JCsuUVT0fNyHtMG5ZmtK%2Fimg.png&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;147&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;Spring Boot 프로젝트로 돌아와서 jsp 파일 열어주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;a&amp;gt; 태그 href 에 복사해서 붙여 넣기&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;142&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ojqGn/btqLA4CEPFR/gDKUikJ9dRTf2o2rKLPUv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ojqGn/btqLA4CEPFR/gDKUikJ9dRTf2o2rKLPUv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ojqGn/btqLA4CEPFR/gDKUikJ9dRTf2o2rKLPUv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FojqGn%2FbtqLA4CEPFR%2FgDKUikJ9dRTf2o2rKLPUv0%2Fimg.png&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;500&quot; data-origin-height=&quot;142&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;scope= 사이 &amp;amp; 여기 사이 값 지워 버리고 redirect_uri 도 똑같이 지워버리고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;461&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cD6GVw/btqLwfePorQ/omnpdvPt1J3U1eePRqcjrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cD6GVw/btqLwfePorQ/omnpdvPt1J3U1eePRqcjrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cD6GVw/btqLwfePorQ/omnpdvPt1J3U1eePRqcjrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcD6GVw%2FbtqLwfePorQ%2FomnpdvPt1J3U1eePRqcjrK%2Fimg.png&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;461&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;google에 online url encoding 검색하서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;url encoding 해주는 사이트 아무곳이든 상관없으니 들어가서&lt;/p&gt;
&lt;p&gt;아까 메모에 적어놓은 값(기억나죠? 막 드래그해서 블로그 보는거 아니죠? 정말 꼼꼼하게 처음 하는 사람이 보아도 알수 있게 적고 있는데 긴 시간을 투자 해서 성의를 봐서라고 기억 해야 되요!!!)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;411&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MOYJE/btqLzFDDQn0/Rulde3g1iEuLYarlxYiHI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MOYJE/btqLzFDDQn0/Rulde3g1iEuLYarlxYiHI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MOYJE/btqLzFDDQn0/Rulde3g1iEuLYarlxYiHI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMOYJE%2FbtqLzFDDQn0%2FRulde3g1iEuLYarlxYiHI1%2Fimg.png&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;818&quot; data-origin-height=&quot;411&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;값 넣고 Encode 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brPELY/btqLBNAFrG3/NjOTVdXOsKWR1046NuMMyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brPELY/btqLBNAFrG3/NjOTVdXOsKWR1046NuMMyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brPELY/btqLBNAFrG3/NjOTVdXOsKWR1046NuMMyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrPELY%2FbtqLBNAFrG3%2FNjOTVdXOsKWR1046NuMMyK%2Fimg.png&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;795&quot; data-origin-height=&quot;441&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 위와 같이 아름답게 Encoding이 될꺼야!&lt;/p&gt;
&lt;p&gt;다시 복사해서&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;141&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eH2VtB/btqLyKSHiDv/HgVdJHK84ZCgtlOE0KqB00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eH2VtB/btqLyKSHiDv/HgVdJHK84ZCgtlOE0KqB00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eH2VtB/btqLyKSHiDv/HgVdJHK84ZCgtlOE0KqB00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeH2VtB%2FbtqLyKSHiDv%2FHgVdJHK84ZCgtlOE0KqB00%2Fimg.png&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;499&quot; data-origin-height=&quot;141&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;scope값에 넣어 주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;758&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MYTr9/btqLC1eogwh/88xU2hcqN7oyl3XtsCJnLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MYTr9/btqLC1eogwh/88xU2hcqN7oyl3XtsCJnLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MYTr9/btqLC1eogwh/88xU2hcqN7oyl3XtsCJnLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMYTr9%2FbtqLC1eogwh%2F88xU2hcqN7oyl3XtsCJnLK%2Fimg.png&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;889&quot; data-origin-height=&quot;758&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이부분은 처음 클라이언트 ID 만들때 부분인데 (잘 기억 나지 않으면 1보고 오세요 링크 맨위에)&lt;/p&gt;
&lt;p&gt;url 주소 복사해서 똑같이 Encoding 해주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;139&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bv1TO/btqLxuCEAHM/G6VlSpkjogYqVZzDmHgUFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bv1TO/btqLxuCEAHM/G6VlSpkjogYqVZzDmHgUFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bv1TO/btqLxuCEAHM/G6VlSpkjogYqVZzDmHgUFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBv1TO%2FbtqLxuCEAHM%2FG6VlSpkjogYqVZzDmHgUFK%2Fimg.png&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;139&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;redirect_uri 값에 붙여넣으면 끝&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인줄 알았으나 아니죠 ㅋㅋ&amp;nbsp;&lt;/p&gt;
&lt;p&gt;client_id값도 복사해서 넣어 줘야 진짜 끝!! 인거 같으면서 아니라는거&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603420910755&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&amp;amp;access_type=offline&amp;amp;include_granted_scopes=true&amp;amp;response_type=code&amp;amp;state=state_parameter_passthrough_value&amp;amp;redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Freturngood&amp;amp;client_id=296274828209-jgo80b1mb6aeltl05j9sc7dkvfl920pd.apps.googleusercontent.com&quot;&amp;gt;구글 API 사용 인증&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;a태그에서 href 줄바꿈 지원하지 않기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와같이 한줄로 정리를 해주어야 진짜 끝&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 cotroller에서 /login url 받아서 해당 jsp로 갈수 있게 해주고&lt;/p&gt;
&lt;p&gt;/returngood 도 설정해주고 reciveCode.jsp 파일 더 만들어주고 해당 jsp로 가게끔 설정 해주면 끝&lt;/p&gt;
&lt;p&gt;1에서도 언급은 했지만 바로 이부분 구글에서 &lt;span style=&quot;color: #333333;&quot;&gt;Authorize 값을 받기 위한 url 임으로&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;/원하는 url 만들어서 원하는 jsp파일에서 받으면 됨(spring-boot) 타 프로젝트는 바로 해당 html 파일 또는 php 파일 주소를 넣어 줘도 상관없다는거 해당 값을 clientid 만들때 리디렉션 url에 넣어 주고 해야 함&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;(이부분 잘 모르면 아래링크통해서 공부 하고 오세요! git에 소스 공유 해놀게요 )&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeminor.tistory.com/2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/09/04 - [Spring-Boot] - [Spring-Boot]네이버 REST API 사용법 - 1(파파고번역)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;150&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pzqR7/btqLBM2OAIz/LU5dlfa1BJACtQmerUqvBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pzqR7/btqLBM2OAIz/LU5dlfa1BJACtQmerUqvBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pzqR7/btqLBM2OAIz/LU5dlfa1BJACtQmerUqvBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpzqR7%2FbtqLBM2OAIz%2FLU5dlfa1BJACtQmerUqvBk%2Fimg.png&quot; data-filename=&quot;15.png&quot; data-origin-width=&quot;439&quot; data-origin-height=&quot;150&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;자 이제 클릭을 신나게 해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;16.png&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;692&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KGj2a/btqLxvhaCr6/dzEKCP0aXOveO4PiElHL9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KGj2a/btqLxvhaCr6/dzEKCP0aXOveO4PiElHL9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KGj2a/btqLxvhaCr6/dzEKCP0aXOveO4PiElHL9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKGj2a%2FbtqLxvhaCr6%2FdzEKCP0aXOveO4PiElHL9k%2Fimg.png&quot; data-filename=&quot;16.png&quot; data-origin-width=&quot;811&quot; data-origin-height=&quot;692&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;482&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5O2TA/btqLzGbqVSa/KIyvE3jXCE9AHT7GpNpCY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5O2TA/btqLzGbqVSa/KIyvE3jXCE9AHT7GpNpCY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5O2TA/btqLzGbqVSa/KIyvE3jXCE9AHT7GpNpCY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5O2TA%2FbtqLzGbqVSa%2FKIyvE3jXCE9AHT7GpNpCY0%2Fimg.png&quot; data-filename=&quot;17.png&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;482&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;18.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;524&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dlxQ0v/btqLA3DMBJf/UT1VNa5y6kVDtx6enSy6W1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dlxQ0v/btqLA3DMBJf/UT1VNa5y6kVDtx6enSy6W1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dlxQ0v/btqLA3DMBJf/UT1VNa5y6kVDtx6enSy6W1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdlxQ0v%2FbtqLA3DMBJf%2FUT1VNa5y6kVDtx6enSy6W1%2Fimg.png&quot; data-filename=&quot;18.png&quot; data-origin-width=&quot;764&quot; data-origin-height=&quot;524&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;19.png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;638&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgmSxF/btqLAyKPerF/sYXUKRZrjsVPgh0DfhLBB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgmSxF/btqLAyKPerF/sYXUKRZrjsVPgh0DfhLBB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgmSxF/btqLAyKPerF/sYXUKRZrjsVPgh0DfhLBB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgmSxF%2FbtqLAyKPerF%2FsYXUKRZrjsVPgh0DfhLBB1%2Fimg.png&quot; data-filename=&quot;19.png&quot; data-origin-width=&quot;717&quot; data-origin-height=&quot;638&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;20.png&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;696&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MNw3r/btqLwKMwUqF/G1PVHxmNKVldgIql6AI9OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MNw3r/btqLwKMwUqF/G1PVHxmNKVldgIql6AI9OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MNw3r/btqLwKMwUqF/G1PVHxmNKVldgIql6AI9OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMNw3r%2FbtqLwKMwUqF%2FG1PVHxmNKVldgIql6AI9OK%2Fimg.png&quot; data-filename=&quot;20.png&quot; data-origin-width=&quot;627&quot; data-origin-height=&quot;696&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;21.png&quot; data-origin-width=&quot;1701&quot; data-origin-height=&quot;73&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oSlDM/btqLwKTdN5s/xBSGcbIdyVJmBa2IcKjJFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oSlDM/btqLwKTdN5s/xBSGcbIdyVJmBa2IcKjJFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oSlDM/btqLwKTdN5s/xBSGcbIdyVJmBa2IcKjJFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoSlDM%2FbtqLwKTdN5s%2FxBSGcbIdyVJmBa2IcKjJFk%2Fimg.png&quot; data-filename=&quot;21.png&quot; data-origin-width=&quot;1701&quot; data-origin-height=&quot;73&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위사진 순서대로 쭈~욱~ 클릭 하다보면 마지막 여기까지 오게 될꺼야&lt;/p&gt;
&lt;p&gt;url 보면 뭐가 막 값이 적혀서 오는데 위에서 설정한 reciveCode.jsp로 돌아 오게 되지요 저기서 중요한 부분은 바로 code=값 바로 이 값이며 해당 값은 1회용으로 한번생성되고 url 벗어나거나 브라우저 끄고 다시 켜서 재사용 불가 다시 받아서 사용해야 하니 메모 하거나 하지 말고 잘 되는지 code값이 받아 져 왔는지 확인 만 하면 끝!&lt;/p&gt;
&lt;p&gt;잘되면 아래 부분 진행 안되면 다시 위로 올라가서 확인 하고 오시길&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;22.png&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;643&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ojih9/btqLBMIylOJ/keKZJtUmhLio4izko4wH60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ojih9/btqLBMIylOJ/keKZJtUmhLio4izko4wH60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ojih9/btqLBMIylOJ/keKZJtUmhLio4izko4wH60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fojih9%2FbtqLBMIylOJ%2FkeKZJtUmhLio4izko4wH60%2Fimg.png&quot; data-filename=&quot;22.png&quot; data-origin-width=&quot;941&quot; data-origin-height=&quot;643&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 위에서 언급한 드래그 드래그 기억나면 바로 드래그 해서 위사진 찾아!&lt;/p&gt;
&lt;p&gt;내용 복사해서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;23.png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;432&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRvq9d/btqLA25W6XZ/KbVzcjZ7uwWmjHhfD3N6d0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRvq9d/btqLA25W6XZ/KbVzcjZ7uwWmjHhfD3N6d0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRvq9d/btqLA25W6XZ/KbVzcjZ7uwWmjHhfD3N6d0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRvq9d%2FbtqLA25W6XZ%2FKbVzcjZ7uwWmjHhfD3N6d0%2Fimg.png&quot; data-filename=&quot;23.png&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;432&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;바로 여기 reciveCode.jsp로 고고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;a태그는 로그인하러 가기 위함 (우린 개발자니 편하게 일을 해야져~)&lt;/p&gt;
&lt;p&gt;form 태그 만들고 위에서 처럼 주저리 주저리 적어주고 드래그 한 내용 참조해서 작성한거니&amp;nbsp;&lt;/p&gt;
&lt;p&gt;붙여넣고 잘 만들어&amp;nbsp;&lt;/p&gt;
&lt;p&gt;redirect_uri post로 form태그 전송할때는 자동 encoding 되니 굳이 안하셔도 됨 하면 에러!!!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;24.png&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;111&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbmlc3/btqLAx59ZMd/9VKMnWkRKTd2FRq2AVdXWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbmlc3/btqLAx59ZMd/9VKMnWkRKTd2FRq2AVdXWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbmlc3/btqLAx59ZMd/9VKMnWkRKTd2FRq2AVdXWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbmlc3%2FbtqLAx59ZMd%2F9VKMnWkRKTd2FRq2AVdXWK%2Fimg.png&quot; data-filename=&quot;24.png&quot; data-origin-width=&quot;393&quot; data-origin-height=&quot;111&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그래도 친절하게 /returngood url 관련 적어본다 이렇게 Cotroller에 적으라는 뜻&lt;/p&gt;
&lt;p&gt;properties파일(yml파일) 에 값을 입력을 .... 그냥 지난글 naver api를 보고 오길....&lt;/p&gt;
&lt;p&gt;그정도 정성도 없으면 개발을 하지 않는게 좋을것 같다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 다시 http://localhost:8080/login 부터 쭈욱 내려오다 보면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;28.png&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/djGjCv/btqLzXjYhuP/u6yhjH2CkpDbfI3XMy9s51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/djGjCv/btqLzXjYhuP/u6yhjH2CkpDbfI3XMy9s51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/djGjCv/btqLzXjYhuP/u6yhjH2CkpDbfI3XMy9s51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdjGjCv%2FbtqLzXjYhuP%2Fu6yhjH2CkpDbfI3XMy9s51%2Fimg.png&quot; data-filename=&quot;28.png&quot; data-origin-width=&quot;1025&quot; data-origin-height=&quot;406&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위사진 처럼 code에 값을 자동으로 받을 것이고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제출 버튼 누르기 전에 마지막으로 client_id, client_secret 값을 입력하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;제출 버튼 클릭하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;25.png&quot; data-origin-width=&quot;1405&quot; data-origin-height=&quot;147&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tQ8Ij/btqLzGCxThx/NAkQhRqma6kbwwg3PiCjkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tQ8Ij/btqLzGCxThx/NAkQhRqma6kbwwg3PiCjkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tQ8Ij/btqLzGCxThx/NAkQhRqma6kbwwg3PiCjkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtQ8Ij%2FbtqLzGCxThx%2FNAkQhRqma6kbwwg3PiCjkK%2Fimg.png&quot; data-filename=&quot;25.png&quot; data-origin-width=&quot;1405&quot; data-origin-height=&quot;147&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 refresh_token 값을 받아 오게 될것이다.&lt;/p&gt;
&lt;p&gt;축하한다 드디어 구글의 Calendar api를 사용할수 있는 token 값을 받았다&lt;/p&gt;
&lt;p&gt;refreshtoken값은 딱 한번 발급되고 위 과정을 다시 실행하면 access_token 값은 항시 바뀌는데 더이상 refresh_token값은 나타 나지 않으므로 메모에 잘 적어두길&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다시 발급 받을려면 아래에 있는 내용따라 권한 삭제 하고 다시 발급 받으면 된다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://myaccount.google.com/permissions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;myaccount.google.com/permissions&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603426920598&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;로그인 - Google 계정&quot; data-og-description=&quot;하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인&quot; data-og-host=&quot;accounts.google.com&quot; data-og-source-url=&quot;https://myaccount.google.com/permissions&quot; data-og-url=&quot;https://accounts.google.com/ServiceLogin?service=accountsettings&amp;amp;passive=1209600&amp;amp;osid=1&amp;amp;continue=https://myaccount.google.com/permissions&amp;amp;followup=https://myaccount.google.com/permissions&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://myaccount.google.com/permissions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://myaccount.google.com/permissions&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;&gt;로그인 - Google 계정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;하나의 계정으로 모든 Google 서비스를 Google 계정으로 로그인&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;accounts.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;링크도 친절하게 적어두고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;26.png&quot; data-origin-width=&quot;1477&quot; data-origin-height=&quot;900&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qn1Hl/btqLBNOf4Qo/mcWtJwC7pxQpkTZ0VqSdNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qn1Hl/btqLBNOf4Qo/mcWtJwC7pxQpkTZ0VqSdNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qn1Hl/btqLBNOf4Qo/mcWtJwC7pxQpkTZ0VqSdNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqn1Hl%2FbtqLBNOf4Qo%2FmcWtJwC7pxQpkTZ0VqSdNk%2Fimg.png&quot; data-filename=&quot;26.png&quot; data-origin-width=&quot;1477&quot; data-origin-height=&quot;900&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;27.png&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zQUEP/btqLyMCXbT9/1xfQGyMnaM3CE1rQB5ULgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zQUEP/btqLyMCXbT9/1xfQGyMnaM3CE1rQB5ULgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zQUEP/btqLyMCXbT9/1xfQGyMnaM3CE1rQB5ULgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzQUEP%2FbtqLyMCXbT9%2F1xfQGyMnaM3CE1rQB5ULgk%2Fimg.png&quot; data-filename=&quot;27.png&quot; data-origin-width=&quot;775&quot; data-origin-height=&quot;438&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;과정설명도 이정도면 뭐 ... ㅋㅋ&amp;nbsp;&lt;/p&gt;
&lt;p&gt;역시 난 친절해&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음에는 google의 라이브러리에 대해 또 설명을 해보겠다.&lt;/p&gt;
&lt;p&gt;아마 광고업체나 키워드광고 대행업체에서 제일 궁금해 하는 부분일텐데 ㅋㅋ&lt;/p&gt;
&lt;p&gt;오케이 그냥 포스팅 해주지 !!&lt;/p&gt;
&lt;p&gt;어차피 나도 공부가 되고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;java 버전의 구글의 예제를 실제로 사용하는 방법&amp;nbsp;&lt;/p&gt;
&lt;p&gt;키워드 가져와서 지우고 소재생성&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ads.properties 에 client id, client secret 등을 DB에 저장해놓고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;접속하는 업체별로 자동 DB에서 가져와서 접속하는 방법등을 업로드 하겠다.&lt;/p&gt;
&lt;p&gt;코드도 길고 내용도 많아서 정리 하는데 시간이 좀... 그래도 복습이라고 생각하고 올려야지&lt;/p&gt;
&lt;p&gt;나도 사람이니 메모는 습관처럼 !! 그럼 이번 포스팅은 여기서 마무으리! &amp;lt;- 너무 옛날사람? ㅋㅋㅋ&amp;nbsp;&lt;/p&gt;</description>
      <category>백엔드/GoogleOAth2</category>
      <category>googleoath2연결</category>
      <category>googleoath2인증</category>
      <category>googlerefreshtoken</category>
      <category>oath2</category>
      <category>refreshtoken값</category>
      <category>refreshtoken값받기</category>
      <category>restfullapi</category>
      <category>springboot</category>
      <category>springbootapi</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/10</guid>
      <comments>https://changeminor.tistory.com/10#entry10comment</comments>
      <pubDate>Fri, 23 Oct 2020 13:26:52 +0900</pubDate>
    </item>
    <item>
      <title>Google-OAth2 - refreshToken 값 받기 1</title>
      <link>https://changeminor.tistory.com/9</link>
      <description>&lt;p&gt;Google API를 사용함에 있어서는 OAth2 를 모르고 refreshToken 값을 받을 줄 모른다면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그냥 googleapi를 사용 할 수 없다고 생각하는게 맞다!&lt;/p&gt;
&lt;p&gt;그래서 이 글을 포스팅한다&lt;/p&gt;
&lt;p&gt;물론 고수님들은 너무 쉽게 연동하여 잘 사용 할텐데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그렇지 않은 사람이 더 많기 때문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 그럼 시작!&lt;/p&gt;
&lt;p&gt;Google Cloud Platform에 가입상 상태로 진행 한다고 가정하고 시작(가입해서 프로젝트 생성 관련 잘 모르시면 댓글 남겨 주세요)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://console.cloud.google.com/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;console.cloud.google.com/home&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603329082494&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Google Cloud Platform&quot; data-og-description=&quot;하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.&quot; data-og-host=&quot;accounts.google.com&quot; data-og-source-url=&quot;https://console.cloud.google.com/home&quot; data-og-url=&quot;https://accounts.google.com/ServiceLogin?service=cloudconsole&amp;amp;passive=1209600&amp;amp;osid=1&amp;amp;continue=https://console.cloud.google.com/home&amp;amp;followup=https://console.cloud.google.com/home&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://console.cloud.google.com/home&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://console.cloud.google.com/home&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;&gt;Google Cloud Platform&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;accounts.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;891&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cVGmIe/btqLwKxrhPy/pYt9saQvKBJHZVizUaqCsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cVGmIe/btqLwKxrhPy/pYt9saQvKBJHZVizUaqCsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cVGmIe/btqLwKxrhPy/pYt9saQvKBJHZVizUaqCsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcVGmIe%2FbtqLwKxrhPy%2FpYt9saQvKBJHZVizUaqCsk%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;829&quot; data-origin-height=&quot;891&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;URL 타고 들어오면 위 사진 화면이 나온다 여기서 API 및 서비스 -&amp;gt; OAuth 동의 화면&amp;nbsp; 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;816&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAzBUs/btqLqmLPArc/NKM7yB49sB8pCxGB77v87k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAzBUs/btqLqmLPArc/NKM7yB49sB8pCxGB77v87k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAzBUs/btqLqmLPArc/NKM7yB49sB8pCxGB77v87k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAzBUs%2FbtqLqmLPArc%2FNKM7yB49sB8pCxGB77v87k%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;864&quot; data-origin-height=&quot;816&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;애플리케이션 이름 적어주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나무지 1도 안적어도 되니 그냥 저장&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;716&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Xh7lE/btqLuBaoHhS/FDFghGQ04gqKQqpkyLtitk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Xh7lE/btqLuBaoHhS/FDFghGQ04gqKQqpkyLtitk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Xh7lE/btqLuBaoHhS/FDFghGQ04gqKQqpkyLtitk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXh7lE%2FbtqLuBaoHhS%2FFDFghGQ04gqKQqpkyLtitk%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1016&quot; data-origin-height=&quot;716&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그러면 이렇게 OAuth동의 화면이 생성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1763&quot; data-origin-height=&quot;761&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPCeVP/btqLvgcNnz5/RAA3t9Mlve1aBHutFL9o21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPCeVP/btqLvgcNnz5/RAA3t9Mlve1aBHutFL9o21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPCeVP/btqLvgcNnz5/RAA3t9Mlve1aBHutFL9o21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPCeVP%2FbtqLvgcNnz5%2FRAA3t9Mlve1aBHutFL9o21%2Fimg.png&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1763&quot; data-origin-height=&quot;761&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이제 사용자인증정보를 만들어 보자&lt;/p&gt;
&lt;p&gt;위사진처럼 사용자인증정보 클릭 -&amp;gt; 사용자 인증 정보 만들기 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;346&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKvlUs/btqLvER3JOw/E7QkiCHDjfwIogBAppUUG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKvlUs/btqLvER3JOw/E7QkiCHDjfwIogBAppUUG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKvlUs/btqLvER3JOw/E7QkiCHDjfwIogBAppUUG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKvlUs%2FbtqLvER3JOw%2FE7QkiCHDjfwIogBAppUUG1%2Fimg.png&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;346&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;OAuth 클라이언트 ID 클릭&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;533&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V6nDQ/btqLxu8YZZE/syO9O61kbmu9MoIMPNfIOK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V6nDQ/btqLxu8YZZE/syO9O61kbmu9MoIMPNfIOK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V6nDQ/btqLxu8YZZE/syO9O61kbmu9MoIMPNfIOK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV6nDQ%2FbtqLxu8YZZE%2FsyO9O61kbmu9MoIMPNfIOK%2Fimg.png&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;746&quot; data-origin-height=&quot;533&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;웹 애플리케이션 클릭!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;834&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c8IGX4/btqLyMn0uml/zf4ued9Kaet3eJIWzB2i2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c8IGX4/btqLyMn0uml/zf4ued9Kaet3eJIWzB2i2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c8IGX4/btqLyMn0uml/zf4ued9Kaet3eJIWzB2i2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc8IGX4%2FbtqLyMn0uml%2Fzf4ued9Kaet3eJIWzB2i2K%2Fimg.png&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;657&quot; data-origin-height=&quot;834&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이름을 넣고 리디렉션 URL 넣고 만들기 클릭!&lt;/p&gt;
&lt;p&gt;여기서 승인된 리디렉션 URL은&amp;nbsp;&lt;/p&gt;
&lt;p&gt;google에 refreshToken 값 받기 위해 승인 요청을 해야 하는데 승인되고 돌아올 주소를 뜻한다&lt;/p&gt;
&lt;p&gt;위에 적은 url은 프로젝트 돌아가면 다시 언급 할텐데 미리 만들어 놓았으니 똑같이 하셔도 되고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;헷갈리면 그냥 아무값도 적지 말고 나중에 수정해도 무방하다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;단 http://127.0.0.1:8080/&amp;nbsp; &amp;lt;---- 이렇게 IP 주소는 입력이 불가 하다. localhost를 하던 아니면&lt;/p&gt;
&lt;p&gt;다른 데서 서버 연결하여 받고 싶다 싶으면 호스팅해서 .com 또는 .org 등 url 주소를 입력해야만 한다 이점 참고 바람&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;544&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6pSpt/btqLwe6Fo4j/ef2wkqqbdi1wGb8P8GQjkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6pSpt/btqLwe6Fo4j/ef2wkqqbdi1wGb8P8GQjkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6pSpt/btqLwe6Fo4j/ef2wkqqbdi1wGb8P8GQjkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6pSpt%2FbtqLwe6Fo4j%2Fef2wkqqbdi1wGb8P8GQjkK%2Fimg.png&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;655&quot; data-origin-height=&quot;544&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;드디어 OAuth 클라이언트 생성이 완료!&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 클라이언트 보안 비밀번호는 절대로 노출하면 안된다!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;645&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebWdRt/btqLsa5bhti/QNia30xJFIoCvoiV6dtipk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebWdRt/btqLsa5bhti/QNia30xJFIoCvoiV6dtipk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebWdRt/btqLsa5bhti/QNia30xJFIoCvoiV6dtipk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebWdRt%2FbtqLsa5bhti%2FQNia30xJFIoCvoiV6dtipk%2Fimg.png&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;778&quot; data-origin-height=&quot;645&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;라이브러리 클릭하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;359&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYSXOx/btqLsb35VYz/RVI63EfxcQ5JTVrpzjRm4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYSXOx/btqLsb35VYz/RVI63EfxcQ5JTVrpzjRm4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYSXOx/btqLsb35VYz/RVI63EfxcQ5JTVrpzjRm4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYSXOx%2FbtqLsb35VYz%2FRVI63EfxcQ5JTVrpzjRm4K%2Fimg.png&quot; data-filename=&quot;11.png&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;359&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사용할 API를 검색하고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;449&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd0Lmx/btqLvezkJk8/g2kDy6uZFL8RhkeEi0KKMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd0Lmx/btqLvezkJk8/g2kDy6uZFL8RhkeEi0KKMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd0Lmx/btqLvezkJk8/g2kDy6uZFL8RhkeEi0KKMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd0Lmx%2FbtqLvezkJk8%2Fg2kDy6uZFL8RhkeEi0KKMk%2Fimg.png&quot; data-filename=&quot;12.png&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;449&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;608&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgRE8T/btqLuDe0moR/ECQtOdQyCVPtYt4k7P8DP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgRE8T/btqLuDe0moR/ECQtOdQyCVPtYt4k7P8DP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgRE8T/btqLuDe0moR/ECQtOdQyCVPtYt4k7P8DP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgRE8T%2FbtqLuDe0moR%2FECQtOdQyCVPtYt4k7P8DP0%2Fimg.png&quot; data-filename=&quot;13.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;608&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;1653&quot; data-origin-height=&quot;660&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nJwOS/btqLwLXrl57/7q2LjmsqHjnAaHaK1jhbu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nJwOS/btqLwLXrl57/7q2LjmsqHjnAaHaK1jhbu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nJwOS/btqLwLXrl57/7q2LjmsqHjnAaHaK1jhbu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnJwOS%2FbtqLwLXrl57%2F7q2LjmsqHjnAaHaK1jhbu1%2Fimg.png&quot; data-filename=&quot;14.png&quot; data-origin-width=&quot;1653&quot; data-origin-height=&quot;660&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;테스트로 구글 Calendar api를 연결 해 보겠다&lt;/p&gt;
&lt;p&gt;위사진 순서대로 검색 클릭 클릭 하면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막 사진처럼 나오면 성공&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>백엔드/GoogleOAth2</category>
      <category>Google</category>
      <category>googleapi</category>
      <category>googleoath2</category>
      <category>googlerefreshtoken</category>
      <category>oath2</category>
      <category>refreshtoken</category>
      <category>refreshtoken값받기</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/9</guid>
      <comments>https://changeminor.tistory.com/9#entry9comment</comments>
      <pubDate>Thu, 22 Oct 2020 11:29:49 +0900</pubDate>
    </item>
    <item>
      <title>[Spring-Boot] js,css파일 jsp파일 외부로 빼기</title>
      <link>https://changeminor.tistory.com/8</link>
      <description>&lt;p&gt;개발을 하다 보면 jsp 파일에 &amp;lt;script&amp;gt; function(){&amp;nbsp; }&amp;lt;/script&amp;gt; 이렇게 막 코딩 할때가 있다.&lt;/p&gt;
&lt;p&gt;정말 지저분하고 코드가 보기도 불편하고 유지보수 하기도 힘들다&lt;/p&gt;
&lt;pre id=&quot;code_1603326287001&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
	pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script src=&quot;https://code.jquery.com/ui/1.12.1/jquery-ui.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
	$(function() {
		$(&quot;#chinese&quot;).click(function(){
			var ko = $(&quot;#korean&quot;).val();
			$.ajax({
				url:&quot;/chinese&quot;,
				type:&quot;GET&quot;,
				dataType:&quot;json&quot;,
				data:{korean:ko},
				success:function(v){
					console.log(v);
				},error:function(e){
					console.log(e);
				}
			});
		});
		$(&quot;#english&quot;).click(function(){
			var ko = $(&quot;#korean&quot;).val();
			$.ajax({
				url:&quot;/english&quot;,
				type:&quot;GET&quot;,
				dataType:&quot;json&quot;,
				data:{korean:ko},
				success:function(v){
					console.log(v);
				},error:function(e){
					console.log(e);
				}
			});
		})
	});
&amp;lt;/script&amp;gt;
&amp;lt;title&amp;gt;항상테스트부터&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;h1&amp;gt;성공이다!!!!&amp;lt;/h1&amp;gt;
		&amp;lt;table border=&quot;1&quot;&amp;gt;
			&amp;lt;thead&amp;gt;
				&amp;lt;tr&amp;gt;
					&amp;lt;th&amp;gt;한국어&amp;lt;/th&amp;gt;
					&amp;lt;th&amp;gt;중국어&amp;lt;/th&amp;gt;
					&amp;lt;th&amp;gt;영어&amp;lt;/th&amp;gt;
				&amp;lt;/tr&amp;gt;
			&amp;lt;/thead&amp;gt;
			&amp;lt;tbody&amp;gt;
				&amp;lt;tr&amp;gt;
					&amp;lt;td&amp;gt;&amp;lt;input type=&quot;text&quot; id=&quot;korean&quot; name=&quot;korean&quot;&amp;gt;&amp;lt;/td&amp;gt;
					&amp;lt;td width=&quot;200&quot; height=&quot;30&quot; id=&quot;china&quot;&amp;gt;&amp;lt;/td&amp;gt;
					&amp;lt;td width=&quot;200&quot; height=&quot;30&quot; id=&quot;english&quot;&amp;gt;&amp;lt;/td&amp;gt;
				&amp;lt;/tr&amp;gt;
			&amp;lt;/tbody&amp;gt;
		&amp;lt;/table&amp;gt;
		&amp;lt;input type=&quot;button&quot; id=&quot;chinese&quot; value=&quot;중국어&quot;&amp;gt;
		&amp;lt;input type=&quot;button&quot; id=&quot;english&quot; value=&quot;영어&quot;&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;지난 REST API 파파고 에서 코드 이런식으로 하나의 JSP 파일에 JS도 함께 코딩 하였는데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 그 JS를 외부로 빼서 JavaScript 파일로 만들어 외부 폴더에 저장하여 사용하는 방법을 적어 보겠다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeminor.tistory.com/2?category=1147357&quot;&gt;https://changeminor.tistory.com/2?category=1147357&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1603326382977&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring-Boot]네이버 REST API 사용법 - 1(파파고번역)&quot; data-og-description=&quot;2019년 12월 처음으로 국비로 학원을 다니면서 for문 무엇인지 몰라서 한참을 헤매던 그날이 바로 엊그제 같은데 어느새 취직을해서 api를 활용하여 프로젝트를 만들다니 세월이 진짜 빠르구나 싶&quot; data-og-host=&quot;changeminor.tistory.com&quot; data-og-source-url=&quot;https://changeminor.tistory.com/2?category=1147357&quot; data-og-url=&quot;https://changeminor.tistory.com/2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kJJ3V/hyHXja533z/gwKmGs3oJJmJ2gmDdFa4Ok/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/flmUr/hyHXoDtnWI/qWogfJghjuOJ5SwFzKQ9p1/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/c3u9AA/hyHXp3q2kz/vkqxmw2jMgKk9wfyQrlBK0/img.png?width=998&amp;amp;height=772&amp;amp;face=0_0_998_772&quot;&gt;&lt;a href=&quot;https://changeminor.tistory.com/2?category=1147357&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://changeminor.tistory.com/2?category=1147357&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kJJ3V/hyHXja533z/gwKmGs3oJJmJ2gmDdFa4Ok/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/flmUr/hyHXoDtnWI/qWogfJghjuOJ5SwFzKQ9p1/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/c3u9AA/hyHXp3q2kz/vkqxmw2jMgKk9wfyQrlBK0/img.png?width=998&amp;amp;height=772&amp;amp;face=0_0_998_772');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Spring-Boot]네이버 REST API 사용법 - 1(파파고번역)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2019년 12월 처음으로 국비로 학원을 다니면서 for문 무엇인지 몰라서 한참을 헤매던 그날이 바로 엊그제 같은데 어느새 취직을해서 api를 활용하여 프로젝트를 만들다니 세월이 진짜 빠르구나 싶&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;changeminor.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;위의 1~4 까지 해서 만들어 놓은 코드 활요해서 작성할 예정이니 참조 하시길 (GIT URL로 있습니다. 마구 가져다 사용 하세요)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;89&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bioopM/btqLwdGAOWD/7pl5d3ONXsKqWAJ3H4Ket0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bioopM/btqLwdGAOWD/7pl5d3ONXsKqWAJ3H4Ket0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bioopM/btqLwdGAOWD/7pl5d3ONXsKqWAJ3H4Ket0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbioopM%2FbtqLwdGAOWD%2F7pl5d3ONXsKqWAJ3H4Ket0%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;329&quot; data-origin-height=&quot;89&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;우선 application.yml 파일을 열고&lt;/p&gt;
&lt;pre id=&quot;code_1603326505297&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/ 
      suffix: .jsp
    static-path-pattern: /resources/**&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;static-path-pattern: /resoures/** 를 추가 해준다&lt;/p&gt;
&lt;p&gt;그리고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;resoures폴더에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;232&quot; data-origin-height=&quot;74&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sAdaJ/btqLq36koI8/VsJZDiEzNe2kvAjD3UXk70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sAdaJ/btqLq36koI8/VsJZDiEzNe2kvAjD3UXk70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sAdaJ/btqLq36koI8/VsJZDiEzNe2kvAjD3UXk70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsAdaJ%2FbtqLq36koI8%2FVsJZDiEzNe2kvAjD3UXk70%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;232&quot; data-origin-height=&quot;74&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;static/js 폴더를 차례대로 만들어 주고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막으로 js폴더에 javascript 파일을 만들어 준다 (js파일을 javascript 파일인지 모르고 막 찾는 사람이 있었다. 본인이라고 말은 하지 않겠다. ㅋㅋ )&lt;/p&gt;
&lt;p&gt;그리고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;jsp 파일로 돌아와서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;코드를 복사해서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;592&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7edOZ/btqLxvNxTBH/Vv8nl0VwcwUKJkLgWobDqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7edOZ/btqLxvNxTBH/Vv8nl0VwcwUKJkLgWobDqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7edOZ/btqLxvNxTBH/Vv8nl0VwcwUKJkLgWobDqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7edOZ%2FbtqLxvNxTBH%2FVv8nl0VwcwUKJkLgWobDqk%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;573&quot; data-origin-height=&quot;592&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;위 사진처럼 js파일에 전부 붙여 넣고 저장&lt;/p&gt;
&lt;p&gt;다시 jsp 파일로 돌아와서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;559&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zSD3c/btqLsbXlDd0/fUcm53WzeIcGpdFLGl60qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zSD3c/btqLsbXlDd0/fUcm53WzeIcGpdFLGl60qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zSD3c/btqLsbXlDd0/fUcm53WzeIcGpdFLGl60qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzSD3c%2FbtqLsbXlDd0%2FfUcm53WzeIcGpdFLGl60qk%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;642&quot; data-origin-height=&quot;559&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;사진처럼 코드를 넣어 주면 된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1603326782341&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;/resources/js/papago.js&quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;여기서 설명을 간단하게 하자면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;src는 루트 이며 해당 루트의 파일을 연동 하겠다 뭐 대충 그런 뜻이다&amp;nbsp;&lt;/p&gt;
&lt;p&gt;코드가 많이 깨긋해 진거 같으니 기분이 좋다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;오늘은 가볍게 여기까지 포스팅을 하겠다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;도움이 되었다면&lt;/p&gt;
&lt;p&gt;댓글은 바라지도 않음 가볍게 하트 정도는 부탁해도 되지 않을까?&lt;/p&gt;</description>
      <category>백엔드/Spring-Boot</category>
      <category>js</category>
      <category>js연결</category>
      <category>js외부연동</category>
      <category>js외부추출</category>
      <category>Spring-boot</category>
      <category>springboot</category>
      <category>스프링부트</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/8</guid>
      <comments>https://changeminor.tistory.com/8#entry8comment</comments>
      <pubDate>Thu, 22 Oct 2020 09:37:13 +0900</pubDate>
    </item>
    <item>
      <title>시큐어코딩 - 테스트 방법</title>
      <link>https://changeminor.tistory.com/7</link>
      <description>&lt;p&gt;&lt;b&gt;1. 시큐어코딩(secure coding) 이란?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;소프트웨어(SW)를 개발함에 있어 개발자의 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;보안취약점(vulnerability)을 배제하기 위한 코딩 기법을 뜻 한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;2. 시큐어코딩의 국내ㆍ외 배경&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;SW 개발보안의 중요성을 인식한 미국의 경우, 국토안보부(DHS)를 중심으로 시큐어코딩을 포함한&amp;nbsp;&lt;/p&gt;
&lt;p&gt;SW 개발 전과정(설계ㆍ구현ㆍ시험 등)에 대한 보안활동 연구를 활발히 진행하고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;국내의 경우 2009년부터 전자정부서비스 개발단계에서 SW 보안약점을 진단하여 제거하는 시큐어코딩 관련 연구를 진행하면서,2012년까지 전자정부지원사업 등을 대상으로 SW 보안약점 시범진단을 수행하였다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;또한, 2012년 년 6월부터는 행정안전부 '정보시스템 구축ㆍ운영 지침(행안부고시 제2012-25호)'이 개정ㆍ고시 됨에 따라 전자정부서비스 개발시 적용토록 의무화 되었다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;3. 시큐어코딩테스트&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;본격적인 시큐어코딩 테스트 진행에 앞서 본인은 java 개발자 이기 때문에 java 코드의&amp;nbsp;&lt;/p&gt;
&lt;p&gt;시큐어코딩 테스트를 진행과정을 기재 함을 먼저 알린다.&lt;/p&gt;
&lt;p&gt;spring, springboot 혹은 기타 프레임워크 전부 상관없이 java로 코딩한 경우 전부&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래와 같이 진행 가능 본인은 지난 네이버 REST FULL API 코드로 시큐어코딩 테스트 진행 할 예정이며&lt;/p&gt;
&lt;p&gt;시큐어코딩 테스트에서 나타나는 몇가지 보안 취약점도 어떻게 해결 하는지 이제 차근차근 적어 보겠다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://changeminor.tistory.com/2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/09/04 - [Spring-Boot] - [Spring-Boot]네이버 REST API 사용법 - 1(파파고번역)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1602460160536&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring-Boot]네이버 REST API 사용법 - 1(파파고번역)&quot; data-og-description=&quot;2019년 12월 처음으로 국비로 학원을 다니면서 for문 무엇인지 몰라서 한참을 헤매던 그날이 바로 엊그제 같은데 어느새 취직을해서 api를 활용하여 프로젝트를 만들다니 세월이 진짜 빠르구나 싶�&quot; data-og-host=&quot;changeminor.tistory.com&quot; data-og-source-url=&quot;https://changeminor.tistory.com/2&quot; data-og-url=&quot;https://changeminor.tistory.com/2&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gnSpN/hyHOq3QNOL/Vqp3VSIuTSUNkOakkp9PQ0/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/LULWo/hyHOdwC552/7l3XlHpuJ3g9aNSntDSUH0/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/daCUwk/hyHOnF11Mc/MkGj6cQKE5T9JOWDaBbXB1/img.png?width=780&amp;amp;height=666&amp;amp;face=0_0_780_666&quot;&gt;&lt;a href=&quot;https://changeminor.tistory.com/2&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://changeminor.tistory.com/2&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gnSpN/hyHOq3QNOL/Vqp3VSIuTSUNkOakkp9PQ0/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/LULWo/hyHOdwC552/7l3XlHpuJ3g9aNSntDSUH0/img.png?width=510&amp;amp;height=486&amp;amp;face=0_0_510_486,https://scrap.kakaocdn.net/dn/daCUwk/hyHOnF11Mc/MkGj6cQKE5T9JOWDaBbXB1/img.png?width=780&amp;amp;height=666&amp;amp;face=0_0_780_666');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Spring-Boot]네이버 REST API 사용법 - 1(파파고번역)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2019년 12월 처음으로 국비로 학원을 다니면서 for문 무엇인지 몰라서 한참을 헤매던 그날이 바로 엊그제 같은데 어느새 취직을해서 api를 활용하여 프로젝트를 만들다니 세월이 진짜 빠르구나 싶�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;changeminor.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;시큐어코딩테스트 프로그램은 아래 링크를 타고 가서 받으면 된다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://sourceforge.net/projects/yasca/files/Yasca%202.x/Yasca%202.2/&quot;&gt;https://sourceforge.net/projects/yasca/files/Yasca%202.x/Yasca%202.2/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1602460348398&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Yasca -  Browse /Yasca 2.x/Yasca 2.2 at SourceForge.net&quot; data-og-description=&quot;VPN은 해킹을 방지하고 온라인 트래픽 흐름을 위한 암호화된 터널이라고 상상해 보세요. 아무도 터널 안을 통해 볼 수 없으며 사용자의 인터넷 데이터를 손에 넣을 수 없습니다.&amp;nbsp;NordVPN은 공용 Wi-&quot; data-og-host=&quot;sourceforge.net&quot; data-og-source-url=&quot;https://sourceforge.net/projects/yasca/files/Yasca%202.x/Yasca%202.2/&quot; data-og-url=&quot;https://sourceforge.net/projects/yasca/files/Yasca%202.x/Yasca%202.2/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://sourceforge.net/projects/yasca/files/Yasca%202.x/Yasca%202.2/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://sourceforge.net/projects/yasca/files/Yasca%202.x/Yasca%202.2/&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;&gt;Yasca - Browse /Yasca 2.x/Yasca 2.2 at SourceForge.net&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;VPN은 해킹을 방지하고 온라인 트래픽 흐름을 위한 암호화된 터널이라고 상상해 보세요. 아무도 터널 안을 통해 볼 수 없으며 사용자의 인터넷 데이터를 손에 넣을 수 없습니다.&amp;nbsp;NordVPN은 공용 Wi-&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;sourceforge.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;yasca-core-2.21, yasca-2.2-jlint 두가지 다운 받으면 된다.(java)만 진행 할 예정이라&lt;/p&gt;
&lt;p&gt;압축을 풀어 주고 yasca-core-2.21 폴더에 yasca-2.2-jlint 폴더를 넣어준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;709&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eUwwfU/btqKxk9g51v/NLf91sTECDDulE54Aog2D1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eUwwfU/btqKxk9g51v/NLf91sTECDDulE54Aog2D1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eUwwfU/btqKxk9g51v/NLf91sTECDDulE54Aog2D1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeUwwfU%2FbtqKxk9g51v%2FNLf91sTECDDulE54Aog2D1%2Fimg.png&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;960&quot; data-origin-height=&quot;709&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;yasca-core-2.21폴더위치를 복사하고 명령어 입력창 cmd를 킨다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;75&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HSxpx/btqKBQe5t4N/yBOLEBpddQkEPIdP6KfNp0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HSxpx/btqKBQe5t4N/yBOLEBpddQkEPIdP6KfNp0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HSxpx/btqKBQe5t4N/yBOLEBpddQkEPIdP6KfNp0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHSxpx%2FbtqKBQe5t4N%2FyBOLEBpddQkEPIdP6KfNp0%2Fimg.png&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;75&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;511&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfFreZ/btqKJ2Fh3uL/UXOCKogdUjCiCJA9rAKXNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfFreZ/btqKJ2Fh3uL/UXOCKogdUjCiCJA9rAKXNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfFreZ/btqKJ2Fh3uL/UXOCKogdUjCiCJA9rAKXNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfFreZ%2FbtqKJ2Fh3uL%2FUXOCKogdUjCiCJA9rAKXNk%2Fimg.png&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;511&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;cmd창에 cd yascs-core-2.21폴더위치 입력&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJthQG/btqKDadhZcO/oYfgUMZMViM0i1gNjG8Ovk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJthQG/btqKDadhZcO/oYfgUMZMViM0i1gNjG8Ovk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJthQG/btqKDadhZcO/oYfgUMZMViM0i1gNjG8Ovk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJthQG%2FbtqKDadhZcO%2FoYfgUMZMViM0i1gNjG8Ovk%2Fimg.png&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;978&quot; data-origin-height=&quot;512&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;아래와같이 해당 폴더로 이동 했는지 확인&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;513&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehhqCz/btqKAz5GVO9/clsKL43HSh733IIHC43Kx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehhqCz/btqKAz5GVO9/clsKL43HSh733IIHC43Kx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehhqCz/btqKAz5GVO9/clsKL43HSh733IIHC43Kx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehhqCz%2FbtqKAz5GVO9%2FclsKL43HSh733IIHC43Kx1%2Fimg.png&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;979&quot; data-origin-height=&quot;513&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이동 되었다면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래와 같이 설치를 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;47&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VIaQl/btqKGkzFOKr/bPmSvdS1TPd2EMqKgj1BlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VIaQl/btqKGkzFOKr/bPmSvdS1TPd2EMqKgj1BlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VIaQl/btqKGkzFOKr/bPmSvdS1TPd2EMqKgj1BlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVIaQl%2FbtqKGkzFOKr%2FbPmSvdS1TPd2EMqKgj1BlK%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;603&quot; data-origin-height=&quot;47&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;해당 부분은 최초에 딱 한번만 해주면 되고 앞으로 할일을 없음&lt;/p&gt;
&lt;p&gt;yasca --debug 일렵 해주면 된다.&lt;/p&gt;
&lt;p&gt;그럼 cmd창이 무한루프 걸린것 마냥 계속 무슨 작업을 할 것이다.(본인은 10분정도 걸린것으로 생각남 진짜 무한루프 걸린줄 알았음)&lt;/p&gt;
&lt;p&gt;끝나면 이제 본격적인 테스트 진행 하면 된다.&lt;/p&gt;
&lt;p&gt;테스트 진행할 java소스가 들어 있는 폴더위치를 복사 하고&lt;/p&gt;
&lt;p&gt;아래와 같이 yascs --px jlint 폴더위치&lt;/p&gt;
&lt;p&gt;입력하면 끝&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;52&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqvVQr/btqKGkNhzc6/hawSXv6r06I0Kh9XvQVKxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqvVQr/btqKGkNhzc6/hawSXv6r06I0Kh9XvQVKxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqvVQr/btqKGkNhzc6/hawSXv6r06I0Kh9XvQVKxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqvVQr%2FbtqKGkNhzc6%2FhawSXv6r06I0Kh9XvQVKxk%2Fimg.png&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;1012&quot; data-origin-height=&quot;52&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나는 바탕화면에 설치해서 그런지 바타화면에 생성됨&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;89&quot; data-origin-height=&quot;148&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgFjVF/btqKJ1GqgmT/LcMM3LR7k3rjBgS6kL6xb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgFjVF/btqKJ1GqgmT/LcMM3LR7k3rjBgS6kL6xb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgFjVF/btqKJ1GqgmT/LcMM3LR7k3rjBgS6kL6xb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgFjVF%2FbtqKJ1GqgmT%2FLcMM3LR7k3rjBgS6kL6xb1%2Fimg.png&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;89&quot; data-origin-height=&quot;148&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;폴더를 열고 파일 실행하면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;346&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcjB68/btqKGj1TsN9/jpNVnem4YkXMz2RWgrLJq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcjB68/btqKGj1TsN9/jpNVnem4YkXMz2RWgrLJq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcjB68/btqKGj1TsN9/jpNVnem4YkXMz2RWgrLJq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcjB68%2FbtqKGj1TsN9%2FjpNVnem4YkXMz2RWgrLJq0%2Fimg.png&quot; data-filename=&quot;10.png&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;346&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 시큐어코딩 취약점 확인 가능 하다.&lt;/p&gt;
&lt;p&gt;취약점 해결은 system.out.println 은 지우거나 log를 사용권장&amp;nbsp;&lt;/p&gt;
&lt;p&gt;나머지 취약점은 다음에 올리도록 하겠다.&lt;/p&gt;
&lt;p&gt;여기까지 시큐어코딩 테스트&amp;nbsp;&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://changeminor.tistory.com/7</guid>
      <comments>https://changeminor.tistory.com/7#entry7comment</comments>
      <pubDate>Mon, 12 Oct 2020 10:51:35 +0900</pubDate>
    </item>
    <item>
      <title>Properties 파일 활용하기</title>
      <link>https://changeminor.tistory.com/6</link>
      <description>&lt;p&gt;SpringBoot FramWork를 사용한다면 properties파일을 다들 한번씩 들어 보셨을텐데&lt;/p&gt;
&lt;p&gt;참 처음 공부 하는 입장에선 해당 파일에 값을 입력하고 입력한 값을 사용하면 은폐도되고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;편하게 사용 할텐데 어떻게 값을 불러와서 사용하는지 몰라서 난감 합니다. (물론 고수님들은 잘 사용하고 있겠지요)&lt;/p&gt;
&lt;p&gt;properties 파일에 저장해서 캡슐화해서 DB에서 불러 오지 않아도 나름 안전하게 저장된 값을 가져오니 꼭 사용하고&lt;/p&gt;
&lt;p&gt;싶은데 어떻게 사용하면 좋을지 몰라서 답답한 저같은 초보를 위해 적어 봅니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1. 클래스를 하나 만들고 아래의 코드를 입력 합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1601347556374&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesLoader {
	public static Properties fromResource(String resource) throws IOException {
		try (InputStream input = classLoader().getResourceAsStream(resource)) {
			if (input == null) {
				throw new FileNotFoundException(resource);
			}
			Properties properties = new Properties();
			properties.load(input);
			return properties;
		}
	}

	private static ClassLoader classLoader() {
		ClassLoader loader = Thread.currentThread().getContextClassLoader();
		return loader == null ? PropertiesLoader.class.getClassLoader() : loader;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;사용할 부분에 가서&amp;nbsp;&lt;/p&gt;
&lt;p&gt;불러오면 되는데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;지난 Naver Rest Api 활용해서 설명 해 드리겠습니다.&lt;/p&gt;
&lt;p&gt;번역부분 소스를 살짝 정리를 했습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조금 더 간결하고 보기 좋게 정리를 하였는데 바로 이부분 입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1601347747365&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 영어번역(Naver Rest Api)
	@Override
	public String getEnglish(MysecretDto msd) {
		String apiURL = &quot;https://openapi.naver.com/v1/papago/n2mt&quot;;
		String result = &quot;&quot;;
		try {
			Properties properties = PropertiesLoader.fromResource(&quot;api.properties&quot;);
			String clientId = properties.getProperty(&quot;clientId&quot;);
			String clientSecret = properties.getProperty(&quot;clientSecret&quot;);
			HttpPost post = new HttpPost(apiURL);
			post.addHeader(&quot;Content-Type&quot;, &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;);
			post.addHeader(&quot;X-Naver-Client-Id&quot;, clientId);
			post.addHeader(&quot;X-Naver-Client-Secret&quot;, clientSecret);
			StringBuilder json = new StringBuilder();
			json.append(&quot;source=ko&amp;amp;target=en&amp;amp;text=&quot; + msd.getKorean());
			post.setEntity(new StringEntity(json.toString(), &quot;UTF-8&quot;));
			CloseableHttpClient httpClient = HttpClients.createDefault();
			CloseableHttpResponse response = httpClient.execute(post);
			result = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
			response.close();
			httpClient.close();
		} catch (Exception e) {
			result = e.getMessage();
		}
		return result;
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위부분 확인 해보시면 Properties&amp;nbsp;properties&amp;nbsp;=&amp;nbsp;PropertiesLoader.fromResource(&quot;api.properties&quot;);&lt;/p&gt;
&lt;p&gt;이부분이 있어요 여기서 properties파일과 연결을 해줍니다.&lt;/p&gt;
&lt;p&gt;(&quot;properties 파일명&quot;) -&amp;gt; test.peroperties 이와 같이 .properties까지 전부 입력 하셔야 합니다.&lt;/p&gt;
&lt;p&gt;그리고&amp;nbsp;&lt;/p&gt;
&lt;p&gt;String&amp;nbsp;clientId&amp;nbsp;=&amp;nbsp;properties.getProperty(&quot;clientId&quot;);&lt;/p&gt;
&lt;p&gt;이렇게 불러 오는데&amp;nbsp;&lt;/p&gt;
&lt;p&gt;getProperty(&quot;속성명&quot;) 되겠습니다.&lt;/p&gt;
&lt;p&gt;그러면 properties 파일 확인 해 볼까요?&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이렇게 resoures에 api.properties 파일이 있지요&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;139&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bq6NLx/btqJSchWha9/f5XOi7J72HVrNWY1RSZHV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bq6NLx/btqJSchWha9/f5XOi7J72HVrNWY1RSZHV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bq6NLx/btqJSchWha9/f5XOi7J72HVrNWY1RSZHV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbq6NLx%2FbtqJSchWha9%2Ff5XOi7J72HVrNWY1RSZHV1%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;315&quot; data-origin-height=&quot;139&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 api.properties파일에는&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;392&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W7sB6/btqJMw95vBN/Bx76TlpJQdmepmypdmydTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W7sB6/btqJMw95vBN/Bx76TlpJQdmepmypdmydTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W7sB6/btqJMw95vBN/Bx76TlpJQdmepmypdmydTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW7sB6%2FbtqJMw95vBN%2FBx76TlpJQdmepmypdmydTK%2Fimg.png&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;392&quot; data-ke-mobilestyle=&quot;widthContent&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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;이렇게 입력 되어 있습니다.&lt;/p&gt;
&lt;p&gt;속성명=adfadsf (*단 ;세미클론은 입력하지 않습니다.)&lt;/p&gt;
&lt;p&gt;이렇게 아주 쉽게 properties 파일의 값을 불러와서 사용하는 방법을 알아 보게 되었습니다.&lt;/p&gt;
&lt;p&gt;감사합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;마지막 저의 git 주소 입니다. 소스 마구 가져다 사용하세요 ㅋㅋ&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/Byube/NaverRestApi&quot;&gt;https://github.com/Byube/NaverRestApi&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1601347662967&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Byube/NaverRestApi&quot; data-og-description=&quot;Contribute to Byube/NaverRestApi development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/Byube/NaverRestApi&quot; data-og-url=&quot;https://github.com/Byube/NaverRestApi&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/vG6r3/hyHFamuhXN/2m1LMkrlW86GKSTFeX6sfK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=81_133_243_310&quot;&gt;&lt;a href=&quot;https://github.com/Byube/NaverRestApi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/Byube/NaverRestApi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/vG6r3/hyHFamuhXN/2m1LMkrlW86GKSTFeX6sfK/img.jpg?width=400&amp;amp;height=400&amp;amp;face=81_133_243_310');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Byube/NaverRestApi&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Contribute to Byube/NaverRestApi development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Properties</category>
      <category>properties파일</category>
      <category>properties활용</category>
      <author>뷰베</author>
      <guid isPermaLink="true">https://changeminor.tistory.com/6</guid>
      <comments>https://changeminor.tistory.com/6#entry6comment</comments>
      <pubDate>Tue, 29 Sep 2020 11:55:46 +0900</pubDate>
    </item>
  </channel>
</rss>