사용자 인증방식의 종류
ID/Password
가장 기본이 되는 인증 방식. 대부분 Password를 암호화하여 DB와 대조하는 방식으로 사용된다.
Cookie/Session
서버에서 사용자의 정보를 세션에 기록하여 인증하는 방식
JWT
. 를 구분자로 header, payload, signature 세 파트를 각각 다른 방법으로 인코딩하여 HTTP 헤더에 담아 전송하는 방식.
Authorization: JWT <header>.<payload>.<signature>
Basic Auth
HTTP 헤더에 <id>:<password> 값을 base64로 인코딩하여 담아 전송하는 방식.
Authorization : Basic Base64(id:password)
OAuth
인증 및 인가를 위한 오픈 프로토콜, 사용자가 Facebook이나 트위터 같은 인터넷 서비스의 기능을 다른 애플리케이션 (데스크톱, 웹, 모바일 등)에서도 사용할 수 있게 한 것.
SAML (Security Assertion Markup Language)
SSO (Single Sign On)이 필요할 때 많이 쓰이는 인증방식.
session/cookie 방식 vs JWT
session/cookie
장점
세션이라는 데이터 베이스에 모든 정보를 보관하기 때문에 신뢰성이 있고 쿠키에 sessionId를 보내줌으로서 안정성을 높일 수 있습니다.
또한 쿠키를 사용하기 때문에 클라이언트에서 계속 서버에 요청하지 않아도 된다는 장점이 있습니다. 또한 쿠키에서 http only 옵션을 사용하여 안전성을 높일 수 있습니다.
단점
session 에서 사용자의 정보를 보관하고 있기 때문에 stateful하다는 단점이 있습니다. 이 말은 여러개의 서버에서 동작을 하던지 micro서비스를 할때 한 서버에 세션을 보관하고 있으므로 한 서버에 네트워크 요청을 해야한다는 점입니다.
JWT
사용자의 아이디와 원하는 정보를 묶어서 만들게 되고 이 만들어진 jwt를 사용자에게 보내게 되고 클라이언트가 api 요청을 할 때 헤더에 넣어서 서버에 보내줍니다. 서버는 클라이언트에서 받은 jwt가 유효한지 판별합니다.
장점
stateless하다는 점이 장접이 되어 서버를 확장할 수 있고 micro 서비스 하더라도 사용자에대한 검증을 하지 않더라도 jwt를 만들고 해독할 수 있는 key만 있으면 됩니다.
단점
토큰 자체에 정보를 담고 있으므로 보안성에 안좋을 수 있습니다.
만료시간을 설정하지 않을 경우 영원히 보관된다.
보안 전략
짧은 만료 기한 설정
토큰이 탈취되더라도 빠르게 만료되기 때문에 피해를 최소화할 수 있습니다.
그러나 사용자가 자주 로그인해야 하는 불편함이 수반됩니다.
Sliding Session
Sliding Session은 서비스를 지속적으로 이용하는 클라이언트에게 자동으로 토큰 만료 기한을 늘려주는 방법입니다. 글 작성 혹은 결제 등을 시작할 때 새로운 토큰을 발급해줄 수 있습니다.
Refresh Token
클라이언트가 로그인 요청을 보내면 서버는 Access Token 및 그보다 긴 만료 기간을 가진 Refresh Token을 발급하는 전략입니다. 클라이언트는 Access Token이 만료되었을 때 Refresh Token을 사용하여 Access Token의 재발급을 요청합니다.
서버는 DB에 저장된 Refresh Token과 비교하여 유효한 경우 새로운 Access Token을 발급하고, 만료된 경우 사용자에게 로그인을 요구합니다.
클라이언트도 탈취 방지를 위해 Refresh Token을 보안이 유지되는 공간에 저장해야 합니다.
토큰 기반 인증은 왜, 그리고 언제 쓸까요?
세션 기반 인증은 서버(혹은 DB)에 유저 정보를 담는 인증 방식이었습니다. 서버에서는 유저가 민감하거나 제한된 정보를 요청할 때마다 "지금 요청을 보낸 유저에게 우리가 정보를 줘도 괜찮은가?"를 확인하기 위해 가지고 있는 세션 값과 일치하는지 확인합니다. 매 요청마다 데이터베이스를 살펴보는 것이 불편하고, 이 부담을 덜어내고 싶을때 토큰 기반 인증 중 대표적인 JWT (JSON Web Token)를 사용합니다.
TCP syn을 받지 못하게 되면 어떻게 처리 되는가?
Stop-and-wait ARQ
재전송 방식은 이름 그대로 멈추고 기다리는 방식
Pc A에서 0번 패킷을 전송했다고 가정합시다.
Pc B에서 0번 패킷을 수신하고 그에 대한 확인 응답으로 0번 ACK을 전송합니다.
A는 0번 ACK를 확인하면 1번 패킷을 전송합니다.
이 때 패킷이 손실되어서 도착하지 못하면 ACK를 받을 수 없기 때문에 timeout이 되어 1번 패킷을 재전송합니다.
Go-Back-N ARQ
어느 한 패킷이 돌아오지 않아서 에러가 발생했다며 그 번호의 패킷부터 다시 재 전송하는 방식입니다.
Pc A는 2번 패킷에 대한 ACK를 받지 못해서 타임 아웃 되고 다시 2번 패킷 부터 전송하는 방식입니다.
Selective Repeat ARQ
오류가 발생한 패킷을 선택적으로 재전송하는 방식입니다.
패킷을 전송하는 도중 2번 패킷이 손실되거나 오류가 발생하여서 B가 수신하지 못합니다. 2번 패킷을 수신했을 시 버퍼에 기록하고 수신한 패킷에 해당하는 ACK를 선택적으로 전송합니다. 모든 패킷을 전송하고 2번 패킷을 다시 전송합니다.
좋아하는 알고리즘의 설명과 동작원리 빅오는 어떻게 되는지?
flood fill
BFS 과정
1. 시작하는 칸을 큐에 넣고 방문했다는 표시를 남긴다.
2. 큐에서 원소를 꺼내어 그 칸에 상/하/좌/우로 인접한 4개의 칸에 대해 3번 행동을 한다.
3. 해당 칸을 이전에 방문했다면 아무 것도 하지 않고, 처음으로 방문했다면 방문했다는 표시를 남기고 해당 칸을 큐에 넣는다.
4. 큐의 모든 원소가 빌 때 까지 2를 반복한다.
* 모든 칸이 큐에 1번 씩만 들어감이 보장되므로 시간복잡도는 칸이 N개일 때 0(N)입니다.
퀵정렬의 최악의 경우는 어떤 경우 이며 그때의 시간 복잡도는 어떻게 되는가?
정렬된 배열에서 바로 피봇을 최솟값이나 최댓값으로 선택한 경우에 가장 큰 시간이 소요됩니다.
시간 복잡도는 O(n^2)
'일기' 카테고리의 다른 글
2022-06-01 알고리즘 이론 (0) | 2022.06.01 |
---|---|
2022-05-31 일기 (0) | 2022.06.01 |
2022-05-30 면접 전날 (0) | 2022.05.30 |
2022-05-28 그림쟁이로서의 알고리즘에 대한 호기심이 생겼다. (0) | 2022.05.28 |
2022-05-27 드러누워 ● ▅ ▇ █▇▆▅ ▄ ▇ (0) | 2022.05.27 |