cookie, session, jwt
로그인 자체 기능도 어렵지만 로그인 상태가 유지되도록 하는 것도 중요하다.
메일을 쓸 때마다, 메일을 삭제할 때마다, 기능을 쓸 때마다 다시 로그인 해야하면 안되기 때문이다.
Authentication : 인증, 쉽게 말해서 로그인. 가입된 회원임을, 일정 권한이 주어진 회원임을 아이디와 패스워드를 통해서 말 그대로 인증을 받는 것
Authorization : 인가, 한번 인증을 받은 회원이 이 후 서비스의 여러 기능을 사용할 때 내가 로그인 되어 있음을 알아보고 허가를 해주는 것. 로그인이 유지되는 상태에서 일어나는 일. (어서(와~)이제이션)
사이트나 서비스에 인증하고 인가하는 방법에는 cookie, session 과 jwt 가 있다.
관련 내용은 아래 링크들에 잘 정리되어있다.
https://ksh-coding.tistory.com/113
https://www.youtube.com/watch?v=1QiOXWEbqYQ
비밀번호 암호화
클라이언트 -> 서버 -> DB 에서 데이터가 넘어가는 과정에 비밀번호와 같은 개인정보는 암호화가 필수이다.
프로젝트에서 서버에서 DB로 데이터를 보내고 저장하는 부분은 서버에서 SHA256를 사용해서 암호화 하고 저장했다. SHA256 알고리즘은 해시 값을 이용한 암호화 방식 중 하나로 단방향 알고리즘이라 복호화할 수 없다.
SHA-256 알고리즘에 대한 정보
https://padosol.tistory.com/50
클라이언트에서 서버로 데이터가 넘어가는 과정에도 암호화가 필요한데, 보통은 https를 사용해서 별도로 할 일은 없다.
(jwt 클 > 서 암호화 방법 extend 사용 알아보기)
Jinja2를 이용한 서버 사이드 렌더링
프로젝트를 진행하며 jinja2는 쓰는법만 익혀서 사용했는데, 대표님이 서버사이드 렌더링이 뭐고 왜 쓰냐고 질문하신거에 답을 못했다.
서버 사이드 렌더링 (SSR) 이란 server side rendering 약자로 서버측에서 페이지를 렌더링하는 방식이다.
서버에서 페이지를 렌더링한 후에, 클라이언트에게 전달되며, 클라이언트에서는 추가적인 JavaScript 로딩이 필요하지 않다.
- SSR은 서버 측에서 데이터를 받아와 렌더링하기 때문에 초기 로딩 속도는 빠르고, 페이지를 이동할 때마다 서버에서 데이터를 받아와 렌더링해야 하기 때문에 페이지 이동 속도가 느리다 -> 우리팀은 페이지를 여러개 이동할 일이 없었기 때문에 사용에 적합
- SSR은 서버에서 데이터를 렌더링해서 줌으로 초기 HTML 파일에 콘텐츠가 포함되어 있기 때문에 검색 엔진이 페이지를 크롤링할 때 콘텐츠를 인식할 수 있어 크롤링에 유리하다. SSR 큰 장점!
- 서버 측에서 데이터를 처리하기 때문에 보안성이 높다. 클라이언트 측에서 데이터를 조작하거나 해킹 등의 공격이 어려워진다. 반면에 서버 부하가 증가할 수 있다.
정리하자면 SSR은 초기 로딩 속도가 빠르고, SEO(Search engine Optimization)에 유리하며, 보안성이 높다. 그러나 페이지 이동이 느리고, 서버의 부하가 증가할 수 있다.
jinja2란 python flask 패키지에 내장된 템플릿 엔진이다.
동적 웹 페이지를 구성할 때 서버에서 곧바로 웹페이지 로딩과 동시에 변수 값을 할당한다.
@app.route("/main")
def main():
if 'userID' in session:
user_id = session.get('userID')
myinfo = _DB_.find_one({"user_id": user_id}, {'_id': 0, 'user_pw': 0})
category = list(_DB_CATEGORY.find({}, {'_id': 0}).sort({'index': 1}))
return render_template('main.html', myInfo=myinfo, category=category)
else:
return redirect(url_for('loginpage'))
app.py
render_template("000.html", 변수명=000, 변수명=000)
<span class="select is-dark is-small">
<select id="user_team_selector" style="width: 120px; text-align: center" required>
{% for cate in category %}
{% for key, value in cate.items() %}
{% if key == "team" and value == myInfo.user_team %}
<option selected>{{value}}</option>
{% elif key == "team" %}
<option>{{value}}</option>
{% endif %}
{% endfor %}
{% endfor %}
</select>
</span>
main.html
{{ }} 더블 중괄호 안에 변수명을 집어넣어 사용하고 {% %} 안에 제어문을 사용한다.
polling
setInterval 사용 시, 화면이 내려가 있을 때 처리와 탭을 여러 개 띄워두고 30분이 지났을 때 등 생각해 봐야할 것
같은 팀원분들 개발일지 링크
(다들 다른거 쓰신게 신기해)
https://github.com/Arklimits/swjungle-archive/tree/main/development-log
'정글' 카테고리의 다른 글
정글 [week11] Pintos-KAIST Project 3 :: VIRTUAL MEMORY - 2 (1) | 2024.05.27 |
---|---|
정글 [week10] Pintos-KAIST Project 3 :: VIRTUAL MEMORY (0) | 2024.05.21 |
정글 [week08] Pintos-KAIST Project 2 :: USER PROGRAMS (0) | 2024.05.14 |
정글 [week07] Pintos-KAIST Project 1 :: Alarm Clock (0) | 2024.04.27 |