CNC 프로그래밍 마스터: 언어 구조, G/M코드, 레터 어드레스 완전 정복
학습 목표
이 단원을 완료하면 다음을 수행할 수 있습니다:
- CNC 프로그램 명령 리스트(Instruction List) 파악하기
- 프로그램 포맷(Program Format) 이해하기
- 레터 어드레스 명령 코드(Letter Address Commands Codes) 설명하기
- 특수 문자 코드 정의(Special Character Code Definitions) 이해하기
- G코드와 M코드(G & M Codes) 이해하기
CNC 프로그램은 작성 순서대로 명령 수행. 책 읽듯 왼쪽→오른쪽, 위→아래. 각 문장은 별도 줄(Block)에 작성. 블록들은 안전성, 예측 가능성, 가독성 증진을 위해 표준 구조에 따라 배열. 표준 프로그램 구조 준수 중요.
블록 표준 배열 순서
- 프로그램 시작(Program Start)
- 공구 로드(Load Tool)
- 스핀들 온(Spindle On)
- 쿨런트 온(Coolant On)
- 공작물 위 안전 위치로 급이동(Rapid to Position Above Part)
- 가공 작업(Machining Operation)
- 쿨런트 오프(Coolant Off)
- 스핀들 오프(Spindle Off)
- 안전 위치로 이동(Move to Safe Position)
- 프로그램 종료(End Program)
위는 1공구·1가공 최단 프로그램 구조. 다공구 프로그램은 2~9단계 반복.
Table 3, Table 4(G & M Codes 섹션)에 가장 흔한 G/M코드 정리. 가능하면 암기 권장.
어떤 언어든 규칙 존재. 예: 모달(Modal) 코드는 블록 간 변경 없으면 반복 불필요. 코드 의미가 사용 위치/방식 따라 달라지기도 함. 이 규칙들 본 단원 다루나 모든 뉘앙스 외울 필요 없음. CAD/CAM 소프트웨어 포스트 프로세서(Post Processor)가 CNC 프로그램을 올바르게 포맷·작성하는 역할 담당.
프로그램 포맷(Program Format)
Table 1 프로그램: 사각 윤곽 가공 + 구멍 드릴링.
| 블록(Block) | 설명(Description) | 목적(Purpose) |
% O1234 (T1 0.25 END MILL) G17 G20 G40 G49 G80 G90 |
프로그램 시작. 프로그램 번호(이름). 운영자용 공구 설명. 안전 블록: 기계 안전 모드 강제. |
프로그램 시작 |
T1 M6 S9200 M3 |
공구 1번 로드. 스핀들 9200 RPM, 정회전(CW). |
공구 교환 |
G54 M8 G00 X-0.025 Y-0.275 G43 Z1. H1 Z0.1 G01 Z-0.1 F18. |
지그 오프셋 1번 사용. 쿨런트 온. 공작물 위 급이동. 안전 평면 급이동, 공구 길이 오프셋 1번 적용. 피드 평면 급이동. 절삭 깊이 -0.1까지 직선 이송, 18 IPM. |
위치 이동 |
G41 Y0.1 D1 F36. Y2.025 X2.025 Y-0.025 X-0.025 G40 X-0.4 G00 Z1. |
커터 직경 보상(CDC) 좌측, 리드인, 지름 오프셋 1번, 36 IPM. 직선 이동. 직선 이동. 직선 이동. 직선 이동. CDC 해제 + 리드아웃 이동. 안전 평면 급이동. |
윤곽 가공 |
M5 M9 (T2 0.25 DRILL) T2 M6 S3820 M3 |
스핀들 오프. 쿨런트 오프. 공구 설명. 공구 2번 로드. 스핀들 3820 RPM, 정회전. |
공구 교환 |
M8 X1. Y1. G43 Z1. H2 Z0.25 |
쿨런트 온. 구멍 위 급이동. 안전 평면 급이동, TLO 2번. 피드 평면 급이동. |
위치 이동 |
G98 G81 Z-0.325 R0.1 F12. G80 Z1. |
드릴 사이클(캔드 사이클), 깊이 Z-0.325, F12. 드릴 사이클 취소. 안전 평면 급이동. |
드릴링 |
M5 M9 G91 G28 Z0 G91 G28 X0 Y0 G90 M30 % |
스핀들 오프. 쿨런트 오프. 기계 홈 Z 복귀. 기계 홈 XY 복귀. 절대 좌표 모드 복구(안전). 프로그램 처음으로 리셋. 프로그램 끝. |
프로그램 종료 |
레터 어드레스 명령 코드(Letter Address Commands Codes)
명령 블록은 레터 어드레스 명령으로 기계 제어. 일부는 중복 사용되며 동일 블록 내 G코드에 따라 의미 변경.
코드는 모달(Modal)(취소/변경 전까지 유지) 또는 비모달(Non-modal)(해당 블록만 유효). 많은 레터 어드레스가 논리적 선택(T=Tool, S=Spindle, F=Feed Rate 등).
가장 흔한 레터 어드레스 코드 표(Table 2):
| 변수 | 설명 | 정의/예시 |
| A | A축 절대/증분 위치 (X축 회전 4/5축) | A,B,C = 4/5축 회전 운동. X,Y,Z축 회전각. 도(°) 단위, 소수점 3자리. G01 A45.325 B90. |
| B | B축 절대/증분 위치 (Y축 회전) | A와 동일 |
| C | C축 절대/증분 위치 (Z축 회전) | B와 동일 |
| D | 커터 보상용 직경/반경 오프셋 정의 | 공구 직경 마모/휘어짐 보상. 공구 번호와 동일 정수 사용(T5→D5). 소수점 없음. G41/G42와 XY이동 시만 사용(아크 안됨). 호출 시 레지스터 값만큼 좌측(G41) 또는 우측(G42) 경로 오프셋. G01 G41 X2. D1 |
| E | 선반 나사 가공용 정밀 이송률 | - |
| F | 이송률(Feed Rate) 정의 | 직선/아크/드릴 사이클 가공 이송률. 인치/분(G94) 또는 역시간(G93). 소수점 3자리, 소수점 필수. G01 X2. Y0. F30. |
| G | 준비 기능(Preparatory Commands) 주소 | 원하는 운동 종류(급이동, 직선이송, 원호이송, 고정 사이클 등) 또는 오프셋 값 지정. G02 X2. Y2. I.5 J0. |
| H | 공구 길이 오프셋(TLO) 정의; C축 대응 증분축(턴밀 등) | 제어기 TLO 레지스터 호출. TLO+지그오프셋Z로 공구-부품 데이터 관계 파악. 정수 수반(H1,H2...), G43, Z좌표 동반. G43 H1 Z2. |
| I | G02/G03 원호 X축 중심 거리; 일부 고정사이클 파라미터 | 원호 이동 시 시작점에서 원호 중심까지 X증분거리. 일부 드릴 사이클 선택 파라미터. G02 X.5 Y2.5 I0. J0.25 |
| J | G02/G03 원호 Y축 중심 거리; 일부 고정사이클 파라미터 | 원호 이동 시 시작점에서 원호 중심까지 Y증분거리. G02 X.5 Y2.5 I0. J0.25 |
| K | G02/G03 원호 Z축 중심 거리; 일부 고정사이클 파라미터, L주소와 동일 | 원호 이동 시 Z증분거리. G17 평면에서 나선 가공 Z증분. G18 G03 X.3 Z2.5 I0. K0.25 |
| L | 고정사이클 반복 횟수; G10 레지스터 지정 | 고정사이클 위치당 반복 횟수(기본 1). K주소 대체 사용도. 증분 위치(G91)에서 등간격 구멍 시리즈를 루프로 프로그래밍 가능. G10용: 편집할 레지스터 지정(워크오프셋, 공구반경/길이 오프셋 등). |
| M | 보조 기능(Miscellaneous Function) | 의미 결정 정수 수반. 블록당 1개 M코드만 허용. 확장 정의 추후. M08 |
| N | 프로그램 블록 번호; G10 시스템 파라미터 번호 | 가독성 향상. 서브프로그램 없는 CAD/CAM 생성 프로그램엔 잘 안씀. 제어기 메모리 절약 위해 3D프로그램 대부분 블록번호 생략. 정수 5자리까지, 소수점 없음. %(테이프시작/끝) 앞, 주석만 블록 앞엔 안나옴. N100 T02 M06 |
| O | 프로그램 이름(Program Name) | 제어기 저장용 프로그램 번호. O로 시작, 소수점 없는 정수. O1234 (Exercise 1) |
| P | 다양한 G/M코드 파라미터 주소 | 체류 시간(Dwell) 초 단위. G4 동반 시 또는 일부 드릴 사이클 내. G4 P.1 |
| Q | 캔드 사이클 펙 증가량(Peck Increment) | 펙 드릴 사이클 패스당 증분 이송거리. G83 X2. Y2. Z-.625 F20. R.2 Q.2 P9. |
| R | 원호 반경 정의 또는 캔드 사이클 복귀 높이 | 원호는 R 또는 I,J,K 벡터로 정의. IJK가 R보다 신뢰성 높아 권장. 드릴 사이클에서 리턴 플레인 Z값. G83 Z-.625 F20. R.2 Q.2 P9. |
| S | 속도 정의(스핀들 RPM 또는 면속도) | 스핀들 분당 회전수(RPM). 정수, 소수점 없음. M03(CW) 또는 M04(CCW)와 동반. S2500 M03 |
| T | 공구 선택(Tool Selection) | 공구 선택. 정수, M06(공구교환) 동반. T01 M06 |
| U | X축 대응 증분축(선반 A그룹); 일부 기계 체류시간 | 이 제어기서 X/U가 G90/G91 대체. 선반에서 G90은 황삭 고정사이클 주소. |
| V | Y축 대응 증분축 | 2000년대 전까지 드물었음. Y축 없는 선반 많았음. 라이브 툴링/턴밀 확산으로 사용 증가. |
| W | Z축 대응 증분축(선반 A그룹) | Z/W가 G90/G91 대체. 선반에서 G90은 황삭 고정사이클. |
| X | X축 절대/증분 위치 | X축 좌표 데이터. 소수점 4자리까지, 후행 0 생략. 좌표 모달 → 변경 없으면 반복 불필요. G01 X2.250 F20. |
| Y | Y축 절대/증분 위치 | Y축 좌표 데이터. G01 Y2.250 F20. |
| Z | Z축 절대/증분 위치 | Z축 좌표 데이터. |
특수 문자 코드 정의(Special Character Code Definitions)
- % - 프로그램 시작/끝: 모든 프로그램 독립 블록으로 % 시작/끝. 테이프 리와인드 문자(종이 테이프 시절 유산).
- ( ) - 주석(Comments): 운영자용 주석, 대문자만, 괄호 내, 최대 40자.
(T02: 5/8 END MILL)
- / - 블록 삭제(Block Delete): 이 문자 뒤 코드, 제어기 블록 삭제 스위치 ON 시 무시.
/ M00
- ; - 블록 끝(End of Block): 텍스트 에디터서 안보임(캐리지 리턴). 기계 제어기 화면엔 매 블록 끝에 표시.
N8 Z0.750 ;
G코드와 M코드(G & M Codes)
CNC 프로그램 내용 대부분 구성. 각 코드 클래스 정의와 중요 코드별 의미 설명.
G코드 (G-Codes)
G로 시작하는 코드는 준비 기능(Preparatory Words). 기계 특정 운동 준비.
Table 3: 주요 G코드
| 코드 | 설명 |
| G00 | 급이동(Rapid Motion). 비절삭 이동 위치決め. |
| G01 | 지정 이송률 직선 운동(Linear Feed). |
| G02 | 시계 방향 원호(CW Arc). |
| G03 | 반시계 방향 원호(CCW Arc). |
| G04 | 체류(Dwell). |
| G28 | 기계 홈 위치 복귀(Return to Machine Home). |
| G40 | 커터 직경 보상(CDC) 해제. |
| G41 | 커터 직경 보상(CDC) 좌측(Left). |
| G42 | 커터 직경 보상(CDC) 우측(Right). |
| G43 | 공구 길이 오프셋(TLO) 적용. |
| G54 | 지그 오프셋 1번(Fixture Offset #1). |
| G55 | 지그 오프셋 2번. |
| G56 | 지그 오프셋 3번. |
| G57 | 지그 오프셋 4번. |
| G58 | 지그 오프셋 5번. |
| G59 | 지그 오프셋 6번. |
| G80 | 드릴 사이클 취소. |
| G81 | 단순 드릴 사이클. |
| G82 | 체류 포함 단순 드릴 사이클. |
| G83 | 펙 드릴 사이클(Peck Drilling). |
| G84 | 태핑 사이클(Tapping Cycle). |
| G90 | 절대 좌표 프로그래밍 모드. |
| G91 | 증분 좌표 프로그래밍 모드. |
| G98 | 드릴 사이클 초기점(R) 복귀. |
| G99 | 드릴 사이클 기준면(마지막 Z높이) 복귀. |
M코드 (M-Codes)
M으로 시작 = 보조 기능(Miscellaneous Words). 쿨런트, 스핀들 방향 등 기계 보조 기능 제어. 블록당 1개 M코드만 허용.
Table 4: 주요 M코드
| 코드 | 설명 |
| M00 | 프로그램 정지. 사이클 스타트 버튼으로 재개. |
| M01 | 선택 정지(Optional Stop). |
| M02 | 프로그램 끝(End of Program). |
| M03 | 스핀들 정회전(CW) 온. |
| M04 | 스핀들 역회전(CCW) 온. |
| M05 | 스핀들 정지. |
| M06 | 공구 교환(Change Tool). |
| M08 | 쿨런트 온. |
| M09 | 쿨런트 오프. |
| M30 | 프로그램 끝 + 사이클 스타트로 재실행. |
주요 G코드 상세 설명(Select G-Code Definitions - Expanded)
G00 - 급이동(Rapid Move)
기계가 최대한 빨리 지정점 이동 명령. 좌표 위치와 동반, 모달. G01과 달리 축 간 직선 보간 안함. 각 축 최대 속도 독립 이동 → Figure 18 같은 운동.
G00 X0. Y0.

Figure 1. G00 Motion
주의: 일부 기계 급이동 속도 1,000 IPM 초과 가능. 잘못된 오프셋/좌표 이동 시 운영자 비상정지 누르기 전 기계 충돌. 최초 프로그램 실행 시 급이동 오버라이드(Rapid Feed Override) 활용.
직선 운동(Linear Motion = Straight Line Motion)
G코드는 운동 제어. 부품 프로그램에서 가장 흔한 운동 = 직선/리니어 운동. 운동도 모달. G코드로 운동 종류 지시하면 변경 명령(G코드) 전까지 그 운동 유지.
- G00: 빠른 위치결정. 공구 공중 이동.
- G01: 느린 절삭 이송. 이송률 F코드 지정.
- F-word: "Feedrate"의 F.
- S-word: "Spindle Speed"의 S, 단위 RPM.
X, Y, Z로 직선 운동 지정
G00/G01 지정만으론 운동 발생 안함 → 운동 종류만 예고. 실제 이동 위해 목적지 X, Y, Z 지정 필요. 부품 원점 이동 예:
G00 X0 Y0 Z0 또는 느리게 G01 X0 Y0 Z0 F40.
한 줄에 다중 좌표 지정 = 보간 운동(Interpolated Motion). 여러 축 동시 이동. 제어기 각 축 적절 속도 조절로 공구 직선 경로 따라 이송률 유지.
좌표 여러 줄 분산 = 개별 이동:
G00 X0 Y0 (Z 고정 X0Y0 이동)
Z0 (X,Y 고정 Z0 이동)
G00/G01 모달 → 모드 변경 시만 재지정.
Z축 고려사항
보간 운동 개념은 Z축에 흥미로운 이슈 제기. 절삭 깊이 축(Z)을 X,Y와 보간 이동하지 않고 별도 이동하는 게 종종 유리. 공구 공작물/지그 접근 시 충돌 여부 판단 용이. X,Y 먼저 이동 후 Z 이동 → 우발적 충돌(클램프 등) 가능성 낮춤.
G02/G03 - 원호 운동(Circular Motion) 모드 개시
- G02: 시계 방향(CW) 원호 모드 설정.
- G03: 반시계 방향(CCW) 원호 모드 설정.
G02/G03 모드 설정 후 원호는 두 끝점(Endpoints)과 중심(Center)으로 정의. 중심은 양 끝점에서 등거리. 한 끝점 = 블록 시작 시 현재 제어점(Current Control Point). 다른 끝점 = XYZ 좌표 지정. 중심 주로 I, J, K로 시작점에서 중심까지 상대 벡터 지정.
시계 방향 원호 예시

Figure 2. An Arc's center with IJK
시작 X0Y2, 끝 X2Y0. 중심 X0Y0. G코드:
G02 (시계 방향 원호 모드)
X2 Y0 I0 J-2.0
반경 R로 중심 지정
원 반경 R 직접 지정 가능. 반경 2 → G02 X2 Y0 R2
※ IJK 벡터 방식 권장(R보다 신뢰성 높음).
G17/G18/G19 - 평면 지정(Plane Designation)
원호는 지정된 평면 상 존재: G17(XY), G18(XZ), G19(YZ). 기본값 G17.

Figure 3. Plane Designation
G40/G41/G42 - 커터 직경 보상(Cutter Diameter Compensation - CDC)
CDC는 정밀 CNC 가공 핵심. 공구 마모/휘어짐 보상 위해 프로그래밍 경로에서 좌측(G41) 또는 우측(G42) 이탈 명령. G40으로 보상 해제. 오프셋량은 CNC 제어기 D-레지스터 입력. 마모 레지스터 = 제어기 매 이동 참조 테이블.
Table 5: 직경 오프셋 레지스터(Diameter Offset Register)
| 공구 직경 오프셋 | 값 |
| D1 | 0.0125 |
| D2 | 0.0000 |
| D3 | 0.0000 |
| D4 | 0.0000 |
| D5 | 0.0000 |
| D6 | 0.0000 |
D-레지스터 값은 운영자가 완성 피처 치수 측정 → 도면 비교 → 차이 입력으로 부품 공차 내 유지. 편차 없으면 0.
예: G01 G41 D1 X1.0 Y.25 F40.
G43 - 공구 길이 보상(Tool Length Compensation)
G43 공구 길이 보상 활성화. 항상 H코드와 Z이동 동반. H = 읽을 TLO 레지스터, Z = 부품 데이터 기준 이동 높이.
TLO도 제어기 테이블 개념:
Table 6: 공구 길이 레지스터(Work Offsets)
| 공구 길이 레지스터 | Z값 |
| H1 | 10.236 |
| H2 | 4.7510 |
| H3 | 6.9652 |
| H4 | 7.6841 |
| H5 | 12.4483 |
| H6 | 8.2250 |
TLO + 활성 지그 오프셋 = 기계가 공구 팁 위치를 부품 데이터 기준 파악.
G43 H1 Z1.
G54 - 워크 오프셋(Work Offset)
워크 오프셋 = CNC 제어기 데이터 레지스터. 기계 홈 X,Y,Z에서 부품 데이터까지 거리 저장. 제어기 테이블 개념:
Table 7: 워크 오프셋(Work Offset)
| 워크 오프셋 | X | Y | Z |
| G54 | 14.2567 | 6.6597 | 0.0000 |
| G55 | 0.0000 | 0.0000 | 0.0000 |
| G56 | 0.0000 | 0.0000 | 0.0000 |
| G57 | 0.0000 | 0.0000 | 0.0000 |
| G58 | 0.0000 | 0.0000 | 0.0000 |
| G59 | 0.0000 | 0.0000 | 0.0000 |
팁: G54 보통 첫 가공 셋업용. 추가 오프셋으로 부품 타면 가공.
X,Y값 = 기계 홈→부품 데이터 XY 거리. Z값 = 공구 기준점(예: 1-2-3 블록 상단)~부품 Z-데이터 거리.
G54 X0. Y0.
단원 평가
- CNC 프로그램 명령 리스트 설명.
- 모든 CNC 프로그램 시작/끝 문자?
- 레터 어드레스 명령 코드 설명.
- 특수 문자 코드 3가지 나열.
- G코드와 M코드 설명.
G00 G90 G54 X0 Y0 의미 설명.
G00 G90 G43 H1 Z1. 의미 설명.
- G00과 G01 차이?
- G02와 G03 차이?
- F워드와 S워드 설명.