본문 바로가기

전체 글

(26)
[JWT] Redis TTL로 Refresh Token 만료 자동화와 예외 처리 구현하기 1. Refresh Token의 저장소에 대한 고민처음에는 Refresh Token을 데이터베이스에 저장하고, 로그아웃 시 해당 레코드를 삭제하는 방식을 고려했습니다. 클라이언트에서 로그아웃을 요청하면 Access Token으로 인증을 거쳐 RefreshToken을 DB에서 삭제하는 로직이었습니다. 하지만 다음과 같은 문제가 있었습니다.1. 만료 토큰 처리의 한계: 사용자가 명시적으로 로그아웃하지 않고 Refresh Token이 만료된 경우, Access Token도 만료되어 로그아웃 API를 호출할 수 없게 됩니다. 이로 인해 만료된 Refresh Token이 데이터베이스에 계속 쌓이는 문제가 발생할 수 있었습니다. 2. 성능 우려: 사용자가 늘어날수록 토큰 조회와 갱신이 빈번하게 발생하는데, 이는 데..
[동시성] 상품 구매 시 발생하는 재고 동시성 문제 해결하기 1. 문제 발생가상으로 100명의 사용자가 있다고 설정하고 동시에 구매 API를 호출하는 테스트를 진행한 결과 재고가 알맞게 줄어들지 않는 문제가 발생했습니다. 테스트 코드: @Test public void testConcurrentPurchase() throws InterruptedException { //멀티스레드 이용 ExecutorService : 비동기를 단순하게 처리할 수 있또록 해주는 java api ExecutorService executorService = Executors.newFixedThreadPool(USER_COUNT); //다른 스레드에서 수행이 완료될 때 까지 대기할 수 있도록 도와주는 API - 요청이 끝날때 까지 기다림 ..
[SWEA] 1221 : GNS (파이썬) 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&problemLevel=3&contestProbId=AV14jJh6ACYCFAYD&categoryId=AV14jJh6ACYCFAYD&categoryType=CODE&problemTitle=%EB%AC%B8%EC%A0%9C%ED%95%B4%EA%B2%B0&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=3&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 코드 from collec..
[백준] 2178 : 미로 탐색 (파이썬) 문제 https://www.acmicpc.net/problem/2178 2178번: 미로 탐색 첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다. www.acmicpc.net 코드 from collections import deque di =[-1,1,0,0] dj =[0,0,-1,1] def bfs(si,sj,ei,ej): q = deque() q.append((si,sj)) # (i,j) 한쌍이므로 괄호로 묶어서 저장 v[si][sj] = 1 while q: ci, cj = q.popleft() #현재 i,j 값은 4방향 확인 뒤에 바뀜 if (ci,cj) == (ei,ej): # 괄호 사용..
[SWEA] 1979 : 어디에 단어가 들어갈 수 있을까 (파이썬) 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5PuPq6AaQDFAUq&categoryId=AV5PuPq6AaQDFAUq&categoryType=CODE&problemTitle=%EC%96%B4%EB%94%94%EC%97%90&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 코드 def count(mtx): ans = 0 for lst in mtx: # i(행) 인덱스 ..
[SWEA] 1215 : 회문1 (파이썬) 문제 https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14QpAaAAwCFAYi&categoryId=AV14QpAaAAwCFAYi&categoryType=CODE&problemTitle=%ED%9A%8C%EB%AC%B8&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 코드 def count(arr): cnt = 0 for i in range(8): for j in range(8 ..
[백준] 10431 : 줄세우기 (파이썬) 문제 https://www.acmicpc.net/problem/10431 10431번: 줄세우기 초등학교 선생님 강산이는 아이들을 데리고 단체로 어떤 일을 할 때 불편함이 없도록 새로 반에 배정받은 아이들에게 키 순서대로 번호를 부여한다. 번호를 부여할 땐 키가 가장 작은 아이가 1 www.acmicpc.net 코드 from bisect import insort_left P = int(input()) for i in range(1, P + 1): arr = list(map(int, input().split())) arr.remove(arr[0]) s_arr = [] cnt = 0 for a in arr: # a를 정렬된 위치에 삽입 insort_left(s_arr, a) # 배열 크기 - a의 인덱스 -..
[SWEA] 2001 : 파리 퇴치 (파이썬) 문제 https://swexpertacademy.com/main/solvingProblem/solvingProblem.do SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 코드 T = int(input()) for t in range(1,T+1): N, M = map(int, input().split()) mtx = [list(map(int, input().split())) for _ in range(N)] max = 0 # 파리채를 내리칠 수 있는 전체 범위 for si in range(N-M+1): for sj in range(N-M+1): cnt = 0 # 현재 i,j좌표 + 파리채 범위 for i in ..