infra
Platform

모듈 맵

[PM] 고객 요청 다루기 — 오류인가 개선인가 추가개발인가

0 / 67 완료

펼치기
0 / 67 완료0%

IT 서비스·프로젝트 관리 · 30 / 67

[PM] 고객 요청 다루기 — 오류인가 개선인가 추가개발인가

고객의 '이거 안 돼요'는 설정·사용법·데이터·버그·네트워크 등 여러 가능성이다. 신입 PM이 요청을 장애·오류·설정·데이터보정·개선·추가개발·운영문의로 분류하고, 버그와 추가개발을 가르며, 모호한 고객 언어를 작업 가능한 단위로 번역하는 법. 환경 구분·재현 여부·완료 기준 확인과 이슈 접수 체크리스트, 내부 전달 포맷까지 실무로 익힌다

🚨INCIDENT ALERT
HIGH

입사 3주 차 신입 PM. 아침 9시, 고객사 담당자에게서 메신저가 연달아 옵니다.

"조직도에서 예전에 없앤 부서가 계속 보여요. 이거 버그 아니에요?" "결제가 갑자기 안 돼요. 어제까진 됐는데요. 급해요." "엑셀 다운로드가 왜 이렇게 느려요? 좀 빠르게 해주세요." "직원 등록할 때 사번을 자동으로 넣어주면 안 될까요? 간단한 거잖아요." "로그인하면 자꾸 튕겨요. 저만 그런가?"

당신은 이 다섯 개를 어떻게 처리해야 할까요? 초보가 가장 흔히 하는 실수는 다섯 개를 전부 개발팀 채팅방에 그대로 복사해 붙여넣는 것입니다. 그러면 개발자는 "이게 무슨 환경에서, 누구 계정으로, 전체가 그런지 일부가 그런지"를 되묻고, 당신은 그걸 다시 고객에게 물어보고, 하루가 왕복으로 사라집니다. 게다가 그중 어떤 건 버그가 아니라 설정으로 5분이면 끝나는 일이고, 어떤 건 계약에 없던 추가개발인데 당신이 "네 해드릴게요"라고 답해 버려 나중에 무상으로 떠안게 됩니다.

고객의 "이거 안 돼요"는 하나의 문장이지만 그 뒤에는 장애·오류(버그)·설정·데이터 꼬임·개선·추가개발·단순 사용 문의라는 전혀 다른 일곱 가지 가능성이 숨어 있습니다. 이 모듈은 신입 PM이 그 요청들을 유형별로 분류하고, 버그와 추가개발을 가르고, 모호한 고객의 말을 개발자가 손댈 수 있는 단위로 번역하는 법을 다룹니다. 이걸 못 하면, 모든 요청이 '개발팀 확인 요청'이 됩니다.

이번 챕터에서 배울 것
  • 1고객 요청을 장애·오류(버그)·설정 변경·데이터 보정·개선·추가개발·운영 문의 일곱 유형으로 분류하고 각 유형의 대응 방향을 말할 수 있다
  • 2버그·개선·추가개발·설정 이슈·데이터 이슈를 확인 포인트로 구분하고, 확인 전에 성급히 버그로 확정하지 않을 수 있다
  • 3모호한 고객 언어("갑자기 안 돼요", "간단한 수정 아닌가요")를 실제 가능성으로 번역하고, 위험한 확답 대신 안전한 표현을 쓸 수 있다
  • 4이슈 접수 시 환경·재현 여부·완료 기준을 확인하고, 확인 요청에 항상 이유를 붙일 수 있다
  • 5고객 요청을 구조화된 내부 전달 포맷으로 재작성하고, 증상별로 의심 영역을 좁히는 기본 기술 이해를 갖춘다

요청은 한 가지가 아니다 — 일곱 유형으로 나눈다

고객 요청 하나가 일곱 유형으로 갈라지는 분류 다이어그램 — 장애(정상 사용 불가→즉시 원인·영향범위), 오류/버그(기존 스펙과 다름→재현 후 패치 검토), 설정 변경(제품 기능 내 조치→설정 가이드), 데이터 보정(데이터 꼬임→백업·영향 확인 후 조치), 개선 요청(스펙은 맞지만 불편→우선순위·공수), 추가 개발(기존 범위 밖→영업·계약·일정 협의), 운영 문의(사용법·정책→가이드 제공). '버그'와 '추가 개발'을 가르는 것이 무상/유상·일정·범위를 가르며, 초반 표현은 항상 '현상 확인 후 원인 구분이 필요하다'임을 강조한다확대

💡개념

'이거 안 돼요'를 유형으로 가르지 못하면 모든 요청이 개발팀 확인 요청이 된다

고객은 자기 요청이 어떤 종류인지 모릅니다. 알 필요도 없습니다 — 그건 PM의 일입니다. 고객 입장에서는 전부 "이거 안 돼요" 또는 "이거 해주세요" 한마디지만, 처리하는 사람 입장에서는 대응 속도도, 담당 부서도, 비용 발생 여부도 완전히 다릅니다. 그래서 요청이 들어오면 가장 먼저 하는 일이 "이게 어느 유형인가"를 가르는 것입니다.

유형의미대응 방향
장애(Incident)정상적으로 되던 것이 안 되어 업무가 멈춤즉시 원인·영향범위 파악 우선. 우선순위 큐에 담지 않는다
오류/버그(Defect)기존 스펙과 다르게 동작함(원래 되게 돼 있는데 안 됨)재현 확인 후 패치 검토. 재현 안 되면 조건부터 좁힌다
설정 변경(Configuration)제품 기능 안에서 값·옵션으로 조치 가능개발 아님 — 설정·가이드로 안내. 개발 과업으로 키우지 않는다
데이터 보정(Data fix)데이터가 꼬여 화면이 이상함백업·영향 범위 확인 후 신중히 보정. 함부로 손대지 않는다
개선 요청(Enhancement)스펙대로 되긴 하는데 더 편했으면 함우선순위·공수 산정 후 백로그. 즉답 확약 금지
추가 개발(New development)계약·범위 밖의 없던 새 동작영업·계약·일정 협의 대상. PM 단독으로 "해드릴게요" 금지
운영 문의(How-to)사용법·정책이 궁금함(고장 아님)가이드·매뉴얼로 안내. 개발 이슈 아님

이 표의 진짜 쓸모는 속도와 비용을 가르는 데 있습니다. 장애는 지금 당장, 개선은 우선순위를 매겨서, 추가개발은 돈과 계약 이야기부터. 운영 문의와 설정 변경은 개발자에게 갈 것도 없이 당신 선에서 끝납니다. 신입이 이 구분을 못 하면, 5분이면 끝날 설정 문의도, 돈 받아야 할 추가개발도, 지금 뛰어야 할 장애도 전부 똑같이 "개발팀 확인 요청 드립니다"라는 한 줄로 뭉개집니다. 분류는 PM이 요청에 얹는 첫 번째 가치입니다.

특히 헷갈리는 짝이 **장애와 오류(버그)**입니다. 둘 다 겉으로는 "안 돼요"로 들리지만 대응이 다릅니다. 장애는 '지금 업무가 멈췄는가'가 기준입니다 — 원인이 버그든 서버 다운이든 연동 장애든, 다수가 못 쓰고 있으면 일단 장애로 다뤄 지금 뛰어야 합니다. 오류(버그)는 '원래 스펙과 다른가'가 기준입니다 — 한 명이 특정 조건에서만 겪고 업무가 멈추진 않았다면, 급히 뛰기보다 재현해서 패치를 검토합니다. 그래서 같은 "결제가 안 돼요"도 '전 직원 결제 중단'이면 장애, '내 특정 카드만 실패'면 개별 오류로 갈립니다 — 범위와 영향도가 둘을 가르는 잣대입니다.

버그 · 개선 · 추가개발을 가른다

💡개념

세 가지를 못 가르면 '무상 하자'와 '유상 개발'의 경계가 무너진다

일곱 유형 중에서도 신입이 가장 자주 헷갈리고, 가장 크게 손해 보는 경계가 버그 · 개선 · 추가개발입니다. 이 셋을 가르는 기준은 딱 하나 — **"원래 어떻게 하기로 되어 있었는가"**입니다.

유형판정 기준한 줄 정의비용 성격
버그원래 되게 되어 있는데 안 됨약속한 스펙과 실제 동작이 다름무상(하자 보수)
개선기능은 맞는데 더 편했으면 함되긴 되는데 불편·비효율우선순위·공수 협의
추가개발없던 새 동작을 새로 만듦계약·범위에 아예 없던 것유상(견적·계약)
설정 이슈제품 기능 안에서 값으로 조치 가능옵션·권한·환경설정 문제무상(가이드)
고객 데이터 이슈특정 데이터만 꼬여 이상해 보임코드가 아니라 데이터 상태 문제확인 후 보정

문제는 고객이 늘 **"이거 버그 아니에요?"**라는 프레임으로 말한다는 것입니다. 고객에게는 자기 기대와 다르게 동작하는 모든 것이 '버그'로 보이기 때문입니다. 여기서 신입이 "네 버그 같네요, 고쳐드릴게요"라고 받으면, 실제로는 개선이나 추가개발이었던 것을 무상 하자로 자백하는 셈이 됩니다.

예시로 감을 잡아봅시다. 시나리오의 첫 문장 — "조직도에서 예전에 없앤 부서가 계속 보여요. 버그 아니에요?" 이걸 바로 "버그"라고 받으면 안 됩니다. 확인해야 할 포인트는 이렇습니다.

  • 기존 요구사항에 있었나 — '폐지된 부서는 조직도에서 숨긴다'가 애초 스펙에 정의돼 있었나? 있었으면 버그, 없었으면 개선·추가개발.
  • 제품의 기본 스펙인가 — 이 제품이 원래 '미사용 부서 자동 숨김'을 기본으로 제공하나, 아니면 노출이 기본인가?
  • 이 고객사만의 기준인가 — '미사용'을 판단하는 규칙(예: 인원 0명, 폐지일 경과)이 이 고객사만의 정책이면, 제품 표준 동작이 아니라 설정·정책 문제일 수 있다.
  • 미사용 판단 기준이 명확한가 — 무엇을 기준으로 '미사용'이라 하는지가 정의돼 있지 않으면, 애초에 고칠 대상 자체가 모호하다.
  • 운영 데이터에 어떤 영향이 있나 — 숨김 처리가 과거 인사이력·권한·통계에 영향을 주진 않는가? 함부로 숨겼다가 정상 부서까지 사라지면 2차 사고.

이 다섯 개를 확인하기 전까지 당신이 할 수 있는 정직한 답은 "현상 확인 후 원인 구분이 필요합니다" 하나뿐입니다. 확인 결과에 따라 같은 요청이 무상 하자가 될 수도, 유상 견적이 될 수도 있습니다.

두 번째 예시로 추가개발 판정도 연습해 봅시다. 시나리오의 "직원 등록할 때 사번을 자동으로 넣어주면 안 될까요? 간단한 거잖아요." — 여기서 "간단한 거잖아요"라는 말에 넘어가 "네 해드릴게요"라고 하면 안 됩니다. 확인 포인트는 이렇습니다. 원래 사번을 자동 채번하기로 계약·스펙에 있었나(있었으면 미구현이니 버그에 가깝고, 없었으면 새 동작), 기존 사번 체계와 충돌하지 않나(이미 수기로 부여한 사번, 지점별 규칙, 퇴사자 사번 재사용 여부), 자동 채번 규칙이 정의돼 있나(연도+순번? 부서코드+순번?). 화면상으로는 '빈칸에 숫자 하나 넣기'처럼 보여도, 그 뒤에는 채번 규칙·중복 방지·기존 데이터 정합성이 얽혀 있습니다. 계약·범위에 없던 새 동작이면 이건 추가개발이고, PM 단독으로 확약할 게 아니라 영업·계약 라인과 함께 검토할 일입니다. 겉보기 난이도로 유형을 판정하지 않는 것 — 이것이 신입이 가장 먼저 익혀야 할 절제입니다.

고객 언어를 번역한다

💡개념

고객의 표현은 진단이 아니라 증상이다 — 그대로 받아쓰면 안 된다

고객은 개발자가 아니므로, 자기가 겪은 일을 자기 언어로 말합니다. 그 언어는 원인 진단이 아니라 체감한 증상입니다. 신입 PM의 일은 그 표현을 곧이곧대로 받아 적는 게 아니라, 그 뒤에 있는 실제 가능성들로 번역하는 것입니다.

고객의 말실제 가능성PM이 떠올려야 할 것
"오류나요"서버 오류·권한 부족·입력값 문제·화면 버그·네트워크 끊김 어느 것이든어떤 화면에서 무슨 메시지가 떴는지부터
"갑자기 안 돼요"배포·설정 변경·데이터 만료·인증서 만료·용량 초과·본인 환경 변화'언제부터'와 '그 무렵 무슨 일이 있었나'
"이전엔 됐어요"최근 변경(배포·데이터·권한)이 있었거나, 애초에 특정 조건에서만 됐던 것마지막으로 정상 작동한 시점
"빨리요 / 급해요"실제 업무 마비일 수도, 체감상 답답함일 수도업무가 실제로 멈췄는지(영향도)로 우선순위 판단
"간단한 수정 아닌가요"화면만 보면 간단해 보이나 내부 로직·데이터·연동이 얽혔을 수 있음겉보기 난이도로 확답하지 않기

번역할 때 스스로에게 던지는 세 가지 질문을 습관으로 만드세요.

  • 이건 원인인가 증상인가 — 고객이 말한 것이 "안 됨"(증상)인지 "서버가 죽었다"(원인 추정)인지. 원인 추정은 검증 전까지 믿지 않는다.
  • 범위가 얼마인가 — 나 혼자인가, 우리 팀인가, 전 직원인가. 범위가 곧 장애/개별 이슈를 가른다.
  • 업무가 멈췄는가 — 불편한 것과 못 하는 것은 다르다. 멈췄으면 속도를, 불편하면 우선순위를 매긴다.

핵심 원칙: 고객의 초반 표현에는 항상 "현상 확인 후 원인 구분이 필요합니다"로 응답합니다. "오류나요"를 듣고 "서버 오류네요"라고 받으면, 알고 보니 권한 문제였을 때 당신의 신뢰가 깎입니다. 반대로 "확인해 보니 서버가 아니라 접근 권한 문제였고, 권한을 부여하니 해결됐습니다"라고 마무리하면, 같은 요청도 PM이 원인을 짚어낸 일이 됩니다. 증상을 진단으로 착각하지 않는 것이 번역의 시작입니다.

"가능합니다"를 쉽게 말하지 말 것

💡개념

확답 한마디가 무상 개발과 납기 지연의 계약서가 된다

신입이 가장 쉽게, 가장 크게 사고 치는 지점이 성급한 확답입니다. 고객 앞에서 "가능할 것 같은데요", "금방 됩니다", "간단한 수정이니 패치할게요"라고 말하는 순간, 그건 위로가 아니라 약속이 됩니다. 개발팀에 물어보니 3일짜리 작업이었거나, 알고 보니 계약 밖 추가개발이었어도, 고객은 이미 "PM이 된다고 했다"를 근거로 잡습니다.

위험한 표현(하지 말 것)왜 위험한가안전한 표현(권장)
"가능할 것 같습니다"추측을 약속으로 굳힌다"기술적으로 가능한 방향인지 확인 후 안내드리겠습니다"
"금방 돼요"공수를 임의로 확약한다"영향 범위와 반영 방식을 검토한 뒤 일정을 협의드리겠습니다"
"간단한 수정이에요"겉보기로 난이도를 단정한다"화면상 단순해 보여도 내부 확인이 필요합니다"
"패치하겠습니다"버그로 확정하고 무상 수정을 자인한다"기존 스펙 범위 내 조치인지 확인 후 안내드리겠습니다"
"개발팀에 바로 요청할게요"유형 구분 없이 개발 이슈로 키운다"요청 내용을 정리해 담당과 검토 후 회신드리겠습니다"

안전한 표현의 공통점은 세 가지입니다 — ① 지금 확답하지 않는다, ② 무엇을 확인할지 밝힌다, ③ 언제 회신할지 약속한다. 이건 발뺌이 아니라 정확성에 대한 책임입니다. 고객이 진짜 원하는 것은 "네"라는 즉답이 아니라 틀리지 않는 답입니다. "확인 후 오늘 오후까지 회신드리겠습니다"가 "가능할 것 같아요"보다 훨씬 신뢰를 줍니다. 확답은 확인 다음에 옵니다.

고객 요청을 그대로 내부에 전달하지 말 것

💡개념

PM의 가치는 질문을 늘리는 게 아니라 줄이는 정리력이다

고객 메시지를 개발팀 채팅방에 복사·붙여넣기 하는 순간, 당신은 PM이 아니라 전달 케이블이 됩니다. 개발자는 그 한 줄로는 일을 시작할 수 없어 되묻고, 그 질문이 다시 고객에게 가고, 반나절이 왕복으로 증발합니다. PM의 일은 요청을 개발자가 곧바로 판단·착수할 수 있는 형태로 정리하는 것입니다.

나쁜 예 (그대로 전달):

TEXT
[개발팀 채팅방]
고객이 조직도 미사용 부서 안 보이게 해달래요. 이거 처리 가능한가요?

이 한 줄에는 어느 환경인지, 누구 계정인지, 원래 스펙에 있던 건지, '미사용' 기준이 뭔지가 전부 빠져 있습니다. 개발자는 "미사용이 뭘 기준으로요?", "운영기예요 검수기예요?", "원래 숨기게 돼 있었어요?"를 되물을 수밖에 없습니다.

좋은 예 (구조화해서 전달):

TEXT
[조직도 - 미사용 부서 노출 관련 확인 요청]

- 고객 요청: 폐지된 부서가 조직도에 계속 노출됨. 숨김 처리 원함
- 현재 동작: 조직도에 모든 부서(폐지 포함) 노출 중 (운영기, 관리자 계정 기준)
- 고객 기대: 폐지(미사용) 부서는 조직도에서 자동 제외
- 확인 필요: 원 요구사항에 '폐지 부서 숨김'이 정의돼 있었는지 (스펙 확인)
- 구분 필요: 스펙에 있으면 버그(무상), 없으면 개선/추가개발 — '미사용' 판단 기준 정의 필요

같은 요청인데도, 개발자는 좋은 예를 받으면 되물을 것 없이 "스펙 문서 3.2에 있네요, 버그 맞습니다" 또는 "스펙에 없어서 개선 건입니다"로 바로 답할 수 있습니다. 정리의 뼈대는 고객 요청 / 현재 동작 / 고객 기대 / 확인 필요 / 구분 필요 다섯 칸입니다. 이 다섯 칸을 채우는 동안 당신 스스로도 "아, 이건 스펙부터 봐야겠네"를 깨닫게 됩니다. PM의 가치는 질문을 늘리는 데 있지 않고, 질문을 줄이는 정리력에 있습니다.

고객 요청이 들어왔다 — 어느 유형인가
원래 되던 핵심 기능이 안 되고 여러 사용자가 겪는다장애로 대응우선순위 큐 아님 — 즉시 원인·영향범위 파악
약속된 스펙과 다르게 동작한다(원래 되게 돼 있음)오류/버그재현 확인 후 패치 검토, 무상 하자 보수
제품 옵션·권한·환경값으로 조치 가능설정 변경개발 아님 — 가이드로 안내, 개발 과업으로 키우지 않기
특정 데이터·특정 문서만 이상하다데이터 보정백업·영향 확인 후 신중히 — 함부로 손대면 2차 사고
스펙대로 되지만 더 편했으면 한다개선 요청우선순위·공수 산정 후 백로그, 즉답 확약 금지
계약·범위에 없던 새 동작을 새로 만든다추가 개발영업·계약·일정 협의, PM 단독 '해드릴게요' 금지
사용법·정책이 궁금할 뿐 고장은 아니다운영 문의매뉴얼·가이드로 안내, 개발 이슈 아님

신입이 자주 놓치는 세 가지 — 환경 · 재현 · 완료 기준

💡개념

이 세 가지를 안 물어보면 요청은 반드시 되돌아온다

요청을 유형으로 갈랐어도, 정작 개발자에게 넘길 때 세 가지를 빼먹으면 그 요청은 반드시 되돌아옵니다. 신입이 가장 자주 빠뜨리는 축입니다.

① 환경 구분 — "어디서 그런 건가요"

같은 증상도 어느 환경이냐에 따라 원인이 완전히 다릅니다. 개발기에서만 나는 오류를 운영기 장애로 착각해 밤새 뛰는 일이 실제로 벌어집니다.

확인 축물어볼 것
환경 종류운영기(실서비스)인가, 개발기인가, 검수기(스테이징)인가
고객사·테넌트어느 고객사·어느 테넌트 계정에서 발생했나
계정·권한어떤 권한의 계정인가(관리자/일반). 권한 문제일 수 있음
접속 수단브라우저인가 앱인가, 어떤 브라우저·버전인가
발생 시점언제부터인가, 그 무렵 배포·설정 변경이 있었나
발생 범위전체 사용자인가 일부인가, 한 명만인가

② 재현 여부 — "다시 해도 그런가요"

개발자가 고칠 수 있는 유일한 조건은 재현되는 것입니다. 재현되지 않는 버그는 유령과 같아서 손댈 수가 없습니다.

확인 축물어볼 것
반복 재현같은 계정에서 다시 하면 또 그런가, 한 번만 그랬나
계정 교차다른 계정으로 하면 어떤가(계정·권한·데이터 문제 구분)
데이터 특정성특정 문서·특정 항목에서만 그런가, 전부 그런가
과거 정상기존엔 정상이었나, 원래부터 그랬나
마지막 정상 시점마지막으로 제대로 됐던 게 언제인가

③ 완료 기준 — "무엇을 보면 해결된 건가요"

의외로 가장 많이 빠뜨리는 것이 이것입니다. "고쳐주세요"만 받고 착수하면, 다 고친 뒤에 "이게 아닌데요"가 나옵니다. 착수 전에 무엇을 기준으로 완료로 볼지를 고객과 합의해야 합니다.

  • 정렬 요청이라면 → 무슨 컬럼을 기준으로 정렬하는 게 맞는가(이름? 등록일? 사번?)
  • 데이터 보정이라면 → 샘플 3건을 고객이 직접 확인해 맞다고 하면 완료로 본다
  • 운영 반영이라면 → 운영에 반영한 뒤 현업이 검수해 확인서를 받으면 완료

완료 기준이 없으면 그 요청은 끝나지 않습니다 — 고칠 때마다 새로운 기대가 붙기 때문입니다. "무엇을 보면 해결된 것으로 볼까요?"라는 질문 하나가 무한 반복 작업을 막습니다.

확인 요청엔 항상 이유를 붙일 것

💡개념

'왜 필요한지'를 말해야 고객이 정확한 자료를 한 번에 준다

고객에게 자료를 요청할 때, 신입은 흔히 "캡처 주세요", **"로그 주세요"**처럼 짧게 말합니다. 그러면 고객은 엉뚱한 화면을 캡처해 보내고, 다시 요청하고, 왕복만 늘어납니다. 요청에는 왜 그게 필요한지를 붙여야 합니다. 이유를 알면 고객이 스스로 정확한 자료를 골라 줍니다.

나쁜 요청좋은 요청(이유 포함)
"캡처 주세요""원인 구분을 위해 정상 화면과 비정상 화면을 같은 계정에서 비교해야 합니다. 두 경우를 각각 캡처해 발생 시각과 함께 주시겠어요?"
"로그 주세요""오류가 서버에서 났는지 확인해야 해서, 오류가 뜬 정확한 시각을 알려주시면 그 시간대 서버 로그를 대조하겠습니다"
"다시 해보세요""일시적 문제인지 확인하기 위해, 같은 화면에서 한 번 더 시도하시고 이번에도 같은 메시지가 뜨는지 알려주세요"
"안 되는 화면 알려주세요""서버 오류인지 게이트웨이 응답 오류인지 구분하려면, 브라우저 개발자도구 Network 탭에서 빨갛게 표시된 요청의 상태코드(예: 500, 502, 403)를 확인해 주셔야 합니다"

마지막 행이 특히 중요합니다. 상태코드(HTTP status code) 하나가 원인 범위를 크게 좁힙니다 — 403이면 권한, 404면 주소·배포, 500이면 서버 앱, 502504면 게이트웨이·타임아웃입니다(다음 절에서 정리합니다). 이유를 붙인 요청은 고객을 귀찮게 하는 게 아니라, 고객과 개발자 사이의 왕복 횟수를 줄이는 가장 효율적인 도구입니다.

신입 PM이 알아둘 기본 기술 이해

웹 서비스 요청이 사용자 브라우저→DNS→방화벽/WAF/프록시→LB→Web/WAS→DB/API/스토리지로 흐르는 계층 다이어그램과 증상별 의심 계층 매핑 — 접속 불가는 DNS·방화벽·LB·서버, 403은 권한·WAF·인증, 404는 URL·라우팅·배포 누락, 500은 서버 애플리케이션 오류, 502·504는 게이트웨이·WAS·타임아웃 계층. 502·504는 앞단(프록시·LB·게이트웨이)이 뒷단(WAS) 응답을 제때 못 받은 것이라 게이트웨이와 WAS 구간을 먼저 의심하고, 로그인 반복은 세션·SSO·쿠키, 특정 문서만 오류는 데이터·파일 상태, 다운로드 실패는 저장소·변환·권한임을 함께 정리한다확대

💡개념

개발자가 아니어도, 증상이 '어느 층'에서 났는지는 짐작할 수 있어야 한다

PM은 코드를 짜지 않습니다. 하지만 고객의 증상을 듣고 **"이건 대략 어느 영역 문제겠다"**를 짐작할 수 있으면, 요청을 훨씬 정확히 번역하고 개발자와 같은 언어로 대화할 수 있습니다. 그 출발점이 웹 서비스가 요청을 처리하는 기본 흐름입니다.

TEXT
[웹 서비스 요청 흐름]

브라우저 / 앱
   │  (사용자가 버튼 클릭)
   ▼
DNS  ──► 도메인 이름을 서버 주소로 변환
   ▼
방화벽 / WAF / 프록시  ──► 접근 차단·보안 필터
   ▼
로드밸런서(LB)  ──► 여러 서버로 요청 분배
   ▼
Web / WAS(애플리케이션 서버)  ──► 실제 로직 처리
   ▼
DB / 외부 API / 스토리지  ──► 데이터 조회·저장·파일
   ▼
응답이 위 경로를 거꾸로 돌아 화면에 표시

이 흐름을 알면, 증상을 듣고 어느 층을 의심할지가 보입니다. 아래 표는 신입 PM이 외워두면 좋은 '증상 → 의심 영역' 대응입니다. 정확한 진단은 개발자가 하지만, 이 표만 있어도 요청을 넘길 때 "이건 권한 쪽일 수 있어요"처럼 방향을 얹을 수 있습니다.

증상주로 의심할 영역
아예 접속이 안 됨(화면이 안 뜸)DNS, 방화벽, 로드밸런서, 서버 다운
화면은 뜨는데 403 Forbidden권한 부족, WAF 차단, 인증 실패
404 Not Found잘못된 주소(URL), 라우팅 오류, 배포 누락
500 Internal Server Error서버 애플리케이션(WAS) 내부 오류·예외
502 / 504 (Bad Gateway·Timeout)게이트웨이·프록시, WAS 응답 없음, 처리 지연 타임아웃
로그인하면 자꾸 튕김·반복세션 만료, SSO 연동, 쿠키 설정 문제
특정 문서·항목만 안 됨데이터 이슈, 파일 손상, 문서 상태값 문제
다운로드가 실패함스토리지 접근, 파일 변환, 권한, 파일 손상

환경(운영기 · 개발기 · 검수기) 개념도 반드시 알아야 합니다. 하나의 서비스는 보통 여러 벌로 존재합니다.

  • 운영기(Production) — 실제 고객이 쓰는 진짜 서비스. 여기서 나는 문제는 곧 장애.
  • 개발기(Development) — 개발자가 만들고 실험하는 곳. 깨져 있어도 정상.
  • 검수기(Staging) — 운영에 반영하기 전 고객·현업이 확인하는 곳. 운영과 거의 같게 맞춰둔 환경.

"오류나요"를 받으면 **가장 먼저 물어야 할 것이 "어느 환경인가요"**인 이유가 여기 있습니다. 검수기 오류를 운영 장애로 착각하면 헛심을 쓰고, 운영 장애를 검수기 문제로 넘기면 고객이 멈춥니다.

마지막으로, 개발자·운영자와 대화할 때 자주 나오는 기본 용어만 익혀두면 회의에서 길을 잃지 않습니다.

용어뜻(PM 눈높이)
PK / FK데이터의 고유 식별자(PK)와 다른 표를 잇는 연결 키(FK). 데이터가 얽힌 정도를 가늠
트랜잭션여러 작업을 '전부 성공 아니면 전부 취소'로 묶는 단위. 결제·정산에서 중요
로그(Log)시스템이 남긴 작동 기록. 원인 추적의 1차 증거
배포(Deploy)새 코드를 서버에 올려 반영하는 것. '갑자기 안 됨'의 흔한 원인
롤백(Rollback)문제가 생긴 배포를 직전 정상 버전으로 되돌리는 것
패치(Patch)특정 오류를 고치는 작은 수정 반영
핫픽스(Hotfix)운영 장애를 급히 막는 긴급 수정
마이그레이션데이터·시스템을 새 구조·새 환경으로 옮기는 작업
API시스템끼리 데이터를 주고받는 약속된 통로
SSO한 번 로그인으로 여러 시스템을 쓰는 통합 인증
WAF웹 공격을 막는 보안 방화벽. 정상 요청을 오차단하기도 함

이 절의 목표는 당신을 개발자로 만드는 게 아닙니다. 증상을 듣고 대략의 방향을 얹을 수 있는 것, 그래서 요청을 더 정확히 번역하고 개발자의 설명을 알아듣는 것 — 그거면 신입 PM으로서 충분합니다.

직접 해보기 — 요청을 접수하고, 번역해서 전달하기

1이슈 접수 10문 체크리스트로 요청을 정리한다

시나리오의 요청 하나를 골라 봅시다 — "결제가 갑자기 안 돼요. 어제까진 됐는데요. 급해요." 이 한 줄을 개발자에게 넘기기 전에, 아래 10문을 채워 요청을 '작업 가능한 단위'로 만드세요. 빈칸(Q7~Q10)은 실제로 고객에게 물어야 할 질문입니다.

이슈 접수 체크리스트 (Intake Checklist)

TEXT
Q1. 고객사/테넌트   : ○○물류 (테넌트 acme-log)
Q2. 환경            : 운영기 (실서비스)
Q3. 화면/기능       : 주문 결제 화면, [결제하기] 클릭 시
Q4. 계정/권한       : 일반 사용자 계정 (구매 담당)
Q5. 발생 범위       : 전체인지 일부인지 → (확인 필요)
Q6. 발생 시점       : "어제까진 됐음" → 오늘 오전부터?
Q7. 기존 정상 여부  : _(직접 확인: 마지막 정상 결제 시각)_
Q8. 재현 여부       : _(직접 확인: 다시 시도 시 또 그런가)_
Q9. 증적(캡처/코드) : _(직접 확인: 오류 메시지·Network 상태코드)_
Q10. 업무 영향도    : _(직접 확인: 결제 전면 중단인가, 특정 수단만인가)_

10문을 다 채우려 시도하는 순간, 당신은 이 요청이 장애 우선순위임을(운영기 + 결제 + '어제까진 됐음') 스스로 알게 됩니다. 그리고 Q5·Q10의 답에 따라 '전 직원 결제 중단(중대 장애)'인지 '한 명의 특정 카드 문제(개별 이슈)'인지가 갈립니다. 체크리스트는 요청을 심문하는 도구가 아니라, 당신이 놓친 축을 스스로 발견하는 도구입니다.

고객사 · 환경 · 화면 · 계정 · 범위 · 시점 · 기존정상 · 재현 · 증적 · 업무영향
2내부 전달 포맷으로 재작성한다

체크리스트로 모은 정보를, 개발자가 되물을 것 없이 착수할 수 있는 표준 포맷으로 재작성합니다. 아래는 같은 결제 이슈를 정리한 예시입니다.

TEXT
[결제 실패 - 운영기 확인 요청]

[고객사]   ○○물류 (테넌트 acme-log)
[환경]     운영기
[현상]     주문 결제 화면에서 [결제하기] 클릭 후 '처리 중'에서 멈춤
[재현조건] 동일 계정에서 3회 반복 재현됨 / 다른 계정에서도 재현됨
[기대동작] 결제 승인 후 주문 완료 화면으로 이동
[실제동작] 승인 응답 없이 15초 후 타임아웃, 화면 멈춤
[발생범위] 해당 고객사 다수 사용자 (전 직원 여부 확인 중)
[관련정보] Network 탭 결제 API 응답 504 / 오늘 오전 09:10 최초 발생
[고객요청] "급하다, 빨리 해결해달라"
[PM판단]   504 → 게이트웨이·결제 연동 응답 지연 의심. 장애 우선순위
[확인요청] 결제 연동사 상태 및 09:00 전후 배포 여부 확인 필요
[일정]     1차 원인 파악 후 30분 내 중간 공유 예정

나쁜 예("결제가 안 된대요, 봐주세요") 한 줄과 비교해 보세요. 이 포맷은 개발자에게 원인 가설(504 → 게이트웨이), 재현 여부(반복 재현됨), 우선순위(장애), **다음 액션(연동사·배포 확인)**까지 얹어 줍니다. [PM판단]은 확정이 아니라 방향 제시라 틀려도 됩니다 — 방향이 있는 요청과 없는 요청은 착수 속도가 다릅니다.

[고객사][환경][현상][재현조건][기대동작][실제동작][발생범위][관련정보][고객요청][PM판단][확인요청][일정]
🔍실행 후 확인할 것
  • 10문 체크리스트에서 Q5(발생 범위)와 Q10(업무 영향도)의 답에 따라 같은 요청이 중대 장애도, 개별 이슈도 될 수 있음을 확인했는가
  • 환경(Q2)이 운영기임을 먼저 확인해, 이 요청이 장애 우선순위임을 스스로 판단했는가
  • 내부 전달 포맷에 [현상]과 [실제동작]이 고객의 표현이 아니라 관찰된 사실로 적혔는가("안 돼요"가 아니라 "504 타임아웃")
  • [PM판단]이 확정이 아니라 방향 제시(가설)로 적혀 있어, 틀려도 개발자의 판단을 막지 않는가
  • [확인요청]에 개발자가 다음에 할 구체적 행동(연동사 상태·배포 여부 확인)이 명시됐는가
  • 핵심 감각: 좋은 접수·전달은 개발자의 첫 질문(어느 환경·누구 계정·재현되나)을 미리 답해 둔 것이다 — 왕복이 0에 가까울수록 잘 정리된 것이다

현장에서 자주 보는 함정

증상: 고객이 "직원 목록에서 특정 팀이 아예 안 보여요. 데이터가 사라진 거 아니에요? 버그예요!"라고 강하게 항의했습니다. 신입 PM은 고객의 다급함에 눌려 "네, 데이터 유실 버그 같습니다. 개발팀에 긴급 요청하겠습니다"라고 답하고, 개발팀 채팅방에 "긴급! 직원 데이터 유실, 특정 팀 사라짐"이라고 올렸습니다. 개발팀은 장애로 판단해 운영 DB를 열고, 백업 복구 검토까지 들어가 팀 전체가 저녁까지 매달렸습니다.

원인: 데이터는 멀쩡했습니다. 문제는 세 가지 중 하나였습니다 — ① 그 고객 담당자의 계정 권한이 해당 팀 조회 범위에 없었거나(권한 이슈), ② 목록에 부서 필터가 걸려 있었거나(설정·사용 이슈), ③ 그 담당자가 보던 곳이 검수기였고 검수기에는 최신 데이터가 안 올라가 있었던 것(환경 이슈)입니다. 실제로는 필터가 걸려 있었고, 필터를 해제하니 팀이 그대로 다 보였습니다. 데이터 유실은 없었습니다.

무엇이 잘못됐나: 신입 PM이 고객의 진단("버그예요")을 그대로 받아 확정해 버린 것입니다. 고객은 증상을 말할 뿐 원인을 진단할 수 없는데, PM이 그 진단을 검증 없이 승격시켰습니다. 게다가 '데이터 유실'이라는 강한 단어를 붙여 개발팀을 불필요한 비상 대응으로 몰았습니다.

해결 방향(이 모듈에서 다룬 것):

  • 고객의 "버그예요"는 증상으로만 받고, 확정은 재현·환경·권한 확인 후로 미룬다 — "현상 확인 후 원인 구분이 필요합니다".
  • 넘기기 전에 환경(운영기/검수기)·계정 권한·필터 설정을 먼저 확인한다 — 다른 계정·다른 환경에서도 같은지 재현부터.
  • 개발팀에 넘길 때 "데이터 유실"처럼 원인을 단정하는 단어를 쓰지 않는다 — "특정 팀 미표시, 권한·필터·환경 확인 요청"처럼 중립적으로.
  • 확인 순서: 가장 흔하고 값싼 원인(설정·필터·권한)부터 배제하고, 그래도 안 되면 데이터·코드를 의심한다.

교훈: 고객이 아무리 확신에 차서 "버그"라고 해도, 그건 원인이 아니라 증상입니다. 신입 PM이 배워야 할 첫 절제는 **"고객의 진단을 내 진단으로 승격시키지 않는 것"**입니다. 확인 5분이 개발팀의 저녁 5시간을 아낍니다.

심화 — 재현 안 되는 이슈는 왜 못 잡는가

💡개념

심화: '저는 되는데요'의 벽 — 재현 조건을 좁히는 것이 PM의 몫이다

개발팀에 이슈를 넘겼을 때 가장 자주 돌아오는 답이 **"저는 재현이 안 되는데요"**입니다. 신입 PM은 이때 "개발자가 성의가 없나?" 하고 오해하기 쉽지만, 사실은 다릅니다 — 재현되지 않는 문제는 고칠 수단 자체가 없습니다.

개발자가 버그를 고치는 방식은 이렇습니다: 문제를 자기 환경에서 똑같이 재현시키고 → 코드를 한 줄씩 따라가며 어디서 어긋나는지 관찰하고 → 고친 뒤 다시 재현시켜 안 나는지 확인합니다. 이 세 단계 전부가 '재현'을 전제로 합니다. 재현이 안 되면 개발자는 눈을 감고 허공을 더듬는 셈이 됩니다. 그래서 "안 잡힌다"는 무능이 아니라 정보 부족의 신호입니다.

여기서 PM이 결정적 역할을 합니다 — 재현 조건을 좁혀 주는 것입니다. 고객과 개발자 사이에서, 어떤 조건이 갖춰지면 문제가 나타나는지를 함께 특정합니다.

  • 무엇이 다른가를 대조한다: 되는 계정과 안 되는 계정의 차이(권한·소속·데이터), 되는 문서와 안 되는 문서의 차이(크기·형식·상태값), 되는 시간과 안 되는 시간의 차이(마감 시간대·배치 실행 시각).
  • 경계를 조인다: "전부 안 됨"인지 "이 조건에서만 안 됨"인지. 특정 브라우저에서만? 특정 데이터 건수 이상에서만? 특정 권한에서만? 조건이 좁혀질수록 원인 후보가 줄어듭니다.
  • 타이밍·순서를 기록한다: "A를 하고 바로 B를 하면 난다"처럼 동작 순서가 조건인 경우가 많습니다. 고객이 무심코 지나친 직전 행동이 열쇠입니다.
  • 환경·시점을 고정한다: 언제(정확한 시각), 어디서(환경·기기), 무엇을 한 직후인지. 로그를 대조하려면 정확한 발생 시각이 결정적입니다.

정리하면, 재현은 개발자의 일이지만 재현 조건을 좁히는 것은 PM의 일입니다. "안 된대요"를 "○○ 권한 계정으로, 운영기에서, 1만 건 이상 문서를 열 때, 3초 뒤에 504가 난다"로 좁혀 주는 순간, 개발자는 비로소 손을 댈 수 있습니다. 좋은 PM은 개발자에게 문제를 던지는 사람이 아니라, 개발자가 재현할 수 있는 조건을 함께 만들어 주는 사람입니다.

💼
실무 맥락오전에 쏟아진 5개 요청을 유형별로 분류·번역하는 신입 PM의 흐름
현업 패턴

시나리오로 돌아가 봅시다. 오전 9시, 다섯 개의 메시지가 왔습니다. 노련한 PM은 이걸 순서대로 처리하지 않습니다 — 먼저 다섯 개를 유형으로 분류하고, 속도를 정한 뒤, 각각을 번역합니다.

  • "결제가 갑자기 안 돼요. 어제까진 됐는데요. 급해요."장애 우선순위. 운영기 + 핵심 기능 + '어제까진 됨' + '급함'. 다른 넷을 잠시 미루고 이것부터. "지금 확인하겠습니다"라 답하고, 발생 범위(전 직원인가)와 Network 상태코드부터 좁힙니다. 504가 보이면 게이트웨이·연동 이슈로 개발팀에 즉시 구조화 전달.
  • "로그인하면 자꾸 튕겨요. 저만 그런가?"재현·범위 확인 먼저. "저만 그런가?"는 범위를 좁히라는 힌트입니다. 다른 계정·다른 PC에서도 그런지, 세션·SSO·쿠키 중 어느 쪽인지. 한 명만이면 개별 이슈, 다수면 결제 건과 연관된 장애일 수도.
  • "조직도에서 예전에 없앤 부서가 계속 보여요. 버그 아니에요?"버그/개선 구분 필요. 원 스펙에 '폐지 부서 숨김'이 있었는지부터. 있으면 버그, 없으면 개선. 즉답으로 "버그네요" 금지.
  • "엑셀 다운로드가 왜 이렇게 느려요? 좀 빠르게 해주세요."개선 요청(성능). '느리다'는 체감이므로 기준을 잡습니다 — 몇 건을 받을 때 몇 초 걸리는지. 업무가 멈춘 장애인지, 답답한 개선인지 영향도로 판단. 즉시 "빠르게 해드릴게요" 확약 금지.
  • "직원 등록할 때 사번을 자동으로 넣어주면 안 될까요? 간단한 거잖아요."추가개발 의심. "간단한 거잖아요"에 넘어가지 않습니다. 없던 자동 채번 로직은 계약 범위·기존 사번 체계와 얽힐 수 있어, "가능한 방향인지 확인 후 안내드리겠습니다"로 받고 영업·계약 라인과 함께 검토.

이 다섯 줄을 분류하는 데 걸리는 시간은 2분입니다. 하지만 이 2분이, 급한 장애를 개선 요청 뒤에 줄 세우는 사고를 막고, 추가개발을 무상으로 떠안는 실수를 막고, 다섯 개를 전부 개발팀에 던져 하루를 왕복으로 태우는 일을 막습니다. 신입 PM의 실력은 요청을 얼마나 빨리 처리하느냐가 아니라, 요청을 얼마나 정확히 가르고 번역하느냐로 드러납니다. 기술을 조금 아는 PM이 강한 이유가 여기 있습니다 — 증상만 듣고도 "이건 게이트웨이", "이건 권한", "이건 계약 밖"이라는 방향을 얹을 수 있으니까요.


오늘 기억할 세 가지:

  1. 고객의 "안 돼요"는 일곱 갈래다 — 장애·오류·설정·데이터·개선·추가개발·운영 문의. 유형을 가르는 것이 PM이 요청에 얹는 첫 가치이고, 이걸 못 하면 모든 요청이 '개발팀 확인 요청'이 된다.
  2. 고객의 진단을 내 진단으로 승격시키지 않는다 — "버그예요"는 증상일 뿐. 환경·재현·권한을 확인하기 전엔 "현상 확인 후 원인 구분이 필요합니다"가 유일하게 정직한 답이다. 성급한 확답("가능해요", "금방 돼요")은 약속이 된다.
  3. 넘기기 전에 정리한다 — 고객 요청/현재 동작/기대/확인 필요/구분 필요로 구조화하고, 확인 요청엔 항상 이유를 붙인다. 왕복이 0에 가까울수록 잘 정리된 것이다.

관련 모듈로 더 깊이:

다음 모듈에서는 이렇게 분류·번역한 내용을 어떻게 소통·기록하고, 어떤 도구·정리기법으로 스킬업하는지 — 신입 PM의 커뮤니케이션과 문서화 역량을 다룹니다.

지식 확인

퀴즈 — 6문제

Q1

고객이 '결제 화면에서 [처리 중]만 계속 돌고 결제가 안 돼요. 우리 회사 전 직원이 다 그래요'라고 했다. 이 요청을 신입 PM이 가장 먼저 무엇으로 보고 움직여야 하는가?

Q2

고객이 '조직도에서 미사용(폐지)된 부서가 안 보여야 하는 것 아닌가요?'라고 문의했다. 신입 PM의 첫 대응으로 가장 올바른 것은?

Q3

고객이 '어제부터 문서 다운로드가 안 돼요'라고 접수했다. 개발팀에 넘기기 전에 신입 PM이 좁혀야 할 정보로 가장 거리가 먼 것은?

Q4

화면 오류를 접수하면서 고객에게 자료를 요청하려 한다. 가장 좋은 표현은?

Q5

'조직도 정렬 변경' 요청을 처리할 때, 신입 PM이 완료 기준을 미리 합의해야 하는 이유로 가장 적절한 것은?

Q6

고객이 '사이트가 열리다가 502/504가 뜬다'고 한다. 웹 서비스 흐름상 가장 먼저 의심할 계층은?

0 / 6 답변

🧪 실습으로 확인하기

Jira 이슈·스프린트·백로그 — 일을 티켓으로 굴리기

초급

Jira(클라우드 무료 플랜)에서 프로젝트를 만들고 이슈 타입·워크플로우를 구성한 뒤, 백로그를 스프린트로 끊어 보드로 운영하고 JQL·번다운으로 현황을 읽는 전 과정을 직접 구성한다.

60📋 4단계💻 직접 환경
실습 시작하기 →

이것도 배워보세요