WIL(05.09 ~ 05.14)

전성영·2022년 5월 15일
0

WIL

목록 보기
1/22

05.09(월)

SSR(Server-side rendering)

서버에서 페이지의 내용을 그려 브라우저로 던져주기 때문에 검색 엔진 최적화와 빠른 페이지 렌더링이 큰 장점이고, 이러한 장점 덕분에 사용자 입장에서 화면이 빨리 로딩이 된다.

CSR(Client-side rendering)

자바스크립트에 데이터를 포함해서 보낸 후, 클라이언트 쪽에서 HTML 을 완성하는 방법이다.

05.10(화)

서버에서 데이터베이스에 사용자의 회원가입 정보(아이디, 비밀번호)를 저장할 때 보안을 위해 사용자의 비밀번호를 해시화한다.

    username_receive = request.form['username_give']
    password_receive = request.form['password_give']

    pw_hash = hashlib.sha256(password_receive.encode('utf-8')).hexdigest()

05.11(수)

JWT에 대해서 공부. 세션/쿠키는 다음에..

서버에 요청을 보내는 작업은 HTTP 메세지를 보내는 것이다.
HTTP 메세지의 구조는 일반적으로 헤더와 바디 두가지로 구성되며, 공백은 헤더와 바디를 구분짓는 역할을 합니다.

  • 헤더에는 기본적으로 요청에 대한 정보들이 들어간다.
  • 바디에는 서버로 보내야할 데이터가 들어간다.
    보통 모바일/웹 서비스의 인증은 HTTP 메세지의 헤더에 인증 수단을 넣어 요청을 보낸다.

HTTP 기본인증방법들 중 JWT에 대해서 알아보려고한다.

JWT(JSON Web Token) 란 인증에 필요한 정보들을 암호화시킨 토큰을 의미한다.
JWT 기반 인증은 쿠키/세션 방식과 유사하게 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별합니다.

JWT는 3가지 정보(Header, Payload, Signature)의 조합으로 구성되어 있습니다.

1. Header

  • alg, typ => JWT 토큰을 검증할 때 사용되는 해싱 알고리즘

2. payload

  • 사용자의 ID값과 이용시간을 가지고 있는다.
payload = {
         'id': username_receive,
         'exp': datetime.utcnow() + timedelta(seconds=60 * 60 * 24)  # 로그인 24시간 유지
        }

3. signiture

  • 현재 토큰이 유효한지 판단하는 슈도코드이다.
    header와 payload의 값을 각각 BASE64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩하여 생성한다.

인증방법

  1. 클라이언트 로그인 요청이 들어오면, 서버는 검증 후 클라이언트 고유 ID 등의 정보를 Payload에 담는다.
  2. 암호화할 SECRET KEY를 이용해 ACCESS TOKEN(JWT)을 발급합니다.
  3. 사용자는 Access Token을 받아 저장한 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보냅니다.
  4. 서버에서는 해당 토큰의 Verify Signature를 SECRET KEY로 복호화한 후, 조작 여부, 유효기간을 확인합니다.
  5. 검증이 완료된다면, Payload를 디코딩하여 사용자의 ID에 맞는 데이터를 가져옵니다.

JWT의 장단점

  • 장점
  1. 세션/쿠키와 다르게 별도의 저장소가 필요없다.(서버자원절약)
  2. 데이터 위변조를 막을 수 있다.
  3. 확장성이 우수하다. 토큰 기반으로 하는 다른 인증 시스템에 접근이 가능합니다.
  4. 디버깅 및 관리가 용이하다.
  • 단점
  1. 쿠키/세션과 다르게 JWT는 토큰의 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해진다.
  2. 노출 가능성으로 인해 저장할 수 있는 정보가 제한적이다.

05.12(목)

셀레니움 이 링크에 정리

05.13(금)

c++ substr() 함수.
자주 쓰지 않아서 정리해 보려고 한다.
substr() 은 부분적으로 문자열을 추출하려고 할 때 쓰인다.
ex)

string a = "abcdefg";
string b = a.substr(3, 5);

라는 것은 a라는 string 변수에 index 값 3 부터 +5 까지 출력한다는 뜻이다.

05.14(토)

알고리즘을 풀던 중 팀원분께서 이 부분을 집고 넘어가주셨다. 감삼당
== 와 equals()
정리하자면
==는 주소값 비교, equals()는 값 비교

알고리즘을 꾸준히 공부하면서 많이 부딪혀가며 함수들을 잘 활용해 봐야겠다.

profile
Slow and Steady

0개의 댓글