오늘의 프로젝트 진행 상황
1. Passport 모듈화 및 session 인증 구현
2. 스프린트 회고 ( F5 )
1. Passport 모듈화 및 session 인증 구현
오늘은 어저께 Passport 기능을 구현하였던 것을 우리 작업 패턴에 맞게 모듈화하여 적용시키는 과정을 하였습니다. 이 과정을 진행하며 모듈화에 대한 개념들을 더 깊게 알게 되는 계기가 되었고 또 passport의 가동 순서에 대해서 좀 더 알게 되었습니다. 모듈화를 진행하며 제일 막혔던 부분의 코드를 보여드리겠습니다.
1) module.exports하여 전체를 내보내는 방식
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const { user } = require("./models");
require('dotenv').config();
module.exports = () => {
passport.serializeUser(function (user, done) {
//console.log('serializeUser', user); //Strategy 성공 시 호출됨
done(null, user._id); // 여기의 user가 deserializeUser의 첫 번째 매개변수로 이동
});
passport.deserializeUser(function (id, done) {
//console.log('deserializeUser', user); // 매개변수 user는 serializeUser의 done의 인자 user를 받은 것
done(null, user); // 여기의 user가 req.user가 됨
});
passport.use(new GoogleStrategy({
clientID: process.env.clientID,
clientSecret: process.env.clientSecret,
callbackURL: process.env.callbackURL
},
function(accessToken, refreshToken, profile, done) {
//console.log('GoogleStrategy', accessToken, refreshToken, profile);
var email = profile.emails[0].value;
user.findOrCreate({ where: { email: email, passwords: "2" } })
.then(user => done(null, user))
.catch(err => done(err));
}
));
}
2) module.export를 맨 밑에 삽입하여 passport를 내보내는 방식
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const { user } = require('../../models');
require('dotenv').config();
passport.serializeUser(function (user, done) {
//console.log('serializeUser', user.id); //Strategy 성공 시 호출됨
done(null, user.id); // 여기의 user가 deserializeUser의 첫 번째 매개변수로 이동
});
passport.deserializeUser(function (id, done) {
// console.log('deserializeUser', id); // 매개변수 user는 serializeUser의 done의 인자 user를 받은 것
done(null, id); // 여기의 user가 req.user가 됨
});
passport.use(new GoogleStrategy({
clientID: process.env.clientID,
clientSecret: process.env.clientSecret,
callbackURL: process.env.callbackURL
},
function (accessToken, refreshToken, profile, done) {
var email = profile.emails[0].value;
user.findOrCreate({ where: { email: email, passwords: "2" } })
.then(user => done(null, user))
.catch(err => done(err));
}
));
module.exports = passport
3) app.js 파일에서 passport를 불러오는 형식
const passport = require('./controller/user/google');
1번 방식을 통해서는 구현에 에러를 많이 겪었습니다. 그래서 2번 방식으로 변경 후에 passport를 app.js 파일에서 받아와서 사용하니 기능이 정상적으로 가동되는 모습을 볼 수 있었습니다. 이렇게 하고보니 passport가 가동되는 순서가 보였습니다. 정확하지는 않지만 우선 get을 통해 code를 받아오고 이때 미들웨어로 app.use(passport.session()); 과 app.use(passport.initialize()); 이 실행된다는 사실을 알게 되었습니다.
문제는 이렇게 실컷 모듈화를 시켰더니 이후에 이를 활용한 session과 DB에 담을 데이터 라우터 처리등에서 막혀 결국 passport 라이브러리를 활용해서 소셜로그인을 구현하는 것은 이쯤해서 그만둬야하지 않나 싶습니다. 시간을 너무 많이 소모하였습니다. 우선 팀장님이 한번 더 살펴보신다고하니 저는 Kakao Map API를 활용하는 방법에 대해 학습하고 다른 중요 기능들을 구현해보도록 하겠습니다.
2. 스프린트 회고 ( F5 )
1. Fact(사실) :
- 새로운 라이브러리를 배우고 사용하는 작업이 쉽지 않고 예상보다도 시간이 많이 걸린다.
- 현재 실력으로는 에러핸들링이 힘들어 작업 진행이 더디다. (뭐가 문제인지 파악하기 힘들다.)
- 여러 검색을 통해 정보들을 수집하여도 실질적으로 사용하기가 쉽지 않다.
2.Feeling(느낌) :
- 프로젝트를 진행하기에는 아직 내 실력이 많이 부족하다는 것을 느꼈다. (기수이동이 정답이였을까?)
- 지식의 빈 공간이 많아 안그래도 느릴 수 밖에 없는 작업이 더 더뎌지는 것 같다.
- 어떻게 해야 결과물을 내놓을 수 있을지? 팀원들에게 도움이 될 만큼의 작업을 할 수 있을지? 잘 모르겠다.
3.Finding(교훈) :
- 여태 배워온 학습량의 차이가 표시나는 프로젝트인 듯 하다. (더 열심히 할 수 있지 않았을까? 생각한다.)
- 잘 모르겠을 때는 빠르게 도움을 구할 수 있도록 해야겠다. 도움을 구한다고 그것이 바로 나한테 도움이 될지 안될지도 모르기 때문이다.
4.Future action(행동) :
- 자신감을 많이 잃은 듯 하다. 휴식을 취하고 체크인 시간을 가져보는 것도 나쁘지 않을 듯 하다.
- 팀장님에게 지금의 사실을 알리고 도움을 받도록 해보자.
- 만들던 소셜로그인 부분을 잠깐 낳두고 다른 기능 구현으로 넘어가는 것도 좋을 듯 하다.
5.Feedback(피드백)
- 저도 이번 주에 공식 문서를 보면서 절망을 많이 느꼈습니다.. 그래서 다른 사람들의 예시를 많이 찾아봤지만 그것도 저의 상황과 맞지 않으면 받아들이기가 어려운 거 같아요. 그럼 결국 답은 공식 문서인가.. 싶기도 하고요ㅜㅜ 어느 하나 쉬운 게 없지만 그래도 재밌고 보람찬 작업인 거 같습니다. 우리 모두 좌절하지 말고 화이팅 합시다!
- 작은일을 이루려면 혼자서도 할 수 있지만, 큰일을 이루려면 많은 사람들이 함께해야 가능한것 같아요. 우리가 각각의 포지션과 맡고 있는 이슈가 달라 혼자서 해낸다고 생각할수 있지만, 우리는 한팀이고 같이 힘을 합쳐서 일을 이루어내고 있어요! 절대 재강님 혼자서 하는 것이 아닌 서로 도우면서 같이 하고 있다는 것을 잊지 말아주세요!ㅎㅎ 우리팀은 여전히 함께하고 같이 나아가고 있으니 같이 멋진 모하지를 만들어 봐요!
- 차라리 지속적으로 막히기만 했다면 '어디서 어떻게 막히니 도움이 필요합니다.' 라는 말씀을 해주셨을 지도 모르지만 뭔가 조금씩 조금씩 더디지만 해결은 되어가고 있어서 더 붙잡게 되는것 같습니다.막히는 부분을 해결하는데에 얼마나 걸릴지 알 수는 없지만, 그 부분이 해결되면 뒤에는 정말 막히는게 없을까? 하고 생각해 보면 좋을듯 합니다.
그렇게 가정한 뒤 더 이상 막히는 부분이 없다면 실제로 해결하는데 얼마나 걸리지 예상해보면 조금 더 도움이 되는거 같습니다...!
'TIL (Today I learn)' 카테고리의 다른 글
10월 13일 (화)_Final Project - 02 (React Native) (2) | 2020.10.13 |
---|---|
10월 7일 (수)_Final Project - 01 (끝과 시작) (2) | 2020.10.07 |
9월 28일 (월)_First Project - 06 (passport) (0) | 2020.09.28 |
9월 25일 (금)_First Project - 05 (OAuth, 회고) (0) | 2020.09.25 |
9월 24일 (목)_First Project - 04 (SR) (0) | 2020.09.24 |