<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Magritte 기술블로그</title>
    <link>https://dogfoottech.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Tue, 21 Jul 2026 15:19:17 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Magritte1</managingEditor>
    <item>
      <title>SQLD 시험 후기</title>
      <link>https://dogfoottech.tistory.com/316</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;벼락치기로 공부했던 SQLD에 대한 생각을 짧게나마 남기려 합니다.&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;1. 생각보다 몇가지 개념이 반복적으로 나온다. 즉 범위가 넓은 시험이 아니라는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 공부했던것들만 제대로 보면은 합격을 할수가 있을듯하다.(난 해당 사항 아님)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 노랭이와 SQL 개발자 과외노트라는 책 두권을 봤는데, 노랭이에는 너무 어려운 문제가 많아서 쫄았는데 실제 시험 난이도는 그정도까지는 아님.(그렇다고 내가 잘했다는 것은 아님)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 만약 떨어져서 다시 시험을 보게된다면, 실제로 함수들이나 sql구문들을 mysql로 쳐보면서 해볼듯.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 여러가지 DB들에 대한 시험문제가 나오는데...ms-sql , oracle등등... 이것들에 대해서 다 제대로 알아야 되나 싶음&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;5. 그래도 sql 기본적인 이해를 목표로 진행했던터라 잘했다고 생각이 든다.&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;6. 만약 sqld 시험을 준비하시는 분들이라면, 전 3일전부터 공부했는데, 노베이스 2주간 하루 3시간씩 공부하면 충분히 합격 가능할듯 합니다.&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;7. 화이팅!&lt;/p&gt;</description>
      <category>CS</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/316</guid>
      <comments>https://dogfoottech.tistory.com/316#entry316comment</comments>
      <pubDate>Sat, 18 Nov 2023 21:33:57 +0900</pubDate>
    </item>
    <item>
      <title>OAuth2.0에 관하여 (네이버 로그인, fastapi, nextjs)</title>
      <link>https://dogfoottech.tistory.com/308</link>
      <description>&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;생활코딩의 OAuth강의를 정리했다고 보시는게 가장 정확합니다&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;왜 OAuth2.0을 공부해야 하냐고 물어보면은...&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;아무래도 나의 조그마한 사이트에서는 구글이나 페이스북, 네이버가 제공을 해주는 OAuth 로그인을 사용을 할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기 때문에 나에게는 &amp;nbsp;OAuth가 필요하다&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;fastapi+ nextjs로 사이트를 구성을 하고, 거기에다 네이버 로그인을 붙일 예정이다.&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;먼저 OAuth에 대해서 알아보고 가자.&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;OAuth는 3자대면 작업이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;슈퍼K라는 나의 사이트가 있다고 가정하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 사이트에서는 네이버 로그인을 사용을 해서 사용자인증을 진행한다.(federate identity)&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;OAuth 에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;슈퍼K라는 우리 사이트를 Client라고 (Resource Server 에게 자원을 요구하는 손님이라는 뜻)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 를 Resource Server(or Authorization Server)라고 부른다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(우리가 사용하고자 하는 자원(로그인자원)을 가지고 있다고 해서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리사이트 유저를 Resource Owner라고 한다.(리소스를 소유한 주인이라고 해서)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.41.58.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PgRv1/btsg9geDMYH/mG5qDp2RYvZVKDcCo2iaBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PgRv1/btsg9geDMYH/mG5qDp2RYvZVKDcCo2iaBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PgRv1/btsg9geDMYH/mG5qDp2RYvZVKDcCo2iaBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPgRv1%2Fbtsg9geDMYH%2FmG5qDp2RYvZVKDcCo2iaBk%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;782&quot; height=&quot;377&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.41.58.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---------------&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;등록(register)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;맨처음에 우리가 OAuth를 사용하기 위해서는 등록을 진행을 먼저 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;흔히들 아래와 같은 정보를 얻기 위한 과정인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 흔히 OAuth를 구현하려는 사이트에서 얻기 쉬운 부분이다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.42.59.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MBMgl/btshaTQwfOJ/zJQfVN0pmtOLyCcyjWX1B0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MBMgl/btshaTQwfOJ/zJQfVN0pmtOLyCcyjWX1B0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MBMgl/btshaTQwfOJ/zJQfVN0pmtOLyCcyjWX1B0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMBMgl%2FbtshaTQwfOJ%2FzJQfVN0pmtOLyCcyjWX1B0%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;664&quot; height=&quot;320&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.42.59.png&quot; data-origin-width=&quot;782&quot; data-origin-height=&quot;377&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;네이버 로그인에서는 아래에 들어가면 등록과정을 진행을 할 수가 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.naver.com/main/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developers.naver.com/main/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.48.43.png&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;780&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8NKTU/btsg9fGN3gT/4mxwhHUUBqPGoe385UagC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8NKTU/btsg9fGN3gT/4mxwhHUUBqPGoe385UagC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8NKTU/btsg9fGN3gT/4mxwhHUUBqPGoe385UagC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8NKTU%2Fbtsg9fGN3gT%2F4mxwhHUUBqPGoe385UagC0%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;1167&quot; height=&quot;780&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.48.43.png&quot; data-origin-width=&quot;1167&quot; data-origin-height=&quot;780&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.49.33.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;905&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z0ijn/btsg1WIBcCU/KV4jEu7tfFzmQkodIdFH0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z0ijn/btsg1WIBcCU/KV4jEu7tfFzmQkodIdFH0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z0ijn/btsg1WIBcCU/KV4jEu7tfFzmQkodIdFH0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ0ijn%2Fbtsg1WIBcCU%2FKV4jEu7tfFzmQkodIdFH0K%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;1266&quot; height=&quot;905&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.49.33.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;905&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.50.31.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;905&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LuwfD/btshaUIGw94/IoMb57gIkK0egdy0gywW9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LuwfD/btshaUIGw94/IoMb57gIkK0egdy0gywW9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LuwfD/btshaUIGw94/IoMb57gIkK0egdy0gywW9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLuwfD%2FbtshaUIGw94%2FIoMb57gIkK0egdy0gywW9K%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;1266&quot; height=&quot;905&quot; data-filename=&quot;스크린샷 2023-05-23 오후 4.50.31.png&quot; data-origin-width=&quot;1266&quot; data-origin-height=&quot;905&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;&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;네이버에서 Client ID 와 Client Secret를 제공해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ClientID는 외부에 공개가 되어도 괜찮으나,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Client Secret은 외부에 공개가 되면 곤란하다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 Authorized redirect URIs는 우리가 지정을 해주는 것인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버가 우리에게 Authorized code를 전달해주는 과정이 있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 코드를 우리가 지정한 Authorized redirect URI로 전달을 해준다.&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;====================&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Resource Owner의 승인&lt;/b&gt;&lt;/h3&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;Client ID와 Client Secret, 그리고 redirect URL을 알고 있는 상황이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_edited_스크린샷 2023-05-23 오후 5.01.00.png&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G3ysg/btshaTwiWuh/5TOc25eYoFv7xnCGjKV4G0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G3ysg/btshaTwiWuh/5TOc25eYoFv7xnCGjKV4G0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G3ysg/btshaTwiWuh/5TOc25eYoFv7xnCGjKV4G0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG3ysg%2FbtshaTwiWuh%2F5TOc25eYoFv7xnCGjKV4G0%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;825&quot; height=&quot;420&quot; data-filename=&quot;edited_edited_스크린샷 2023-05-23 오후 5.01.00.png&quot; data-origin-width=&quot;825&quot; data-origin-height=&quot;420&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;우리는 네이버의 로그인기능만 필요하다. 딱 그 기능만 허락을 받으면 되는 상황이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우리 우리사이트 이용자(Resource Owner)가 등장하는 차례이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;등장은 어떻게 하냐???&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;fr10.gif&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IJWUS/btshbe1iSSQ/0Iq9BrdF3ZkdeyNbk7YOVK/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IJWUS/btshbe1iSSQ/0Iq9BrdF3ZkdeyNbk7YOVK/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IJWUS/btshbe1iSSQ/0Iq9BrdF3ZkdeyNbk7YOVK/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/IJWUS/btshbe1iSSQ/0Iq9BrdF3ZkdeyNbk7YOVK/img.gif&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;773&quot; height=&quot;330&quot; data-filename=&quot;fr10.gif&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;330&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;&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;우리는 우리나름의 방식으로 등장을 한다&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버는 네이버 방식으로 등장을 하면된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼으로 등장 그리고 그 버튼에는 링크가 달려있는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://resource.server?client_id=1&amp;amp;scope-B,C&amp;amp;redirect_uri=https://client/callback&quot;&gt;http://resource.server?client_id=1&amp;amp;scope=B,C&amp;amp;redirect_uri=https://client/callback&lt;/a&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;image03.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;270&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvSOdM/btshaseswNO/97PKaKLAqBTyVt2IcW4xsk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvSOdM/btshaseswNO/97PKaKLAqBTyVt2IcW4xsk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvSOdM/btshaseswNO/97PKaKLAqBTyVt2IcW4xsk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvSOdM%2FbtshaseswNO%2F97PKaKLAqBTyVt2IcW4xsk%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;700&quot; height=&quot;270&quot; data-filename=&quot;image03.png&quot; data-origin-width=&quot;700&quot; data-origin-height=&quot;270&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.04.47.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brSMOa/btsg9OowFtb/KImwnJhWSAUA7m0yWaBUlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brSMOa/btsg9OowFtb/KImwnJhWSAUA7m0yWaBUlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brSMOa/btsg9OowFtb/KImwnJhWSAUA7m0yWaBUlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrSMOa%2Fbtsg9OowFtb%2FKImwnJhWSAUA7m0yWaBUlK%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;838&quot; height=&quot;420&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.04.47.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;420&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;&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;네이버(Resource Server)는 우리사이트 사용자(Resource owner)에게 권한을 요청한다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.11.28.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;578&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/veGIc/btsg9gMzI2n/YBuS1xnJgkIQgMxufscWvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/veGIc/btsg9gMzI2n/YBuS1xnJgkIQgMxufscWvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/veGIc/btsg9gMzI2n/YBuS1xnJgkIQgMxufscWvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FveGIc%2Fbtsg9gMzI2n%2FYBuS1xnJgkIQgMxufscWvk%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;450&quot; height=&quot;578&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.11.28.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;578&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=====================&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Resource Server의 승인&lt;/b&gt;&lt;/h3&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;네이버(Resource Server) 는 우리 사이트에 들어온 유저(Resource Owner)가 권한을 요청하였고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로그인 권한(여기서는 scope:b,c)를 허락해주었다 라는 것까지가 현재 단계이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2023-05-23 오후 5.13.33.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;873&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2Hql0/btsg79mK9FK/t6cBzqQqnO5sBbglyqRzDk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2Hql0/btsg79mK9FK/t6cBzqQqnO5sBbglyqRzDk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2Hql0/btsg79mK9FK/t6cBzqQqnO5sBbglyqRzDk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2Hql0%2Fbtsg79mK9FK%2Ft6cBzqQqnO5sBbglyqRzDk%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;1620&quot; height=&quot;873&quot; data-filename=&quot;edited_스크린샷 2023-05-23 오후 5.13.33.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;873&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 여기서 네이버는 authorization code라는 것을 발급해서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그것을 우리사이트 유저(Resource Owner)에게 전달을 해준다...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 그냥 전달해주는것이 아니라,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Location Header에 넣어서 전달을 해주기때문에,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리 사이트 유저(Resource Owner)는 https://client/callback?code=3이라는 곳으로&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기도 모르는 사이에 redirect 되게끔 된다......&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 리다이렉트 되는 주소가 어디????&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;바로 우리가 처음에 authorized redirect uri 라고 써져있는 곳으로&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리스트링에 authorization 코드가 들어가진체로 전달이 된다...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2023-05-23 오후 5.16.29.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d10Oo2/btshaVt9okb/cyRhlmF6rg04KBQNlVlyqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d10Oo2/btshaVt9okb/cyRhlmF6rg04KBQNlVlyqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d10Oo2/btshaVt9okb/cyRhlmF6rg04KBQNlVlyqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd10Oo2%2FbtshaVt9okb%2FcyRhlmF6rg04KBQNlVlyqk%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;1620&quot; height=&quot;913&quot; data-filename=&quot;edited_스크린샷 2023-05-23 오후 5.16.29.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;913&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;그러면 우리(client,슈퍼K 사이트 서버)는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이트 이용자(Resource Owner)를 통해서 authorization code를 알게되었다&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.17.56.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TojGE/btshbe79hPm/Sv9w1Q9kK9gYqbKDiQDKkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TojGE/btshbe79hPm/Sv9w1Q9kK9gYqbKDiQDKkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TojGE/btshbe79hPm/Sv9w1Q9kK9gYqbKDiQDKkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTojGE%2Fbtshbe79hPm%2FSv9w1Q9kK9gYqbKDiQDKkK%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;1620&quot; height=&quot;913&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.17.56.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;913&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;&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;네이버와 우리사이트 사용자 사이에 은밀한하게 전달된 내용인 (Authorization code)를&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리(슈퍼K 사이트 운영서버)도 알게되었다...ㅎㅎㅎ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너네가 알고 있는것을 나도 알게 되었으니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나도 믿을수 있는 녀석이다!!! 라는 것을 이제 네이버에게 다시 알려줘야 하는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇게 하기 위해서는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리는 다시 네이버 서버로 아래와 같은 요청을 보내면 된다.&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;https://resource.server/token?&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;grant_type=authorization_code&lt;/b&gt;&lt;/span&gt;&amp;amp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;code=3&lt;/b&gt;&lt;/span&gt;&amp;amp;redirect_uri=https://client/callback&amp;amp;client_id=1&amp;amp;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;client_secret&lt;/b&gt;&lt;/span&gt;=2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 우리가 주의깊게 봐야하는 부분은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빨간색으로 강조한 code 부분과 client_secret이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;code가 3이라는 것은 우리 사이트 유저인 resource owner랑 우리사이트(슈퍼k)가 제대로 믿을수 있는 사이라는 것이고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;client_secret은 우리가 제일처음에 네이버 사이트에 등록하고 받은 비밀서약인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 두개의 정보와 redirect_uri를 통해서,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우리사이트 + 네이버 + 우리사이트 유저 , 이렇게 3자간은 믿을수 있는 동맹관계라는 것을 제대로 알려주는 것이다.&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;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;b&gt;네이버는 우리에게 액세스 토큰을 발급해주는것이다.&lt;/b&gt;&lt;/u&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_스크린샷 2023-05-23 오후 5.32.06.png&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;457&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2NipN/btsg9Dt8VWi/Vdjxkv1Wxx1JwjIF7IoEpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2NipN/btsg9Dt8VWi/Vdjxkv1Wxx1JwjIF7IoEpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2NipN/btsg9Dt8VWi/Vdjxkv1Wxx1JwjIF7IoEpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2NipN%2Fbtsg9Dt8VWi%2FVdjxkv1Wxx1JwjIF7IoEpK%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;831&quot; height=&quot;457&quot; data-filename=&quot;edited_스크린샷 2023-05-23 오후 5.32.06.png&quot; data-origin-width=&quot;831&quot; data-origin-height=&quot;457&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 우리도 nextjs에랑 &amp;nbsp;fastapi로 로그인 기능을 구현을 해보자!!!!!!!!!!&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;nextjs 에는 next-auth.js라는 좋은 라이브러리도 있지만,,,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나같이 서버는 다르게 이용하고자 하는 사람에게는 사용이 가능한지는 알아보지는 않았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 next-auth로 구현을 했을때에는&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 밑바닥부터 해당 로그인을 구현했다는 느낌이 전혀없었다....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그냥 라이브러리를 사용만 한다는 느낌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 한번은 밑에서부터 만들어봐야 된다는 생각이었다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;NextJS에서 로그인 버튼 만들기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 새로운 nextjs 프로젝트를 생성을 해보자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;초기세팅값은 아래와 같이 선택을 하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래가 무슨 말인지 모르겠으면,,,,nextjs 기초부터 공부하고 오시길 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1684831591758&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npx create-next-app@latest --experimental-app&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.47.39.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2eeAu/btsg8byb4y0/8nmwNr1MiZ0VKDMUdSnk2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2eeAu/btsg8byb4y0/8nmwNr1MiZ0VKDMUdSnk2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2eeAu/btsg8byb4y0/8nmwNr1MiZ0VKDMUdSnk2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2eeAu%2Fbtsg8byb4y0%2F8nmwNr1MiZ0VKDMUdSnk2k%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;1046&quot; height=&quot;290&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.47.39.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;290&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;global.css,page.module.css 전부 깨끗하게 지우고 시작을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;page.js는 div박스와 버튼을 만들어 놔두었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 버튼을 눌렀을때에 필요한 링크를 적용해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 적용을 해보았습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1684831858489&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'use client'

import React from &quot;react&quot;;
export default function Naver() {
  let request_url = &quot;https://nid.naver.com/oauth2.0/authorize?response_type=code&amp;amp;client_id={네이버에서 발급받은 클라이언트id}&amp;amp;redirect_uri=http://localhost:3000/callback&quot;

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;My Page&amp;lt;/h1&amp;gt;
      &amp;lt;button&amp;gt;
        &amp;lt;a href={request_url}&amp;gt;네이버 로그인&amp;lt;/a&amp;gt;
      &amp;lt;/button&amp;gt;
    &amp;lt;/div&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;딱 아래와 같은 상황입니다. 버튼을 누르면 &lt;a href=&quot;https://resource.server?client_id=1&amp;amp;scope=B,C&amp;amp;redirect_uri=https://client/callback&quot;&gt;https://resource.server?client_id=1&amp;amp;scope=B,C&amp;amp;redirect_uri=https://client/callback&lt;/a&gt;&amp;nbsp;이라는 곳으로 보내주는것을 위에서는 request_url안에 담아 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.04.47.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brSMOa/btsg9OowFtb/KImwnJhWSAUA7m0yWaBUlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brSMOa/btsg9OowFtb/KImwnJhWSAUA7m0yWaBUlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brSMOa/btsg9OowFtb/KImwnJhWSAUA7m0yWaBUlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrSMOa%2Fbtsg9OowFtb%2FKImwnJhWSAUA7m0yWaBUlK%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;838&quot; height=&quot;420&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.04.47.png&quot; data-origin-width=&quot;838&quot; data-origin-height=&quot;420&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;아래와 같은 next.js로 만든 페이지에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버튼을 눌러봅니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;callback페이지도 next.js에다 만들어줬습니다...&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-24 오전 9.59.08.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bec5bG/btsheEZ4iEU/fZNaxF7DiWPA4YxTpRPgA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bec5bG/btsheEZ4iEU/fZNaxF7DiWPA4YxTpRPgA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bec5bG/btsheEZ4iEU/fZNaxF7DiWPA4YxTpRPgA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbec5bG%2FbtsheEZ4iEU%2FfZNaxF7DiWPA4YxTpRPgA1%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;1046&quot; height=&quot;290&quot; data-filename=&quot;스크린샷 2023-05-24 오전 9.59.08.png&quot; data-origin-width=&quot;1046&quot; data-origin-height=&quot;290&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localhost:3000/callback 으로 요청하면, 해당 페이지가 나오게 만들어주시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이정도는 할 줄 아시져??&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그랬더니 해당 url에 쿼리스티링으로 code가 같이 딸려옵니다!!!!!&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-filename=&quot;edited_스크린샷 2023-05-24 오전 10.01.00.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;94&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DCNd5/btshaVuPCw2/k4CRUnkkz8dzKcz77bynuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DCNd5/btshaVuPCw2/k4CRUnkkz8dzKcz77bynuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DCNd5/btshaVuPCw2/k4CRUnkkz8dzKcz77bynuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDCNd5%2FbtshaVuPCw2%2Fk4CRUnkkz8dzKcz77bynuk%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;1146&quot; height=&quot;94&quot; data-filename=&quot;edited_스크린샷 2023-05-24 오전 10.01.00.png&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;94&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.17.56.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;913&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TojGE/btshbe79hPm/Sv9w1Q9kK9gYqbKDiQDKkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TojGE/btshbe79hPm/Sv9w1Q9kK9gYqbKDiQDKkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TojGE/btshbe79hPm/Sv9w1Q9kK9gYqbKDiQDKkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTojGE%2Fbtshbe79hPm%2FSv9w1Q9kK9gYqbKDiQDKkK%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;1620&quot; height=&quot;913&quot; data-filename=&quot;스크린샷 2023-05-23 오후 5.17.56.png&quot; data-origin-width=&quot;1620&quot; data-origin-height=&quot;913&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;그리고 이렇게 callback받은 code를 포함하여,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 access_token을 요청을 하는 url을 만들어서 네이버서버로 보내주면, 딱 완성이 되겠지요?&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;이제 fastapi 서버를 이용해서 한번 진행을 해보도록 합시다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;callback서버를 http://localhost:8080/callback으로 진행을 하고 우리가 원하는 정보를 가져와봅도록 합시다&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;fast api로 다음과 같이 api를 만들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1684890826213&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@app.get(&quot;/callback&quot;)
async def callback(code):

    client_id = &quot;발급받은 client_id&quot;
    client_secret = &quot;발급받은 client_secret&quot;
    redirect_uri = &quot;http://localhost:8080/callback&quot;

    token_request = requests.get(f&quot;https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&amp;amp;client_id={client_id}&amp;amp;client_secret={client_secret}&amp;amp;code={code}&quot;)
    token_json = token_request.json()
    print(token_json)

    access_token = token_json.get(&quot;access_token&quot;)
    profile_request = requests.get(&quot;https://openapi.naver.com/v1/nid/me&quot;, headers={&quot;Authorization&quot; : f&quot;Bearer {access_token}&quot;},)
    profile_data = profile_request.json()

    print(profile_data)
    return RedirectResponse('http://localhost:3000/callback')&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;그리고 나서 우리가 처음에 만들었던 네이버로그인 버튼의 callback uri를 fastapi의 callback 앤드포인트로 바꿔줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;fastapi서버에서 로그인된 아이디의 profile 데이터를 가지고 와준다.&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;로그인 세부적인 사항들은 각 프로젝트에 따라 구현을 해보면되겠다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 네이버 로그인 SDK에 관한 내용들이다.&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;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;네이버 로그인 SDK를 사용하기&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 로그인 개발문서는 다음의 링크에 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.naver.com/docs/login/devguide/devguide.md#1--개요&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://developers.naver.com/docs/login/devguide/devguide.md#1--개요&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1684831901828&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;네이버 로그인 개발가이드 - LOGIN&quot; data-og-description=&quot;네이버 로그인 개발가이드 1. 개요 4,200만 네이버 회원을 여러분의 사용자로! 네이버 회원이라면, 여러분의 사이트를 간편하게 이용할 수 있습니다. 전 국민 모두가 가지고 있는 네이버 아이디 &quot; data-og-host=&quot;developers.naver.com&quot; data-og-source-url=&quot;https://developers.naver.com/docs/login/devguide/devguide.md#1--개요&quot; data-og-url=&quot;https://developers.naver.com/docs/login/devguide/devguide.md#1--%EA%B0%9C%EC%9A%94&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bZMtpo/hySJoNMK2c/t1doLfQNHrs6wB2UkC8FW0/img.png?width=880&amp;amp;height=1604&amp;amp;face=0_0_880_1604,https://scrap.kakaocdn.net/dn/CVh1p/hySJhgMFc5/d2nX6IoIrqm0JDWK0ankwk/img.png?width=880&amp;amp;height=1376&amp;amp;face=0_0_880_1376,https://scrap.kakaocdn.net/dn/EeKVH/hySI8YtuTJ/xPYLNGiFwXkD4iCYnXpfGK/img.png?width=880&amp;amp;height=619&amp;amp;face=0_0_880_619&quot;&gt;&lt;a href=&quot;https://developers.naver.com/docs/login/devguide/devguide.md#1--개요&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developers.naver.com/docs/login/devguide/devguide.md#1--개요&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bZMtpo/hySJoNMK2c/t1doLfQNHrs6wB2UkC8FW0/img.png?width=880&amp;amp;height=1604&amp;amp;face=0_0_880_1604,https://scrap.kakaocdn.net/dn/CVh1p/hySJhgMFc5/d2nX6IoIrqm0JDWK0ankwk/img.png?width=880&amp;amp;height=1376&amp;amp;face=0_0_880_1376,https://scrap.kakaocdn.net/dn/EeKVH/hySI8YtuTJ/xPYLNGiFwXkD4iCYnXpfGK/img.png?width=880&amp;amp;height=619&amp;amp;face=0_0_880_619');&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;네이버 로그인 개발가이드 - LOGIN&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;네이버 로그인 개발가이드 1. 개요 4,200만 네이버 회원을 여러분의 사용자로! 네이버 회원이라면, 여러분의 사이트를 간편하게 이용할 수 있습니다. 전 국민 모두가 가지고 있는 네이버 아이디&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developers.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;네이버 로그인 버튼을 넣고싶은 페이지에 아래와 같이 코드를 작성을 해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무슨 이유에서인지 layout.js에 head에 스크립트를 추가하려고 하니깐,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;window.naver객체를 읽어들이지 못하더라....&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;pre id=&quot;code_1684891484810&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;'use client'


import React, { useState, useEffect } from &quot;react&quot;;

export default function Home() {

  useEffect(() =&amp;gt; {
    initNaverLogin();
    getData();
  }, []);
  // console.log(window);
  const getData = (r) =&amp;gt; {
    console.log(r);
    if (window.location.href.includes(&quot;access_token&quot;)) {
      console.log(&quot;We got AccessToken&quot;);
    }
  };
  const initNaverLogin = () =&amp;gt; {

    const naverLogin = new window.naver.LoginWithNaverId({
      clientId: &quot;네이버에서 발급해준 Client Id&quot;,
      callbackUrl: &quot;http://localhost:8080/callback&quot;,
      isPopup: false,
      loginButton: { color: &quot;green&quot;, type: 3, height: 60 },
      callbackHandle: true,
    });

    naverLogin.init();
    getData();
  }

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;script
        defer
        type=&quot;text/javascript&quot;
        src=&quot;https://static.nid.naver.com/js/naveridlogin_js_sdk_2.0.2.js&quot;
      /&amp;gt;
      &amp;lt;div id=&quot;naverIdLogin&quot; /&amp;gt;
    &amp;lt;/div&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;</description>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/308</guid>
      <comments>https://dogfoottech.tistory.com/308#entry308comment</comments>
      <pubDate>Tue, 23 May 2023 20:23:57 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 이터레이터 만들기 ( python iterator )</title>
      <link>https://dogfoottech.tistory.com/268</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이터레이터&lt;b&gt;(Iterator)&lt;/b&gt;가 무엇인가?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 사용하다보면은 흔히 만나는 예제가 있다&lt;/p&gt;
&lt;pre id=&quot;code_1662008800805&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for i in range(0,10):
	print(i)&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;위와 같이 range 를 사용해서 값을 하나씩 가져다 오는 구문인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 파이썬 내부적으로 iterator를 만들어서 하나씩 호출하는 구조를 가진다&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;간지가 조금 더 있어보일것이다 (pythonic하게)&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;이터레이터(Iterator)의 구조&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단은 iterator (이터레이터)의 구조를 살펴보자&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;list1 = [&quot;안녕&quot;,&quot;Hello&quot;,&quot;니하오&quot;]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 리스트가 있고,&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;for x in list1 :&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; print(x)&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;이 리스타가 for문에서 어떻게 작동하냐면 내부적으로는 next(list1) 이라는 함수로 계속 다음번의 원소를 호출하는 구조를 가진다. 그리고 다음번 원소가 없을때에는 StopIteration이라는 예외가 발생하면서 for문이 종료를 시켜준다.&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;클래스로 이터레이터(Iterator) 만들기&amp;nbsp;&lt;/b&gt;&lt;/h3&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;클래스에다 __init__()메서드 구현, __iter__() 메서드 구현, __next__()구현 을 하면 해당 클래스를 이터레이터로 사용을 할수가 있다&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;우리가 자주쓰는 Range 함수를 직접 클래스로 만들어서 사용을 해보자&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래와 같이 구현을 하게되면 Range를 사용하지 않아도 우리가 만든 MyRange 클래스로 사용이 가능하다&lt;/p&gt;
&lt;pre id=&quot;code_1662009574984&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MyRange():
    def __init__(self, begin, stop):
        self.current = begin
        self.stop = stop

    def __iter__(self):
        return self

    def __next__(self):
        if self.current &amp;lt; self.stop:
            temp = self.current
            self.current += 1
            return temp
        else:
            raise StopIteration
        

for i in MyRange(1, 5):
    print(i, end=&quot; &quot;)&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;__iter__메서드와 __next__메서드를 추가적으로 구현한다고 생각하면 간단하다&lt;/p&gt;</description>
      <category>CS/파이썬</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/268</guid>
      <comments>https://dogfoottech.tistory.com/268#entry268comment</comments>
      <pubDate>Thu, 1 Sep 2022 14:22:01 +0900</pubDate>
    </item>
    <item>
      <title>고능력 프로그래머가 되는 관점</title>
      <link>https://dogfoottech.tistory.com/262</link>
      <description>&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;구체적으로 하드웨어라는 것은 CPU, 메모리, 보조디스크, 다른 PC 등으로 나눠질수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을 자료구조와 알고리즘이라는 단어로 설명을 하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전문적으로는 성능 측정등을 하는 이유가 이것에 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 프로그래머는 혼자서 산출해내는 아웃풋이 한계가 있기에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다른 프로그래머와 협업을 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 다른 사람이 쓴 코드를 잘 해석하고, 잘 조합하는 것도 능력이고&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;그리고 프로그래밍 분야의 발전속도는 기하급수적이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한달, 한달 새로운 지식이 생겨나가고 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;과거의 나와 미래의 나 자신에게 코드로 대화를 해야되기 때문에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서화에 대한 이슈도 중요하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/262</guid>
      <comments>https://dogfoottech.tistory.com/262#entry262comment</comments>
      <pubDate>Thu, 18 Aug 2022 10:02:06 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 - async io 에 대해서 알아보자</title>
      <link>https://dogfoottech.tistory.com/260</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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;async io의 단어적 뜻은 Asynchronous IO 라는 단어적 뜻을 가지고 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동시성으로 여러개의&amp;nbsp; 비동기 IO-Bound 작업들을 관리하는 것을 그 목적으로 가진다&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;AsyncIO를 사용하기 위해서는 기본적인 키워드 2개에 대해서 알고 있어야 한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;async, await 가 바로 그 두개의 키워디 인데,&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;함수 앞에 async 를 붙이게 되면, 해당 함수가 코루틴 객체로 바뀌면서 async io에서 사용이 가능하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 await 키워드는 뒤에 특정 작업 ( awaitable 속성을 가진 객체) 을 넣어주면 실행이 가능한 상황이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660698032027&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import asyncio

async def test_task():
    print(&quot;Hello World!&quot;)
    await asyncio.sleep(2)
    
    print(&quot;end&quot;)
    return &quot;OKAY&quot;
    


async def main():
    task1 = asyncio.create_task(test_task())
    task2 = asyncio.create_task(test_task())
    
    result = await asyncio.gather(task1, task2)


if __name__ == &quot;__main__&quot;:
	await main()&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;&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;async 키워드가 붙지 않는 함수에서도 asyncio를 사용하고 싶을 순간이 있을것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴때는 쓰레드를 이용해서 asyncio를 구현을 하면 가능해진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660698769591&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import asyncio
import time
import threading

lock = threading.Lock()


def block_task(task):
    with Lock:
        print(task, &quot;Hello&quot;)
    
    time.sleep(1)
    
    with Lock:
        print(task,&quot;World&quot;)
    return &quot;OK&quot;


async def main():
    loop = asyncio.get_running_loop()
    
    r1 = loop.run_in_executor(None, blocked_task, &quot;Task1&quot;)
    r2 = loop.run_in_executor(None, blocked_task, &quot;Task2&quot;)
    
    
    result = await asyncio.gather(r1,r2)
    
    print(result)


if __name__ ==&quot;__main__&quot;:
    await main()&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 파이썬에서 http 통신을 위해서는 request 패키지를 임포트해서 사용을 하는데, 이 패키지를 사용하면서 asyncio를 사용하기 위해서는 쓰레드를 위한 코드도 생성해야지 사용이 가능하다. 따라서 번거로움이 많아지는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aiohttp라는 패키지를 사용을 하면 번거로움이 사라진다.&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;</description>
      <category>CS/파이썬</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/260</guid>
      <comments>https://dogfoottech.tistory.com/260#entry260comment</comments>
      <pubDate>Wed, 17 Aug 2022 10:29:03 +0900</pubDate>
    </item>
    <item>
      <title>동시성과 병렬성에 관한 정리</title>
      <link>https://dogfoottech.tistory.com/259</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-4775535635045022&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&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;&lt;b&gt;동시성과 병렬성&lt;/b&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;동시성이라는 것은 여러개의 일들을 동시에 진행되는 것처럼 하는 것이다. 예를들어 우리가 한꺼번에 일을 처리를 하는것을 들수가 있다. n잡러들에게는 여러개의 일을 같이 진행을 하는데, 이것이 현실상의 동시성을 얘기를 하는것이라고 생각이 든다. 프로그래밍에서는 io-bound의 문제들을 일컫는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/o2BV5/btrJqLkZS5R/dQ8Sx2IJKCIjaRlQkXNveK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/o2BV5/btrJqLkZS5R/dQ8Sx2IJKCIjaRlQkXNveK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/o2BV5/btrJqLkZS5R/dQ8Sx2IJKCIjaRlQkXNveK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo2BV5%2FbtrJqLkZS5R%2FdQ8Sx2IJKCIjaRlQkXNveK%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;554&quot; height=&quot;309&quot; data-origin-width=&quot;554&quot; data-origin-height=&quot;309&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;병렬성이라는 것은 동시성과는 다르게 하나일을 여러가지 코어가 나누어서 집중적으로 진행한다는 것이다. 하나의 큰 작업 ( ex: 고시공부) 를 공부할때에, 오전에는 A과목을, 오후에는 B과목을.. 등등 하나의 큰 목표를 위해 그 작업을 잘게 쪼개서 진행을 한다.&amp;nbsp; 이것을 병렬성이라고 생각할수 있음. 프로그래밍에서는 cpu-bound의 문제를 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;문제&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;예시&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;전략&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;멀티쓰레딩&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;멀티프로세싱&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;Asyncio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;&amp;nbsp;IO-BOUND&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;이미지 다운로드&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;동시성&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;△&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;O&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;CPU-BOUND&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;행렬계산&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;병렬성&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;X(GIL)&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;O&lt;/td&gt;
&lt;td style=&quot;width: 16.6667%;&quot;&gt;X&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;여기서 잠깐 동기식(synchronous)과 비동기식(asynchronous)라는 단어도 자주 나오는데, 개념을 알고가야지 해당부분에 대한 헷갈림이 덜해진다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비동기식은 : 완전히 독립적으로 진행이 되고, 대기하지 않아도 되는 작업들을 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동기식은 서로 데이터들을 주기적으로 모아주고, 공유하는 작업을 진행을 할때에 말한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동시성이나 병렬성을 구현을 할때에 비동기식과 동기식으로 둘다 구현이 가능하지만, 당연히 비동기식으로 구현하는게 효율이 더 좋다. 하지만 풀려는 문제에 따라서 알고리즘을 동기식으로 구현을 해야할수도 있다는 것을 알아두어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국에는 단어가 가지고 있는 뜻이 헷갈려서 어렵다고 생각을 하는 것인데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 단어의 뜻을 정확히 알고 있으면 해결이 된다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 동기식 vs 비동기식 (synchronous vs asynchronous)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) IO-BOUND vs CPU-BOUND&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 동시성 vs 병렬성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4) 멀티쓰레딩 vs 멀티프로세싱 vs Async io&lt;/b&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;</description>
      <category>CS/파이썬</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/259</guid>
      <comments>https://dogfoottech.tistory.com/259#entry259comment</comments>
      <pubDate>Thu, 11 Aug 2022 11:32:53 +0900</pubDate>
    </item>
    <item>
      <title>EC2  https 설정</title>
      <link>https://dogfoottech.tistory.com/258</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;카페24와 아임웹에서 iframe을 사용하려 했더니,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 문제상으로 https로 접근을 해야된다고 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 ec2에서 로드밸런스 붙이고, 거기다가 https로 접근해서 진행하는 순서를 함.&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;https로만 접근을 하는것이여서,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로드밸런스 리스너에 HTTPS:443 만 열어서 설정을 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzJnKG/btrAJ2n1Uz8/9i4wwjHLJxZZ8JYO0cYHUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzJnKG/btrAJ2n1Uz8/9i4wwjHLJxZZ8JYO0cYHUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzJnKG/btrAJ2n1Uz8/9i4wwjHLJxZZ8JYO0cYHUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzJnKG%2FbtrAJ2n1Uz8%2F9i4wwjHLJxZZ8JYO0cYHUK%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;1128&quot; height=&quot;640&quot; data-origin-width=&quot;1128&quot; data-origin-height=&quot;640&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;로드밸런스에 타겟을 설정을 하는데, 타겟은 포트 80번을 열어서 진행을 함. (아마도 ec2랑 포트 80으로 연결이 되는듯함) ec2에서는 gunicorn의 포트를 80으로 열어놔야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1559&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxVekJ/btrAJiSqx4M/M7LXKgTKdPII6VUN1IHLTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxVekJ/btrAJiSqx4M/M7LXKgTKdPII6VUN1IHLTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxVekJ/btrAJiSqx4M/M7LXKgTKdPII6VUN1IHLTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxVekJ%2FbtrAJiSqx4M%2FM7LXKgTKdPII6VUN1IHLTk%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;1559&quot; height=&quot;329&quot; data-origin-width=&quot;1559&quot; data-origin-height=&quot;329&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1601&quot; data-origin-height=&quot;755&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tOQdg/btrAJTku6Gq/7G5xyqcPhyuRpHddjW1AxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tOQdg/btrAJTku6Gq/7G5xyqcPhyuRpHddjW1AxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tOQdg/btrAJTku6Gq/7G5xyqcPhyuRpHddjW1AxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtOQdg%2FbtrAJTku6Gq%2F7G5xyqcPhyuRpHddjW1AxK%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;1601&quot; height=&quot;755&quot; data-origin-width=&quot;1601&quot; data-origin-height=&quot;755&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo&amp;nbsp;gunicorn&amp;nbsp;-k&amp;nbsp;uvicorn.workers.UvicornWorker&amp;nbsp;--access-logfile&amp;nbsp;./gunicorn-access.log&amp;nbsp;testserver:app&amp;nbsp;--bind&amp;nbsp;0.0.0.0:80&amp;nbsp;--workers&amp;nbsp;2&amp;nbsp;--daemon&lt;/p&gt;</description>
      <category>CS/AWS</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/258</guid>
      <comments>https://dogfoottech.tistory.com/258#entry258comment</comments>
      <pubDate>Thu, 28 Apr 2022 16:30:44 +0900</pubDate>
    </item>
    <item>
      <title>[AWS] 도메인과 서버(EC2) 연결하기</title>
      <link>https://dogfoottech.tistory.com/257</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;서비스를 배포하기 위해서는 도메인이 필수입니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;도메인을 통해 IP로는 나타낼 수 없는 자신의 서비스에 대한 아이덴티티를 도메인을 통해 나타내는 것은 물론&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;사용자들도 편하게 서비스에 접근할 수 있습니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;이 글에서는 AWS의 EC2인스턴스와 도메인을 연결하여 보겠습니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;순서는 다음과 같습니다&lt;/span&gt;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span&gt;1. 도메인 취득&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;2. Route53을 이용하여 도메인과 EC2 인스턴스 연결&lt;/span&gt;&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;도메인 취득하기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;도메인은 기본적으로 비용이 들어갑니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다만 무료로 도메인을 취득할 수 있는 곳들도 있으나&lt;span&gt;&amp;nbsp;&lt;/span&gt;해당 도메인들은 불안정하므로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;toy-project가 아닌 실비스를 생각중이시라면&amp;nbsp;&lt;b&gt;유료 도메인을 사용하시기를 권장&lt;/b&gt;드립니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;유료 도메인은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.gabia.com/&quot;&gt;가비아&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.cafe24.com/&quot;&gt;카페24&lt;/a&gt;,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.kr.godaddy.com/&quot;&gt;고대디&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;등 유명한 도메인 구매 사이트에서 손쉽게 구매하실 수 있습니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;또한 AWS에서도 도메인 취득을 지원하지만 국내 도메인 판매업체에서 구입하는 것이 좀 더 쉽습니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;AWS에서 취득하는 방법은 아래에 자세하게 나와있습니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;u&gt;&lt;a href=&quot;https://aws.amazon.com/ko/getting-started/tutorials/get-a-domain/&quot;&gt;https://aws.amazon.com/ko/getting-started/tutorials/get-a-domain/&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마음에 드는 업체를 선정하셔서 회원가입 및 도메인 검색을 통해 해당 도메인 사용이 가능한지 체크를 하고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;구입 절차를 밟으시면 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;단, 구입시&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;소유자 정보&lt;/span&gt;를 작성할 때&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;실수가 없도록 주의&lt;/b&gt;하셔야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;특히&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;이메일&lt;/span&gt;은 도메인 소유를 증명할 때 자주 사용되니 반드시 구매자가 실제로 사용중인 이메일을 작성하셔야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;네임서버&lt;/span&gt;를 입력하는 부분은 우선 해당 도메인업체의 네임서버를 이용한다고 표시해놓고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이후에 AWS에서 네임서버를 받아 다시 수정해주면 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;&lt;span&gt;Route53을 도메인-EC2 연결&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;도메인 구입을 한 후에 해당 도메인과 AWS의 EC2 인스턴스를 Route53 서비스를 통해 연결해 보겠습니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;- Route53 :&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;도메인 등록(구입) / DNS 라우팅(IP를 Domain과 연결) / 상태 및 트래픽 확인을 제공하는 AWS 서비스입니다&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m6UIB/btrAcULqj0t/ELNXgXC0J9WS4D2oFkhxYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m6UIB/btrAcULqj0t/ELNXgXC0J9WS4D2oFkhxYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m6UIB/btrAcULqj0t/ELNXgXC0J9WS4D2oFkhxYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm6UIB%2FbtrAcULqj0t%2FELNXgXC0J9WS4D2oFkhxYk%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;1280&quot; height=&quot;760&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xKmFT/btqCRy7eONL/EV36TBNRsWz9KoaPKD21a0/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;AWS에 로그인을 한 후 [Route 53] 서비스를 선택합니다&quot;&gt;&lt;/span&gt;AWS에 로그인을 한 후 [Route 53] 서비스를 선택합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ohC6D/btrAb9vAGKH/YqeHCyuRbd3KesRuwr4Zm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ohC6D/btrAb9vAGKH/YqeHCyuRbd3KesRuwr4Zm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ohC6D/btrAb9vAGKH/YqeHCyuRbd3KesRuwr4Zm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FohC6D%2FbtrAb9vAGKH%2FYqeHCyuRbd3KesRuwr4Zm1%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;1280&quot; height=&quot;495&quot; data-filename=&quot;2.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;495&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhy8dQ/btqCQoD0CPe/ffrwqKGfKc3mbSJtCwPoR0/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;왼쪽 사이드바의 [호스팅 영역]을 선택한 후 [호스팅 영역 생성]을 클릭합니다&quot;&gt;&lt;/span&gt;왼쪽 사이드바의 [호스팅 영역]을 선택한 후 [호스팅 영역 생성]을 클릭합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;377&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cw8hIr/btrAc7jVDIy/Zhj8FvNBCtewWjvYKshuzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cw8hIr/btrAc7jVDIy/Zhj8FvNBCtewWjvYKshuzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cw8hIr/btrAc7jVDIy/Zhj8FvNBCtewWjvYKshuzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcw8hIr%2FbtrAc7jVDIy%2FZhj8FvNBCtewWjvYKshuzK%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;594&quot; height=&quot;377&quot; data-filename=&quot;3.png&quot; data-origin-width=&quot;594&quot; data-origin-height=&quot;377&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAvrOa/btqCSXS0csN/GZKjBM8IY7J7kbEBbzjfy1/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;오른쪽에 다음과 같은 화면이 뜨면 구입한 도메인 이름을 입력합니다&quot;&gt;&lt;/span&gt;오른쪽에 다음과 같은 화면이 뜨면 구입한 도메인 이름을 입력합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQkCTo/btrAcu7LGcO/NiOw7XkUjk23KggV1HyIj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQkCTo/btrAcu7LGcO/NiOw7XkUjk23KggV1HyIj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQkCTo/btrAcu7LGcO/NiOw7XkUjk23KggV1HyIj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQkCTo%2FbtrAcu7LGcO%2FNiOw7XkUjk23KggV1HyIj1%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;1098&quot; height=&quot;282&quot; data-filename=&quot;4.png&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAqmGO/btqCRx8hidS/kpAg9okpEO5b5cPk6NVY40/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;생성을 누르면 다음과 같이 레코드세트가 만들어 지는 것을 확인하실 수 있습니다&quot;&gt;&lt;/span&gt;생성을 누르면 다음과 같이 레코드세트가 만들어 지는 것을 확인하실 수 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;415&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cle00R/btrAgpKroG5/Xb624tAUE7D977n9qQqQBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cle00R/btrAgpKroG5/Xb624tAUE7D977n9qQqQBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cle00R/btrAgpKroG5/Xb624tAUE7D977n9qQqQBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcle00R%2FbtrAgpKroG5%2FXb624tAUE7D977n9qQqQBk%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;1280&quot; height=&quot;415&quot; data-filename=&quot;5.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;415&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBUEtI/btqCPBwOWnf/jKrES4c1HpLGYwnfKsbtG0/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;생성된 레코드 세트 중 NS 유형을 선택하고 해당 값들을 복사합니다&quot;&gt;&lt;/span&gt;생성된 레코드 세트 중 NS 유형을 선택하고 해당 값들을 복사합니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;460&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxnQyV/btrAdZsdae4/M5gykLzeaDFTHpBjYj4Pw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxnQyV/btrAdZsdae4/M5gykLzeaDFTHpBjYj4Pw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxnQyV/btrAdZsdae4/M5gykLzeaDFTHpBjYj4Pw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxnQyV%2FbtrAdZsdae4%2FM5gykLzeaDFTHpBjYj4Pw0%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;549&quot; height=&quot;460&quot; data-filename=&quot;6.png&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;460&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brPzui/btqCRy7eTkL/FSx0HkTz3ppMJMGCqEzqwK/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;도메인을 구입한 업체에 다시 들어가 해당 도메인관리에서 네임서버(NS)를 앞서 복사한 값으로 변경하여 줍니다&quot;&gt;&lt;/span&gt;도메인을 구입한 업체에 다시 들어가 해당 도메인관리에서 네임서버(NS)를 앞서 복사한 값으로 변경하여 줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;위의 과정을 마치면 도메인과 Route53의 연결이 완료된 것입니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;잘 연결되었는지 확인하시려면 다음 사이트에 방문하셔서 연결하신 도메인을 검색하면 NS 항목에&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Route53에서 복사한 값들이 입력된 것을 확인하실 수 있습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;u&gt;&lt;a href=&quot;https://www.ultratools.com/tools/dnsLookup&quot;&gt;https://www.ultratools.com/tools/dnsLookup&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;혹은 cmd에서 다음과 명령어를 사용하셔도 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1650692001083&quot; class=&quot;css&quot; data-ke-language=&quot;c++&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;nslookup domainname.com&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이제 EC2 인스턴스와 해당 도메인을 연결해 보도록 하겠습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;527&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rlAUz/btrAePbNL3H/KjnKZwkQVTHeZdU2pLkue0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rlAUz/btrAePbNL3H/KjnKZwkQVTHeZdU2pLkue0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rlAUz/btrAePbNL3H/KjnKZwkQVTHeZdU2pLkue0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrlAUz%2FbtrAePbNL3H%2FKjnKZwkQVTHeZdU2pLkue0%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;1280&quot; height=&quot;527&quot; data-filename=&quot;7.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;527&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LtgcP/btqCRy0q8GV/LL5g2BP3AYq7aOKGfTgda1/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;[Route 53]으로 돌아와 [레코드 세트 생성]을 통해 [A 유형]을 생성해줍니다&quot;&gt;&lt;/span&gt;[Route 53]으로 돌아와 [레코드 세트 생성]을 통해 [A 유형]을 생성해줍니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;A유형의 레코드를 통해 EC2의 IP와 도메인을 연결할 것입니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그림과 같이 설정한 후에 값에는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;EC2의 탄력적 IP&lt;/b&gt;를 입력합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://artiiicy.tistory.com/17&quot;&gt;(탄력적IP IP만들기)&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;만약 도메인앞에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;www. 를 붙여서 접속되기를 원한다면&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;다음과 같이 레코드세트를 하나 더 생성해주시면 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CcaZR/btrAdYthpBP/NInn6oZDJ0Nap1iPWCshKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CcaZR/btrAdYthpBP/NInn6oZDJ0Nap1iPWCshKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CcaZR/btrAdYthpBP/NInn6oZDJ0Nap1iPWCshKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCcaZR%2FbtrAdYthpBP%2FNInn6oZDJ0Nap1iPWCshKK%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;1280&quot; height=&quot;518&quot; data-filename=&quot;8.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RlTwb/btqCQ3TSuAP/zth4eL7Uim7IkGgp9kGK3K/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;[레코드 세트 생성] 클릭 후 [이름]에 www 입력, [값]에 www를 제외한 해당 도메인 입력&quot;&gt;&lt;/span&gt;[레코드 세트 생성] 클릭 후 [이름]에 www 입력, [값]에 www를 제외한 해당 도메인 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;만약 등록하고자 하는 도메인이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.example.com/&quot;&gt;www.example.com&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이라면&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이름 칸에는 www를, 밑의 값에는 example.com 만 입력해주시면 됩니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이제 도메인-EC2 인스턴스의 연결이 모두 끝났습니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;잘 등록이 되었는지 다시 아래 사이트 방문 혹은 cmd를 이용하여 도메인을 검색한 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;결과를 확인합니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;u&gt;&lt;a href=&quot;https://www.ultratools.com/tools/dnsLookup&quot;&gt;https://www.ultratools.com/tools/dnsLookup&lt;/a&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;764&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w9OjL/btrAgpRcOne/sfKey60XA3Y7aBivREiILK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w9OjL/btrAgpRcOne/sfKey60XA3Y7aBivREiILK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w9OjL/btrAgpRcOne/sfKey60XA3Y7aBivREiILK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw9OjL%2FbtrAgpRcOne%2FsfKey60XA3Y7aBivREiILK%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;860&quot; height=&quot;764&quot; data-filename=&quot;9.png&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;764&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJWIja/btqCRyMTket/Mg5KAl9n12h7W8XKczHrvK/img.png&quot; data-lightbox=&quot;lightbox&quot; data-alt=&quot;등록한 도메인 연결정보 확인&quot;&gt;&lt;/span&gt;등록한 도메인 연결정보 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>CS/AWS</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/257</guid>
      <comments>https://dogfoottech.tistory.com/257#entry257comment</comments>
      <pubDate>Sat, 23 Apr 2022 14:33:27 +0900</pubDate>
    </item>
    <item>
      <title>개인정보처리방침</title>
      <link>https://dogfoottech.tistory.com/252</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;개인정보 처리방침&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스위츠랩 (이하 회사)는&amp;nbsp;「개인정보 보호법」&amp;nbsp;제30조에 따라 이용자의 개인정보를 보호하고 이와 관련한 고충을 신속하고 원활하게 처리할 수 있도록 하기 위하여 다음과 같이 개인정보 처리방침을 수립 및 공개합니다.&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;제1조 (개인정보의 처리목적)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사는 다음의 목적을 위하여 개인정보를 처리하며, 처리하고 있는 개인정보는 다음의 목적 이외의 용도로는 이용되지 않습니다. 이용 목적이 변경되는 경우에는 「개인정보 보호법」 제18조에 따라 별도의 동의를 받는 등 필요한 조치를 이행할 예정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 회사는 만 14세 이상의 이용자를 대상으로 서비스를 제공하며, 만 14세 미만 아동의 개인정보가 수집된 사실을 인지하는 경우 해당 정보를 지체없이 삭제하겠습니다&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원 가입 및 관리&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회원 가입의사 확인과 회원제 서비스 제공에 따른 회원자격 유지 및 관리, 서비스 부정이용 방지, 각종 고지와 통지, 고충처리 목적으로 개인정보를 처리합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서비스 제공&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스 및 콘텐츠, 광고를 포함한 맞춤형 서비스 제공을 목적으로 개인정보를 처리합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;고충처리&lt;/li&gt;
&lt;/ol&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개인정보 (TrueDepth API)&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TrueDepth API를 이용한 사용자 얼굴인식 정보를 이용해 사용자들의 더욱 원활한 서비스 이용을 하도록 처리합니다&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;제2조 (개인정보의 처리 및 보유기간)&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;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;회원 가입 및 관리&amp;nbsp;: 회원 탈퇴 시까지&lt;/li&gt;
&lt;li&gt;TrueDepthAPI : &amp;nbsp;별도의 저장없이 데이터 정보만 처리. 즉시 폐기.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 다음의 사유에 해당하는 경우에는 해당 사유 종료 시까지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 관계 법령 위반에 따른 수사, 조사 등이 진행 중인 경우에는 해당 수사, 조사 종료 시까지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 서비스 이용에 따른 채권, 채무관계 잔존 시에는 해당 채권, 채무관계 정산 시까지&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서비스 제공&amp;nbsp;: 서비스 공급 완료 또는 서비스 이용 종료 시까지&lt;/li&gt;
&lt;li&gt;고충처리&amp;nbsp;: 고충 처리 완료 시까지&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만, 다음의 사유에 해당하는 경우에는 해당 기간 종료 시까지&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;관련법령&lt;/td&gt;
&lt;td&gt;수집정보&lt;/td&gt;
&lt;td&gt;보유기간&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;통신비밀보호법&lt;/td&gt;
&lt;td&gt;서비스 이용 관련 정보(접속로그)&lt;/td&gt;
&lt;td&gt;3개월&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td rowspan=&quot;3&quot;&gt;전자상거래 등에서의 소비자 보호에 관한 법률&lt;/td&gt;
&lt;td&gt;소비자의 불만 또는 분쟁처리에 관한 기록&lt;/td&gt;
&lt;td&gt;3년&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;계약 또는 청약철회 등에 관한 기록&lt;/td&gt;
&lt;td&gt;5년&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;대금결제 및 재화 등의 공급에 관한 기록&lt;/td&gt;
&lt;td&gt;5년&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제3조 (개인정보의 제3자 제공)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 회사는 이용자의 개인정보를 제1조(개인정보의 처리 목적)에서 명시한 범위 내에서만 처리하며, 정보주체의 동의, 법률의 특별한 규정 등 「개인정보 보호법」 제17 조 및 제18조에 해당하는 경우에만 개인정보를 제3자에게 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 회사는 제3자에게 개인정보를 제공하지 않으며, 제공하게 될 경우 이용자에게 동의를 받겠습니다 .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제4조 (개인정보처리의 위탁)&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;제5조 (이용자와 법정대리인의 권리&amp;bull;의무 및 행사방법)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 이용자는 회사에 대해 언제든지 개인정보 열람, 정정, 삭제, 처리정지 요구 등의 권리를 행사할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 개인정보 열람 및 처리정지 요구는 개인정보보호법 제35조 제4항, 제37조 제2항에 의하여 이용자의 권리가 제한될 수 있습니다.&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;middot;삭제의 요구, 처리정지의 요구 시 열람 등 요구를 한 자가 본인이거나 정당한 대리인인지를 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;⑤ 제4항에 따른 권리행사 주체가 대리인(이용자의 법정대리인이나 위임을 받은 자)인 경우 &amp;ldquo;개인정보 처리 방법에 관한 고시(제2020-7호)&amp;rdquo; 별지 제11호 서식에 따른 위임장을 제출하셔야 합니다.&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;제6조 (처리하는 개인정보 항목)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 회사는 다음의 개인정보 항목을 처리하고 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;구분&lt;/td&gt;
&lt;td&gt;수집&amp;middot;이용목적&lt;/td&gt;
&lt;td&gt;필수/선택&amp;nbsp;&lt;/td&gt;
&lt;td&gt;수집 및 이용항목&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;마케팅&lt;/td&gt;
&lt;td&gt;맞춤형 광고&lt;/td&gt;
&lt;td&gt;선택&lt;/td&gt;
&lt;td&gt;광고식별자, 서비스 이용기록, 쿠키&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TrueDepthAPI&lt;/td&gt;
&lt;td&gt;서비스 이용&lt;/td&gt;
&lt;td&gt;필수&lt;/td&gt;
&lt;td&gt;TrueDepth API 데이터&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 서비스 이용과정에서 아래 개인정보 항목이 자동으로 생성되어 수집될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP주소, 쿠키, 서비스 이용기록, 광고식별자, 방문기록, 기기 정보(유형, 모델명, OS 버전, APP 버전, 기기 식별자, 언어 및 국가)&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;제7조 (개인정보의 파기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 회사는 이용자로부터 동의 받은 개인정보의 보유기간이 경과하거나 처리목적을 달성하여 더 이상 개인정보가 필요하지 않게 된 경우 지체없이 해당 개인정보를 파기합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 제1항 해당됨에도 불구하고 다른 법령에 따라 개인정보를 계속 보존하여야 하는 경우에는, 해당 개인정보를 별도의 데이터베이스(DB)로 옮기거나 보관장소를 달리하여 보존합니다. (법령에 따른 보관 기간은 제2조를 참조하시기 바랍니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;③ 개인정보 파기의 절차 및 방법은 다음과 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파기절차&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 개인정보 도용 등으로 인한 피해 발생 시 복구와 피해자 보호 등을 위하여 회원가입 시 수집한 개인정보를&amp;nbsp;14일 동안 임시로 보관할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 회사는 파기 사유가 발생한 개인정보를 선정하고, 회사의 개인정보 보호책임자의 승인을 받아 개인정보를 파기합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파기방법&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 전자적 파일의 형태 : 복구 및 재생이 되지 않도록 기술적인 방법 이용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 종이 문서 : 분쇄기로 분쇄하거나 소각&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제8조 (개인정보의 안전성 확보조치)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사는 개인정보의 안전성 확보를 위해 다음과 같은 조치를 취하고 있습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;관리적 조치&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부관리계획 수립 및 시행, 정기적 임직원 교육, 정기적인 접속기록 점검, 수탁사 점검 등&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;기술적 조치&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개인정보처리시스템 등의 접근권한 관리, 접근통제시스템 설치, 내부 관리계획에 따른 암호화 (전송구간 및 저장 시), 보안프로그램 설치&lt;/p&gt;
&lt;ol style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;물리적 조치&lt;/li&gt;
&lt;/ol&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;제9조 (개인정보 자동 수집 장치의 설치∙운영 및 거부에 관한 사항)&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;제10조 (개인정보 보호책임자)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 회사는 개인정보 처리에 관한 업무를 총괄하고 개인정보 처리와 관련한 이용자의 불만처리 및 피해구제 등을 위하여 아래와 같이 개인정보 보호책임자를 지정하고 있습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;이름&lt;/td&gt;
&lt;td&gt;소속&lt;/td&gt;
&lt;td&gt;직위&amp;nbsp;&lt;/td&gt;
&lt;td&gt;연락처&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;양인황&lt;/td&gt;
&lt;td&gt;스위츠랩&lt;/td&gt;
&lt;td&gt;대표&lt;/td&gt;
&lt;td&gt;sweetz.ceo@gmail.com&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;제11조 (권익침해 구제방법)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이용자는 개인정보 침해에 대한 피해구제나 상담 등이 필요하신 경우에 아래의 기관에 문의하실 수 있습니다&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;기관명&lt;/td&gt;
&lt;td&gt;홈페이지&lt;/td&gt;
&lt;td&gt;전화&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개인정보 침해신고센터&lt;/td&gt;
&lt;td&gt;privacy.kisa.or.kr&lt;/td&gt;
&lt;td&gt;(국번없이) 118&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;개인정보 분쟁조정위원회&lt;/td&gt;
&lt;td&gt;www.kopico.go.kr&lt;/td&gt;
&lt;td&gt;(국번없이) 1833-6972&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;대검찰청 사이버범죄수사단&lt;/td&gt;
&lt;td&gt;www.spo.go.kr&lt;/td&gt;
&lt;td&gt;02-3480-3573&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;경찰청 사이버안전국&lt;/td&gt;
&lt;td&gt;&lt;a href=&quot;https://cyberbureau.police.go.kr&quot;&gt;https://cyberbureau.police.go.kr&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;(국번없이) 182&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제12조 본 개인정보처리방침의 적용 범위&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 본 개인정보처리방침은 회사가 제공하는 모든 서비스(웹사이트 및 APP 포함)에 적용되지만, 서비스의 특성이 상이한 경우, 서비스별로 특화된 개인정보처리방침이 적용될 수 있습니다.&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;제13조 (개인정보 처리방침의 변경 및 고지)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① 본 개인정보처리방침의 내용 추가, 삭제 및 수정이 있을 경우 개정 최소 7일 전에 &amp;lsquo;공지사항&amp;rsquo;을 통해 사전 공지를 하겠습니다. 다만, 수집하는 개인정보의 항목, 이용목적의 변경 등과 같이 이용자 권리의 중대한 변경이 발생할 때에는 최소 14일 전에 공지하며, 필요 시 이용자 동의를 다시 받을 수도 있습니다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;② 이 개인정보 처리방침은 2021.11.11부터 적용됩니다&lt;/p&gt;</description>
      <category>Privacy</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/252</guid>
      <comments>https://dogfoottech.tistory.com/252#entry252comment</comments>
      <pubDate>Tue, 16 Nov 2021 08:42:16 +0900</pubDate>
    </item>
    <item>
      <title>[IOS] Lidar 센서를 사용해보자(번역)</title>
      <link>https://dogfoottech.tistory.com/249</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;**들어가기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 해당 문서는 &lt;a href=&quot;https://qiita.com/shu223/items/722077b4bbe868f58ddc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;qiita.com/shu223/items/722077b4bbe868f58ddc&lt;/a&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;** 번역시작&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;제목 : ARKit&amp;nbsp;4&amp;nbsp;LiDAR&amp;nbsp;Depth&amp;nbsp;API&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;iOS&amp;nbsp;기기에서&amp;nbsp;처음&amp;nbsp;LiDAR&amp;nbsp;스캐너를&amp;nbsp;탑재&amp;nbsp;한&amp;nbsp;iPad&amp;nbsp;Pro의&amp;nbsp;발매와&amp;nbsp;동시에&amp;nbsp;출시&amp;nbsp;된&amp;nbsp;ARKit&amp;nbsp;3.5에서는&amp;nbsp;LiDAR를&amp;nbsp;이용하여&amp;nbsp;reconstraction&amp;nbsp;한&amp;nbsp;3D&amp;nbsp;메쉬는&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;있었지만,&amp;nbsp;그&amp;nbsp;계산에&amp;nbsp;이용되고있는&amp;nbsp;것&amp;nbsp;뎁스&amp;nbsp;(깊이)&amp;nbsp;데이터에&amp;nbsp;액세스&amp;nbsp;할&amp;nbsp;수&amp;nbsp;없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;670&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvRHTa/btq4pyGO4Ja/2RJGvK90BySRfD6dCOqhl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvRHTa/btq4pyGO4Ja/2RJGvK90BySRfD6dCOqhl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvRHTa/btq4pyGO4Ja/2RJGvK90BySRfD6dCOqhl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvRHTa%2Fbtq4pyGO4Ja%2F2RJGvK90BySRfD6dCOqhl0%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;1280&quot; height=&quot;670&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;670&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;이후&amp;nbsp;발표&amp;nbsp;된&amp;nbsp;ARKit&amp;nbsp;4&amp;nbsp;/&amp;nbsp;iOS&amp;nbsp;14&amp;nbsp;(/&amp;nbsp;iPadOS&amp;nbsp;14)에서&amp;nbsp;드디어&amp;nbsp;LiDAR에서&amp;nbsp;측정&amp;nbsp;한&amp;nbsp;깊이를&amp;nbsp;얻을&amp;nbsp;수있게되었다.&amp;nbsp;기존의&amp;nbsp;깊이와&amp;nbsp;구별하기&amp;nbsp;위해&amp;nbsp;&quot;장면&amp;nbsp;깊이&amp;nbsp;(Scene&amp;nbsp;Depth)&amp;nbsp;'이라고도하는&amp;nbsp;것&amp;nbsp;같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;LiDAR&amp;nbsp;깊이의&amp;nbsp;취득&amp;nbsp;방법&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiDAR&amp;nbsp;유래의&amp;nbsp;깊이&amp;nbsp;데이터는&amp;nbsp;ARWorldTrackingConfiguration&amp;nbsp;이용시&amp;nbsp;frameSemantics&amp;nbsp;속성에&amp;nbsp;.sceneDepth&amp;nbsp;옵션을&amp;nbsp;지정하여&amp;nbsp;검색&amp;nbsp;가능하게된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1620507716682&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let session = ARSession()
let configuration = ARWorldTrackingConfiguration()

// sceneDepth 옵션을 사용할 수 있는지 확인
if type(of: configuration).supportsFrameSemantics(.sceneDepth) {
   // Activate sceneDepth
   configuration.frameSemantics = .sceneDepth
}
session.run(configuration)&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;ARFrame에&amp;nbsp;새롭게&amp;nbsp;추가&amp;nbsp;된&amp;nbsp;sceneDepth&amp;nbsp;속성보다&amp;nbsp;LiDAR에서&amp;nbsp;측정&amp;nbsp;한&amp;nbsp;깊이&amp;nbsp;데이터를&amp;nbsp;얻을&amp;nbsp;수있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1620507816300&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;func session(_ session: ARSession, didUpdate frame: ARFrame) {
   guard let depthData = frame.sceneDepth else { return }
   // Use depth data
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;사용&amp;nbsp;가능한&amp;nbsp;구성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARConfiguration&amp;nbsp;프로토콜에&amp;nbsp;정의&amp;nbsp;된&amp;nbsp;frameSemantics&amp;nbsp;속성에&amp;nbsp;sceneDepth을&amp;nbsp;설정하기&amp;nbsp;때문에&amp;nbsp;API으로&amp;nbsp;사용할&amp;nbsp;수는&amp;nbsp;있지만,&amp;nbsp;API&amp;nbsp;레퍼런스의&amp;nbsp;sceneDepth&amp;nbsp;절에&amp;nbsp;설명보기&amp;nbsp;한&amp;nbsp;월드&amp;nbsp;추적&amp;nbsp;이외의&amp;nbsp;구성에서&amp;nbsp;사용할&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;a href=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1620507934988&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; data-og-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span&gt;If you enable this option on a world-tracking configuration's frameSemantics, &amp;nbsp;&lt;/span&gt;&lt;span&gt;ARKit includes depth information for regions of the current frame's capturedImage. &lt;/span&gt;&lt;span&gt;The world-tracking configuration exposes depth information in the sceneDepth property that it updates every frame.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;하드웨어적인&amp;nbsp;제약&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마찬가지로&amp;nbsp;sceneDepth&amp;nbsp;참조&amp;nbsp;페이지를 보자.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span&gt;ARKit supports scene depth only on LiDAR-capable devices&lt;/span&gt;&lt;/blockquote&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;A12&amp;nbsp;이상이나&amp;nbsp;조건은&amp;nbsp;아닌&amp;nbsp;것&amp;nbsp;같다.&amp;nbsp;(LiDAR이&amp;nbsp;실리&amp;nbsp;&amp;rarr;&amp;nbsp;필연적으로&amp;nbsp;고성능&amp;nbsp;칩이기&amp;nbsp;때문&amp;nbsp;일까)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&amp;lt;종래의&amp;nbsp;깊이&amp;nbsp;데이터와의&amp;nbsp;차이&amp;gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;지금까지도&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span&gt;(&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;2&quot;&gt;&lt;span&gt;특정 조건에서&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;3&quot;&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;4&quot;&gt;&lt;span&gt;ARKit&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;5&quot;&gt;&lt;span&gt;이용시&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;6&quot;&gt;&lt;span&gt;깊이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;7&quot;&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;8&quot;&gt;&lt;span&gt;에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;9&quot;&gt;&lt;span&gt;액세스&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;10&quot;&gt;&lt;span&gt;하는 것은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;11&quot;&gt;&lt;span&gt;가능했다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;12&quot;&gt;&lt;span&gt;ARFrame&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;13&quot;&gt;&lt;span&gt;의&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;14&quot;&gt;&lt;span&gt;capturedDepthData&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;15&quot;&gt;&lt;span&gt;속성&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;16&quot;&gt;&lt;span&gt;estimatedDepth&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;17&quot;&gt;&lt;span&gt;이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;18&quot;&gt;&lt;span&gt;종래부터&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;19&quot;&gt;&lt;span&gt;있던&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;20&quot;&gt;&lt;span&gt;깊이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;21&quot;&gt;&lt;span&gt;API입니다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;22&quot;&gt;&lt;span&gt;이번에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;23&quot;&gt;&lt;span&gt;추가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;24&quot;&gt;&lt;span&gt;된&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;25&quot;&gt;&lt;span&gt;깊이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;26&quot;&gt;&lt;span&gt;API와&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;27&quot;&gt;&lt;span&gt;무엇이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;28&quot;&gt;&lt;span&gt;다른가&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;29&quot;&gt;&lt;span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;깊이&amp;nbsp;데이터의&amp;nbsp;종류와&amp;nbsp;취득&amp;nbsp;조건&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우선&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span&gt;물론&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;2&quot;&gt;&lt;span&gt;깊이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;3&quot;&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;4&quot;&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;5&quot;&gt;&lt;span&gt;종류가&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;6&quot;&gt;&lt;span&gt;다르다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;7&quot;&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;8&quot;&gt;&lt;span&gt;이에 따라&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;9&quot;&gt;&lt;span&gt;얻을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;10&quot;&gt;&lt;span&gt;수있는 조건&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;11&quot;&gt;&lt;span&gt;도 다르다.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;12&quot;&gt;&lt;span&gt;capturedDepthData&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;13&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;14&quot;&gt;&lt;span&gt;True&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;15&quot;&gt;&lt;span&gt;-&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;16&quot;&gt;&lt;span&gt;Depth&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;17&quot;&gt;&lt;span&gt;카메라&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;18&quot;&gt;&lt;span&gt;유래&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;19&quot;&gt;&lt;span&gt;의&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;20&quot;&gt;&lt;span&gt;깊이&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;21&quot;&gt;&lt;span&gt;데이터&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;22&quot;&gt;&lt;span&gt;에서&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;23&quot;&gt;&lt;span&gt;페이스 트래킹&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;24&quot;&gt;&lt;span&gt;이용&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;25&quot;&gt;&lt;span&gt;시에만&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;26&quot;&gt;&lt;span&gt;얻을&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;27&quot;&gt;&lt;span&gt;수있다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;estimatedDepth는&amp;nbsp;frameSemantics에&amp;nbsp;personSegmentationWithDepth&amp;nbsp;옵션을&amp;nbsp;지정한&amp;nbsp;경우에&amp;nbsp;얻을&amp;nbsp;수있는&amp;nbsp;것으로,&amp;nbsp;듀얼&amp;nbsp;카메라와&amp;nbsp;True-Depth&amp;nbsp;카메라&amp;nbsp;유래의&amp;nbsp;깊이가&amp;nbsp;아니라&amp;nbsp;그&amp;nbsp;속성&amp;nbsp;이름에서&amp;nbsp;알&amp;nbsp;수&amp;nbsp;있듯이&amp;nbsp;추정&amp;nbsp;깊이&amp;nbsp;데이터이다.&amp;nbsp;요&amp;nbsp;A12&amp;nbsp;칩&amp;nbsp;이상.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;sceneDepth는&amp;nbsp;상술&amp;nbsp;한&amp;nbsp;바와&amp;nbsp;같이&amp;nbsp;frameSemantics에&amp;nbsp;sceneDepth를&amp;nbsp;지정한&amp;nbsp;경우에&amp;nbsp;취득&amp;nbsp;할&amp;nbsp;수있어&amp;nbsp;AR&amp;nbsp;구성으로는&amp;nbsp;월드&amp;nbsp;추적에만&amp;nbsp;장치로&amp;nbsp;LiDAR를&amp;nbsp;탑재하고있을&amp;nbsp;필요가있다&lt;/span&gt;&lt;/span&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;size18&quot;&gt;&lt;b&gt;프레임&amp;nbsp;레이트&amp;nbsp;/&amp;nbsp;생성&amp;nbsp;알고리즘의&amp;nbsp;차이&lt;/b&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;capturedDepthData는&amp;nbsp;True-Depth&amp;nbsp;카메라&amp;nbsp;유래의&amp;nbsp;깊이&amp;nbsp;데이터이기&amp;nbsp;때문에&amp;nbsp;ARFrame&amp;nbsp;컬러&amp;nbsp;데이터&amp;nbsp;(capturedImage&amp;nbsp;속성)보다&amp;nbsp;업데이트&amp;nbsp;빈도가&amp;nbsp;낮고,&amp;nbsp;깊이를&amp;nbsp;이용한&amp;nbsp;효과&amp;nbsp;등을&amp;nbsp;걸고있는&amp;nbsp;피사체&amp;nbsp;(페이스&amp;nbsp;트래킹이므로&amp;nbsp;자신)이&amp;nbsp;빨리&amp;nbsp;움직일&amp;nbsp;경우에&amp;nbsp;추종&amp;nbsp;할&amp;nbsp;수없는&amp;nbsp;것이&amp;nbsp;있었다.&lt;br /&gt;한편&amp;nbsp;estimatedDepth은&amp;nbsp;기계&amp;nbsp;학습&amp;nbsp;기반으로&amp;nbsp;추정되며, A12&amp;nbsp;이후의&amp;nbsp;고성능&amp;nbsp;칩을&amp;nbsp;조건으로하고&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;카메라&amp;nbsp;프레임과&amp;nbsp;동일한&amp;nbsp;프레임&amp;nbsp;속도로&amp;nbsp;업데이트된다.&lt;br /&gt;sceneDepth도&amp;nbsp;LiDAR로&amp;nbsp;취득한&amp;nbsp;깊이&amp;nbsp;데이터와&amp;nbsp;광각&amp;nbsp;카메라에서&amp;nbsp;가져온&amp;nbsp;컬러&amp;nbsp;데이터를&amp;nbsp;기반으로&amp;nbsp;기계&amp;nbsp;학습&amp;nbsp;알고리즘을&amp;nbsp;이용하여&amp;nbsp;생성된다.&amp;nbsp;60fps로&amp;nbsp;동작하는,&amp;nbsp;즉&amp;nbsp;이쪽도&amp;nbsp;ARFrame를&amp;nbsp;얻을&amp;nbsp;때마다&amp;nbsp;업데이트되고있다.&lt;br /&gt;(WWDC&amp;nbsp;2020의&amp;nbsp;&quot;Explore&amp;nbsp;ARKit&amp;nbsp;4&quot;세션에서)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span&gt;The colored RGB image from the wide-angle camera and the depth ratings from the LiDAR scanner are fused together using advanced machine learning algorithms to create a dense depth map that is exposed through the API.&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;(광각&amp;nbsp;카메라의&amp;nbsp;컬러&amp;nbsp;RGB&amp;nbsp;이미지와&amp;nbsp;LiDAR&amp;nbsp;스캐너에서&amp;nbsp;심도&amp;nbsp;정격이&amp;nbsp;고급&amp;nbsp;기계&amp;nbsp;학습&amp;nbsp;알고리즘을&amp;nbsp;사용하여&amp;nbsp;융합&amp;nbsp;된&amp;nbsp;API를&amp;nbsp;통해&amp;nbsp;공개되는&amp;nbsp;고밀도의&amp;nbsp;깊이&amp;nbsp;맵이&amp;nbsp;생성됩니다.)&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span&gt;&lt;br /&gt;This operation runs at 60 times per second with the depth map available on every AR frame.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&lt;span&gt;(이&amp;nbsp;작업은&amp;nbsp;초당&amp;nbsp;60&amp;nbsp;번&amp;nbsp;실행되며&amp;nbsp;AR&amp;nbsp;프레임마다&amp;nbsp;깊이&amp;nbsp;맵을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;형식의&amp;nbsp;차이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;capturedDepthData&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;2&quot;&gt;&lt;span&gt;AVDepthData&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;3&quot;&gt;&lt;span&gt;형&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;4&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;2&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;3&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;4&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;5&quot;&gt;&lt;span&gt;estimatedDepth&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;6&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;7&quot;&gt;&lt;span&gt;CVPixelBuffer&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;8&quot;&gt;&lt;span&gt;형&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;9&quot;&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot; data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;1&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;2&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;3&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;4&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;5&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;6&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;7&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;8&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;9&quot;&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;10&quot;&gt;&lt;span&gt;그리고&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;11&quot;&gt;&lt;span&gt;sceneDepth&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;12&quot;&gt;&lt;span&gt;는&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;13&quot;&gt;&lt;span&gt;ARDepthData&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;14&quot;&gt;&lt;span&gt;형&lt;/span&gt;&lt;span data-language-for-alternatives=&quot;ko&quot; data-language-to-translate-into=&quot;ja&quot; data-phrase-index=&quot;15&quot;&gt;&lt;span&gt;얻을 수있다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;lt;ARDepthData&amp;gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상술&amp;nbsp;한&amp;nbsp;바와&amp;nbsp;같이&amp;nbsp;sceneDepth&amp;nbsp;속성에서&amp;nbsp;얻을&amp;nbsp;수&amp;nbsp;LiDAR&amp;nbsp;유래의&amp;nbsp;깊이&amp;nbsp;데이터는&amp;nbsp;ARDepthData&amp;nbsp;형&amp;nbsp;얻을&amp;nbsp;수있다.&amp;nbsp;이곳은&amp;nbsp;iOS&amp;nbsp;14에&amp;nbsp;추가&amp;nbsp;된&amp;nbsp;새로운&amp;nbsp;클래스.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1620508945337&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; data-og-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것을&amp;nbsp;잘&amp;nbsp;이용한&amp;nbsp;공식&amp;nbsp;샘플이&amp;nbsp;나와&amp;nbsp;있으므로&amp;nbsp;자세한&amp;nbsp;설명은&amp;nbsp;샘플을&amp;nbsp;읽으면서&amp;nbsp;다른&amp;nbsp;기사에&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;LiDAR의&amp;nbsp;정확도&amp;nbsp;/&amp;nbsp;측정&amp;nbsp;가능한&amp;nbsp;거리는?&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WWDC&amp;nbsp;2020은&amp;nbsp;아니지만,&amp;nbsp;ARKit&amp;nbsp;3.5&amp;nbsp;릴리스되었을&amp;nbsp;때&amp;nbsp;&quot;Advanced&amp;nbsp;Scene&amp;nbsp;Understanding&amp;nbsp;in&amp;nbsp;AR&quot;라는&amp;nbsp;Tech&amp;nbsp;Talk가&amp;nbsp;공개되어&amp;nbsp;있으며,&amp;nbsp;그&amp;nbsp;중&amp;nbsp;LiDAR의&amp;nbsp;정확성에&amp;nbsp;대해&amp;nbsp;언급했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;The new iPad Pro comes equipped with a LiDAR Scanner. This is used to determine distance by measuring at nanosecond speeds how long it takes for light to reach an object in front of you and reflect back. This is effective up to five meters away and operates both indoors and outdoors.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;(새로운 iPad Pro는 LiDAR 스캐너가 탑재되어 있습니다. 이것은 눈앞의 물체에 빛이 도달하여 반사되어 돌아올 때까지의 시간을 나노초의 속도로 측정하여 거리를 판단 하는 데 사용됩니다. 이것은 5 미터까지 유효, 실내에서도 야외에서도 사용할 수 있습니다.)&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiDAR에서&amp;nbsp;몇&amp;nbsp;미터&amp;nbsp;앞까지&amp;nbsp;측정&amp;nbsp;할&amp;nbsp;것인가라는&amp;nbsp;질문을받은&amp;nbsp;적이&amp;nbsp;몇&amp;nbsp;번&amp;nbsp;있지만,&amp;nbsp;이런&amp;nbsp;것은&amp;nbsp;공식적으로&amp;nbsp;언급되지&amp;nbsp;않은&amp;nbsp;느낌&amp;nbsp;이었기&amp;nbsp;때문에,&amp;nbsp;&quot;샘플에서&amp;nbsp;실제로&amp;nbsp;시도해&amp;nbsp;보면&amp;nbsp;좋아요&quot;라고&amp;nbsp;답변을했다.&amp;nbsp;기준해라&amp;nbsp;귀중한&amp;nbsp;공식&amp;nbsp;정보가&amp;nbsp;있으므로&amp;nbsp;참고.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;personSegmentationWithDepth과&amp;nbsp;장면&amp;nbsp;깊이&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARConfiguration의&amp;nbsp;frameSemantics&amp;nbsp;속성에&amp;nbsp;personSegmentationWithDepth&amp;nbsp;옵션을&amp;nbsp;지정하는&amp;nbsp;경우,&amp;nbsp;씬&amp;nbsp;깊이를&amp;nbsp;얻을&amp;nbsp;수있는&amp;nbsp;장치라면&amp;nbsp;자동으로&amp;nbsp;장면&amp;nbsp;깊이를&amp;nbsp;얻을&amp;nbsp;수있는&amp;nbsp;것&amp;nbsp;같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1620509231887&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let session = ARSession()
let configuration = ARWorldTrackingConfiguration()

// Set required frame semantics
let semantics: ARConfiguration.FrameSemantics = .personSegmentationWithDepth

// Check if configuration and device supports the required semantics
if type(of: configuration).supportsFrameSemantics(semantics) {
   // Activate .personSegmentationWithDepth
   configuration.frameSemantics = semantics
}
session.run(configuration)&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;추가&amp;nbsp;전력&amp;nbsp;비용도&amp;nbsp;들지&amp;nbsp;않는&amp;nbsp;것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;Additionally if you have an AR app that uses people occlusion feature, and then search the personSegmentationWithDepth frameSemantic, then you will automatically get sceneDepth on devices that support the sceneDepth frameSemantic with no additional power cost to your application.&lt;/blockquote&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;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;smoothedSceneDepth&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상술&amp;nbsp;한&amp;nbsp;sceneDepth은&amp;nbsp;WWDC&amp;nbsp;2020&amp;nbsp;개최&amp;nbsp;시점&amp;nbsp;(iOS&amp;nbsp;14&amp;nbsp;beta&amp;nbsp;1&amp;nbsp;때)&amp;nbsp;이미&amp;nbsp;공개되어&amp;nbsp;있었지만,&amp;nbsp;iOS&amp;nbsp;14&amp;nbsp;beta&amp;nbsp;5에서&amp;nbsp;갑자기&amp;nbsp;smoothedSceneDepth되는&amp;nbsp;API가&amp;nbsp;추가되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1620509407028&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Shuichi Tsutsumi on Twitter&quot; data-og-description=&quot;&amp;ldquo;iOS 14 beta 5でARKitにデプス系のAPIがさらに追加されたのか！ 確かにARFrameにsmoothedSceneDepthなるプロパティが増えている  https://t.co/TwvgQ5YThr&amp;rdquo;&quot; data-og-host=&quot;twitter.com&quot; data-og-source-url=&quot;https://twitter.com/shu223/status/1295968108352479232?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1295968108352479232%7Ctwgr%5E%7Ctwcon%5Es1_&amp;amp;ref_url=https%3A%2F%2Fqiita.com%2Fshu223%2Fitems%2F722077b4bbe868f58ddc&quot; data-og-url=&quot;https://twitter.com/shu223/status/1295968108352479232&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/U6cLv/hyJ7R5fSNe/wi6n9ojkyVGdOCVof8Ecck/img.jpg?width=315&amp;amp;height=315&amp;amp;face=0_0_315_315,https://scrap.kakaocdn.net/dn/fqUob/hyJ726MaNT/o41STuM2m00aiY8kxpTDzk/img.jpg?width=1030&amp;amp;height=720&amp;amp;face=0_0_1030_720&quot;&gt;&lt;a href=&quot;https://twitter.com/shu223/status/1295968108352479232?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1295968108352479232%7Ctwgr%5E%7Ctwcon%5Es1_&amp;amp;ref_url=https%3A%2F%2Fqiita.com%2Fshu223%2Fitems%2F722077b4bbe868f58ddc&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://twitter.com/shu223/status/1295968108352479232?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1295968108352479232%7Ctwgr%5E%7Ctwcon%5Es1_&amp;amp;ref_url=https%3A%2F%2Fqiita.com%2Fshu223%2Fitems%2F722077b4bbe868f58ddc&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/U6cLv/hyJ7R5fSNe/wi6n9ojkyVGdOCVof8Ecck/img.jpg?width=315&amp;amp;height=315&amp;amp;face=0_0_315_315,https://scrap.kakaocdn.net/dn/fqUob/hyJ726MaNT/o41STuM2m00aiY8kxpTDzk/img.jpg?width=1030&amp;amp;height=720&amp;amp;face=0_0_1030_720');&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;Shuichi Tsutsumi on Twitter&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;iOS 14 beta 5でARKitにデプス系のAPIがさらに追加されたのか！ 確かにARFrameにsmoothedSceneDepthなるプロパティが増えている  https://t.co/TwvgQ5YThr&amp;rdquo;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;twitter.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이&amp;nbsp;때&amp;nbsp;(2020&amp;nbsp;년&amp;nbsp;8&amp;nbsp;월)&amp;nbsp;문서를&amp;nbsp;바로&amp;nbsp;보러&amp;nbsp;갔는데&amp;nbsp;자세한&amp;nbsp;내용은&amp;nbsp;아무것도&amp;nbsp;쓰여지지&amp;nbsp;않았다.&lt;br /&gt;지금&amp;nbsp;보러&amp;nbsp;가면&amp;nbsp;제대로&amp;nbsp;설명이&amp;nbsp;적혀있어&amp;nbsp;sceneDepth의&amp;nbsp;차이도&amp;nbsp;명기되어있다.&amp;nbsp;DeepL&amp;nbsp;이용의&amp;nbsp;일본어&amp;nbsp;번역을&amp;nbsp;병기하여&amp;nbsp;여기에&amp;nbsp;정리해&amp;nbsp;둔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;smoothedSceneDepth: ARConfiguration.FrameSemantics&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARConfiguration.FrameSemantics&amp;nbsp;유형&amp;nbsp;속성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1620509546394&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth&quot; data-og-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3674208-smoothedscenedepth&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;An option that provides the distance from the device to real-world objects, averaged across several frames.&lt;br /&gt;(장치에서 실제 객체 사이의 거리를 제공하는 옵션으로 여러 프레임에서 평균화됩니다.)&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Declaration&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1620509658251&quot; class=&quot;swift&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;static var smoothedSceneDepth: ARConfiguration.FrameSemantics { get }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Discussion&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;Enable this option on a world-tracking configuration (ARWorldTrackingConfiguration) to instruct ARKit to provide your app with the distance between the user&amp;rsquo;s device and the real-world objects pictured in the frame's capturedImage. ARKit samples this distance using the LiDAR scanner and provides the results through the smoothedSceneDepth property on the session&amp;rsquo;s currentFrame.&lt;br /&gt;&lt;br /&gt;(월드 추적 설정 (ARWorldTrackingConfiguration)에서이 옵션을 사용하면 사용자의 장치 및 프레임 캡처 사진에 찍혀있는 실제 객체와의 거리를 응용 프로그램에 제공하도록 ARKit에 지시합니다 .ARKit은 LiDAR 스캐너를 사용하여이 거리를 샘플링 세션 currentFrame의 smoothedSceneDepth 속성을 통해 결과를 제공합니다.)&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LiDAR&amp;nbsp;스캐너를&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;여기에&amp;nbsp;명기되어있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;To minimize the difference in LiDAR readings across frames, ARKit processes the data as an average. The averaged readings reduce flickering to create a smoother motion effect when depicting objects with depth, as demonstrated in Creating a Fog Effect Using Scene Depth. Alternatively, to access a discrete LiDAR reading at the instant the framework creates the current frame, use sceneDepth&lt;br /&gt;&lt;br /&gt;(프레임 간의 LiDAR 측정 값의 차이를 최소화하기 위해 ARKit은 데이터를 평균으로 처리합니다. 평균화 된 판독 값은 &quot;장면 깊이를 사용한 안개 효과 만들기&quot;에서 입증 된 같이 깊이있는 개체를 묘사 할 때 깜박임을 줄이고 더 부드러운 모션 효과를 만들어냅니다. 또한 프레임 워크가 현재의 프레임을 만든 순간에 개별 LiDAR 판독 값에 액세스하려면 sceneDepth를 사용합니다.)&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&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;제일&amp;nbsp;중요하다.&amp;nbsp;sceneDepth의&amp;nbsp;차이가&amp;nbsp;명기되어&amp;nbsp;있으며,&amp;nbsp;장점과&amp;nbsp;구분도&amp;nbsp;적혀있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;ARKit supports scene depth only on LiDAR-capable devices, so call supportsFrameSemantics(&lt;br /&gt;:) to ensure device support before attempting to enable scene depth.&lt;br /&gt;&lt;br /&gt;(ARKit은 LiDAR 지원 장치에서만 장면 심도를 지원하고 있기 때문에, 장면 심도를 사용하기 전에 supportsFrameSemantics (:)을 호출 해 디바이스의 지원을 확인하십시오.)&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;smoothedSceneDepth: ARDepthData&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARFrame의&amp;nbsp;smoothedSceneDepth&amp;nbsp;속성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1620509941465&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Apple Developer Documentation&quot; data-og-description=&quot;&quot; data-og-host=&quot;developer.apple.com&quot; data-og-source-url=&quot;https://developer.apple.com/documentation/arkit/arframe/3674209-smoothedscenedepth&quot; data-og-url=&quot;https://developer.apple.com/documentation/arkit/arframe/3674209-smoothedscenedepth&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://developer.apple.com/documentation/arkit/arframe/3674209-smoothedscenedepth&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.apple.com/documentation/arkit/arframe/3674209-smoothedscenedepth&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Apple Developer Documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.apple.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;An average of distance measurements between a device's rear camera and real-world objects that creates smoother visuals in an AR experience.&lt;br /&gt;(장치의 후면 카메라와 실제 객체 사이의 거리 측정의 평균치에서 AR 체험으로 더 부드러운 영상을 만들 수 있습니다.)&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Declaration&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1620510020527&quot; class=&quot;swift&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background-color: #f6f7f8; font-size: 14px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none; background-position: initial initial; background-repeat: initial initial;&quot; data-ke-language=&quot;swift&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var smoothedSceneDepth: ARDepthData? { get }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Discussion&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&lt;span&gt;his property describes the distance between a device's camera and objects or areas in the real world, including ARKit&amp;rsquo;s confidence in the estimated distance. This is similar to sceneDepth except that the framework smoothes the depth data over time to lessen its frame-to-frame delta&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(이&amp;nbsp;속성은&amp;nbsp;장치의&amp;nbsp;카메라와&amp;nbsp;실제&amp;nbsp;객체와&amp;nbsp;지역과의&amp;nbsp;거리를&amp;nbsp;설명합니다.&amp;nbsp;이것은&amp;nbsp;sceneDepth와&amp;nbsp;비슷하지만&amp;nbsp;프레임&amp;nbsp;워크는&amp;nbsp;프레임&amp;nbsp;간의&amp;nbsp;차이를&amp;nbsp;줄이기&amp;nbsp;위해&amp;nbsp;심도&amp;nbsp;데이터를&amp;nbsp;시간이&amp;nbsp;지남&amp;nbsp;부드럽게합니다.)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span&gt;This property is nil by default. Add the smoothedSceneDepth frame semantic to your configuration&amp;rsquo;s frameSemantics to instruct the framework to populate this value with ARDepthData captured by the LiDAR scanner.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;(이&amp;nbsp;속성은&amp;nbsp;기본적으로&amp;nbsp;nil입니다.&amp;nbsp;프레임&amp;nbsp;워크에&amp;nbsp;LiDAR&amp;nbsp;스캐너에&amp;nbsp;의해&amp;nbsp;캡처&amp;nbsp;된&amp;nbsp;ARDepthData에서이&amp;nbsp;값을&amp;nbsp;입력하도록&amp;nbsp;지시하기&amp;nbsp;위해&amp;nbsp;설정&amp;nbsp;frameSemantics에&amp;nbsp;smoothedSceneDepth&amp;nbsp;프레임&amp;nbsp;시맨틱을&amp;nbsp;추가합니다.)&lt;br /&gt;&lt;br /&gt;&lt;span&gt;Call supportsFrameSemantics(&lt;/span&gt;:) on your app&amp;rsquo;s configuration to support smoothed scene depth on select devices and configurations.&lt;br /&gt;&lt;br /&gt;(앱&amp;nbsp;설정에서&amp;nbsp;supportsFrameSemantics&amp;nbsp;(:)을&amp;nbsp;호출하여&amp;nbsp;선택한&amp;nbsp;장치&amp;nbsp;설정에서&amp;nbsp;평활화&amp;nbsp;된&amp;nbsp;장면&amp;nbsp;심도를&amp;nbsp;지원합니다.)&lt;/b&gt;&lt;/blockquote&gt;</description>
      <category>CS/ios</category>
      <author>Magritte1</author>
      <guid isPermaLink="true">https://dogfoottech.tistory.com/249</guid>
      <comments>https://dogfoottech.tistory.com/249#entry249comment</comments>
      <pubDate>Sun, 9 May 2021 06:42:45 +0900</pubDate>
    </item>
  </channel>
</rss>