전체 글
-
[MySQL] 커버링 인덱스로 통계 조회 577초 → 2.5초 개선기🚀 인프라/데이터베이스 2026. 8. 16. 18:44
관리자 통계 화면의 문자 유형별 발송 집계 조회가 577초나 걸려 게이트웨이 타임아웃(504)이 발생하고 있었다. 원인은 이 통계 쿼리가 약 천만행 규모의 로그 테이블에서 최근 1년 치 데이터를 GROUP BY 하며 조회하고 있는데, 기존 인덱스는 문자 유형 컬럼에만 걸려있어 쿼리가 사용하는 발송일자와 메시지 타입(SMS/MMS)이 인덱스에 없었다. 그 결과, 대상 행마다 원본 테이블로 랜덤 룩업이 발생해 사실상 전 행을 훑는 형태가 됐다. 고민해결 방안으로 신규 집계 테이블 / 캐싱 / 조회 기간 축소도 검토했는데, 아래와 같은 이유들로 결국 커버링 인덱스를 추가하기로 했다.문제 페이지 하나 때문에 신규 집계 테이블을 새로 만드는 건 과하다.문자 발송할 때마다 캐시를 갱신해야하기 때문에 관리 부담이 있..
-
개인 프로젝트 서버 비용 22만원 나온뒤 외양간 고치기🚀 인프라/AWS 2026. 6. 17. 11:35
아래는 개인 프로젝트 인프라 구성도이며, 서비스 2개가 배포된 관계로 ECS에 task 2개, RDS도 2개로 구성돼 있다. AWS 프리티어 크레딧 소진 후 5월 서버 비용으로 22만 원을 냈다(미친 환율). 비용 절감 해야지 마음먹고 귀찮아서 미뤄왔는데, 그 결과 이번 달도 14만 원 이상 태워야 한다는 나태지옥의 형벌을 받게 됐다. 구조는 유지하면서 인프라 비용을 줄이기 위해 했던 작업들을 기록하겠다.[요약]1. 오토스케일링으로 특정 시간에만 ECS task를 띄운다.2. NAT 게이트웨이 역할을 하는 EC2 인스턴스를 생성한다.3. 새로운 프리티어 계정을 생성하고 인프라를 이전한다.4. 안 쓰는 리소스는 제거한다. 1. 오토스케일링으로 특정 시간에만 ECS task를 띄운다.귀찮음: ⭐️효과: ⭐..
-
[wide learning map] 프론트 작업 환경 설정 (Docker, Next.js)🤡 프로젝트 2026. 3. 22. 16:33
틀린 내용이 있을 수 있습니다.발견하시면 말씀 부탁드립니다! 🙇 1. Next.js 앱 설치next app 생성$ npx create-next-app@latest [앱이름] --yes$ cd [앱이름] 패키지 설치$ cd frontend$ npm install next@latest react@latest react-dom@latest# reactflow: 노드기반 다이어그램 라이브러리# lucide-react: 아이콘 라이브러리# axios: 비동기 통신 라이브러리$ npm install reactflow lucide-react axios app 폴더 생성Next.js는 파일 시스템 라우팅을 따른다 = 파일 구조에 따라 앱 페이지 라우팅이 된다는 의미app 폴더를 생성하고, app 폴더에 파일을 만들..
-
[wide learning map] 백엔드 작업 환경 설정 (Docker, FastAPI, PostgreSQL)🤡 프로젝트 2026. 3. 10. 15:06
틀린 내용이 있을 수 있습니다.발견하시면 말씀 부탁드립니다! 🙇 1. 라이브러리 설치# fastapi 설치$ pip install "fastapi[standard]"# fastapi 개발 서버 실행$ fastapi dev main.py 2. 백엔드 파일 구조 설계 마이그레이션 환경 초기화alembic.ini 파일은 백엔드 루트 경로, alembic 폴더는 app/ 하위에 자동 생성됨# alembic 설치$ pip install alembic# 마이그레이션 환경 초기화 $ alembic init app/alembic 파일 구조 설계Django와 달리 Fastapi는 작업자가 처음부터 끝까지 직접 파일 구조를 짜야한다 = 유연한데 수고로움Fastapi 개발자가 만든 공식 Fastapi 템플릿인 Full..
-
[python] 더맵게🗃️ 알고리즘, 자료구조/프로그래머스 2026. 1. 13. 13:11
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 섞어야 하는 최소 횟수를 return 하도록 solution 함수를 작성섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) 풀이가장 안매운 메뉴, 두번째로 안매운 메뉴를 뽑아 계산해야됨 = heap 관련 문제python heapq 참고import heapqdef solution(scoville, K): answer = ..
-
[Python] 숫자 변환하기🗃️ 알고리즘, 자료구조/프로그래머스 2026. 1. 9. 14:02
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/154538 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 자연수 x, y, n이 매개변수로 주어질 때, x를 y로 변환하기 위해 필요한 최소 연산 횟수를 return하도록 solution 함수 작성 (x를 y로 만들 수 없다면 -1 return).# 사용 가능한 연산x + nx * 2x * 3# 제한 사항1 ≤ x ≤ y ≤ 1,000,0001 ≤ n 각 연산은 혼합해서 사용 가능 풀이각 연산의 가중치(연산 횟수)는 1로 동일최소 연산횟수 = 최단 거리 탐색 = bfs(너비 우선 탐색) 알고리즘 ..
-
[Python] 뒤에 있는 큰 수 찾기🗃️ 알고리즘, 자료구조/프로그래머스 2026. 1. 5. 13:40
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/154539 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 정수 배열 numbers가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수 작성뒷 큰수: 배열의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수# 제한 사항4 ≤ numbers의 길이 ≤ 1,000,0001 ≤ numbers[i] ≤ 1,000,000 풀이처음 작성한 코드시간 초과로 실패: for 문 안에 for 문이 있음. 시간복잡도:..
-
[Python] 방문 길이🗃️ 알고리즘, 자료구조/프로그래머스 2026. 1. 2. 14:15
문제링크: https://school.programmers.co.kr/learn/courses/30/lessons/49994 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 게임 캐릭터를 4가지 명령어를 통해 움직일 때, 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하는 함수 작성.U: 위쪽으로 한칸 이동D: 아래쪽으로 한칸 이동R: 오른쪽으로 한칸 이동L: 왼쪽으로 한칸 이동캐릭터는 좌표평면의 (0,0) 위치에서 시작하며, 좌표평면의 경계는 (-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있다. 좌표 평면의 경계를 넘어가는 명령어는 무시한..
-
[✅ 상시 업데이트] 사용 안하면 까먹는 명령어들🎸 기타 2025. 10. 11. 23:46
Python 가상환경 생성 & 실행 & 종료# 경로는 편한대로. 내 경우엔 /Project/backend# 가상환경 생성$ cd /Project/backend$ python3 -m venv [가상환경 이름]# 가상환경 실행$ source [가상환경 이름]/bin/activate# 가상환경 종료$ deactivate Git# 1. 기존 git origin 저장소에서 local로 복사하는 경우$ git clone [깃헙 레포지토리 주소]# -> 폴더 & .git 생성, origin remote 등록, 최신 코드 다운로드 한큐에 됨# 2. 로컬 프로젝트를 GitHub에 처음 연결할 때# 1) git 폴더 설정$ git init# 2) origin remote 등록$ git remote add origin [..