Web Dev/ELICE

33 :: GraphQL, OAuth, JWT, Passport

HJPlumtree 2021. 12. 9. 17:53

엘리스 SW 엔지니어 트랙 33일차

박성국님 실시간 강의날 🦁

 

 

오늘의 내용은 Database와 인증

마음 편히 이런게 있구나 쳐다보자

 

데이터베이스를 만질 때

SQL 로우쿼리로 하는 것 보다

Sequelize를 배워서 사용하면 좋다고 하신다

 

 

Node 인증 구현

 

GraphQL (GQL)

SQL이 아닌 객체를 보내주는 것

메타(페이스북)가 개발한 새로운 API 규격

 

SQL이 백엔드를 위함이라면,

GQL은 보다 더 클라이언트 친화적 시스템

 

Query

데이터 요청에 사용

REST에서 GET같은 녀석

 

Mutation

데이터 수정

REST의 POST, DELETE, UPDATE 같은 녀석

 

SDL(Schema Definition Language)

스키마 정확히 정해줘야된다

명확한 타입을 정의해서 기술

 

GraphQL 공식

링크 => https://graphql.org/

 

Apollo 서버를 만들어 줘야된다

링크 => https://www.apollographql.com/docs/apollo-server/getting-started/

 

 

OAuth

접근 권한 위임(delegation) 위한 공개 표준

구글 로그인, 깃헙 로그인, 트위터 로그인 등 이런건가보다

 

OAuth 장점

원 클릭 로그인 => 진입장벽이 매우 낮아짐

유저가 비밀번호 기억할 필요 없다

유저 허용 여부에 따라 이메일, 프로필 사진 등 기본 정보 얻을 수 있다

 

 

JWT와 쿠키

중요하다고 한다

 

 

소셜 OAuth 설정

PassPort 이용 구현

 

 

오후 실시간 강의날 🦁

 

 

서버는 보통 최소한 2대 이상

요청을 하나로 날아오지

그래서 이 요청을 분배해주는 Load Balancer(LB)가 있다

 

이 LB로 로그인 요청이 날아왔다

첫 번째 서버에서 ID/PW 검증하고 사용자에게 쿠키를 돌려준다

근데 다음 요청일 때 두 번째 서버로 보내버렸다

그러면 로그인 안됐다고 뜨는것

(쿠키는 로그인 완료한 사용자에게 보내주는 것)

 

이걸 해결하기위해

세션 Data를 DB에 저장,

그리고 쿠키를 넘겨준다

두 번째 요청일 때

DB에 가서 세션 Data를 보고 로그인 확인을 해준다

 

JWT로 이 DB단을 없애줄 수 있다

 

JWT(Json Web Token)

위조 어려운 토큰이다 But 탈취 당하면 큰일

신분증이라 생각하면된다

탈취를 막고자 만료시간이 있다

(짧게는 5~30분 | 길게는 1주일)

 

첫 번째 서버 컴퓨터에서 JWT 발급

이 JWT를 가지고 다른 서버 컴퓨터로 간다

다른 서버에서는 이 JWT가 위조가 되었는지 확인

이래서 DB단이 사라지는 것

 

 

Passport

serializeUser()

deserializeUser()

passport.quthenticate()

 

로그인 시도

id/pw => passport.quthenticate() => local => serializeUser() => id 세션에 저장 

 

     id/pw가 맞는지 

     user id만 세션에 저장

 

요청이 들어올 때마다

요청 => passport의 session 미들웨어 => deserializeUser() 호출: user id를 user data로 변경

 

passport에 관한 egoing님 강의

링크 => https://opentutorials.org/course/3402

 

 

백엔드 들어와서는 이해 안가는 날들이 많아졌다

오늘도..

 

 

confused by Charles Deluvio #unsplash