느린 코드에서 병목 후보 찾기

어디가 느린지 근거와 함께 순서대로 짚어 준다

프롬프트 · 변수 3개

당신은 서비스가 느려졌다는 신고를 받고 원인을 찾아 온 경험이 많은 백엔드 엔지니어입니다.

아래 코드가 눈에 띄게 느립니다. 실행 환경은 {{실행 환경}} 이고, 실제로 다루는 데이터는 {{데이터 규모}} 입니다.

고친 코드를 바로 주지 말고 순서대로 짚어 주세요. 1) 이 코드에서 시간이 가장 많이 들 것 같은 부분 후보 3개를 가능성이 높은 순서로 2) 후보마다 왜 그렇게 판단했는지 — 반복 횟수, 자료구조, 입출력(데이터베이스·파일·네트워크) 중 무엇 때문인지 3) 그 후보가 진짜 원인인지 제가 직접 확인할 방법(무엇을 어디에 넣어 무슨 숫자를 볼지) 4) 측정 결과가 예상대로일 때 고칠 방법과 예상되는 효과의 크기.

위에 적은 데이터 규모에서 체감 차이가 없을 미세한 최적화는 빼 주세요. 근거 없이 "이 방식이 더 빠릅니다" 라고 쓰지 마시고, 판단에 필요한데 코드에 보이지 않는 정보(테이블 인덱스, 호출 빈도, 캐시 여부)가 있으면 무엇이 필요한지 목록으로 알려 주세요.

코드: """ {{코드}} """

복사한 뒤 여기에 붙여 넣으세요 · ChatGPT·Claude는 프롬프트를 실은 채 열립니다 ChatGPT에서 열기 ↗Claude에서 열기 ↗Gemini에서 열기 ↗뤼튼에서 열기 ↗ 빌더에서 고치기 수업용 카드 이미지 받기

이 프롬프트에는 개인정보가 들어갈 수 있는 변수가 있습니다. 실제 이름·번호·회사명은 가명으로 바꿔 넣으세요.

결과 예시

고친 코드 대신 후보 3개가 가능성 순으로 나왔고, 후보마다 직접 재 볼 방법이 붙었다.

1순위 — 반복문 안의 개별 조회. 3천 행이면 쿼리도 3천 번이고, 왕복 1밀리초만 잡아도 호출당 3초입니다. 확인: 커서 실행 이벤트로 호출당 쿼리 수를 세어 3천 근처인지 본다. 고치면: user_id 를 모아 한 번에 조회해 쿼리가 3천에서 1~2회로 줄어든다.

인덱스 유무, calc_fee 내부의 조회 여부처럼 코드에 없는 정보 5가지도 목록으로 나왔다.

Claude에서 실제로 실행해 확인 · 2026-09

왜 이렇게 쓰는가

역할
당신은 서비스가 느려졌다는 신고를 받고 원인을 찾아 온 경험이 많은 백엔드 엔지니어입니다.
맥락
아래 코드가 눈에 띄게 느립니다. 실행 환경은 {{실행 환경}} 이고, 실제로 다루는 데이터는 {{데이터 규모}} 입니다.
단계
고친 코드를 바로 주지 말고 순서대로 짚어 주세요. 1) 이 코드에서 시간이 가장 많이 들 것 같은 부분 후보 3개를 가능성이 높은 순서로 2) 후보마다 왜 그렇게 판단했는지 — 반복 횟수, 자료구조, 입출력(데이터베이스·파일·네트워크) 중 무엇 때문인지 3) 그 후보가 진짜 원인인지 제가 직접 확인할 방법(무엇을 어디에 넣어 무슨 숫자를 볼지) 4) 측정 결과가 예상대로일 때 고칠 방법과 예상되는 효과의 크기.
제약
위에 적은 데이터 규모에서 체감 차이가 없을 미세한 최적화는 빼 주세요. 근거 없이 "이 방식이 더 빠릅니다" 라고 쓰지 마시고, 판단에 필요한데 코드에 보이지 않는 정보(테이블 인덱스, 호출 빈도, 캐시 여부)가 있으면 무엇이 필요한지 목록으로 알려 주세요.
입력 자료
코드: """ {{코드}} """

코드 성능 개선 프롬프트를 "빠르게 고쳐 줘" 로 시작하면, AI는 눈에 보이는 곳부터 손을 봅니다. 반복문을 축약 문법으로 바꾸고 변수를 합치는 수정이 잔뜩 붙는데, 정작 시간을 다 잡아먹는 것은 반복문 안에서 매번 데이터베이스를 부르는 한 줄인 경우가 많습니다. 측정 없이 시작하면 효과 없는 수정만 늘어납니다.

역할 을 "원인을 찾아 온 엔지니어" 로 두면 답의 성격이 바뀝니다. 코드 리뷰어에게 물으면 변수 이름과 스타일 지적이 먼저 나오고, 원인을 찾는 사람에게 물으면 시간이 어디로 새는지부터 봅니다. 같은 코드라도 누구에게 묻느냐에 따라 답의 첫 문단이 달라집니다.

단계 를 넷으로 못 박은 것이 이 프롬프트의 중심입니다. 후보를 순서대로 세우게 하면 근거를 적을 수밖에 없고, 확인 방법까지 요구하면 추측과 사실이 분리됩니다. 특히 3번은 "고쳐 준 것을 믿고 배포" 하는 대신 직접 숫자를 보고 판단하게 만듭니다. AI에게 느린 쿼리 최적화를 맡길 때도 마찬가지여서, 흔한 조언은 3번을 건너뛰고 4번만 말합니다.

맥락의 두 값도 그냥 붙인 것이 아닙니다. 400만 행과 400행은 문제의 종류가 다릅니다. 제약 에서 "체감 차이가 없을 미세한 최적화는 빼라" 고 한 것은 이 규모를 기준으로 걸러 달라는 뜻이고, "보이지 않는 정보는 목록으로" 는 인덱스가 있는지 모르는 채 인덱스를 추가하라고 하는 답을 막습니다. 코드는 """ 로 감싸 주석이 지시로 읽히지 않게 합니다.

용어가 낯설면 아하AI에서: chain-of-thought, hallucination

나쁜 예와 비교

흔한 나쁜 예

이 코드 너무 느린데 최적화해줘 for order in orders: ... (코드 붙여넣기)

데이터가 얼마나 되는지 모르니 AI는 일반론을 폅니다. 리스트를 집합으로 바꾸고 반복문을 컴프리헨션으로 고친 코드가 돌아오는데, 실행 시간은 그대로입니다. 반복문 안의 데이터베이스 호출이 진짜 원인이어도 근거를 요구하지 않았으니 여러 제안 중 하나로만 묻혀 나오고, 고친 코드를 그대로 받았으니 무엇을 재 봐야 하는지도 남지 않습니다.

변형

코드가 아니라 화면이 느릴 때

코드가 아니라 화면이 느릴 때

저희 서비스에서 특정 화면이 느리다는 신고가 들어왔습니다. 실행 환경은 {{실행 환경}}, 데이터는 {{데이터 규모}} 입니다. 코드를 보기 전에, 이 상황에서 원인이 될 수 있는 곳을 서버·데이터베이스·네트워크·브라우저로 나눠 목록으로 만들고, 각 항목을 확인할 순서와 방법을 알려 주세요. 확인이 쉬운 것부터 순서를 정해 주세요.

어느 코드가 문제인지도 모를 때 씁니다. 범위를 좁히는 순서를 먼저 받아 두면 헛되이 코드를 뒤지는 시간이 줄어듭니다.

고친 뒤 부작용을 확인할 때

고친 뒤 부작용을 확인할 때

아래는 성능을 이유로 제가 고친 코드입니다. 더 빠른지가 아니라, 고치면서 동작이 달라졌을 가능성만 봐 주세요. 결과 순서, 중복 처리, 오류가 났을 때의 동작, 동시에 여러 요청이 들어올 때를 각각 확인하고 문제가 될 입력의 예를 들어 주세요.

""" {{코드}} """

성능을 이유로 한 수정은 조용히 동작을 바꿔 놓기 쉽습니다. 속도 검토와 정확성 검토를 따로 요청하는 편이 안전합니다.

모델별 주의

실제 실행 시간을 재 본 숫자가 있으면 함께 붙여 넣으세요. 숫자가 없으면 AI는 코드 모양만 보고 추측할 수밖에 없습니다

관련 프롬프트

마지막 수정 2026-09-02 · 잘못된 점이 있나요? 알려 주세요