CNC G코드와 M코드 차이점 및 명령어 기능
오늘은 CNC 기계의 두 가지 핵심 언어, G코드와 M코드에 대해 알아보겠습니다. 이 두 코드는 마치 오케스트라의 지휘자처럼, 우리의 기계가 정확하고 효율적으로 작동할 수 있도록 지시하는 언어라고 생각하면 됩니다.

이때 G코드는 기계의 움직임을, M코드는 기계의 보조 기능을 제어하는 중요한 역할을 하며 이 두 코드를 통해 CNC 기계가 어떻게 정밀하게 작업을 수행하는지 자세히 살펴보겠습니다!

- G코드 (Geometric Code)
- 역할: 기계의 이동 경로와 위치를 제어합니다.
- 예시: G01은 직선 이동, G02는 시계 방향 원호 이동, G03은 반시계 방향 원호 이동을 의미합니다.
- 주요 사용처: 절삭 경로, 드릴링 위치, 공구 경로 등.
- M코드 (Miscellaneous Code)
- 역할: 기계의 보조 기능을 제어합니다.
- 예시: M03은 스핀들 시계 방향 회전, M05는 스핀들 정지를 의미합니다.
- 주요 사용처: 스핀들 제어, 냉각수 켜기/끄기, 프로그램 종료 등.
G코드 사용법
G코드는 일반적으로 G와 숫자 조합으로 이루어집니다.
G01 X10 Y20 F150
이 명령은 X축을 10, Y축을 20으로 이동시키며, 이동 속도는 150mm/min입니다.
M코드 사용법

M코드는 M과 숫자 조합으로 이루어집니다.
M03 S500
이 명령은 스핀들을 시계 방향으로 500 RPM으로 회전시킵니다.
G코드 명령어
| G 코드 | 명령어 | 설명 |
| G00 | 위치결정 | 공구를 급속도로 지정한 위치로 이동시킵니다. |
| G01 | 직선보간 | 공구를 지정한 직선 경로를 따라 이동시킵니다. |
| G02 | 원호보간/헬리컬 보간 (시계방향) | 공구를 시계방향으로 원호 또는 헬리컬 경로를 따라 이동시킵니다. |
| G03 | 원호보간/헬리컬 보간 (반시계방향) | 공구를 반시계방향으로 원호 또는 헬리컬 경로를 따라 이동시킵니다. |
| G04 | 휴지(드웰)/이그잭트 스톱 | 공구의 이동을 일시적으로 멈춥니다. |
| G07.1 | 원통형보간 | 원통형 보간을 수행합니다. |
| G08 | 선행제어 | 공구의 이동을 원활하게 하기 위해 선행 제어를 활성화합니다. |
| G09 | 이그잭트 스톱 (Exact stop) | 공구의 이동을 즉시 멈춥니다. |
| G10 | 데이터 설정 | 기계 설정 데이터를 입력합니다. |
| G11 | 데이터 설정 모드 취소 | 데이터 설정 모드를 취소합니다. |
| G17 | XY 평면 설정 | XY 평면을 가공 기준 평면으로 설정합니다. |
| G18 | ZX 평면 설정 | ZX 평면을 가공 기준 평면으로 설정합니다. |
| G19 | YZ 평면 설정 | YZ 평면을 가공 기준 평면으로 설정합니다. |
| G20 | 인치 데이터 입력 | 인치 단위로 좌표 데이터를 입력합니다. |
| G21 | 메트릭 데이터 입력 | 미터법 단위로 좌표 데이터를 입력합니다. |
| G27 | 원점 복귀 검사 | 원점 복귀를 확인합니다. |
| G28 | 자동 원점 복귀 | 자동으로 원점으로 복귀합니다. |
| G29 | 원점으로 복귀 | 원점으로 복귀합니다. |
| G30 | 제2, 3, 4 원점 복귀 | 지정된 두 번째, 세 번째, 네 번째 원점으로 복귀합니다. |
| G31 | 스킵 기능 | 지정된 조건이 충족되면 공구 이동을 멈춥니다. |
| G40 | 공구경 옵셋 취소 | 공구경 옵셋 보정을 취소합니다. |
| G41 | 공구경 옵셋 보정, 왼쪽 | 공구경 보정을 왼쪽으로 설정합니다. |
| G42 | 공구경 옵셋 보정, 오른쪽 | 공구경 보정을 오른쪽으로 설정합니다. |
| G43 | 공구 길이 옵셋, + | 공구 길이 보정을 더합니다. |
| G44 | 공구 길이 옵셋, - | 공구 길이 보정을 뺍니다. |
| G49 | 공구 길이 옵셋 보정 취소 | 공구 길이 보정을 취소합니다. |
| G52 | 지역 좌표계 설정 | 지역 좌표계를 설정합니다. |
| G53 | 기계 좌표계 선택 | 기계 좌표계를 선택합니다. |
| G54 | 공작물 좌표계 1 선택 | 첫 번째 공작물 좌표계를 선택합니다. |
| G55 | 공작물 좌표계 2 선택 | 두 번째 공작물 좌표계를 선택합니다. |
| G56 | 공작물 좌표계 3 선택 | 세 번째 공작물 좌표계를 선택합니다. |
| G57 | 공작물 좌표계 4 선택 | 네 번째 공작물 좌표계를 선택합니다. |
| G58 | 공작물 좌표계 5 선택 | 다섯 번째 공작물 좌표계를 선택합니다. |
| G59 | 공작물 좌표계 6 선택 | 여섯 번째 공작물 좌표계를 선택합니다. |
| G61 | Exact stop mode | 공구의 이동을 정밀하게 멈추도록 설정합니다. |
| G63 | 탭핑 모드 | 탭핑 작업을 수행하도록 설정합니다. |
| G64 | 절삭 모드 (exact stop check mode) | 절삭 작업을 원활하게 수행하도록 설정합니다. |
| G65 | 마크로 호출 | 지정된 매크로를 호출합니다. |
| G66 | 매크로 모달 호출 | 매크로 모달 호출을 설정합니다. |
| G67 | 매크로 모달 호출 취소 | 매크로 모달 호출을 취소합니다. |
| G68 | 좌표 회전 | 지정된 각도로 좌표를 회전시킵니다. |
| G69 | 좌표 회전 취소 | 좌표 회전을 취소합니다. |
| G72.1 | 회전 Copy | 공작물을 회전하여 복사합니다. |
| G72.2 | 평행 Copy | 공작물을 평행하게 복사합니다. |
| G73 | 고속 심공 싸이클 | 고속으로 깊은 구멍을 드릴링합니다. |
| G74 | 역회전 탭 싸이클 | 역회전하여 탭 싸이클을 수행합니다. |
| G76 | 파인 보링 싸이클 | 정밀 보링 싸이클을 수행합니다. |
| G80 | 홀 가공 고정 싸이클 취소 | 홀 가공 고정 싸이클을 취소합니다. |
| G81 | 스폿 드릴링 싸이클 | 스폿 드릴링 싸이클을 수행합니다. |
| G82 | 카운터 보링 싸이클 | 카운터 보링 싸이클을 수행합니다. |
| G83 | 심공 드릴링 싸이클 | 깊은 구멍 드릴링 싸이클을 수행합니다. |
| G84 | 탭핑 싸이클 | 탭핑 싸이클을 수행합니다. |
| G85 | 보링 싸이클 | 일반 보링 싸이클을 수행합니다. |
| G86 | 보링 싸이클 | 보링 싸이클을 수행하고 스핀들을 멈춥니다. |
| G87 | 백 보링 싸이클 | 보링 후 후퇴하는 싸이클을 수행합니다. |
| G88 | 보링 싸이클 | 보링 싸이클을 수행하고 일시 정지합니다. |
| G89 | 보링 싸이클 | 보링 싸이클을 수행하고 느리게 후퇴합니다. |
| G90 | 절대 지령 | 절대 좌표계를 사용합니다. |
| G91 | 증분 지령 | 증분 좌표계를 사용합니다. |
| G92 | 주축 최고 회전 속도 설정 | 주축의 최대 회전 속도를 설정하고 공작물 좌표계를 변경합니다. |
| G92.1 | Work 좌표계 Preset | 현재 위치를 기준으로 공작물 좌표계를 설정합니다. |
| G94 | 분당 이송 | 분당 이송 속도를 설정합니다. |
| G98 | 초기점 복귀 | 고정 싸이클 완료 후 초기점으로 복귀합니다. |
| G99 | R점 복귀 (홀 가공 고정 싸이클) | 고정 싸이클 완료 후 R점으로 복귀합니다. |
M코드 명령어
| M 코드 | 명령어 | 설명 |
| M00 | 프로그램 정지 | 프로그램을 일시 정지합니다. |
| M01 | 옵셔널 스톱 | 조작판넬 선택에 따라 프로그램을 일시 정지합니다. |
| M02 | 프로그램 종료 | 프로그램을 종료하고 리셋합니다. |
| M03 | 주축 정회전 | 주축을 시계 방향으로 회전시킵니다. |
| M04 | 주축 역회전 | 주축을 반시계 방향으로 회전시킵니다. |
| M05 | 주축 정지 | 주축의 회전을 멈춥니다. |
| M06 | 공구 교환 | 자동 공구 교환(ATC) 싸이클을 시작합니다. |
| M08 | 절삭유 ON | 절삭유를 토출합니다. |
| M09 | 절삭유 OFF | 절삭유 토출을 중지합니다. |
| M10 | 4축 클램프 | 분할 가공 시 4축을 클램프합니다. |
| M11 | 4축 언클램프 | 분할 가공 시 4축을 언클램프합니다. |
| M16 | 공구 매거진 입력 | 스핀들에 있는 공구를 매거진에 입력합니다. |
| M17 | 에어 블라스트 ON | 에어 블라스트를 시작합니다. |
| M18 | 매거진 원점 복귀 | 매거진을 원점으로 복귀시킵니다. |
| M19 | 주축 방향 정지 | 주축을 특정 방향으로 정지시킵니다. |
| M20 | 자동 전원 차단 | 자동으로 전원을 차단합니다. |
| M23 | 매거진 공구포트 하향 | 매거진 공구포트를 하향시킵니다. |
| M27 | 오일 미스트 쿨런트 | 절삭유를 에어로 분사합니다. |
| M29 | 리지드 탭 모드 | 리지드 탭 모드를 설정합니다. |
| M30 | 프로그램 리와인드 & 리스타트 | 프로그램을 종료하고 처음부터 다시 시작할 수 있도록 리셋합니다. |
| M33 | 공구 수납 | 주축 공구를 매거진으로 수납합니다. |
| M40 | 주축 기어 중립 위치 | 주축 기어를 중립 위치로 설정합니다. |
| M41 | 주축 기어 저속 위치 | 주축 기어를 저속 위치로 설정합니다. |
| M42 | 주축 기어 중속 위치 | 주축 기어를 중속 위치로 설정합니다. |
| M43 | 주축 기어 고속 위치 | 주축 기어를 고속 위치로 설정합니다. |
| M46 | 센서 절환 신호 ON | 주축 쪽의 센서를 선택합니다. |
| M47 | 센서 절환 신호 OFF | 테이블 쪽의 센서를 선택합니다. |
| M48 | 스핀들 오버라이드 취소 OFF | 스핀들 속도 변화를 허용합니다. |
| M49 | 스핀들 오버라이드 취소 ON | 스핀들 속도 변화를 허용하지 않습니다. |
| M51 | 에어 브로우 ON | 에어 브로우를 시작합니다. |
| M53 | 센서 에어 브로우 ON | 센서 에어 브로우를 시작합니다. |
| M55 | 오일 미스트 ON | 오일 미스트를 배출합니다. |
| M59 | 에어 브로우 OFF | 에어 브로우를 정지합니다. |
| M60 | 파레트 체인지 | 호리젠탈 파레트 체인지를 수행합니다. |
| M70 | 워크 카운트 | 작업 개수를 카운트합니다. |
| M73 | Y축 미러 이미지 OFF | Y축 미러 이미지를 비활성화합니다. |
| M74 | Y축 미러 이미지 ON | Y축 미러 이미지를 활성화합니다. |
| M75 | X축 미러 이미지 OFF | X축 미러 이미지를 비활성화합니다. |
| M76 | X축 미러 이미지 ON | X축 미러 이미지를 활성화합니다. |
| M88 | 스루 스핀들 쿨런트 ON | 스루 스핀들 쿨런트를 시작합니다. |
| M89 | 스루 스핀들 쿨런트 OFF | 스루 스핀들 쿨런트를 정지합니다. |
| M98 | 서브 프로그램 호출 | 서브 프로그램을 호출합니다. |
| M99 | 서브 프로그램 종료 | 서브 프로그램 종료 후 메인 프로그램으로 돌아갑니 |
G코드와 M코드를 함께 읽는 실제 예시
표만 보면 외워야 할 코드가 많아 보여도, 실제 CNC 프로그램 한 줄씩 보면 구조는 생각보다 단순합니다.

대부분의 NC 프로그램은 가공 준비 → 공구 호출 → 스핀들 회전 → 절삭 이동 → 종료 순서로 흘러갑니다. 여기서 이동은 G코드가 맡고, 스핀들·절삭유·공구교환·프로그램 종료는 M코드가 맡습니다.
아래처럼 아주 짧은 예시만 봐도 두 코드가 어떻게 섞여서 쓰이는지 바로 감이 옵니다.
O1001
G21 G17 G90 G40 G49 G80
G54
T01 M06
S3000 M03
G00 X0 Y0
G43 H01 Z50.
M08
G01 Z-2.0 F120
G01 X50.0 F300
G03 X70.0 Y20.0 I0 J20.0
G01 Y60.0
M09
G00 Z50.
M05
G28 G91 Z0
G90
M30
이 예시를 줄 단위로 보면 더 이해하기 쉽습니다. G21은 밀리미터 단위, G17은 XY 평면, G90은 절대좌표를 뜻합니다. 그 다음 G54로 공작물 좌표계를 불러오고, T01 M06으로 1번 공구를 교환합니다. 이어서 S3000 M03으로 스핀들을 3000RPM 정회전시키고, M08으로 절삭유를 켠 뒤, G01과 G03로 실제 절삭 경로를 움직입니다. 마지막에는 M09로 절삭유를 끄고 M05로 스핀들을 멈춘 뒤, M30으로 프로그램을 종료합니다.
직선 가공 예시
가장 먼저 익혀두면 좋은 것은 직선 이동 예시입니다. CNC를 처음 보는 분들도 이 부분부터 보면 코드를 읽는 눈이 빨리 생깁니다.
G00 X0 Y0
G01 Z-1.0 F100
G01 X30.0 F250
G01 Y20.0
G01 X0
G01 Y0
여기서 G00은 공구를 빠르게 시작 위치로 보내는 명령이고, G01은 실제 절삭을 하면서 직선으로 이동하는 명령입니다. 즉 공구를 대기 위치까지 보낼 때는 G00, 재료를 깎을 때는 G01을 쓴다고 생각하면 이해가 빠릅니다.
원호 가공 예시
직선 다음으로 많이 보는 것이 원호 보간입니다. 이때 많이 헷갈리는 것이 G02와 G03의 방향입니다.
G02 X40.0 Y40.0 I20.0 J0
G03 X0 Y40.0 I-20.0 J0
G02는 시계 방향 원호, G03은 반시계 방향 원호입니다. 그리고 I, J 값은 시작점에서 원 중심까지의 상대 거리입니다. 처음에는 이 부분이 어렵게 느껴지지만, 실제로는 가공 방향과 원 중심 위치를 지정하는 값이라고 생각하면 됩니다.
드릴링 예시
홀 가공에서는 고정 사이클을 자주 씁니다. 특히 드릴링 작업은 코드가 길어지기 쉬운데, 고정 사이클을 쓰면 훨씬 짧게 정리됩니다.
G98 G81 X10.0 Y10.0 Z-15.0 R2.0 F120
X40.0 Y10.0
X70.0 Y10.0
G80
G81은 일반 드릴링 싸이클입니다. 한 번 지정해두면 다음 좌표에서는 같은 조건으로 반복 가공할 수 있어 홀 여러 개를 뚫을 때 편합니다. 마지막의 G80은 고정 사이클 해제입니다. 실제 현장에서도 이 G80 해제를 빼먹으면 다음 공정에서 엉뚱한 움직임이 나올 수 있어 꼭 확인하는 편입니다.
탭핑 예시
나사 가공에서는 탭핑 관련 코드가 많이 등장합니다. 장비마다 세부 동작은 조금 다르지만 기본 개념은 비슷합니다.
M29 S500
G84 X25.0 Y25.0 Z-12.0 R2.0 F1.25
G80
M29는 리지드 탭 모드, G84는 탭핑 싸이클입니다. 이 구간은 스핀들 회전과 이송이 정확히 맞아야 하므로, 장비 세팅이나 탭 공구 조건이 틀어지면 바로 문제를 일으키기 쉽습니다. 그래서 초보자라면 탭핑은 코드만 보기보다 CAM 시뮬레이션과 장비 매뉴얼을 같이 보는 것이 훨씬 안전합니다.
현장에서 자주 보는 조합
실무에서 자주 보는 조합은 따로 있습니다. 모든 코드를 다 외우기보다 아래처럼 많이 묶여 나오는 조합부터 익히면 훨씬 편합니다.
| 자주 나오는 조합 | 뜻 | 보는 위치 |
| G21 G17 G90 | 밀리미터, XY평면, 절대좌표 | 프로그램 시작부 |
| T01 M06 | 1번 공구 호출 및 교환 | 공구 바뀌는 지점 |
| S3000 M03 | 스핀들 정회전 3000RPM | 절삭 시작 전 |
| G43 H01 | 공구 길이 보정 적용 | 가공 시작 직전 |
| M08 / M09 | 절삭유 켜기 / 끄기 | 절삭 시작과 종료 구간 |
| G81 ~ G80 | 드릴링 싸이클 시작과 해제 | 홀 가공 구간 |
| M05 M30 | 스핀들 정지 후 프로그램 종료 | 프로그램 마지막 |
초보자가 자주 헷갈리는 부분
CNC 코드를 처음 접하면 가장 많이 실수하는 부분이 몇 가지 정해져 있습니다. 이 부분만 먼저 체크해도 코드 해석이 훨씬 쉬워집니다.
- G00과 G01 혼동 : 둘 다 이동이지만 G00은 급속이송, G01은 절삭 이동입니다.
- G02와 G03 방향 혼동 : 시계 방향인지 반시계 방향인지 먼저 구분해야 합니다.
- G90과 G91 혼동 : 절대좌표인지 증분좌표인지에 따라 움직임이 완전히 달라집니다.
- M03과 M04 혼동 : 스핀들 정회전인지 역회전인지 확인해야 합니다.
- G80 누락 : 드릴링 고정 싸이클 해제를 빼먹으면 다음 줄에서 오류가 날 수 있습니다.
- G54~G59 좌표계 착각 : 프로그램은 맞는데 원점이 달라서 공구가 엉뚱한 곳으로 가는 경우가 많습니다.
G코드와 M코드를 외우는 쉬운 방법
저라면 처음부터 모든 코드를 외우지 않습니다.
먼저 움직임 관련 G코드와 장비 동작 관련 M코드로 나눠서 기억하는 편이 훨씬 쉽습니다.
예를 들어 G00, G01, G02, G03, G17, G21, G54, G90 정도만 먼저 익혀도 기본적인 가공 프로그램은 꽤 읽을 수 있습니다. M코드도 마찬가지로 M03, M05, M06, M08, M09, M30 정도부터 익히면 실제 프로그램 구조가 보이기 시작합니다.
Fusion이나 CAM에서 생성된 코드도 결국 같은 원리입니다

요즘은 직접 한 줄씩 수동으로 프로그램을 짜기보다 Fusion 같은 CAM에서 자동으로 NC코드를 생성하는 경우가 많은데요 그래도 기본 원리는 같습니다. CAM이 코드를 대신 만들어줄 뿐이고, 실제 장비가 읽는 명령은 결국 G코드와 M코드입니다.
그래서 CAM을 써도 기본 코드 구조는 꼭 알아두는 것이 좋습니다. 프로그램이 길어도 지금 이 줄이 이동인지, 회전인지, 절삭유인지, 종료인지 정도만 읽을 수 있으면 오류를 찾는 속도가 훨씬 빨라집니다.
Fusion G코드 NC코드 생성 방법과 후처리 설정 정리
Fusion G코드 NC코드 생성 방법과 후처리 설정 총정리Fusion에서 CNC 가공용 코드를 뽑을 때 가장 많이 헷갈리는 부분은 G코드와 NC코드가 어떻게 다른지, 그리고 후처리기를 왜 꼭 맞춰야 하는지입니
jab-guyver.co.kr
G코드는 공구의 이동과 경로를 담당하고, M코드는 스핀들·절삭유·공구교환·프로그램 종료 같은 보조 기능을 담당합니다. 둘은 따로 떨어져 쓰이는 것이 아니라 실제 NC 프로그램 안에서 함께 움직이며, CNC 장비는 이 두 언어를 조합해 하나의 가공 동작을 완성합니다.
처음에는 코드가 많아 보여도, 직선 이동, 원호 이동, 드릴링, 탭핑처럼 작업별 예시를 하나씩 보는 방식으로 익히면 생각보다 빨리 익숙해집니다.
특히 시작부 준비 코드와 마지막 종료 코드를 먼저 읽는 습관을 들이면 전체 프로그램 구조를 파악하기 훨씬 쉬워집니다.
FAQ
Q. G코드와 M코드는 어떤 차이가 있나요?
G코드는 공구의 이동 경로와 좌표를 제어하고, M코드는 스핀들 회전, 절삭유, 공구교환, 프로그램 종료 같은 장비의 보조 기능을 제어합니다.
Q. NC코드와 G코드는 같은 말인가요?
완전히 같지는 않습니다. NC코드는 전체 프로그램 파일을 넓게 부르는 말이고, 그 안에 G코드와 M코드가 함께 들어갑니다. 다만 현장에서는 비슷한 의미로 섞어서 말하는 경우도 많습니다.
Q. CNC 초보자는 어떤 코드부터 먼저 외우는 게 좋나요?
G00, G01, G02, G03, G17, G21, G54, G90과 M03, M05, M06, M08, M09, M30부터 먼저 익히는 편이 좋습니다. 이 정도만 알아도 기본 프로그램 구조를 읽는 데 큰 도움이 됩니다.
Q. G00과 G01은 왜 구분해야 하나요?
G00은 급속이송이라 빠르게 이동만 할 때 쓰고, G01은 이송속도를 적용해 실제로 절삭할 때 씁니다. 이 둘을 헷갈리면 공구 움직임을 잘못 해석하기 쉽습니다.
Q. G02와 G03이 자꾸 헷갈립니다.
G02는 시계 방향 원호, G03은 반시계 방향 원호입니다. 시작점과 끝점, 그리고 원 중심 위치인 I와 J 값을 함께 보면서 익히면 이해가 빠릅니다.
Q. CAM이 코드를 자동 생성해주면 G코드와 M코드를 몰라도 되나요?
기본 구조는 알고 있는 편이 좋습니다. 자동 생성된 코드라도 원점, 공구 번호, 스핀들 회전, 절삭유, 종료 구간 정도는 읽을 수 있어야 오류를 빨리 찾을 수 있습니다.
Q. M03과 M05는 무엇을 뜻하나요?
M03은 스핀들을 정회전시키는 명령이고, M05는 스핀들을 정지시키는 명령입니다. CNC 프로그램에서 매우 자주 나오는 기본 M코드입니다.
Q. 드릴링 작업에서 G80은 왜 중요한가요?
G80은 고정 싸이클 해제 명령입니다. G81, G83 같은 드릴링 싸이클 뒤에 G80을 넣지 않으면 다음 줄에서 예상하지 못한 동작이 나올 수 있습니다.
'3D 2D 디자인' 카테고리의 다른 글
| 창의력과 흑백논리 융합 - 디자이너 시선에서 바라본 두 사고방식 시너지 (0) | 2025.04.07 |
|---|---|
| 제조업 월가절감 및 효율적인 설비 가동율 생산관리 방법 (0) | 2025.02.03 |
| 나일론6 및 나일론66 차이점? 아세톤 비교 종류 특징 (0) | 2025.01.23 |