# 3.5 코드 업로드 하기

이제 우리가 작성한 코드를 아두이노 안에 저장시켜 엔트리 연결 없이, 하드웨어 단독으로 독립적으로 동작하게 해보겠습니다. 방금 작성한 코드는 아쉽게도 엔트리와의 연결이 존재할 때(엔트리에서 시작하기 버튼을 누렀을 때)만 동작하게 되어있습니다. 물론 이정도만으로도 하드웨어 제어 코딩(하드웨어 코딩교육)을 배우는데 충분하다 할 수도 있고, 충분하지 않다 할 수도 있습니다. 왜냐하면 **실무/실전에서는 코딩한 코드를 하드웨어의 플래시 메모리(Flash Memory)\*에 저장(upload)시키고, 하드웨어는 전원만 연결되면 플래시 메모리\*에 저장된 코드(다른 말로 펌웨어\*)에 기반에 정해진 동작을 무한 반복하는 식으로 동작**하기 때문입니다.

{% hint style="info" %}
**플래시 메모리(Flash Memory)**: 우리가 늘 사용하는 USB 플래시 메모리를 생각하면 젤 이해가 빠르다. 전기적으로 데이터를 지우고 다시 기록할 수 있는 영구저장 메모리(기억장치)로서 저장 후 전원을 끄면 안에 내용이 자동으로 사라져 버리는 휘발성 메모리이가 아닌 씌여진 데이터가 영구적으로 저장되는 기억장치를 말한다.  참고로 아두이노 우노(Uno)에는 32KBytes 크기의 플래시 메모리가 존재한다.
{% endhint %}

{% hint style="info" %}
**펌웨어(Firmware)**: 소프트웨어(Software)의 일종으로 하드웨어 제어목적으로 제작되어 하드웨어 안에 내장시키는 소프트웨어(프로그램)를 말함. 그 이름에서 알 수 있듯이, 고정화된(Firm) 소프트웨어로 표현하는 것은 일반 컴퓨터 상에 소프트웨어처럼 일반 사용자가 설치와 지우기를 자유롭게 반복할 수 있다기 보다 하드웨어 장치에 한 번 내장시켜 놓으면 마치 하드웨어 영구적인 장치의 일부처럼 동작하기 때문이다.
{% endhint %}

[**엔트리 커스텀 버전**](https://github.com/JeongJun-Lee/entry-offline)**에는 기존 엔트리 정식 버전에는 없었던 하드웨어에 코드 저장시키기(업로드) 버튼이 존재합니다.** 이제 우리는 이 버튼을 눌러 내가 블록코딩한 코드(나의 펌웨어)를 하드웨어 플래시 메모리에 저장시킬 수 있게 되었습니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-Mb1IMzXdg45pw0dMs34%2F-Mb1J_aVOa2dS_Q8o_sK%2Fupload.png?alt=media\&token=d51f616f-ae4a-4481-a75d-0fc1d5afc5b4)

이제 우리도 저 업로드 버튼을 눌러 내 코드를 아두이노 하드웨어의 플래시 메모리로 업로드 시켜보겠습니다. 내 코드를 펌웨어로 만들고 하드웨어에 저장시키는 것까지의 과정은 실제로는 그리 간단하진 않고 내부적으로 많은 과정을 거치게 되는데 따라서 엔트리가 실행되는 컴퓨터의 성능에 따라 업로드가 완료되는데까지 걸리는 시간은 각자 다를 수 있음에 유의합니다. 업로드가 잘 되었고, 이제 엔트리 없이도 하드웨어 스스로 잘 동작하나요? **내 코드를 업로드를 한다는 것은 최초 엔트리와 아두이노 연결을 위해 사용했던 기존 펌웨어를 지우고, 대신 그 위에 내 펌웨어가 덮어 씌여지기(overwrite) 때문에**, 아래처럼 기존의 엔트리 연결 프로그램 상에 하드웨어 연결이 끊어지는 것은 자연스러운 현상입니다.

![](https://1238842542-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MaoCrU7aM6SgouXppME%2F-Mb1OTAom6USAcxmHyCy%2F-Mb1OtupUR9tMAASh1C1%2Fimage.png?alt=media\&token=c8c0c646-cdfc-46a0-94d6-f9d0a3f08e32)

