3:I[5613,[],""] 5:I[1778,[],""] 6:I[2581,["250","static/chunks/250-9edeb9d2171db55c.js","185","static/chunks/app/layout-051d49746254c3f8.js"],""] 4:["slug","learning/likelion/week9","c"] 0:["YFd_7cSmvIuy-EBayyLo2",[[["",{"children":[["slug","learning/likelion/week9","c"],{"children":["__PAGE__?{\"slug\":[\"learning\",\"likelion\",\"week9\"]}",{}]}]},"$undefined","$undefined",true],["",{"children":[["slug","learning/likelion/week9","c"],{"children":["__PAGE__",{},["$L1","$L2",null]]},["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children","$4","children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","notFoundStyles":"$undefined","styles":[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/b14273d44a3cc3aa.css","precedence":"next","crossOrigin":""}]]}]]},[null,["$","html",null,{"lang":"ko","children":[["$","head",null,{"children":["$","script",null,{"dangerouslySetInnerHTML":{"__html":"\n\t\t\t\t\tconst saved = window.localStorage.getItem(\"data-theme\");\n\t\t\t\t\tif (saved) {\n\t\t\t\t\t\tif (saved === \"dark\") {\n\t\t\t\t\t\t\tdocument.documentElement.setAttribute(\"data-theme\", \"dark\");\n\t\t\t\t\t\t} else if (saved === \"light\") {\n\t\t\t\t\t\t\tdocument.documentElement.setAttribute(\"data-theme\", \"light\");\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdocument.documentElement.setAttribute(\"data-theme\", \"light\");\n\t\t\t\t\t}\n\t\t\t\t"}}]}],["$","body",null,{"children":["$","$L6",null,{"children":["$","$L3",null,{"parallelRouterKey":"children","segmentPath":["children"],"loading":"$undefined","loadingStyles":"$undefined","loadingScripts":"$undefined","hasLoading":false,"error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L5",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":"404"}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],"notFoundStyles":[],"styles":null}]}]}]]}],null]],[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/a3a92ccd642ec2bc.css","precedence":"next","crossOrigin":""}],["$","link","1",{"rel":"stylesheet","href":"/_next/static/css/6f7575626860276e.css","precedence":"next","crossOrigin":""}]],"$L7"]]]] 8:I[2664,["250","static/chunks/250-9edeb9d2171db55c.js","839","static/chunks/839-022cf7a9ced654a8.js","877","static/chunks/app/%5B...slug%5D/page-0ab240b8cea332e0.js"],""] 9:I[1749,["250","static/chunks/250-9edeb9d2171db55c.js","839","static/chunks/839-022cf7a9ced654a8.js","877","static/chunks/app/%5B...slug%5D/page-0ab240b8cea332e0.js"],"Image"] 2:["$","div",null,{"className":"style_container__fKKke","children":[["$","$L8",null,{}],["$","div",null,{"className":"style_post__b12XM","children":[["$","div",null,{"className":"style_headerWords__W9tOe","id":"headerWords","children":["$","div",null,{"className":"style_container__kC8fE","children":[["$","div",null,{"className":"style_title__RVWQ2","children":"멋사 - 9주차 OAuth 세션"}],["$","div",null,{"className":"style_description__dS1rF","children":"다양한 소셜로그인을 구현하는 데에 사용되는 OAuth 개념 알아보기"}]]}]}],["$","div",null,{"className":"style_time__vHpWr","children":"2024. 5. 29."}],["$","div",null,{"className":"style_title__mMA8e","children":"멋사 - 9주차 OAuth 세션"}],["$","div",null,{"className":"style_description__XJTFe","children":"다양한 소셜로그인을 구현하는 데에 사용되는 OAuth 개념 알아보기"}],["$","div",null,{"className":"style_border__x5cYB","id":"headLine"}],["$","div",null,{"className":"style_contentStyle__Yta8A","children":[[["$","h1",null,{"id":"목차","className":"style_heading__KYLdz style_heading1__0P2Vc","children":"목차"}],["$","div",null,{"className":"style_border__h4ej3"}]],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":[["$","a",null,{"href":"#%EB%B0%B0%EC%9A%B4-%EB%82%B4%EC%9A%A9-%EC%A0%95%EB%A6%AC","children":"배운 내용 정리","className":"style_a__MgrUe"}],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":["$","a",null,{"href":"#oauth","children":"OAuth","className":"style_a__MgrUe"}]}],"\n",["$","li",null,{"className":"style_li__17u78","children":["$","a",null,{"href":"#%ED%94%84%EB%A1%A0%ED%8A%B8--%EB%B0%B1%EC%97%94%EB%93%9C-%EC%83%81%ED%98%B8%EC%9E%91%EC%9A%A9","children":"프론트 ↔ 백엔드 상호작용","className":"style_a__MgrUe"}]}],"\n"]}],"\n"]}],"\n",["$","li",null,{"className":"style_li__17u78","children":["$","a",null,{"href":"#%ED%9B%84%EA%B8%B0","children":"후기","className":"style_a__MgrUe"}]}],"\n"]}],"\n",[["$","h1",null,{"id":"배운-내용-정리","className":"style_heading__KYLdz style_heading1__0P2Vc","children":"배운 내용 정리"}],["$","div",null,{"className":"style_border__h4ej3"}]],"\n",[["$","h2",null,{"id":"oauth","className":"style_heading__KYLdz style_heading2__HKlKs","children":"OAuth"}],["$","div",null,{"className":"style_border__h4ej3"}]],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"제3자의 클라이언트에게 보호된 리소스를 제한적으로 접근하게 해주는 프레임워크이다."}],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":"리소스 소유자와 HTTP 서비스 간의 승인 상호 작용을 조율하여 리소스 소유자를 대신하여 타사 애플리케이션이 HTTP 서비스에 대한 제한된 액세스 권한을 얻거나 타사 애플리케이션이 자체적으로 액세스 권한을 얻도록 허용"}],"\n",["$","li",null,{"className":"style_li__17u78","children":["인터넷 사용자들이 비밀번호를 제공하지 않고 다른 웹사이트 상의 자신들의 정보에 대해 웹사이트나 애플리케이션의 접근 권한을 부여할 수 있는 공통적인 수단으로서 사용되는, ",["$","strong",null,{"className":"style_strong__ip7oe","children":"접근 위임"}],"을 위한 개방형 표준"]}],"\n"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"OAuth 2.0에서는 아래와 같은 4가지 역할이 존재한다."}],"\n",["$","ol",null,{"className":"style_ol__8DvOy","children":["\n",["$","li",null,{"className":"style_li__17u78","children":["\n",["$","div",null,{"className":"style_p__L5AWZ","children":["$","strong",null,{"className":"style_strong__ip7oe","children":"Resource owner"}]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"보호된 리소스에 대한 액세스 권한을 부여할 수 있는 개체"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["사람이면 ",["$","strong",null,{"className":"style_strong__ip7oe","children":"최종 사용자"}]]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"예시 - 내가 구글 계정을 가지고 있다 & 구글 계정에 등록된 이름, 사진 등의 데이터 주인은"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["⇒ ",["$","strong",null,{"className":"style_strong__ip7oe","children":"Resource owner = 나"}]]}],"\n"]}],"\n",["$","li",null,{"className":"style_li__17u78","children":["\n",["$","div",null,{"className":"style_p__L5AWZ","children":["$","strong",null,{"className":"style_strong__ip7oe","children":"Resource server"}]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"보호된 리소스를 호스팅할 수 있는 서버"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"access token을 통해 보호된 리소스 요청 수락 및 응답"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"예시 - 구글은 내 계정 정보를 가지고 있지만 데이터 주인은 나니까 함부로 공유 불가능"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["⇒ ",["$","strong",null,{"className":"style_strong__ip7oe","children":"Resource server = 구글 데이터 센터"}]]}],"\n"]}],"\n",["$","li",null,{"className":"style_li__17u78","children":["\n",["$","div",null,{"className":"style_p__L5AWZ","children":["$","strong",null,{"className":"style_strong__ip7oe","children":"Client (Application)"}]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"리소스 소유자를 대신하여 보호된 리소스를 요청하는 애플리케이션"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"⚠️ 보편적으로 개발에서 지칭하는 프론트-백의 Client-Server가 아님"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["예시 - 노션에서 구글 소셜로그인을 했더니 구글에 따로 허용이나 요청하지 않아도",["$","br",null,{}],"\n","노션이 알아서 구글 계정 정보를 가져오고 노션 로그인을 시켜줌"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["⇒ ",["$","strong",null,{"className":"style_strong__ip7oe","children":"Resource Server(구글)"}]," 의 ",["$","strong",null,{"className":"style_strong__ip7oe","children":"Client = 노션"}]," (+기타 소셜로그인 활용하는 서비스)"]}],"\n"]}],"\n",["$","li",null,{"className":"style_li__17u78","children":["\n",["$","div",null,{"className":"style_p__L5AWZ","children":["$","strong",null,{"className":"style_strong__ip7oe","children":"Authorization server"}]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"리소스 소유자를 인증하고 인가 권한을 획득한 후 클라이언트에 액세스 토큰 발급"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"데이터를 가지고 있는 쪽에서 권한을 부여할 수 있으므로 보통 제공업체가 된다."}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["예시 - 구글로 로그인하기 → 구글 페이지에서 로그인하고 구글 계정 정보로 노션에 로그인",["$","br",null,{}],"\n","구글 로그인 과정 = 인증 / 노션에 정보 제공 동의 구함 = 인가 권한 획득",["$","br",null,{}],"\n","→ 노션에 구글 데이터 액세스 토큰 발급"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["⇒ ",["$","strong",null,{"className":"style_strong__ip7oe","children":"Authorization server = 구글"}]]}],"\n"]}],"\n"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"보통 아래와 같은 흐름을 갖는다."}],"\n",["$","div",null,{"className":"style_imageBox__6sQ34","children":[["$","$L9",null,{"src":"/learning/likelion/week9/OAuth1.png","alt":"/learning/likelion/week9/OAuth1.png","width":1000,"height":1000,"loading":"lazy","className":"style_img__fwG4y"}],["$","div",null,{"className":"style_description__GqC1z","children":""}]]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"사용자 → 노션 |"}]," 노션에 들어간다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"사용자 → 노션 |"}]," 구글 계정으로 로그인하기를 누른다. (노션이 인증/인가 요청)"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"사용자 → 구글 |"}]," 구글 로그인 페이지로 이동해서 로그인한다. (사용자가 인증을 하면 인가 요청됨)"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"구글 → 노션 |"}]," 인가 코드를 준다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"노션 → 구글 |"}]," 인가 코드로 계정 정보 접근이 허용된 토큰을 요청한다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"구글 → 노션 |"}]," 구글 데이터 액세스 토큰을 준다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"노션 → 구글 |"}]," 액세스 토큰으로 계정 정보를 요청한다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"구글 → 노션 |"}]," 유효한 요청이라면 정보를 반환한다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"인가 코드를 부여하는 구체적인 방식은 아래와 같다."}],"\n",["$","div",null,{"className":"style_imageBox__6sQ34","children":[["$","$L9",null,{"src":"/learning/likelion/week9/OAuth2.png","alt":"/learning/likelion/week9/OAuth2.png","width":1000,"height":1000,"loading":"lazy","className":"style_img__fwG4y"}],["$","div",null,{"className":"style_description__GqC1z","children":""}]]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"사용자 → 노션 |"}]," 노션에 들어간다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"사용자 → 노션 |"}]," 구글 계정으로 로그인하기를 누른다. (노션이 인증/인가 요청)"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"사용자 → 구글 |"}]," 구글 로그인 페이지로 이동해서 로그인한다. (사용자가 인증을 하면 인가 요청됨)"]}],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":["\n",["$","div",null,{"className":"style_p__L5AWZ","children":"노션 서버에서 구글 OAuth 2.0 서버 엔드포인트 (Open API) 호출"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":["$","strong",null,{"className":"style_strong__ip7oe","children":["$","code",null,{"children":"https://accounts.google.com/o/oauth2/v2/auth?client_id={client_id}&response_type=code&redirect_uri={GOOGLE_CALLBACK_URI}&scope={scope}"}]}]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","a",null,{"href":"https://developers.google.com/identity/protocols/oauth2/javascript-implicit-flow?hl=ko#redirecting","children":"Google의 OAuth 2.0 서버로 리디렉션 + 엔드포인트","className":"style_a__MgrUe"}]," ← 참고문서"]}],"\n"]}],"\n"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"➕ 처음 로그인한다면 노션에 계정 정보 제공하는 걸 동의하는지 질문"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"구글 → 노션 |"}]," 인가 코드를 준다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"노션 → 구글 |"}]," 인가 코드로 계정 정보 접근이 허용된 토큰을 요청한다."]}],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":["노션 서버에서 구글 엔드포인트 호출",["$","br",null,{}],"\n",["$","strong",null,{"className":"style_strong__ip7oe","children":["$","code",null,{"children":"https://oauth2.googleapis.com/token?client_id={client_id}&client_secret={client_secret}&code={code}&grant_type=authorization_code&redirect_uri={GOOGLE_CALLBACK_URI}&state={state}"}]}]]}],"\n"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"구글 → 노션 |"}]," 액세스 토큰을 준다."]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"노션 → 구글 |"}]," 액세스 토큰으로 계정 정보를 요청한다."]}],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":"액세스 토큰으로 다양한 API를 호출할 수 있다. (ex. 이메일, 구글 드라이브 파일 목록 등)"}],"\n",["$","li",null,{"className":"style_li__17u78","children":"물론 노션이 요청하고 사용자가 허가한 범위 내에서만 가능하다."}],"\n",["$","li",null,{"className":"style_li__17u78","children":["계정 정보: ",["$","strong",null,{"className":"style_strong__ip7oe","children":["$","code",null,{"children":"https://www.googleapis.com/oauth2/v1/tokeninfo?access_token={access_token}"}]}]]}],"\n"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":[["$","strong",null,{"className":"style_strong__ip7oe","children":"구글 → 노션 |"}]," 유효한 요청이라면 정보를 반환한다."]}],"\n",[["$","h2",null,{"id":"프론트--백엔드-상호작용","className":"style_heading__KYLdz style_heading2__HKlKs","children":"프론트 ↔ 백엔드 상호작용"}],["$","div",null,{"className":"style_border__h4ej3"}]],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"체크리스트"}],"\n",["$","ol",null,{"className":"style_ol__8DvOy","children":["\n",["$","li",null,{"className":"style_li__17u78","children":"[GCP] GCP에 등록된 callback URI ↔ 프론트에서 파라미터로 넘기는 callback URI가 같은지"}],"\n",["$","li",null,{"className":"style_li__17u78","children":"[GCP] 승인된 자바스크립트 원본 리스트에 프론트가 쓰는 사이트 주소가 잘 들어있는지"}],"\n",["$","li",null,{"className":"style_li__17u78","children":"[프백] 프론트가 코드를 넘기는 방식과 백이 코드는 받는 방식이 동일한지 (쿼리, 바디 등)"}],"\n"]}],"\n",[["$","h1",null,{"id":"후기","className":"style_heading__KYLdz style_heading1__0P2Vc","children":"후기"}],["$","div",null,{"className":"style_border__h4ej3"}]],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"OAuth를 드디어 배우게 되었다."}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"OAuth의 로직만 봤을 때는 “음 복잡하면서도 꽤 단순하네”라고 생각이 들어 편하게 과제에 도전해봤는데… 나를 기다리는 건 온갖 알 수도 없는 에러들이었다. 😟"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"익숙치 않은 Google의 API를 이용해서인지 정말 머리가 아픈 과정이었다…"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"allauth 라이브러리의 SocialAccount 테이블은 자동으로 생성되어 OAuth 관련 인증 내용들을 자동으로 저장하고 관리해주는 것 같은데, 내가 과제를 수행하면서 볼 때는 SocialAccount 테이블에 아무것도 없었다. 뭐가 잘못된 걸까…"}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"그래도 Google API로 부터 토큰값을 받는 과정은 정상적으로 수행되었다. 차후에 SocialAccount 작동방식에 대해 더 자세히 알아보아야겠다는 생각이 들었다…"}],"\n",["$","hr",null,{"className":"style_hr__va5an"}],"\n",["$","ul",null,{"className":"style_ul__SYxQ0","children":["\n",["$","li",null,{"className":"style_li__17u78","children":"로그인 API는 왜 GET이 아니라 POST로 요청을 받을까?"}],"\n"]}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"간단하다. GET으로 요청을 받으면 HTTP body를 사용하지 못하므로 url 파라미터 (ex: /login?id=id&pwd=pwd) 로 아이디와 비밀번호 같은 개인정보를 받아야 하는데, 네트워크 특성상 url 요청을 가로채서 그 url을 읽어 아이디와 비밀번호를 캐내는 것이 매우 쉽다. 해커로부터 매우 위험해지는 것이다."}],"\n",["$","div",null,{"className":"style_p__L5AWZ","children":"그러나 POST 요청을 보내면 HTTPS의 보안 특성상 body에 있는 내용을 가로채서 읽는 것이 매우 어려워지기 때문에(절대 불가능한 건 아닌듯… 해킹 무셔…) 안전하게 사용자의 개인정보를 외부로부터 보호할 수 있게 된다."}]]}]]}]]}] 7:[["$","meta","0",{"name":"viewport","content":"width=device-width, initial-scale=1"}],["$","meta","1",{"charSet":"utf-8"}],["$","title","2",{"children":"멋사 - 9주차 OAuth 세션 | Temple's Hideout"}],["$","meta","3",{"name":"description","content":"다양한 소셜로그인을 구현하는 데에 사용되는 OAuth 개념 알아보기"}],["$","meta","4",{"property":"og:title","content":"멋사 - 9주차 OAuth 세션 | Temple's Hideout"}],["$","meta","5",{"property":"og:description","content":"다양한 소셜로그인을 구현하는 데에 사용되는 OAuth 개념 알아보기"}],["$","meta","6",{"property":"og:image","content":"https://blog.templ.es/opengraph/learning/likelion/week9"}],["$","meta","7",{"name":"twitter:card","content":"summary_large_image"}],["$","meta","8",{"name":"twitter:title","content":"멋사 - 9주차 OAuth 세션 | Temple's Hideout"}],["$","meta","9",{"name":"twitter:description","content":"다양한 소셜로그인을 구현하는 데에 사용되는 OAuth 개념 알아보기"}],["$","meta","10",{"name":"twitter:image","content":"https://blog.templ.es/opengraph/learning/likelion/week9"}],["$","link","11",{"rel":"icon","href":"/favicon.ico","type":"image/x-icon","sizes":"16x16"}],["$","meta","12",{"name":"next-size-adjust"}]] 1:null