23-07-05 TIL

more·2023년 7월 5일
0

문제

  • JWT를 이용한 로그아웃 방법
    • 팀원분이 로그아웃을 기능을 구현하시는데, 나도 시간이 남아서 이것저것 찾아서 로그아웃 구현을 시도해보았다.

시도

  • 우선 생각나는 방식은 logout시에 쿠키나 토큰을 제거해주는 방식이 있다.
    • 근데 jwt를 사용하면 딱히 쿠키를 사용하지 않고, 또 토큰 자체를 제거해주기는 어려울 것으로 보인다.

해결

  • 팀원분께서는 redis라는 것을 사용해서 구현하셨다.
    • redis는 로그아웃을 요청한 access token이 만료될 때까지 access token으로 오는 요청을 막기 위해서 사용
    • 어플리케이션이 꺼져도 상관없는 메모리 공간에 로그아웃을 요청한 Access token값을 저장하고 만료시간을 설정하여서 해당 토큰으로 다른 api 요청이 들어온다면 로그아웃한 토큰인 것을 말해준다.

오늘 푼 문제

  • 백준 9017 (크로스 컨트리) - Java

    
    import java.io.*;
    import java.util.*;
    
    public class Main {
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
            int testCase = Integer.parseInt(br.readLine());
    
            for (int i = 0; i < testCase; i++) {
                int dataSize = Integer.parseInt(br.readLine());
    
                int[] input= new int[dataSize];
                int[] count = new int[201];
    
                StringTokenizer st = new StringTokenizer(br.readLine());
    
                for (int j = 0; j < dataSize ; j++) {
                    input[j] = Integer.parseInt(st.nextToken());
                    count[input[j]]++;
                }
    
                ArrayList<Integer>[] arr = new ArrayList[201];
                for (int j = 1; j < 201; j++) {
                    arr[j] = new ArrayList<Integer>();
                }
    
                int rank = 1;
                for (int j = 0; j < dataSize ; j++) {
    
                    // 해당 팀의 사람 수가 6명이 안되면 할당하지 않는다.
                    if(count[input[j]]<6) continue;
    
                    arr[input[j]].add(rank++);
                }
    
                int min = Integer.MAX_VALUE;
                int idx = 1;
                for (int j = 1; j < 201; j++) {
                    if (arr[j].size() >= 6) {
                        int sum = 0;
                        // 4번째 인덱스까지 합
                        for (int k=0;k<4;k++) {
                            sum += arr[j].get(k);
                        }
                        if (min > sum) {
                            min = sum;
                            idx = j;
                        } 
                        else if (min == sum) {
                        // 5번째 인덱스까지 합 비교
                            if (arr[idx].get(arr[idx].size() - 2) > arr[j].get(arr[j].size() - 2)) {
                                idx = j;
                            }
                        }
                    }
                }
                bw.write(idx + "\n");
            }
    
            bw.flush();
            bw.close();
            br.close();
        }
    }
    

0개의 댓글