코드카타
47) 문자열 내 마음대로 정렬하기
코드카타 레벨은 올라가서 그런지
나에게는 1시간 안에 풀기가 어렵다.
그래서 마음이 어려웠다.
TIL 작성을 할 수 없기 때문이다.
그러나 이 문제만 붙들고 있기에는
팀 프로젝트, 개인 과제든 할 일이 있다.
그래서 만약 시간 안에 풀지 못한다면
지금까지의 그 기록을 남기고, 내일 다시 풀어보기로 했다.
s.charAt(n)이라는 개념을 시작으로
처음에는 map형식으로 map.put(s.charAt(n), s)로 저장하여 정렬하고자 했으나
map은 정렬 기능이 따로 잘 되어있지 않아서
map에 넣은 값을 다시 배열에 넣어서 만들어야 했다...
그래서 일단 지금까지 찾은 키워드는
Comparable, Comparator이다.
출처:https://hianna.tistory.com/569
이를 통해 리스트로 정렬하는 방법을 생각해볼 것이다.
기초 프로젝트 트러블슈팅
JWT 사용 시, 회원 삭제를 논리적 삭제(Soft Delete) 방식으로 처리할 경우 발생하는 토큰 기반의 한계점
이 사안은 팀원 분이 회원 관련 테스트를 하시다가 발견하셨다.
우리 팀은 로그인 시,
RequestBody에서 입력한 email, password를
DB에서 해당 회원이 있는지 조회한 후,
회원이 있는 경우, Header에 JWT를 발급해 주는 방식을 사용했다.
문제는 DB에서 조회를 할 때,
물리적으로 삭제되지 않은 회원까지 다 조회된다는 것이었다.
따라서 JWT가 만료되기 전까지는
해당 토큰으로 삭제된 회원이 마음껏 조회, 수정, 삭제가 가능했다.
튜터님께 위의 사항에 대해 문의드렸더니
JWT의 특징에 대해 설명해주셨다.
만약 USER, ADMIN 권한까지 부여한 경우에
ADMIN 회원은 USER로 강등시키는 경우에도
토큰 만료 전까지 ADMIN Role로 접근이 가능하다고 하셨다.
이를 제한하려면
1) Token 자체를 BLACK_LIST로 관리해서
DB나 캐시 메모리(Redis)에 저장하기
(Redis의 경우에는 TTL(Time To Limit) 만료시간이 있어 유용하다)
2) 인증 필터에서 매번 해당 토큰이 BLACK_LIST에 있는지 확인하기
라는 방법이 있다고 말씀해주셨다.
+) 회원 삭제 시, Token을 강제로 기간 만료 처리하는 방법도 생각해보았다.
그러나 이는 JWT 방식의 강점인 Stateless(무상태성)를 포기하는 방법이라고 하셨다.
따라서 위와 같은 방법은 사용하는 것을 권장하지 않으셨다.
그리고 다음 프로젝트에는 Refresh Token을 적용해보는 것을 추천하셨다.
Access Token
- 사용자 인증 후 서버가 발급하는 유저 정보가 담긴 토큰이다.
- 유효 기간 동안 API나 리소스에 접근할 때 사용한다.
Refresh Token
- Access Token은 보안을 위해 짧은 수명을 가진다.
- Access Token이 만료된 경우 재발급 받기위해 사용한다.
- 주로 데이터베이스에 유저 정보와 같이 저장한다.
- 클라이언트의 로그인 요청
- 로그인에 성공했다면 Header, Payload에 Secret Key를 사용하여 Signature를 만든다.
- 발급받은 JWT를 저장 후 서버에 요청할 때 Authorization Header에 JWT(Access Token)를 담아 보낸다.
- 서버에서 JWT의 유효성 검사를 통해 통과한다면 인증에 성공하여 요청을 처리해준다.
- Access Token이 만료 되었다면 Refresh Token 으로 토큰 재발급을 요청한다.
- 서버로부터 Access Token을 재발급 받는다.
따라서 다음에는 Refresh Token이라는 개념을 활용해볼 예정이다.
'CODING > 스파르타 내일배움캠프 TIL' 카테고리의 다른 글
47_문자열 내 마음대로 정렬하기_Spring 심화 주차 개인 과제 트러블슈팅_25.2.24(월) (0) | 2025.02.24 |
---|---|
46_기초프로젝트 발표 후 회고_25.2.20(목) (0) | 2025.02.20 |
44_숫자 문자열과 영단어_기초프로젝트 트러블슈팅_25.2.18(화) (0) | 2025.02.18 |
43_시저 암호_기초 프로젝트 트러블슈팅_25.2.14(금) (0) | 2025.02.14 |
42_최소직사각형_일정관리 Develop 과제 해설_25.2.13(목) (0) | 2025.02.14 |