식별자: 변수, 함수, 클래스, 모듈 또는 다른 객체를 식별하는데 사용되는 이름
문자 A부터 Z 또는 a에서 z 또는 밑줄 (_)로 시작(대소문자 구별)
한 개 이상의 문자로 구성됨
파이썬에서는 @, $, %와 같은 특수 문자를 식별자 내에서 사용X 파이썬은
https://sdc-james.gitbook.io/onebook/3./3.3./3.3.3.-identifiers
+파이썬 버전별로 바이트코드가 달라서 파일명에 버전 이름을 명시해준다
+__pycache__ 디렉터리에 저장된다
https://jins-sw.tistory.com/25
map(),zip()모두 파이썬 내장함수
맵 객체는 이터레이터라서 변수 여러 개에 저장하는 언패킹(unpacking)이 가능합니다.
→ a, b = map(int, input().split())
내장함수 VS 메서드 모양 헷갈리지 말자~~!
- 내장함수
built-in-func()- 메서드 depending on the data type of an object
object.method(para)
https://dojang.io/mod/page/view.php?id=2286
https://www.geeksforgeeks.org/python-pass-multiple-arguments-to-map-function/
HTTPS == HTTP(평문 데이터 전송) + SSL(secure socket layer- 추가적인 보안계층)
요청과 응답(데이터)를 암호화해서 주고받는 통신이다~!~!
① 클라이언트가 서버에 연결 요청을 보내면
② 서버는 비대칭키를 발급받음
③ 서버는 클라이언트에게 이 인증서(+서버의 공개키)를 전달
④ 클라이언트는 CA의 공개키로 이 인증서를 복호화 → 서버의 공개키를 획득함+ 서버의 유효성 검사 완료
⑤ 클라이언트는 세션키(대칭키)를 발급받음
⑥ 클라이언트가 획득한 서버의 공개키로 세션키를 암호화해서 서버에 전달
⑦ 서버는 본인의 개인키로 암호화된 세션키를 복호화해서 세션키 획득
이후 클라이언트와 서버가 세션키(대칭키이자 개인키)를 이용해서 데이터를 암호화
해서 주고받는다
https://dolphinsarah.tistory.com/52
인증서
로써 클라이언트에게 신뢰할 수 있는 서버라는 것을 확인해줄 수 있고
서버의 공개키를 전달해준다
대칭키
는 서로 주고 받는 게 어렵다는 문제가 있고
이를 보완하기 위해 나온 개념이 비대칭키
→ 비대칭키를 이용해서 대칭키를 공유함
대칭키를 공유할 때는 안전성이 필요하므로 비대칭키를 사용한다
서버는 비대칭키를 이용해서 클라이언트의 대칭키를 얻는다
서버의 공개키
로 암호화된 대칭키를 서버의 개인키
로 복호화해서 대칭키를 획득안전이 확보된 이후 데이터를 교환하는 과정은 속도가 중요하기때문에 대칭키를 사용해서 데이터를 주고받음
solemnly used for authentication and authorization
A user
1. logs in at an authorization server and
2. receives a JWT token which is signed with the private key
of the authorization server. The user then
3. attaches this very JWT to every sent request.
4. The authorization server then verifies whether the JWT was issued by this authorization server and if it was tampered by someone by verifying its signature with the public key
.
서명 생성(암호화) 과정: 해싱을 먼저 적용하고 이후에 키로 암호화
서명 검증 과정: 받은 JWT를 키로 복호화를 한 후 해싱된 값을 만들어내서 비교하는 것
ex. HS256
You send your JWT to the server with each request. When the server receives it, it generates a signature using some data from your JWT, verifies it, and if your JWT is valid, it sends back a response.
When your authentication server receives an incoming JWT, it uses the incoming JWT's header and payload segments and the shared private key to generate
a signature.
→ 생성한 서명과 incoming JWT의 서명이 같다면 검증 완료
중앙집중monolithic 서버 시스템에서는 상관없지만 분산distributed 시스템에서는 여러 서버에서 개인키를 모두 가지고 있어야하는 문제점이 발생함
https://www.freecodecamp.org/news/how-to-sign-and-validate-json-web-tokens/
ex. RS256
On the resource server we can validate the token by using the public key.
결국 검증을 공개키를 통해서 하는 게 맞다
해싱을 사용했으니 그다음엔 또 서명을 만들어내서 비교하겠지만 서버가 공개키를 가지고 있단 사실이 지금 나에겐 너무나 중요함
공개키는 JWT 웹사이트에 공개되어있으므로 요청이 인증서버로 가지 않아도 다른 서버들에서도 자체적으로 검증후 응답해줄 수 있다
https://medium.com/dataseries/public-claims-and-how-to-validate-a-jwt-1d6c81823826
def solution(k, score):
ans=[]
for i in range(len(score)):
if i>=k:
ans.append(sorted(score[:i+1],reverse=True)[k-1])
else:
ans.append(sorted(score[:i+1],reverse=True)[i])
return ans
이게 오래 걸리는 문제에서 시간이 너무 오래 걸렸다
테스트 15 〉 통과 (35.63ms, 10.2MB)
테스트 16 〉 통과 (35.55ms, 10.3MB)
테스트 17 〉 통과 (37.13ms, 10.4MB)
테스트 18 〉 통과 (35.73ms, 10.3MB)
테스트 19 〉 통과 (35.35ms, 10.5MB)
테스트 20 〉 통과 (35.58ms, 10.3MB)
테스트 21 〉 통과 (33.63ms, 10.4MB)
테스트 22 〉 통과 (33.58ms, 10.4MB)
테스트 23 〉 통과 (35.25ms, 10.3MB)
테스트 24 〉 통과 (34.64ms, 10.3MB)
테스트 25 〉 통과 (34.32ms, 10.3MB)
그래서 리스트 축약식으로 바꿔봤는데 별 차이 없었고
ans의 마지막 값과 비교하는 조건문을 추가했더니
def solution(k, score):
ans=[]
for i in range(len(score)):
if i>=k:
if ans[-1]<score[i]:
ans.append(sorted(score[:i+1],reverse=True)[k-1])
else:
ans.append(ans[-1])
else:
ans.append(sorted(score[:i+1],reverse=True)[i])
return ans
테스트 15 〉 통과 (7.57ms, 10.5MB)
테스트 16 〉 통과 (7.08ms, 10.2MB)
테스트 17 〉 통과 (6.43ms, 10.4MB)
테스트 18 〉 통과 (7.11ms, 10.3MB)
이 부분이 오래 걸리고 나머지는 괜찮아졌다
조건을 잘 설정하는 게 중요한 것 같은데 이 모든 조건을 함축적으로 가지고 있으면 더 좋겠지..?
[i * j for j in range(2, 10)
for i in range(1, 10)]
→ 이때 for문의 실행 순서는 뒤 > 앞
[x for x in range(n) if condition ]
[x if condition else y for x in range(n) ]
[n for n in range(1,31) if n % 2 == 0 if n % 3 if n % 5 == 0]
if 를 and로 연결한 것 과 같이 연산됨
예시에서 2,3,5의 공배수를 구함