TIL 20210918 [항해99 6일차]

Arong·2021년 9월 18일
0

프로젝트 코드리뷰

목록 보기
12/12

1주차 과제를 무사히 마치고 배운 내용들 전체적으로 정리

# 비밀번호는 hashlib을 이용하여 해시함수로 변환하기
    pw_hash = hashlib.sha256(pw_receive.encode('utf-8')).hexdigest()
    
# 찾으면 JWT 토큰을 만들어 발급
    if result is not None:
        # JWT 토큰에는, payload와 시크릿키가 필요
        # 시크릿키가 있어야 토큰을 디코딩(=풀기) 해서 payload 값을 볼 수 있다.
        # 아래에선 id와 exp를 담았다. 즉, JWT 토큰을 풀면 유저ID 값을 알 수 있다.
        # exp에는 만료시간을 넣어준다. 만료시간이 지나면, 시크릿키로 토큰을 풀 때 만료되었다고 에러가 난다.
        payload = {
            'id': id_receive,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(seconds=5)
        }
        token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8')

JWT란?
JSON Web Token의 줄임말로, JSON 객체를 사용해 정보를 안정성 있게 전달하는 웹표준
예를 들어, 로그인 기능을 생각해보면 사용자가 로그인하면 서버에서 회원임을 인증하는 토큰을 넘겨줌으로써 이후 회원만 접근할 수 있는 서비스 영역에서 신분을 확인하는 데 쓰일 수 있다.

세션/쿠키 대비 JWT의 장점
첫째, 간편하다. 세션/쿠키는 별도의 저장소의 관리가 필요하지만 JWT는 발급한 후 검증만 하면 되기 때문에 추가 저장소가 필요 없다.
둘째, 확장성이 뛰어나다. 토큰 기반으로 하는 다른 인증 시스템에 접근이 가능. 예를 들어 Facebook 로그인, Google 로그인 등은 모두 토큰을 기반으로 인증을 한다. 이에 선택적으로 이름이나 이메일 등을 받을 수 있는 권한도 받을 수 있다.

try / catch 문?
try 아래를 실행했다가, 에러가 있으면 except 구분으로 가란 얘기

  • 정적 웹페이지(static web page)는 서버에 저장되어있는 HTML+CSS 파일 그대로 보여주는 것!
  • 반면 동적 웹페이지(dynamic web page)는 상황에 따라 서버에 저장되어있는 HTML에 데이터 추가/가공을 해서 보여주는 방법 🙂
  • 정적 웹페이지는 추가적인 통신&계산이 필요 없기 때문에 속도가 빠르고 서버에 부담이 적은 반면, 추가/수정/삭제 등 내용 변경이 필요할 때 HTML 자체를 수정해야 하기 때문에 번거롭다는 단점이 있다.
  • 동적 웹페이지는 한 페이지에서 상황/시간/사용자요청에 따라 다른 모습을 보여줄 수 있다는 장점이 있지만 상대적으로 보안에 취약하고 모습이 계속 변하기 때문에 (많은 경우 주소도 같이 변하죠!) 검색 엔진 최적화(search engine optimazation, SEO)가 어렵다.

동적 웹페이지의 종류

  • Client-side rendering (CSR) : 자바스크립트에 데이터를 포함해서 보낸 후, 클라이언트 쪽에서 HTML을 완성하는 방법
  • Server-side rendering (SSR) : 서버 쪽에서 템플릿 HTML에 데이터를 끼워넣어 완성된 형태의 HTML을 보내주는 방법
  • 복합적인 방법 : 클라이언트 쪽에서 Ajax 요청을 보내서 서버에서 데이터를 받아와 HTML을 완성하는 방법

Jinja2 템플릿 언어
Flask 프레임워크에서 사용하는 템플릿 언어
'템플릿'이 되는 HTML 문서에 데이터가 들어갈 곳을 표시해놓는 역할을 한다.

Jinja2 템플릿 언어 이용하기

  • 서버에서 name이라는 이름으로 값을 보내준다.
@app.route('/')
def main():
    myname = "sparta"
    return render_template("index.html", name=myname)
  • html 파일에서 이 값이 들어갈 자리를 표시한다.
    <h3>Hello, {{ name }}!</h3>

멘토분께 1주차 프로젝트 피드백 받은 내용

  • 유효성검사(벨리데이션)는 JWT토큰으로 하는게 좋다.
  • postId를 랜덤으로 받아왔었는데 앞이 0일경우 오류가 발생되는 상황이 있어서 postId값은 uuid로 사용하거나 mongoDB는 '_id'라는 고유id값이 있기때문에 _id를 사용하는게 좋다.
  • Scope 개념 공부하는 것도 도움이 많이 된다.
  • 좋아요는 for문 말고 Posts DB에 like라는 컬럼을 붙여서 유저들을 '_id'로 다 넣고, array.lenth로 좋아요를 구현 할 수도 있다.
profile
아롱의 개발일지

0개의 댓글