Step 32. MAC 주소와 ARP — 전선 위의 진짜 주소
Level 0 — 컴퓨터 조작과 구조의 이해 | 난이도 ★★★☆☆ | 예상 소요 시간 3시간
전제: Step 31(IP 주소) 완료. 윈도우 파워쉘에서 진행합니다. ping 실습 대상은 내 집 네트워크(게이트웨이와 내 기기)뿐입니다.
- 준비물: 윈도우 PC, 파워쉘.
- 주의: 오늘 실습은 조회와, 내 게이트웨이·내 기기로의 짧은 ping뿐이라 안전합니다. 남의 네트워크 주소를 향해 탐색성 명령을 쓰지 마세요 — 허락 없이 남의 집 초인종을 눌러 보는 것과 같습니다.
지난 챕터에서 우리는 주소(IP)를 배웠습니다. 그런데 이상한 점이 있습니다. 내 노트북이 같은 동네의 프린터에 데이터를 보낼 때, 그 데이터는 전선(또는 전파)을 타고 갑니다. 전선 위의 데이터 덩어리는 정말 "172.30.1.54에게"라고 적혀서 갈까요?
사실은 다릅니다. 전선 위의 세계에는 IP라는 이름이 없습니다. 거기서는 랜카드의 고유 번호, 즉 MAC 주소로 상대를 부릅니다. 그렇다면 컴퓨터는 IP밖에 모르는 상대의 MAC을 어떻게 알아낼까요? 그 다리가 오늘의 주인공 ARP입니다. 그리고 이 ARP에는 치명적인 성격이 하나 있습니다 — 너무 쉽게 믿는다는 것.
1. 학습 목표
이 챕터를 끝내면 다음을 할 수 있습니다:
- IP 주소와 MAC 주소의 차이를 세 가지 관점(누가 주나, 바뀌나, 어디서 쓰이나)으로 설명한다
- ARP의 3단계(요청 방송 → 응답 → 캐시 기록)를 그림으로 그린다
arp -a와Get-NetNeighbor의 출력을 읽고, 동적/정적 항목을 구분한다- ping 한 번 뒤에 ARP 명단이 어떻게 변하는지 실험으로 보여 준다
- ARP에 검증 절차가 없다는 점과, 그것이 왜 위험의 씨앗인지 설명한다
2. 배경 지식 — 오늘의 도구와 개념
오늘의 도구 한눈에 보기
| 구분 | 내용 |
|---|---|
| 언어·환경 | 파워쉘 5.1 (조회와 ping만, 일반 권한으로 충분) |
| 오늘의 명령어 | ipconfig /all(내 MAC 확인), arp -a(ARP 캐시), Get-NetNeighbor(이웃 명단), ping(통신 유도) |
| 필요한 개념 | MAC 주소, 브로드캐스트, ARP 요청/응답, ARP 캐시, OUI(제조사 번호) |
2-1. 두 개의 주소 — 왜 굳이 둘인가
- IP 주소: 논리적 주소. 동네(네트워크)마다 바뀝니다. 다른 네트워크에 연결하면 새로 받습니다. 넓은 세계(인터넷)에서 길을 찾는 용도입니다.
- MAC 주소(Media Access Control address): 물리적 주소. 랜카드에 새겨진 출생 번호입니다.
98-FD-B4-XX-XX-XX처럼 16진수 여섯 쌍(48비트)으로 생겼습니다.
MAC의 앞 세 쌍은 OUI(Organizationally Unique Identifier) — 제조사 번호입니다. 그래서 MAC 앞부분만 보고 "이건 리얼텍 랜카드네"를 알 수 있습니다. 뒤 세 쌍은 제조사가 붙이는 일련번호입니다.
IP가 "동네에서 빌린 주소"라면 MAC은 "랜카드의 출생 번호"입니다. 하나의 기기가 이 두 신분을 동시에 가지고 다니는 셈입니다.
2-2. ARP — 동네 방송으로 물어보기
내 컴퓨터가 172.30.1.254(공유기)에게 데이터를 보내고 싶습니다. 그런데 전선에는 MAC을 적어야 합니다. 모릅니다. 이때 컴퓨터가 하는 일이 ARP(Address Resolution Protocol)입니다:
- ARP 요청(방송): 동네 전체에 외칩니다. "172.30.1.254인 분, MAC 좀 알려주세요!" 이 외침은 동네 모두에게 갑니다(브로드캐스트 — Step 31의 그 특별 주소가 여기서 일합니다).
- ARP 응답: 172.30.1.254인 공유기가 대답합니다. "나야. 내 MAC은 60-29-d5-…야."
- 캐시에 기록: 내 컴퓨터는 "172.30.1.254 = 60-29-d5-…"를 메모장(ARP 캐시)에 적어 둡니다. 다음부터는 외칠 필요가 없습니다.
arp -a가 바로 그 메모장을 보여 주는 명령입니다.
2-3. 패킷의 겉봉투와 속편지 — 두 주소의 협업
데이터가 전선을 탈 때 실제로는 "봉투 안에 편지" 구조입니다. 겉봉투에는 MAC 주소가, 편지지에는 IP 주소가 적혀 있습니다.
[겉봉투: MAC] → 보낸이 MAC: 내 랜카드 / 받는이 MAC: 공유기
[속편지: IP] → 보낸이 IP: 172.30.1.54 / 받는이 IP: 142.251.118.101
주목할 점: 내가 먼 나라의 웹사이트에 접속해도, 겉봉투의 받는이 MAC은 그 사이트가 아니라 우리 동네의 문지방(공유기)입니다. 전선 위에서 내 데이터를 직접 받는 것은 공유기뿐이니까요. 공유기는 겉봉투를 뜯고, 속편지의 IP를 보고 다음 동네로 새 봉투를 씌워 보냅니다.
이 그림을 이해하면 "왜 같은 동네에서만 ARP가 필요한가"의 답이 나옵니다. 다른 동네의 MAC은 알 필요가 없습니다. 문지방의 MAC만 알면 되니까요.
2-4. ARP의 치명적 성격 — 검증이 없다
여기서 보안의 냄새를 맡으셔야 합니다. ARP에는 "대답한 쪽이 진짜 그 주소의 주인인지" 확인하는 절차가 없습니다. 동네에 "172.30.1.254가 누구야?"라고 외치면, 대답하는 목소리를 그냥 믿습니다. 모두가 선의로 움직이는 동네를 가정하고 설계된 규약이기 때문입니다.
만약 악의적인 누군가가 "내가 172.30.1.254야!"라고 대답하면? 동네의 데이터가 그에게로 흘러갑니다. 이것이 나중에 배울 ARP 스푸핑(spoofing, 속이기)의 원리입니다. 오늘은 "믿음의 구조"를 아는 것까지가 목표입니다.
검증이 없는 규약이 아직도 쓰이는 이유는 단순합니다. 빠르고 편하기 때문입니다. 설계자들은 속도를 택했고, 생긴 구멍은 현대의 네트워크 장비가 별도의 감시 기능으로 메웁니다. "원래 규약"과 "나중에 덧붙인 보강"의 관계는 보안의 거의 모든 주제에서 반복됩니다.
3. 따라 하기
3-1. 내 MAC 주소 확인
ipconfig /all
Ethernet adapter 이더넷:
Description . . . . . . . . . . . : Realtek USB GbE Family Controller
Physical Address. . . . . . . . . : 98-FD-B4-XX-XX-XX
IPv4 Address. . . . . . . . . . . : 172.30.1.54(Preferred)
(2026-09-09 실측. MAC의 뒷 세 쌍은 가렸습니다. 여러분의 값은 다릅니다.)
출력 읽는 법: Physical Address가 MAC입니다. 하이픈(-) 대신 콜론(:)으로 쓰는 운영체제도 있지만 같은 것입니다. 여러분의 두 주소 — IP(동네에서 빌린 주소)와 MAC(출생 번호) — 을 나란히 확인하세요. 앞 세 쌍 98-FD-B4를 인터넷에서 "OUI lookup"으로 검색하면 제조사가 나옵니다.
3-2. 이웃 명단 보기 — arp -a
arp -a
Interface: 172.30.1.54 --- 0x10
Internet Address Physical Address Type
172.30.1.6 a8-a1-59-XX-XX-XX dynamic
172.30.1.17 9c-6b-00-XX-XX-XX dynamic
172.30.1.35 a8-a1-59-XX-XX-XX dynamic
172.30.1.45 a8-a1-59-XX-XX-XX dynamic
172.30.1.53 a8-a1-59-XX-XX-XX dynamic
172.30.1.100 34-9f-7b-XX-XX-XX dynamic
172.30.1.254 60-29-d5-XX-XX-XX dynamic
172.30.1.255 ff-ff-ff-ff-ff-ff static
224.0.0.22 01-00-5e-XX-XX-XX static
(2026-09-09 실측. 일부 줄을 생략하고 MAC 뒷부분은 가렸습니다.)
출력 읽는 법: 내 컴퓨터가 "알고 있는" 이웃들의 IP↔MAC 대응표입니다. dynamic은 ARP로 알아낸 것, static은 원래 알고 있는 특수 주소들입니다. ff-ff-ff-ff-ff-ff는 "동네 전원"을 뜻하는 방송용 MAC이고, 01-00-5e-…로 시작하는 것들은 그룹 통신(멀티캐스트)용입니다.
실측에서 보이는 패턴: a8-a1-59로 시작하는 MAC이 네 대 — 같은 제조사의 기기가 여러 대 있다는 뜻입니다(스마트홈 기기가 같은 브랜드일 때 흔한 광경). 맨 아래의 172.30.1.254가 바로 우리 동네 문지방, 공유기입니다.
왜: 이 표가 "내 컴퓨터가 지금 믿고 있는 명단"입니다. 스푸핑 공격이 성공하면 이 표가 오염됩니다 — 정상과 오염을 구별하려면 평소의 표를 알아야 합니다. 평소 모습을 아는 것, 그것이 기준선입니다.
3-3. 같은 명단의 다른 얼굴 — Get-NetNeighbor
Get-NetNeighbor -AddressFamily IPv4 -State Reachable |
Select-Object IPAddress, LinkLayerAddress, State
IPAddress LinkLayerAddress State
--------- ---------------- -----
172.30.1.254 60-29-D5-XX-XX-XX Reachable
172.30.1.65 9C-6B-00-XX-XX-XX Reachable
172.30.1.45 A8-A1-59-XX-XX-XX Reachable
172.30.1.37 0C-7A-15-XX-XX-XX Reachable
172.30.1.17 9C-6B-00-XX-XX-XX Reachable
(2026-09-09 실측. MAC 뒷부분은 가렸습니다.)
출력 읽는 법: Get-NetNeighbor는 같은 메모장을 상태(state)와 함께 보여 줍니다. Reachable은 "최근에 대답이 있어서 연락 가능"이라는 뜻입니다. 맨 위 172.30.1.254 — 우리 동네 문지방(게이트웨이)이 지금 연락 가능 상태로 잡혀 있습니다. 이 밖에 Stale(기록은 있지만 확인한 지 오래됨), Permanent(영구 항목) 같은 상태도 있습니다.
명단이 비어 보이거나 적어도 고장이 아닙니다 — 오래 대화가 없으면 기록이 지워지기 때문입니다. 3-4절에서 바로 확인합니다.
3-4. ARP 실황 유도 — ping으로 대화 걸기
ping -n 2 172.30.1.254
Pinging 172.30.1.254 with 32 bytes of data:
Reply from 172.30.1.254: bytes=32 time<1ms TTL=64
Reply from 172.30.1.254: bytes=32 time<1ms TTL=64
(2026-09-09 실측. 주소는 여러분의 게이트웨이로 바꾸세요. 한글 윈도우에서는 "172.30.1.254의 응답: 바이트=32 …"처럼 한글로 나옵니다.)
출력 읽는 법: ping은 "거기 있어?"라고 묻는 명령입니다. time<1ms — 같은 동네라 1밀리초도 안 걸렸습니다. 이 통신이 일어나려면 내 컴퓨터는 공유기의 MAC을 알아야 했고, 몰랐다면 방금 ARP 외침과 대답이 오간 것입니다.
비교해 보세요 — 같은 날, 먼 곳으로 보낸 ping입니다:
ping -n 2 8.8.8.8
Reply from 8.8.8.8: bytes=32 time=33ms TTL=114
(2026-09-09 실측.)
같은 동네(0ms)와 인터넷 저편(33ms)의 시간 차이가 그대로 드러납니다. 그리고 이 먼 ping도 겉봉투는 공유기의 MAC으로 나갔습니다 — 8.8.8.8의 MAC을 아는 사람은 우리 동네에 아무도 없습니다.
3-5. 대답 없는 이웃 실험
이번엔 없는 번호로 대화를 걸어 봅니다. 같은 동네에서 아무 기기도 안 쓰는 주소 하나를 골라 ping 해 보세요 (실측에서는 172.30.1.200을 골랐습니다):
ping -n 1 172.30.1.200
Pinging 172.30.1.200 with 32 bytes of data:
Reply from 172.30.1.54: Destination host unreachable.
(2026-09-09 실측. 한글 윈도우에서는 "대상 호스트에 연결할 수 없습니다" 류로 나옵니다.)
출력 읽는 법: 응답자가 내 자신(172.30.1.54)인 것에 주목하세요. "상대가 거절했다"가 아니라, 내 컴퓨터가 "외쳤는데 아무도 대답하지 않아서 배달을 포기했다"고 스스로 보고한 것입니다. 즉 ARP 요청이 허공에 울린 상황입니다.
이어서 명단을 확인해 보세요:
arp -a | findstr 172.30.1.200
아무 줄도 안 나옵니다. 외쳤지만 대답이 없었으니 메모장에도 기록이 없습니다. 대화가 기록을 만든다 — 이것이 ARP 캐시의 본질입니다.
예측해 보기: 같은 동네의 실제로 켜져 있는 기기(스마트폰, 프린터 등)로 ping을 보내기 전과 후에
arp -a를 비교하면 어떤 변화가 생길까요? 예측하고 직접 해 보세요. (정답: 성공하면 새dynamic항목이 생깁니다. 몇 분~수십 분 뒤 다시 보면 사라져 있을 수도 있습니다 — 캐시는 오래되면 지워지는 게 정상입니다.)
3-6. 그림으로 정리하기
종이에 다음 순서를 화살표로 그려 보세요.
[내 PC] --(동네 전체에 외침)--> "172.30.1.254, MAC이 뭐야?"
[공유기] --(나에게만 대답)-----> "나야, 60-29-d5-…"
[내 PC] 메모장(ARP 캐시)에 기록 → 이후 통신은 그 MAC으로 직접
이 그림이 책을 안 보고 그려지면 ARP를 이해한 것입니다. 시험 삼아 소리 내어 설명해 보세요.
4. 미션과 연습문제
미션 — 우리 동네 첫 지도 그리기
ipconfig /all로 내 MAC과 내 IP를 확인하세요- 게이트웨이로 ping을 보낸 뒤
arp -a에서 게이트웨이의 MAC을 찾으세요 - 같은 동네의 켜져 있는 기기 하나(스마트폰 등)로 ping을 보내고, 명단에 새 항목이 생기는지 확인하세요
- 명단에 보이는 MAC 두세 개의 앞 세 쌍을 "OUI lookup"으로 검색해 제조사를 추정하세요
- 위 결과를
lan-map.txt에 정리하세요: 내 MAC, 내 IP, 게이트웨이 IP·MAC, 이웃 목록과 추정 제조사
연습문제
문제 1. IP 주소와 MAC 주소의 차이를 "누가 주나, 바뀌나, 어디서 쓰이나" 세 가지 관점으로 설명하세요.
문제 2. 내 컴퓨터가 같은 동네의 192.168.0.50에게 처음으로 데이터를 보낼 때 일어나는 일을 세 단계로 설명하세요.
문제 3. 먼 나라의 웹사이트에 접속할 때, 내 컴퓨터가 ARP로 알아내야 하는 MAC은 누구의 것이며, 그 이유는 무엇인가요?
문제 4. ARP의 구조적 약점(검증 없음)을 이용하면 공격자가 무엇을 할 수 있는지, 그리고 그 결과 피해자의 데이터가 어디로 흐르는지 설명하세요.
5. 모범 답안과 완료 기준
미션 모범 답안
실측 컴퓨터의 lan-map.txt 예 (2026-09-09, MAC 일부 가림):
내 IP: 172.30.1.54/24
내 MAC: 98-FD-B4-XX-XX-XX (앞 세 쌍 98-FD-B4 → OUI 검색하면 제조사 확인 가능)
게이트웨이: 172.30.1.254 → MAC 60-29-D5-XX-XX-XX (dynamic)
이웃들 (동적): 172.30.1.6, .35, .45, .53 (전부 a8-a1-59-…, 같은 제조사로 추정)
방송 주소: 172.30.1.255 → ff-ff-ff-ff-ff-ff (static, 정상)
검증하는 법: ① ping 전후로 arp -a를 비교해 새 dynamic 항목이 생겼는가. ② 게이트웨이의 IP-MAC 짝이 명단에 있는가. ③ 같은 MAC을 가진 서로 다른 IP 두 줄이 보이면 그때가 질문할 때입니다("한 기기가 두 주소인 척?") — 오늘의 정상 명단을 저장해 두면 비교 대상이 생깁니다.
한 줄이 안 생겼을 때: ping이 실패했다면(3-5절) 기록도 없는 게 정상입니다. ping 성공이 선행 조건입니다.
연습문제 해답
문제 1 해답. 누가 주나: IP는 네트워크(DHCP 서버, 보통 공유기)가 빌려 주고, MAC은 제조사가 칩에 새깁니다. 바뀌나: IP는 연결하는 동네마다 바뀌고, MAC은 원칙적으로 고정입니다(소프트웨어로 겉에 내는 값을 바꾸는 기능은 있습니다). 어디서 쓰이나: IP는 인터넷 전체의 길 찾기에, MAC은 같은 동네 안의 실제 배달에 쓰입니다.
문제 2 해답. ① 캐시 확인: ARP 메모장을 먼저 뒤집니다. 없으면 ② ARP 요청 방송: "192.168.0.50, MAC이 뭐야?"를 동네 전체에 외칩니다. ③ 응답 수신·기록: 해당 기기가 자기 MAC을 알려 주면 캐시에 적고, 그 MAC을 겉봉투에 써서 데이터를 보냅니다.
문제 3 해답. 공유기(게이트웨이)의 MAC입니다. 전선 위에서 내 데이터를 직접 받아 다음 동네로 넘겨 주는 것은 공유기뿐이기 때문입니다. 웹사이트의 MAC은 알 필요도, 알 방법도 없습니다 — 겉봉투(MAC)는 동네마다 새로 씌워지고, 속편지(IP)만 끝까지 유지됩니다.
문제 4 해답. 공격자가 "내가 게이트웨이야"라고 거짓 응답을 하면, 피해자의 컴퓨터는 그 대답을 검증 없이 믿고 캐시에 적습니다. 이후 게이트웨이로 가야 할 데이터 전부가 공격자의 MAC으로 배달됩니다 — 공격자는 내용을 엿보고 나서 진짜 공유기에 전달할 수 있어서, 피해자는 인터넷이 멀쩡해 보이는데 모든 통신이 도청당하는 상태가 됩니다(중간자 공격). 이것이 ARP 스푸핑의 그림입니다.
완료 기준 체크리스트
- [ ] IP와 MAC의 차이를 세 가지 관점으로 설명할 수 있다
- [ ] ARP 요청(방송)/응답/캐시 기록의 흐름을 그림으로 그릴 수 있다
- [ ]
arp -a와Get-NetNeighbor의 출력을 읽을 수 있다 - [ ] MAC 앞 세 쌍이 제조사 번호(OUI)임을 안다
- [ ] "대답 없는 ping → 명단에도 기록 없음"을 실험으로 확인했다
- [ ] ARP가 검증 없이 믿는 구조이며, 그것이 스푸핑의 씨앗임을 설명할 수 있다
- [ ] 미션:
lan-map.txt(우리 동네 첫 지도)를 완성했다
6. 흔한 실수와 해결
벽 1. "arp -a에 이웃이 너무 적어요. 고장인가요?"
증상: 분명 같은 동네에 기기가 여럿인데 표에는 몇 줄 없습니다.
원인: ARP 캐시는 "최근에 대화한 상대"만 담는 메모장입니다. 대화 안 한 이웃은 애초에 기록이 없고, 기록도 오래되면 지워집니다.
해결: 정상입니다. 이웃을 보고 싶으면 그 주소로 ping을 보내고(대화를 걸고) 다시 arp -a를 보세요. 3-5절 실험이 바로 그 원리입니다.
벽 2. "ping이 ‘Destination host unreachable’이라고 나와요."
증상: 같은 동네 주소로 ping을 쳤더니 이런 메시지가 나옵니다 (2026-09-09 실측):
Reply from 172.30.1.54: Destination host unreachable.
원인: 응답자가 상대가 아니라 내 컴퓨터 자신인 것을 보세요. ARP로 외쳤지만 아무도 대답하지 않아 배달을 포기한 것입니다. 상대가 꺼져 있거나, 그 주소는 빈 번호이거나, 방화벽이 응답을 막는 경우입니다.
해결: 주소가 맞는지, 상대가 켜져 있는지 확인하세요. 이 메시지는 "거절"이 아니라 "무대답"입니다 — 둘은 원인이 다릅니다.
벽 3. "명단에는 있는데 ping은 안 돼요."
증상: arp -a에는 그 주소가 있는데 ping은 실패합니다.
원인: 명단은 "과거에 대답한 적 있다"는 기록일 뿐 "지금 살아 있다"는 보증이 아닙니다. 상대가 그 사이 꺼졌을 수 있습니다.
해결: 기록은 역사이고, ping은 현재입니다. 둘을 다르게 읽으세요. 캐시가 오래되면 지워지는 이유가 바로 이것입니다.
벽 4. "MAC 주소는 절대 안 바뀌는 거 아니었나요? 바꾸는 메뉴가 있던데요."
증상: 공유기나 운영체제 설정에서 "MAC 주소 변경" 메뉴를 발견합니다.
원인: 칩에 새겨진 출생 번호는 못 바꾸지만, 운영체제가 "전선에 낼 때 쓰는 값"은 바꿀 수 있습니다.
해결: 두 가지를 구분하세요 — 하드웨어의 진짜 번호와, 소프트웨어가 둘러대는 번호. 이 구분이 나중에 "MAC 주소 필터링을 뚫는 공격"을 이해하는 열쇠입니다.
벽 5. "192.168이 아니라 224나 239로 시작하는 이상한 줄이 있어요."
증상: arp -a에 224.0.0.22, 239.255.255.250 같은 줄이 static으로 보입니다.
원인: 멀티캐스트(multicast) 주소입니다. "특정 그룹 전원에게" 보내는 예약된 구간(224.0.0.0~239.255.255.255)으로, MAC도 01-00-5e-…로 시작하는 전용 번호가 붙습니다. 정상입니다.
해결: 무시해도 되는 줄임을 알아두세요. 모르는 줄을 보는 습관은 좋되, 이 구간은 정상 목록에 넣으세요.
7. 정리
오늘의 개념
| 개념 | 한 줄 설명 |
|---|---|
| MAC 주소 | 랜카드의 고유 번호 (48비트, 16진수 여섯 쌍) |
| OUI | MAC 앞 세 쌍 — 제조사 번호 |
| ARP | IP → MAC을 알아내는 "동네 방송" 절차 |
| ARP 캐시 | 알아낸 대응표를 적어 두는 메모장 (arp -a) |
| dynamic / static | ARP로 알아낸 항목 / 원래 예약된 항목 |
| 브로드캐스트 MAC | ff-ff-ff-ff-ff-ff — "동네 전원에게" |
| 검증 없는 신뢰 | ARP의 구조적 약점 — 스푸핑의 씨앗 |
오늘의 명령어
| 명령 | 하는 일 |
|---|---|
ipconfig /all |
내 MAC(Physical Address) 확인 |
arp -a |
ARP 캐시(이웃 명단) 보기 |
arp -a | findstr 주소 |
명단에서 특정 주소만 찾기 |
Get-NetNeighbor -AddressFamily IPv4 |
상태와 함께 이웃 보기 |
ping -n 1 주소 |
대화를 걸어 ARP를 유도하기 (내 네트워크 한정) |
명령어보다 중요한 감각
외치고, 대답하고, 기억한다 — 이 여섯 글자가 ARP의 전부입니다. 그리고 그 기억은 검증 없이 이루어집니다. 보안 공부를 하다 보면 "좋은 동네를 가정한" 규약을 반복해서 만납니다. 현대 보안의 절반은 그 믿음 위에 검증을 덧입히는 일입니다.
평소의 arp -a 모습을 알아 두세요. 정상의 기준선을 쌓는 일은 거창한 도구가 아니라, 가끔 들여다보는 습관에서 시작됩니다. 낯선 MAC, 엉뚱한 주소에 붙은 익숙한 MAC — 이상함은 평범함을 아는 눈에만 보입니다.
전부 체크되면 Step 32 완료입니다. 사이드바의 체크박스를 눌러 진도를 저장하세요.