Redis로 Rate Limiting 구현하기
·
Development & Projects
AI 분리배출 애플리케이션 "이건 여기"를 개발할 때 Redis를 이용해서 Rate Limit을 구현했던 과정을 기록해 보려고 합니다. 애플리케이션 내 설명 모드는 사용자가 질문을 하고 질문하기 버튼을 누르면 서버의 Prompt Engineering 기반으로 학습된 Gemini가 응답을 생성하는 구조였습니다. 이때 Gemini API를 연결해두었기 때문에 사용자가 질문하기 버튼을 무한클릭하게 된다면 그만큼 API 호출이 폭증하고 비용 폭탄을 맞게될 것입니다. 또한 Rate Limiting은 DDoS 공격을 막는 보안 장치로서도 매우 중요합니다. 누군가 의도적으로 짧은 시간 안에 수백, 수천 번의 요청을 보내면 Gemini API뿐 아니라 서버 전체가 마비될 수 있는 위험이 있기에, 이러한 트래픽 폭주..
Programmers / 고양이와 개는 몇 마리 있을까 / MySQL
·
DB | SQL
문제 : https://school.programmers.co.kr/learn/courses/30/lessons/59040 코드SELECT ANIMAL_TYPE, COUNT(*) AS countFROM ANIMAL_INS GROUP BY ANIMAL_TYPEORDER BY ANIMAL_TYPE; 처음엔 ANIMAL_TYPE이 개와 고양이 말고도 있지 않을까 싶었고 혹시나 해서 제출했는데 통과가 되었다. SELECT ANIMAL_TYPE, COUNT(*) AS countFROM ANIMAL_INSWHERE ANIMAL_TYPE IN ('Cat', 'Dog')GROUP BY ANIMAL_TYPEORDER BY CASE ANIMAL_TYPE WHEN 'Cat' THEN 1 WHEN 'Dog'..
카나리(Canary) 배포란?
·
카테고리 없음
1. 카나리 배포의 개념카나리 배포는 새 버전을 일부 사용자에게만 먼저 적용하고, 문제가 없으면 점차 전체로 확장하는 점진적 배포 전략입니다. 2. 카나리 배포를 사용하는 이유?카나리 배포의 핵심 목적은 ‘리스크 최소화’입니다.전체 사용자에게 바로 배포했다가 생길 수 있는 버그, 장애, 성능 저하를 방지테스트 환경에서는 잡히지 않는 실제 운영 환경의 문제를 조기에 발견문제가 발생하더라도 영향을 받는 범위가 작아 빠른 롤백과 복구가 가능 카나리아 배포를 사용하면 애플리케이션을 부분적으로 출시할 수 있으므로, 모든 사용자에게 새 버전의 애플리케이션을 제공하기 전에 안정성을 확인할 수 있습니다. 3. 동작 방식카나리 배포는 일반적으로 다음 단계를 거칩니다.새 버전 준비기존 버전(Stable)과 새로운 버전(..
Programmers / 오랜 기간 보호한 동물(1) / MySQL
·
DB | SQL
문제: https://school.programmers.co.kr/learn/courses/30/lessons/59044 코드SELECT A.NAME, A.DATETIMEFROM ANIMAL_INS A LEFT JOIN ANIMAL_OUTS B ON A.ANIMAL_ID = B.ANIMAL_IDWHERE B.ANIMAL_ID IS NULLORDER BY A.DATETIME LIMIT 3; LEFT JOIN으로 B의 ANIMAL_ID가 NULL인 경우 -> 아직 보호소에 있는 동물LIMIT 3으로 상위 3마리만 출력
Programmers / 비밀 코드 해독 / Python
·
Coding Test/Programmers
문제: https://school.programmers.co.kr/learn/courses/30/lessons/388352 코드from itertools import combinationsdef solution(n, q, ans): count = 0 num = list(range(1, n + 1)) correct = list(combinations(num, 5)) for cor in correct: is_correct = True for code, answer in zip(q, ans): if len(set(cor) & set(code)) != answer: is_correct = False ..
[AWS] Amazon EKS(Amazon Elastic Kubernetes Service)
·
Study | etc
Amazon Elastic Kubernetes Service (EKS) 는 AWS에서 완전관리형(Managed) 형태로 제공되는 Kubernetes 서비스입니다. 복잡한 쿠버네티스 제어 플레인(Control Plane) 운영 부담 없이 클라우드와 온프레미스 환경 모두에서 Kubernetes 워크로드를 실행할 수 있습니다. 1. EKS란 무엇인가?Amazon EKS(Amazon Elastic Kubernetes Service)는AWS 클라우드와 온프레미스 데이터 센터 모두에서 Kubernetes를 손쉽게 실행할 수 있는 완전관리형 서비스입니다.AWS가 제어 플레인(Control Plane)을 대신 관리하므로,사용자는 애플리케이션이 실제로 구동되는 데이터 플레인(Data Plane)에 집중할 수 있습니다. ..
백준 / 7569번 / 토마토 / python 파이썬
·
Coding Test/Baekjoon
문제 : https://www.acmicpc.net/problem/7569 나의 풀이import sysfrom collections import dequeinput = sys.stdin.readlineM, N, H = map(int, input().split())boxes = [[list(map(int, input().split())) for _ in range(N)] for _ in range(H)]def bfs(): q = deque() # 처음부터 익은 토마토 큐에 추가 for tomato in tomatoes: q.append(tomato) dz = [1, -1, 0, 0, 0, 0] dy = [0, 0, 1, -1, 0, 0] dx = [0, 0,..
백준 / 3190번 / 뱀 / python 파이썬
·
Coding Test/Baekjoon
문제 : https://www.acmicpc.net/problem/3190 나의 풀이import sysfrom collections import dequeinput = sys.stdin.readlineN = int(input())K = int(input())apples = [list(map(int, input().split())) for _ in range(K)]L = int(input())rotation = [list(input().split()) for _ in range(L)]board = [[0] * N for _ in range(N)]for a, b in apples: board[a-1][b-1] = 1def bfs(start): dx = [0, 1, 0, -1] dy = [..