이 글을 3줄로 요약하면
· d3dcompiler_47.dll은 다이렉트X의 셰이더 컴파일러이자 윈도우 8.1 이후 OS에 포함된 구성 요소입니다.
· 그래서 "DirectX 최종 사용자 런타임(dxwebsetup)"을 아무리 다시 설치해도 이 파일은 채워지지 않습니다.
· 아래 판별표에서 본인 증상을 먼저 찾고, 해당하는 원인 섹션 하나만 처리하면 됩니다.
d3dcompiler_47.dll은 정확히 무엇인가
이 파일의 정체를 알면 어디를 손봐야 하는지가 정해집니다.
"이 컴퓨터에 d3dcompiler_47.dll이(가) 없어서 프로그램을 시작할 수 없습니다"라는 창은 포토샵 같은 그래픽 프로그램, 다이렉트X를 쓰는 게임, 그리고 화면을 그리는 데 하드웨어 가속을 쓰는 여러 데스크톱 앱에서 공통으로 나타납니다.
이 파일은 HLSL 셰이더 컴파일러입니다. 프로그램이 화면 효과를 표현하려고 작성한 셰이더 코드를 그래픽카드가 이해하는 형태로 번역해 주는 부품이고, 관련 함수(D3DCompile 등)가 이 DLL 안에 들어 있습니다.
여기서 가장 중요한 사실 한 가지. d3dcompiler_47.dll은 윈도우 운영 체제 구성 요소입니다. 윈도우 8.1 이후 버전에는 처음부터 포함돼 있고, 윈도우 7 SP1·Server 2008 R2·Server 2012에는 마이크로소프트가 별도 업데이트로 배포했습니다(.NET Framework 4.7 설치의 전제 조건이기도 했습니다).
DirectX 최종 사용자 런타임을 설치해도 이 파일은 안 생깁니다
가장 널리 퍼진 오해입니다. dxwebsetup으로 설치되는 DirectX 최종 사용자 런타임은 D3DX9·D3DX10·D3DX11·XAudio 2.7·XInput 1.3·XACT 같은 레거시 DirectX SDK 구성 요소를 설치하는 패키지이고, 마이크로소프트 다운로드 페이지에도 "이 패키지는 Windows OS에 설치된 DirectX 런타임을 어떤 식으로든 수정하지 않습니다"라고 명시돼 있습니다. 즉 d3dcompiler_43.dll·d3dx9_43.dll이 없다는 오류에는 이 설치가 정답이지만, _47에는 통하지 않습니다.
따라서 윈도우 10·11에서 이 오류를 만났다면, 없는 것은 "다이렉트X"가 아니라 특정 위치에 있어야 할 파일 하나입니다. 그 위치가 프로그램 폴더인지 윈도우 시스템 폴더인지, 그리고 64비트 쪽인지 32비트 쪽인지에 따라 원인이 A~D로 갈립니다.
증상으로 원인 좁히기 (판별표)
전부 따라 할 필요 없습니다. 아래에서 본인 상황에 해당하는 줄 하나만 찾으세요.
| 증상 | 유력한 원인 | 먼저 볼 항목 |
|---|---|---|
| 특정 프로그램·게임 하나에서만 뜨고 나머지는 멀쩡하다 | 그 프로그램 폴더의 사본 누락 | 원인 A → 3번 |
| 백신이 뭔가를 잡아낸 뒤부터 실행이 안 된다 | 파일이 격리로 옮겨짐 | 원인 A → 3번 |
| 여러 프로그램에서 동시에 같은 창이 뜬다 | 윈도우 시스템 파일 손상 | 원인 B → 4번 |
| 그래픽 드라이버를 지우고 다시 깐 직후부터 시작됐다 | 정리 도구가 시스템 파일까지 삭제 | 원인 B → 4번 |
| 64비트 프로그램은 되는데 오래된 32비트 프로그램만 안 된다 | SysWOW64 쪽 사본 누락 | 원인 C → 5번 |
| 윈도우 7이거나 서버 버전이다 | OS에 구성 요소 자체가 없음 | 원인 D → 6번 |
해당하는 줄이 두 개 이상이면 A → B → C → D 순서로 보는 편이 빠릅니다. 앞쪽일수록 손대는 범위가 좁아 실패해도 되돌리기 쉽습니다.
원인 A프로그램 폴더에 있던 사본이 사라졌다
프로그램 하나에서만 뜬다면 여기서 끝나는 경우가 가장 많습니다.
윈도우가 DLL을 찾을 때는 실행 파일이 있는 폴더를 시스템 폴더보다 먼저 봅니다. 이 성질 때문에 많은 프로그램이 자기가 검증한 버전의 d3dcompiler_47.dll을 설치 폴더에 함께 넣어 배포합니다. 브라우저 기반 데스크톱 앱, 어도비 계열 프로그램, 자체 런처를 쓰는 게임에서 흔한 방식입니다.
그래서 이 사본만 사라져도 시스템은 멀쩡한데 그 프로그램 하나만 실행이 안 됩니다. 백신이 서명 검사에 걸린 파일을 격리로 옮겼거나, 설치가 중간에 끊겼거나, 용량을 줄이려고 폴더를 정리하다 지운 경우입니다.
1그 프로그램 설치 폴더를 직접 열어 본다
바로 가기를 우클릭해 파일 위치 열기로 들어간 뒤, 우측 상단 검색창에 d3dcompiler를 입력합니다. 게임이라면 게임 폴더 안 _CommonRedist·DirectX 폴더도 함께 확인합니다.
2백신 격리 기록을 확인하고 필요하면 복원한다
Win + I → 개인 정보 및 보안 → Windows 보안 → Windows 보안 열기 → 바이러스 및 위협 방지 → 보호 기록에서 그 폴더 경로가 있는지 봅니다. 있으면 디바이스에서 허용으로 복원한 뒤 설치 폴더를 제외 목록에 등록합니다.
3그 프로그램만 복구 설치한다
설정 → 앱 → 설치된 앱에서 해당 프로그램의 수정 또는 복구를 실행합니다. 스팀 게임이라면 라이브러리에서 게임 우클릭 → 속성 → 설치된 파일 → 게임 파일의 무결성 확인을 돌리면 빠진 파일만 다시 받아 채웁니다.
이 방법이 안 통하는 경우
복구 설치를 마쳤는데도 같은 창이 뜨거나, 처음부터 여러 프로그램에서 동시에 나타난다면 개별 프로그램 문제가 아닙니다. 윈도우 쪽 원본을 봐야 하므로 원인 B로 넘어가세요.
원인 B윈도우 쪽 원본이 손상됐다
여러 프로그램이 한꺼번에 같은 창을 띄운다면 시스템 파일을 복구해야 합니다.
앞서 본 것처럼 이 파일은 윈도우 구성 요소이므로, System32에 있어야 할 원본이 손상되거나 삭제되면 그 파일을 쓰는 프로그램이 전부 멈춥니다. 그래픽 드라이버 완전 삭제 도구를 돌리다가 함께 지워지거나, 디스크 오류로 파일이 깨진 경우가 대표적입니다.
이때는 파일을 어디서 구해 오는 것이 아니라 윈도우 자신에게 복구시키는 것이 정석입니다. 윈도우는 자기 구성 요소의 원본을 별도 저장소에 보관하고 있어서, 아래 명령으로 손상된 것만 골라 되돌립니다.
1시스템 파일 검사
시작 버튼을 우클릭해 터미널(관리자)을 열고 실행합니다. 5~15분 걸리며 중간에 창을 닫지 않습니다. "손상된 파일을 찾았으며 복구했습니다"가 나오면 재부팅 후 프로그램을 다시 실행해 봅니다.
2복구에 실패했다면 원본 저장소부터 고친다
"일부 파일을 복구할 수 없습니다"가 나왔다면 sfc가 참조하는 원본 자체가 깨진 것입니다. 이 명령으로 저장소를 먼저 복구한 뒤 sfc를 한 번 더 실행합니다. 인터넷 연결이 필요합니다.
regsvr32로 등록하려 하지 마세요
"System32에 넣고 regsvr32로 등록하라"는 안내가 자주 보이지만, regsvr32는 COM 등록 정보를 가진 DLL에만 쓰는 도구입니다. d3dcompiler_47.dll은 그런 형태가 아니라서 실행하면 "모듈을 로드했지만 DllRegisterServer 진입점을 찾을 수 없습니다"라는 오류만 납니다. 등록이 필요한 파일이 아니라 제자리에 있기만 하면 되는 파일입니다.
이 방법이 안 통하는 경우
sfc와 DISM이 모두 "위반 사항을 발견하지 못했습니다"로 끝났는데도 특정 프로그램만 계속 실패한다면, 시스템 파일은 멀쩡하고 아키텍처가 어긋난 것입니다. 원인 C로 넘어가세요.
원인 C32비트 프로그램인데 32비트 사본이 없다
오래된 32비트 프로그램에서만 뜬다면 폴더 두 개를 비교하면 됩니다.
64비트 윈도우에는 같은 이름의 시스템 DLL이 두 벌 있습니다. 64비트용은 C:\Windows\System32에, 32비트용은 C:\Windows\SysWOW64에 들어 있습니다. 이름이 뒤바뀐 것처럼 보이지만 윈도우의 오랜 규칙이라 그대로 외워야 합니다.
32비트 프로그램은 System32를 요청해도 윈도우가 자동으로 SysWOW64로 돌려 줍니다. 그래서 SysWOW64 쪽 사본만 사라지면, 64비트 프로그램은 멀쩡한데 32비트 프로그램만 이 오류로 멈춥니다.
1두 폴더에서 같은 검색을 해 본다
Win + E로 탐색기를 열고 주소창에 C:\Windows\System32를 붙여넣은 뒤 검색창에 d3dcompiler를 입력합니다. 이어서 주소창을 C:\Windows\SysWOW64로 바꿔 같은 검색을 합니다. 한쪽에만 결과가 나오면 그쪽이 원인입니다.
2빠진 쪽을 손으로 채우지 말고 sfc로 되돌린다
한쪽이 비어 있다면 원인 B의 sfc·DISM 절차가 그대로 답입니다. System32에 있는 64비트 파일을 SysWOW64로 복사해 넣는 것은 형식이 달라 절대 통하지 않고, 오류만 다른 코드로 바뀝니다.
3프로그램이 32비트인지부터 확인한다
Ctrl + Shift + Esc로 작업 관리자를 열고 세부 정보 탭에서 그 프로그램 행을 봅니다. 이름 뒤에 (32비트)가 붙어 있으면 32비트입니다. 프로그램이 아예 실행되지 않아 목록에 없다면, 설치 폴더가 Program Files (x86) 아래인지로 짐작할 수 있습니다.
탐색기 검색이 SysWOW64를 안 보여줄 수도 있습니다
폴더 옵션에서 보호된 운영 체제 파일 숨기기가 켜져 있으면 결과가 비어 보일 수 있습니다. 탐색기 상단 보기 → 표시 → 숨긴 항목을 켜고 다시 검색해, "정말 없는 것"과 "안 보이는 것"을 구분하세요.
이 방법이 안 통하는 경우
두 폴더 모두에 파일이 없고 sfc로도 복구되지 않는다면, 이 윈도우 버전에 애초에 그 구성 요소가 들어 있지 않은 것입니다. 원인 D로 넘어가세요.
원인 D구버전 윈도우라 구성 요소 자체가 없다
윈도우 7이나 서버 버전을 쓰고 있다면 여기부터 보세요.
d3dcompiler_47.dll은 윈도우 8.1 시절에 만들어진 구성 요소입니다(파일 버전이 6.3.9600 대로 시작하는 이유입니다). 윈도우 7 SP1·Server 2008 R2·Server 2012에는 원래 들어 있지 않고, 마이크로소프트가 나중에 별도 업데이트로 내려보냈습니다. 업데이트를 오래 미룬 PC라면 이 파일이 아직 없을 수 있습니다.
1윈도우 업데이트를 끝까지 받는다
Win + I → Windows 업데이트에서 업데이트 확인을 눌러 남은 항목을 전부 설치하고 재부팅합니다. 재부팅 후 다시 확인을 눌러 더 나올 것이 없을 때까지 반복합니다. 이 구성 요소는 이 경로로 들어옵니다.
2업데이트가 막혀 있으면 독립 패키지로 받는다
사내 정책 등으로 자동 업데이트가 막힌 환경이라면, 아래 참고 문서의 마이크로소프트 지원 문서에서 안내하는 대로 Microsoft 업데이트 카탈로그에서 해당 독립 실행형 패키지를 받아 설치합니다. 내 윈도우 버전·아키텍처와 정확히 같은 항목을 골라야 합니다.
3레거시 DirectX가 함께 필요한지 확인한다
같은 프로그램이 d3dx9_43.dll·xinput1_3.dll처럼 다른 파일도 요구한다면, 그쪽은 DirectX 최종 사용자 런타임(dxwebsetup)으로 채워야 합니다. _47과 _43은 출처가 다른 파일이라 두 조치가 별개로 필요할 수 있습니다.
이 방법이 안 통하는 경우
윈도우 10·11인데 여기까지 왔다면 A~D 어디에도 맞지 않는 상태입니다. 아래 7번에서 어떤 프로그램이 어느 경로의 파일을 요구했는지를 로그로 확인한 뒤 다시 갈래를 정하세요.
원인을 정확히 찾아내는 법
파일이 어느 폴더에서 없다고 나온 것인지만 알면 갈래가 정해집니다.
오류 창에는 파일 이름만 나오고 경로가 없습니다. 그래서 프로그램 폴더가 문제인지 시스템 폴더가 문제인지 알 수 없는 상태로 시작하게 됩니다. 이벤트 로그와 폴더 검색 두 가지로 이걸 확정합니다.
1오류를 한 번 재현한 뒤 이벤트 뷰어를 연다
Win + R에 eventvwr.msc를 입력해 실행하고, 왼쪽 트리에서 Windows 로그 → 응용 프로그램을 선택합니다. 맨 위 빨간 X 항목이 방금 그 오류입니다.
2일반 탭에서 "오류 모듈 이름"의 경로를 읽는다
경로가 프로그램 설치 폴더로 시작하면 원인 A, C:\Windows\System32나 SysWOW64로 시작하면 원인 B 또는 C입니다. 이 한 줄로 손댈 곳이 정해집니다.
3파일이 실제로 있는지와 버전을 한 번에 확인한다
터미널에 붙여넣어 실행합니다. 두 줄 모두 나오면 시스템은 정상이므로 원인 A로, 한 줄만 나오면 원인 C로, 아무것도 안 나오면 원인 B 또는 D로 갑니다.
인터넷에서 dll 파일만 받아 넣지 마세요
이 파일은 윈도우 구성 요소라 윈도우가 관리하는 원본이 따로 있습니다. 출처가 불분명한 사본을 System32에 넣으면 버전과 서명이 어긋나 다른 프로그램까지 깨질 수 있고, 악성코드 위험도 있습니다. 채우는 방법은 sfc·DISM과 윈도우 업데이트, 그리고 프로그램 복구 설치 세 가지뿐입니다.
자주 묻는 질문
검색으로 자주 들어오는 질문만 추렸습니다.
Q.DirectX를 다시 설치하면 해결되나요?
A._47에는 해당하지 않습니다. DirectX 최종 사용자 런타임은 레거시 SDK 구성 요소만 설치하고 윈도우에 포함된 DirectX 런타임은 건드리지 않는다고 마이크로소프트가 명시하고 있습니다. 파일 이름이 _43으로 끝나는 오류라면 그 설치가 맞습니다.
Q.윈도우를 다시 설치해야 하나요?
A.아닙니다. 대부분 프로그램 복구 설치나 sfc·DISM 선에서 끝납니다. 재설치는 DISM까지 실패하고 시스템 복원도 되지 않을 때 마지막으로 고려할 일입니다.
Q.그래픽 드라이버를 업데이트하면 되나요?
A.이 파일은 그래픽 드라이버에 포함되지 않아 직접적인 해결책은 아닙니다. 다만 드라이버 완전 삭제 도구를 쓴 뒤부터 오류가 시작됐다면 그 과정에서 시스템 파일이 함께 지워졌을 수 있으므로, 드라이버를 정상 설치한 뒤 원인 B의 sfc를 돌리는 순서가 좋습니다.
Q.게임에서 떠도 같은 방법으로 되나요?
A.됩니다. 프로그램·게임 구분 없이 같은 파일을 쓰기 때문입니다. 다만 게임은 자기 폴더에 사본을 두는 경우가 많아 원인 A(무결성 검사)에서 끝나는 비율이 더 높습니다.
Q.System32에 파일을 넣고 regsvr32로 등록해도 되나요?
A.안 됩니다. regsvr32는 COM 등록 정보를 가진 DLL 전용 도구라 이 파일에는 진입점을 찾을 수 없다는 오류만 납니다. 등록이 필요한 파일이 아니며, 출처가 불분명한 사본을 시스템 폴더에 넣는 것 자체가 위험합니다.
함께 보면 좋은 글
같은 "DLL이 없습니다" 계열이지만 해결법이 다른 오류들입니다.
d3dx9_43.dll이 없습니다 오류 해결법 레거시 DirectX SDK 구성 요소라 이 글과 달리 런타임 설치가 정답입니다 · 눌러서 확인하기 → XINPUT1_3.dll을 찾을 수 없습니다 오류 해결법 게임패드가 안 잡힐 때 함께 요구되는 레거시 구성 요소입니다 · 눌러서 확인하기 → VCRUNTIME140.dll·MSVCP140.dll 없음 오류 원인 4가지와 증상별 해결 순서 윈도우 구성 요소가 아니라 재배포 패키지로 채우는 계열입니다 · 눌러서 확인하기 →참고 문서 · d3dcompiler_47.dll 구성 요소에 대한 업데이트 — Microsoft 지원 / D3DCompile 함수(d3dcompiler.h) — Microsoft Learn / DirectX 최종 사용자 런타임 웹 설치 관리자 — Microsoft 다운로드 센터 / 시스템 파일 검사기 설명(Sfc.exe) — Microsoft Learn






