항해99 개발일지 - 미니 프로젝트(2)

jinseo's development note·2022년 3월 11일
0

항해99

목록 보기
2/2
post-thumbnail

🧚‍♀️ 프로젝트 소개 🧚‍

프로젝트명: IntroDog

[4 DAY-MINI PROJECT]

✅ "IntroDog" 은 애견인들의 의견을 교류할 수 있는 사이트입니다.

✅ 반려견을 키우면서 생기는 질문, 일상 등 사소한 것까지 다른 이들과 함께 교류할 수 있습니다!

📅 제작 기간 & MYDOG팀원 소개 👨‍

( 제작 기간: 📆 2022.03.07~ 2022.03.10 )

FRONT-END BACK-END FRONT-END
레이아웃 구성 + 메인 페이지 + 검색 기능 구현
전반적인 프론트엔드 작업
COMMUNITY 페이지 + 글 작성/삭제 + 댓글 작성/삭제 기능 구현
전반적인 백엔드 작업
로그인 + 회원가입 기능 구현
전반적인 프론트엔드 작업

✅ 필수 요구 사항 ✅

  • jinja2 템플릿 엔진을 이용한 서버사이드 렌더링
  • JWT 인증 방식으로 로그인 구현하기

📷 시연 영상 📷

시연 영상

🛠 사용한 기술 🛠

- 언어

HTML, CSS, JAVASCRIPT, PYTHON

-프레임워크 / 플랫폼 / 라이브러리

JQUERY, BOOTSTRAP, BULMA, JWT, JINJA, FLASK

-협업툴

GITHUB, GIT, NOTION, DISCORD

-데이터베이스

MONGO DB

-호스팅

AWS

-에디터

PYTHARM, VISUALSTUDIO
항해99 6기 D반(심화트랙) 미니 프로젝트 보러가기
⭐ 저희 조는 8조 입니다 ⭐

✍️ 구현한 기능소개

1. 토큰 인증 구현


# 토큰 인증 함수
def auth_token(page):
    # 토큰 받아오기
    token_receive = request.cookies.get('mytoken')
    # index 페이지는 예외 처리
    if page == 'index.html':
        # 토큰이 없으면 index 페이지로 이동
        if token_receive is None:
            return render_template('index.html')
        else:
            # 토큰이 있으면
            try:
                # 토큰을 HS256 방식으로 복호화
                payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
                # 복호화한 토큰의 payload의 id와 db에 있는 id 비교
                user_info = db.user.find_one({"id": payload['id']})
                # 인증 성공시 아이디, 프로필사진, 닉네임 리턴
                return render_template(f'{page}', userId=user_info["id"], profileImg=user_info["profileImg"], nickname=user_info["nickname"])
            # 만료된 토큰시
            except jwt.ExpiredSignatureError:
                return render_template(f'{page}')
            # 복호화 오류시
            except jwt.exceptions.DecodeError:
                return render_template(f'{page}')

    else:
        # 토큰이 없으면 로그인 페이지 이동
        if token_receive is None:
            return make_response(redirect(url_for("login", errorCode="0")))
        else:
            # 토큰이 있으면
            try:
                # 토큰을 HS256 방식으로 복호화
                payload = jwt.decode(token_receive, SECRET_KEY, algorithms=['HS256'])
                # 복호화한 토큰의 payload의 id와 db에 있는 id 비교
                user_info = db.user.find_one({"id": payload['id']})
                # 인증 성공시 아이디, 닉네임 json 형식으로 설정
                user_data = {
                    'userId': user_info['id'],
                    'nickname': user_info['nickname']
                }
                # return 타입 설정 
                response = app.response_class(
                    response=json.dumps(user_data),
                    mimetype='application/json'
                )
                return response
            # 만료된 토큰시
            except jwt.ExpiredSignatureError:
                return make_response(redirect(url_for("login", errorCode="1")))
            # 복호화 오류시
            except jwt.exceptions.DecodeError:
                return make_response(redirect(url_for("login", errorCode="2")))
                

2. 게시글 등록, 수정, 삭제

https://github.com/jinsDevelopment/myDog/blob/main/app.py

3. 댓글 등록, 삭제

https://github.com/jinsDevelopment/myDog/blob/main/app.py

✍️ 후기

항해99가 본격적으로 시작 되었다. 새로운 팀원들과 인사도 제대로 나눌 겨를도 없이 바로 미니 프로젝트에 대한 아이디어를 받아 기획, 설계를 하고 4일만에 프로젝트를 만들어 결과물을 보여줘야 했다. 정신이 하나도 없이 진행되어 완성했을 때 뿌듯함도 있었지만 아쉬움이 더 많이 남았다.

좋았던 점

짧은 기간 동안 팀원들과 하루종일 의사 소통을 하며 빠르게 친해질 수 있었고, 서로 의견을 나누며 보완할 점과 좋은 아이디어를 공유함으로 프로젝트의 완성도를 높일 수 있었다. 또한 git을 제대로 다뤄본 적이 없었는데 git에 대해 잘 아는 팀원이 있어서 많은 도움을 받고 무사히 commit 및 push 를 할 수 있었다. 그리고 front 디자인 작업을 많이 해맸었는데 이 또한 팀원의 도움을 받아 잘 마무리 할 수 있었다.

아쉬웠던 점

4일이라는 시간동안 프로젝트 하나를 완성도 있게 만드는 것은 개발을 처음 하는 사람에겐 더더욱 힘든 일이었다. 데이터를 어디서 받아와야 하는지, 백엔드 디렉터리 구조, 효율적인 DB 설계를 했는지 무엇 하나 정답이라고 할 수 없이 완성은 했지만 막무가내로 진행한 느낌이 들었다. 더군다나 강의를 들으며 진행해야 해서 시간적으로 촉박할 수 밖에 없어서 아쉬웠다.

보완할 점

  1. python 파일 구조를 나누려 blueprint 로 router 경로 설정을 시도해 보았지만 python flask 구조를 갓 배워서 아쉽지만 실패하였다. 이런 부분에 대해서는 추가적으로 공부해 볼 생각이다.

  2. jwt 토큰 인증 방식을 api 호출할 때 마다 자동으로 호출하게 하는 방법이 있는지 알아봐야 할 것 같다.

  3. git 사용법에 대해 더욱 공부를 해야 겠다.

profile
개발 노트입니다.

0개의 댓글