딱지 지도 — 지금 여기
- 컴퓨터 안에서 누가 일하고, 어디에 재료를 펼치는지 말해 봐요.
- C 코드는 번역(빌드)을 거친 다음에 실행된다는 것을 말해 봐요.
- OnlineGDB에서 코드 쓰기 → Run → 결과 확인을 한 바퀴 돌고, 빌드 오류가 나면 줄 번호를 찾아 고쳐요.
안녕하세요가 나타나요.프로그래밍을 처음 배우는 날에는 잘하는 것보다 한 번 끝까지 해 보는 것이 중요해요. 오늘은 C로 쓴 짧은 글을 컴퓨터에게 건네고, 화면에 글자가 나타나는 것을 내 눈으로 보는 날이에요.
C에는 실행하기 전에 꼭 거치는 단계가 하나 있어요. 번역이에요. 오늘은 그 번역이 성공하는 것도, 실패하는 것도 한 번씩 겪어 봐요.
오늘 뗄 딱지는 세 장이에요.
- 컴퓨터 안에서 누가 일하고, 어디에 재료를 펼치는지 말해 봐요.
- C 코드는 번역(빌드)을 거친 다음에 실행된다는 것을 말해 봐요.
- OnlineGDB에서 코드 쓰기 → Run → 결과 확인을 한 바퀴 돌고, 빌드 오류가 나면 줄 번호를 찾아 고쳐요.
오늘의 도착점: 화면에 안녕하세요가 나타나요. 그리고 일부러 낸 오류를 내 손으로 고쳐서 다시 안녕하세요를 봐요. 코드 여섯 줄의 뜻은 1강에서 한 줄씩 풀어요.
날짜: 내 이름:
main.c처럼 .c로 끝나요‘컴파일’이라는 말도 자주 들을 거예요. 컴파일은 번역하는 과정이고, 빌드는 번역한 뒤 필요한 기능을 연결해 실행 파일을 완성하는 과정까지 포함해요. 오늘은 Run 버튼이 둘 다 해 줘요. 오늘 손으로 할 일은 Run 한 번이에요.
카드를 가리고 말해 보세요.
- 사람이 C로 적은 글은 예요.
- 그 글을 번역하고 연결해 실행 파일을 완성하는 일은 예요.
- 번역을 멈추게 하는 문제는 , 번역은 되지만 조심하라는 알림은 예요.
정답은 소스 코드, 빌드, 오류, 경고예요. 오늘은 빌드와 실행이 다른 단계라는 것만 또렷하면 돼요.
왕두목 샘하고 달걀 요리를 한다고 생각해 볼까요? 보관장에서 달걀을 꺼내 조리대에 놓아요. 요리사는 레시피를 보고 요리해요. 다 된 음식은 식탁으로 나와요.
컴퓨터도 이렇게 역할을 나누어 보면 덜 어려워요.
| 부엌에서 | 컴퓨터에서 | 하는 일 |
|---|---|---|
| 요리사 | CPU(씨피유) | 명령에 따라 계산하고 일을 처리해요 |
| 조리대 | 메모리(RAM, 램) | 지금 쓰는 명령과 데이터를 잠시 펼쳐 두어요 |
| 재료 보관장 | 저장장치(SSD 등) | 파일과 프로그램을 오래 보관해요 |
| 레시피 | 프로그램 | 할 일을 정해진 순서와 규칙으로 적어 놓아요 |
| 식탁 | 결과 화면 | 처리한 결과를 사람이 확인해요 |
CPU는 일하는 담당, 메모리는 지금 작업하는 자리, 저장장치는 나중에도 꺼내 쓸 것을 두는 자리예요. 오늘은 철자 시험이 아니니 이 세 뜻만 가져가세요.
그런데 이 부엌의 요리사는 외국인이에요. 솜씨는 좋은데 우리가 쓴 C 레시피를 그대로 읽지 못해요. 요리사가 읽을 수 있는 말로 된 레시피만 따라 해요.
그래서 중간에 번역가가 있어요. 우리가 레시피를 다 써서 넘기면, 번역가가 처음부터 끝까지 읽고 번역본을 만들어요. 요리사는 그 번역본을 보고 요리해요.
| 부엌에서 | C에서 | 하는 일 |
|---|---|---|
| 우리가 쓴 레시피 | 소스 코드(main.c) | 할 일을 C의 규칙대로 적어요 |
| 번역가 | 컴파일러 | 소스 코드를 통째로 읽고 번역해요 |
| 번역본 | 실행 파일 | CPU가 실행할 수 있는 형태예요 |
번역가에게는 고집이 하나 있어요. 레시피에 문법이 틀린 문장이 하나라도 있으면 번역본을 만들지 않아요. 대신 ‘4번째 줄 끝에 마침표가 없어요’ 같은 메모를 돌려줘요. 그 메모가 바로 오류 메시지예요. 메모를 보고 고쳐서 다시 넘기면, 그때 번역본이 생기고 요리가 시작돼요.
비유에는 한계가 있어요. 실제 컴퓨터 안에 요리사나 번역가가 있지는 않아요. 그리고 컴파일러는 사람처럼 뜻을 짐작해 고쳐 주지 않아요. 규칙에 맞지 않으면 멈출 뿐이에요. 그래서 기호 하나까지 정확히 적어야 해요.
한번 짚어 볼까요? 레시피 넷째 줄에 마침표가 빠졌어요. 요리사는 첫째 줄 요리라도 시작할까요? 아니에요. 이번 레시피로 된 새 번역본이 생기지 않았으니, 요리사는 이번 레시피의 요리를 시작하지 못해요.
그림을 손가락으로 따라가 보세요. 소스 코드는 처음에 저장장치에 파일로 있어요. 컴파일러가 그 파일을 읽어 실행 파일을 만들어요. 실행할 때가 되면 실행 파일이 메모리에 올라가고, CPU가 그 안의 명령을 하나씩 처리해요. 처리 결과로 글자가 화면에 나타나요.
보통 메모리에 펼쳐 둔 것은 전원이 꺼지면 사라지고, 저장장치에 저장한 파일은 전원을 껐다 켜도 남아요. 그래서 작업하다가 ‘저장’을 하는 거예요.
오늘 쓸 OnlineGDB 같은 온라인 실행기에서는 이 모든 일이 내 컴퓨터가 아니라 사이트의 컴퓨터에서 일어나요. 우리는 브라우저로 코드를 보내고 결과만 받아 보는 거예요. 그래서 설치할 것이 없어요. 다만 사이트에 쓴 코드가 자동으로 보관되는지는 사이트마다 달라요. 오늘 쓴 코드는 공책에도 적어 두면 안심이에요.
브라우저(크롬이나 엣지 같은 인터넷 보는 프로그램)를 열고, 맨 위 주소 칸에 아래 주소를 적어요. 검색창이 아니라 주소를 적는 긴 칸이에요.
주소: https://www.onlinegdb.com/online_c_compiler
사이트의 배치나 안내 문구는 바뀔 수 있어요. 버튼 위치를 외우지 말고 언어 선택 칸·편집 영역·Run·결과 영역이라는 역할을 찾아 주세요. 회원가입이나 결제 화면으로 들어갈 필요는 없어요.

전체 화면은 이렇게 생겼어요. 이제 글자를 읽어야 하는 곳만 크게 확대해서 볼게요.
편집 영역 바로 위 줄에 단추가 나란히 있어요. 왼쪽부터 초록 Run, Debug, Stop, Share, Save, Beautify예요.

오늘 누를 단추는 초록 Run 하나예요. Run 바로 옆의 작은 ▼는 누르지 않아요. Stop은 평소에는 위 그림처럼 흐린 분홍색이에요. 프로그램이 실행되는 동안에만 아래 그림처럼 진한 빨강으로 켜지고, 그동안 Save·Beautify는 흐려져요.

오늘 예제는 눈 깜짝할 새 끝나서 Stop을 쓸 일이 없어요. 끝나지 않는 반복을 배우는 5강에서 다시 만나요.
1. 언어가 C인지 확인해요
오른쪽 위 Language 옆 칸에 C가 보이면 그대로 둬요. 처음 열면 보통 C로 되어 있어요.

C++나 Python 3처럼 다른 언어가 보이면 그 칸을 눌러 목록을 열고, 맨 위 -- select -- 바로 아래의 C를 골라요. 목록에는 C++, C++ 14, C (TurboC)처럼 이름이 비슷한 항목이 많아요. 우리가 쓸 것은 꾸밈말 없이 딱 C 한 글자예요.

2. 편집 영역을 비우고 코드를 넣어요
처음에는 사이트가 넣어 둔 예제 코드(영어 안내와 Hello World)가 들어 있어요. 편집 영역 안을 한 번 클릭하고, Windows는 Ctrl+A, Mac은 Command(⌘)+A로 전체 선택해요. 코드 부분만 파랗게 선택됐는지 확인한 뒤 Delete 키로 지워요. 화면 전체가 선택됐다면 편집 영역을 다시 클릭하고 해 보세요. 그리고 아래 여섯 줄을 넣어요. 빈 줄도 그대로예요. 오늘은 뜻을 몰라도 괜찮아요. 똑같이 따라 쓰는 것이 오늘 할 일이에요.
#include <stdio.h> int main(void) { printf("안녕하세요\n"); return 0;}
안녕하세요
복사해서 넣어도 괜찮아요. 직접 칠 때는 이 세 가지만 챙겨요.
- 영어 소문자로 써요. 한글 입력 상태라면 한/영 키로 영어로 바꿔요.
- 따옴표는 키보드의 반듯한 큰따옴표
"를 써요. 줄 끝의;(세미콜론)도 빠뜨리지 않아요. \n은 역슬래시 키 다음에 소문자 n이에요. 한국어 키보드에서는 역슬래시 키에 원화(₩) 모양이 그려져 있고, 글꼴에 따라 화면에 ₩로 보이기도 해요. 그 키로 친 글자는 역슬래시라서 괜찮아요. 다만 문서에서 원화 기호를 복사해 오지는 말아요.
편집 영역은 여는 괄호나 따옴표를 치면 닫는 짝을 저절로 하나 더 넣어 주기도 해요. 그럴 때 닫는 짝을 또 치면 두 개가 돼요. 다 친 뒤에 책의 코드와 짝을 하나씩 대조해요. 제대로 넣었다면 편집 영역이 아래처럼 보여요. 왼쪽 줄 번호가 1부터 6까지 있고, 넷째 줄 끝에 ;가 있어요.

3. Run을 한 번 눌러요
Run은 ‘빌드하고 실행해 줘’라는 부탁이에요. 한 번 누르고 잠깐 기다려요. 느리다고 여러 번 연달아 누르지 않아요.
4. 결과 영역을 봐요

결과 영역에 안녕하세요가 보이면 빌드도, 실행도 성공한 거예요. 그 아래에는 빈 줄 하나를 두고 초록색 글 두 줄이 붙어요.
...Program finished with exit code 0 Press ENTER to exit console.
이 두 줄은 내 코드가 아니라 사이트가 덧붙이는 안내예요. ‘프로그램이 끝났어요(끝낼 때 돌려준 값은 0)’, ‘엔터를 누르면 결과 창을 닫아요’라는 뜻이에요. 내 코드가 출력한 글은 흰색 안녕하세요 한 줄뿐이에요. 둘을 나누어 보세요.
여섯 줄 중에서 화면에 나온 글은 넷째 줄의 큰따옴표 안쪽이에요. 오늘은 이것만 짚고 가요.
넷째 줄을 손가락으로 짚어 가며 세 가지만 확인해요.
printf는 글을 화면에 내보내는 일을 맡은 도구의 이름이에요. 프로그래밍에서는 이런 도구를 함수라고 불러요.- 이름 바로 뒤의 소괄호
( )안은 그 도구에 건넬 내용을 적는 자리예요. - 큰따옴표
" "는 ‘여기부터 여기까지가 글자 내용’이라는 표시예요. 그래서 따옴표는 화면에 나오지 않고, 그 안의안녕하세요만 나와요.
끝에 붙은 \n과 ;, 그리고 나머지 다섯 줄이 하는 일은 1강에서 조각조각 나눠 읽어요.
5. 오늘 한 일을 말해 봐요
“코드를 적었어요. Run을 눌러 빌드하고 실행했어요. 결과 영역에서 결과를 확인했어요.” 이 세 문장을 소리 내어 말하면 한 바퀴를 돈 거예요.
예제 2 · 일부러 한 번 틀려 봐요
이번에는 오류를 일부러 만들어요. 넷째 줄 끝의 ;만 지우고 Run을 눌러요. 나머지는 그대로예요.
#include <stdio.h> int main(void) { printf("안녕하세요\n") return 0;}
main.c: In function ‘main’:
main.c:4:27: error: expected ‘;’ before ‘return’
4 | printf("안녕하세요\n")
| ^
| ;
5 | return 0;
| ~~~~~~
결과 영역 맨 위에 빨간 글씨로 Compilation failed due to following error(s).가 나와요. ‘아래 오류 때문에 번역(컴파일)에 실패했어요’라는 사이트 안내예요. 그 아래에 빌드 메시지가 이어져요(결과 영역 위쪽 탭이 stderr로 바뀌어 있어요).
영어가 쏟아져서 놀라셨지요? 전부 읽지 않아도 돼요. error라는 말이 들어 있는 첫 줄만 봐요.
| 조각 | 읽는 법 |
|---|---|
main.c | 문제가 있는 파일 이름 |
4 | 4번째 줄 |
27 | 그 줄에서 몇 번째 자리쯤인지(한글은 한 글자가 여러 자리로 세어져요) |
error | 번역을 멈춘 문제 |
expected ‘;’ before ‘return’ | ‘return 앞에 ;가 있어야 해요’ |
메시지 아래쪽 그림도 도움을 줘요. 4번째 줄 끝을 ^로 가리키고, 그 밑에 ;를 넣으라고 보여 주지요.
재미있는 점이 하나 있어요. 컴파일러는 5번째 줄의 return을 읽고 나서야 ‘앞 문장이 안 끝났네’ 하고 알아채요. 그래서 오류 위치가 빠진 곳 바로 다음을 가리키는 일이 많아요. 표시된 줄과 그 바로 앞 줄을 함께 보는 습관을 들여요.
이제 ;를 다시 넣고 Run을 눌러요. 결과 영역에 다시 안녕하세요가 나오면 오늘의 도착점에 닿은 거예요.
추적표는 어려운 검사표가 아니에요. 내가 한 일과 그다음 달라진 것을 차례로 적는 표예요. C에서는 빌드가 성공했는지를 꼭 한 줄 적어요. 아직 실행하지 않았다면 빈칸으로 두어요.
| 차례 | 내가 한 일 | 확인할 곳 | 확인한 내용 |
|---|---|---|---|
| 1 | 여섯 줄을 넣었어요 | 편집 영역 | 넷째 줄 printf("안녕하세요\n"); |
| 2 | Run을 한 번 눌렀어요 | 결과 영역 | 빌드를 요청했어요 |
| 3 | 빌드 결과를 봤어요 | 결과 영역 | error 없음 → 성공 |
| 4 | 실행 결과를 읽었어요 | 결과 영역 | 안녕하세요 |
이번에는 예제 2를 내 화면을 보고 적어요.
| 내가 확인할 것 | 내 기록 |
|---|---|
| 지운 기호와 줄 | |
| 첫 error 줄의 줄 번호 | |
| 실행까지 갔나요? | 갔어요 빌드에서 멈췄어요 |
| 고친 뒤 다시 Run한 결과 |
대조 답: 넷째 줄 끝의 ;를 지웠어요. 첫 error 줄은 4번째 줄을 가리켜요. 빌드에서 멈췄기 때문에 실행은 되지 않았어요. 고친 뒤에는 안녕하세요가 나와요.
막혔을 때는 이것부터 봐요
| 지금 보이는 상황 | 먼저 할 일 |
|---|---|
| 아무 결과도 안 보여요 | Run을 눌렀는지, 결과 영역을 보고 있는지 확인해요 |
| 실행이 끝나지 않고 글이 계속 나와요 | 빨갛게 켜진 Stop을 눌러요. 이 사이트는 저절로 멈추지 않아요. 바로 옆 Share를 잘못 누르지 않게 조심해요 |
| error라는 말이 보여요 | 첫 error 줄의 줄 번호와 그 앞 줄을 책과 기호까지 대조해요 |
| 언어가 C++나 다른 언어로 되어 있어요 | 언어 선택 칸을 C로 바꾸고 다시 Run해요 |
| 사이트 자체가 안 열려요 | 인터넷 연결과 주소를 확인해요. 코드 오류와는 다른 문제예요 |
도움을 구할 때는 입력한 코드와 오류 메시지 첫 줄을 함께 보여 주면 좋아요. 이름·연락처 같은 개인정보는 가려 주세요.
먼저 앞쪽을 가려요. 바로 떠오르지 않아도 한 번 생각해 보는 것이 연습이에요.
연습 1. 순서를 써요.
코드 쓰기 → → 실행하기 → 결과 확인하기
연습 2. 역할을 이어요.
- CPU → (일을 처리해요 / 파일을 오래 보관해요)
- 메모리 → (지금 작업하는 자리예요 / 종이에 결과를 인쇄해요)
- 컴파일러 → (소스 코드를 번역해요 / 오류를 짐작해서 고쳐 줘요)
- 실행 파일 → (번역이 끝나서 생긴 결과물이에요 / 사람이 처음 적은 글이에요)
연습 3. 오류 메시지에서 줄 번호를 찾아요.
아래는 다른 코드에서 나온 실제 빌드 메시지의 첫 error 줄이에요.
main.c:5:13: error: expected ‘;’ before ‘}’ token
몇 번째 줄을 먼저 봐야 할까요? 번째 줄 빠진 기호는?
연습 4. 빈칸을 채워요.
종이에 쓰는 연습 틀이에요. 대괄호와 번호는 실행기에 넣지 않아요.
①("안녕하세요\n");
①에 쓸 말:
연습 5. 여섯 줄을 보고 따라 써요.
오늘은 외우지 않아도 돼요. 앞의 첫 실행 코드를 보면서 종이에 한 번 따라 쓰고, 그다음 실행기에 직접 쳐서 Run해 보세요. 손으로 한 번 써 본 코드는 1강에서 훨씬 빨리 읽혀요.
스스로 대조하는 답
연습 1은 ‘빌드(번역)하기’예요. 연습 2는 ‘일을 처리해요 / 지금 작업하는 자리예요 / 소스 코드를 번역해요 / 번역이 끝나서 생긴 결과물이에요’예요. 연습 3은 5번째 줄, 빠진 기호는 ;예요. 메시지는 } 앞을 가리키지만 실제로 빠진 곳은 5번째 줄 끝이에요. 연습 4는 printf예요.
연습 3의 메시지는 아래 코드에서 나왔어요. 5번째 줄 return 0 뒤에 ;가 빠져 있어요.
#include <stdio.h> int main(void) { printf("Hello\n"); return 0}
main.c: In function ‘main’:
main.c:5:13: error: expected ‘;’ before ‘}’ token
5 | return 0
| ^
| ;
6 | }
| ~OnlineGDB 결과 영역에서는 이렇게 보여요.

;를 넣어 고친 코드예요. 실행하면 Hello가 나와요.
#include <stdio.h> int main(void) { printf("Hello\n"); return 0;}
Hello
내가 빠뜨렸던 것 한 가지:
학습용 창작 문항이에요. 실제 기출문제를 인용한 것은 아니에요.
문제. C 프로그램에 대한 설명으로 가장 알맞은 것은 무엇인가요?
내가 고른 답: 이유:
정답먼저 풀고 눌러서 펼쳐 보세요
해설: 컴파일러는 번역가예요. 소스 코드를 번역해요. ①은 빌드와 실행을 섞었어요. 빌드가 실패하면 이번 코드로 새 실행 파일을 완성하지 못하니, 이번 코드의 첫 줄도 실행되지 않아요. ③은 순서가 거꾸로예요. 첫 error 줄부터 고쳐요. ④는 지나친 믿음이에요. 경고가 없어도 내가 원하는 결과가 아닐 수 있어요. 결과는 실제 실행으로 대조해요.
딱지 떼기
도장
- CPU·메모리·저장장치를 요리사·조리대·보관장으로 나누어 말할 수 있어요.
- 소스 코드, 빌드(컴파일), 실행 파일을 순서대로 말할 수 있어요.
- Run 한 번에 빌드와 실행이 이어서 일어난다는 것을 알아요.
- OnlineGDB에서 언어 선택 칸·편집 영역·Run·결과 영역을 찾았어요.
- 여섯 줄을 실행하고
안녕하세요를 내 눈으로 확인했어요. - 일부러 낸 오류에서 첫 error 줄의 줄 번호를 읽고, 고친 뒤 다시 Run했어요.
아직 실행하지 못했다면 해당 칸은 비워 두세요. 나중에 실행하고 체크하면 돼요. 다음에 할 일을 남겨 둔 표시예요.
오늘 내가 뗀 딱지: 다시 볼 곳: