미니 프로젝트 - 가벼운 식탁

HyunJung Song·2021년 11월 7일
0

회고

목록 보기
1/3
post-thumbnail

11월 1일, 항해 99가 시작됐다.
마치 새끼 사자가 된 것 마냥 절벽에서 굴러져 초원 한 가운데 홀로 남은 듯 했다.
낯선 사람들과 5일간의 프로젝트는 그렇게 시작 됐다.

1주차 프로젝트의 조건은
1. jinja2 템플릿을 이용한 서버사이드 렌더링
2. JWT 인증 방식으로 로그인 구현하기

Flask

- python 웹 프레임워크

Werkzeug 툴킷과 Jinja2 템플릿 엔진에 기반을 둔다.
문법이 간결하며 환경을 구축하기 쉽다.

from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run()

특별한 도구나 라이브러리가 필요 없기 때문에 마이크로 프레임워크라 부른다.
플라스크는 자체에서 구현된 것처럼 애플리케이션 기능을 추가할 수 있는 확장 기능을 지원한다.
비슷한 웹 프레임워크인 django보다는 유지보수가 어렵고 규모가 있는 application을 개발하기에 어렵다.
I like simple code에서 flask로 웹 사이트를 만들 수 있는 스텝을 잘 알려주신다.
추가로 CSR과 SSR의 차이도 알게 되었다.

jinja2

- python Flask 프레임워크에서 사용하는 템플릿 언어

template와 data model을 혼합하여 새로운 document를 만드는 엔진
html코드 안에서 연산을 수행할 수 있으며 중복된 코드를 줄일 수 있다.

<!-- 
	{{ 변수명 }} 
	{% 파이썬 소스코드 %} 
-->

<ul id="navigation">
    {% for item in navigation %}
        <li><a href="{{ item.href eor">{{ item.caption }}</a></li>
    {% endfor %}
</ul>

API

- Application Programming Interface

데이터를 주고 받는 일종의 창구역할을 한다.
어플리케이션을 서로 연결하여 통신을 할 수 있다.

CRUD

서버에게 보내는 요청은 Create, Read, Update, Delete 4가지 성질에 따라 분류되며, 각 목적에 맞는 메소드를 선택하여 요청할 수 있다.

출처 : siner.io

JWT

- JSON Web Token

Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
JWT는 토큰 자체를 정보로 사용하는 Self-Contained 방식으로 정보를 안전하게 전달한다.

토큰(Token)

토큰을 만들기 위해서는 크게 3가지가 필요하다.

  • Header : 3가지 정보를 암호화 할 방식(alg), 타입(type)등이 들어감
  • Payload : 서버에 보낼 데이터, 일반적으로 고유 ID값, 유효기간이 들어감
  • Verify Signature : Base64 방식으로 인코딩한 Header,payload 그리고 SECRET KEY를 더한 후 서명된다.

Header, Payload는 따로 암호화되지 않기 때문에 타인에게 쉽게 노출될 수 있으나, Verify Signature는 SECRET KEY를 알지 못하면 복호화할 수 없기 때문에 토큰을 조작할 수 없다.

출처 : 그랩의 블로그

다른 인증 방식인 세션/쿠키 방식은 세션 저장소에 유저의 정보를 넣는 반면, JWT는 토큰에 유저의 정보를 넣기 때문에 서버측에서 인증을 위해 암호화를 하는가 혹은 별도의 저장소를 이용하는가의 차이가 발생한다.

  • 장점
    • 별도의 저장소 관리가 필요 없어 간편하다. 이는 서버의 확장이나 유지 보수에 유리하다.
    • 확장성이 뛰어나 토큰 기반으로 하는 다른 인증 시스템에 접근이 가능하다.
  • 단점
    • 한번 발급 된 JWT는 유효기간이 완료될 때 까지 계속 사용이 가능하기 때문에 악용의 위험이 있다. 이를 해결하기 위해 유효기간을 짧게 하고 Refresh Token을 발급한다.
    • Payload는 따로 암호화되지 않기 때문에 정보가 제한적이다.
profile
30분이라도 매일 👩🏻‍💻

0개의 댓글