[Project 나만의 무기] - 회고 02.10 목 D-30

novxerim·2022년 2월 11일
1

SW-Jungle

목록 보기
51/59
post-thumbnail
post-custom-banner

📖 02.10 목요일

1. 공부 진행 상황

  • 데모때 중요한 것은 로그인부터 차근차근~ 보다는 팀 프로젝트의 핵심 기능을 소개하는 것이라 판단되어 백팀 진행 순서를 최대한 빨리 핵심 기능 먼저 보이게 하는 쪽으로 수정했다.

    • 구글로그인 구현 → 서버 열고 DB 연동 → 방들과 연동 순으로 진행
  • google.js 전체 코드 이해하기!

    • 쿼리 작성법, mysql DB에 연동하는 코드, 콜백 쓰는 방법
    • 세션을 저장하는 함수. passport.serializeUser
      [(Node.js) Serialize 와 Deserialize 로그인 정보 저장](https://heewon26.tistory.com/51)
  • 라스트 오늘 할 일

    • S3내 맵 이미지 업로드 (민수)
    • DB 설계 및 입력 : S3 맵 파일 주소
    • 브라우저 이미지 요청시 불러오는거까지 확인
  • Algorithm 내일은 꼭 풀자 !!!!


2. 기술적 고민

  • 팀 Git 버전 관리
    • 한 명이 초기 환경 세팅(npm설치 등) 후 push, pull로 설정 완료
    • 이후 npm설치 시 -s, —-save 꼭 하고, 타인은 npm install 로 받아오면 됨.
      새로운 모듈 설치시 서로 말 해주기
  • DB를 여럿이서 관리하려면 깃 연동을 어떤 식으로 해야하지?
    • 워크벤치에서 아이디 같이 쓰면 된다고 함.
    • ec2 열고 → 워크벤치에서 해당 ip주소 적고 접속
  • 구글 로그인 연동해서 들어온 정보들 중에 있는 email주소 + 다음 페이지에서 제출되는 닉네임을 우리 DB에 연결해와서 저장하려면?
    • 이메일 : 쿼리문을 작성해서 구글 정보에서 바로 테이블로 보낸다.
      보낼 때 if문+SELECT로 먼저 이메일이 DB에 들어있는지 확인한 후, 들어있으면 에러, 길이가 0이면(이메일 들어온게 없으면) → 세션id와 이메일 주소를 DB에 올린다.
    • 세션id를 같이 올리는 이유 : 로그인에 성공하면 세션테이블에 세션id가 저장되는데, 이걸로 닉네임 입력 페이지에서 입력되는 닉네임이 누가 입력한 닉네임인지 비교해서 해당 유저의 닉네임으로 유저DB에 올리기 위함.
      • 쿼리문 참고1
            passport.use(
                new GoogleStrategy(
                    {
                        clientID: GOOGLE_CLIENT_ID,
                        clientSecret: GOOGLE_CLIENT_SECRET,
                        callbackURL: "http://localhost:3000/auth/google/callback",
                        passReqToCallback: true,
                    },
                    function (request, accessToken, refreshToken, profile, done) {
                        db.query('SELECT * FROM aim_user_info WHERE email=?', [profile.email], function(error, result){
                            if (error) {
                                throw error;
                            }
                            
                            if (result.length === 0) {
                                db.query('INSERT INTO aim_user_info (session_id, email) VALUES(?,?)', [request.session.passport.user, profile.email], function(error2, result){
                                    if (error2) {
                                        throw error2;
                                    }
                                });
                            }
                        });
            
                        // console.log(profile);
                        // console.log(accessToken);
            
                        return done(null, profile);
                    }
                )
            );
  • 쿼리문 참고2
            app.post('/sendNickname', (req, res) => {
                let post = req.body;
                let session_id = req.session.passport.user;
                db.query('UPDATE aim_user_info SET nickname=? WHERE session_id=?', [post.nickname, session_id], function(error, result){
                    if (error) {
                        throw error;
                    }
                });
            
                // console.log('Got body:', req.body);
                res.sendStatus(200);
            });
  • 데이터베이스 테이블을 어떻게 짤지 정함. 2D 픽셀 특성상, 캐릭터의 이동좌표를 하나하나 저장해둬야 한다. 아마 마지막 좌표를 저장할 듯
    • S3에 이미지를 올린 후 받아온 url → DB저장 → 웹페이지로 불러오기 작성 완료

  • 🍰) 세션id가 DB에서 삭제 후에도 같은 id로 나온다. 세션은 만료되는 것 아닌가?

해당 부분이 null이라서? 근데 쿠키랑 관련있나? 나중에 시간 날 때 고려해볼 것.
세션 유효 시간이 있다면 만료 후에도 이 때와 같은 id를 받을지 볼 것


3. 성찰

  • 점심 전에 못 나올거면 너무 무리해서 늦게까지 하지 말자. 출근시간 마지노선을 지키자
  • 코치님 : 하루하루 목표로 완성할 기능을 설정해라.
  • 나는 무슨 기능을 구현할 수 있을까? 찾아내고, 해내자.
profile
블로그 이전했습니다. https://yerimi11.tistory.com/
post-custom-banner

0개의 댓글