24.01.08 - 24.01.11 (3박4일)
말도 많고, 탈도 많았던 크래프톤 정글 0주차 미니 프로젝트가 끝났다.
거창하게도 아니고 소소하게 기획하고 출발했던 미니 프로젝트지만 여러가지 요소, 암초에 부딪쳐서 완성조차 하지 못했다.
완성을 하고 남는 시간에 컨텐츠를 좀 더 추가하고 싶었던 나의 계획은 물거품 마냥 꼬르르륵..
사실 코드적인 그런 부분에서 문제가 많이 생긴게 아니라, 코드 외적인 부분에서 문제가 많이 발생했기 때문에 조금 더 아쉬웠다.
사실 아쉽다고는 말하지만 결과에 대한 부분이 아쉬웠지 나.. 정말 많이 정말 많이했다.
한계에 몰아붙인다고 표현할까? 몰입이라고 표현해야할까?
실시간으로 정말 생각한 코드들을 짜고, 점점 속도가 붙어가는 나의 모습에 기분이 좋았다.
내가 또 와도 이것보다 더 많이 할 수 있을까?
배운 것도 많고, 공부한 것도 많은 0주차. 지금은 TIL로 적어왔지만 다음에는 따로 한번 더 정리해서 올리도록 하겠다.
인증과 인가
인증
- 자격 증명 확인
- 비밀번호, 생체인식, 일회용 핀
- 사용자가 볼 수 있음
- 사용자가 부분적으로 직접 변경 가능
- ID 토큰을 통한 데이터 전송
- 로그인
- ex)놀이공원 입장
인가
- 권한 허가/거부
- 보안 팀에서 관리하는 설정 사용
- 사용자가 볼 수 없다.
- 사용자가 변경 불가능하다.
- 액세스 토큰을 사용해 데이터를 전송한다.
- 사용자의 로그인 이후의 활동에 대한 서버의 허가가 필요.
- ex) 티켓을 보여주면 놀이기구를 탈 수 있다.
JWT(Json Web Token)
- Header(헤더)
- JWT에서 사용할 타입과 알고리즘의 종류
- Payload(페이로드)
- 서버에서 첨부한 사용자 권한 정보와 사용자의 데이터
- key-value의 한 쌍을 Claim 이라고 한다.
- Signature(서명)
- Header, Payload를 Encode한 이후 Header에 명시된 해시함수를 적용하고, 개인키(private Key)로 서명한 전자서명
- (헤더 + 페이로드) 와 서버가 갖고 있는 유일한 key값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화를 한다.
- 서버는 JWT를 이용해 토큰의 정보를 아는 게 중요한 것이 아니라 클라이언트가 요청과 함께 보낸 JWT가 유효한 토큰인지 검사하는 것이 중요하다.
- 클라이언트가 보낸 JWT의 Header, Payload를 서버의 Key값을 이용해 Signature를 만들어 클라이언트가 보낸 Signature와 일치하는지 확인하고 일치하면 인증을 통과시킨다.(인가)
- 토큰의 진짜 목적은 정보 보호보다는 위조 방이다.
- 데이터의 위변조를 방지한다.JWT 장점
- JWT는 인증에 필요한 모든 정보를 담고 있기 때문에 인증을 위한 별도의 저장소가 없어도 된다.
- 세션(Stateful)과 다르게 서버는 무상태(StateLess)가 된다.
- 확장성이 우수하다.
- 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다.(쿠키와의 차이)
- OAuth의 경우 소셜 계정을 통해서 다른 웹서비스에 로그인 할 수 있다.
- 모바일에서도 잘 동작한다.
Tip
- 서버에서 가장 피해야 할 것은 DB 조회이다. 서버가 죽는 경우 중 대부분은 DB가 터져서 서버도 같이 죽는 경우이다. 이와 관련되어 JWT는 DB조회가 필요없다는 장점을 가지고 있다.
JWT 단점
- 토큰을 탈취당한다면 대처가 매우 어렵다.
Access Token & Refresh Token
- 토큰이 탈취 당했을 때 대처가 매우 어려운 대안으로 Access Token & Refresh Token을 사용한다.
- JWT는 발급 후 삭제가 안된다. 그래서 Access Token에 유효기간을 부여하는 방식으로 이 문제를 해결한다.
- Refresh Token 또한 JWT다.
- Access Token는 접근에 관련된 토큰이고, Refresh Token은 Access Token을 재발급 할 때 사용하는 토큰이다.(Refresh Token이 Access Token보다 긴 유효기간을 가진다.)
- https://coding-hyeok.tistory.com/86 JWT 참고한 블로그
Jinja2
파이썬에서 가장 많이 사용되는 템플릿 엔진 중 하나.
Django의 템플릿 시스템에서 영감을 얻었지만 템플릿 작성자에게 더 강력한 도구 세트를 제공하는 표현 언어로 확장됐다.
Jinja2는 어떤 파일, 실제하는 파일에 어떤 변수들을 집어넣어 약간 변경시켜서 html로 만들어주는 엔진, 같은 것이다.
Jinja2 is a templating engine for Python.
여기서 새로운 template engine이란 template(문서 원형) 과 data model을 혼합하여, 새로운 document를 만드는 것.
보통 flask에 포함되어 있는 jinja를 사용한다.
템플릿 엔진을 사용하는 이유
- 재사용성이 높다.
- 한 페이지를 템플릿 엔진 문법으로 만들어 놓고 여기에 데이터를 바꿔가면서 렌더링하면 수 백 페이지를 나타낼 수 있다.
- 유지보수에 용이하다.
- 템플릿 엔진을 사용하면 동일한 템플릿을 사용한다는 전제하에 템플릿과 넘겨주는 데이터만 수정하면 된다.
- 코드를 많이 줄 일 수 있다.
- 대부분 템플릿 엔진은 기존의 html에 비해서 간단한 문법을 사용한다.
'Study > WIL(Weekly I Learned)' 카테고리의 다른 글
크래프톤 정글 - 5-1Week 24.02.08 - 24.02.14 부제 : 설날과 CSAPP (2) | 2024.02.15 |
---|---|
크래프톤 정글 - 4Week 24.02.01 - 24.02.07 (1) | 2024.02.08 |
크래프톤 정글 - 3Week 24.01.25 - 24.01.31 부제 : 새로운 시작 (2) | 2024.02.01 |
크래프톤 정글 - 2Week 24.01.19 - 24.01.24 부제 : 치타는 웃고있다. (1) | 2024.01.26 |
크래프톤 정글 - 1Week 24.01.12 - 24.01.18 (1) | 2024.01.19 |