ESP32 프로젝트에서 Wi-Fi 자격 증명 및 기타 민감한 정보를 별도의 파일에 안전하게 저장하는 방법을 알아보세요(다른 Arduino 기반 프로젝트에도 적용 가능). 이 방법을 사용하면 모든 스케치에 자격 증명을 입력할 필요가 없어지고, 코드를 공유할 때 개인 계정 정보가 실수로 공개되는 것을 방지할 수 있습니다. API 키, 토큰 등과 같은 다른 민감한 데이터에도 적용됩니다.

ESP32 Wi-Fi 자격 증명을 별도 파일에 저장
* 이 튜토리얼은 독자 중 한 명인 론 브링크먼이 작성했고, 사라 산토스가 편집했습니다.
자격 증명을 별도 파일에 저장하는 이유는 무엇입니까?
여러분이 만드는 많은 프로젝트는 작동하기 위해 계정 이름, 비밀번호, 토큰 또는 기타 민감한 정보가 필요합니다.
이러한 스크립트 파일은 데스크톱에서 절대 제거되지 않으면 안전할 수 있지만 의도한 플레이스홀더가 아닌 개인 자격 증명이 포함된 스크립트 파일을 잊어버리고 게시하거나 배포하는 것은 너무 쉽습니다.“비밀번호로 바꾸세요”.
자격 증명을 별도의 파일에 저장하여 이 문제를 해결할 수 있습니다. libraries 폴더를 만들고 스케치 시작 시 해당 파일에 대한 참조를 포함하세요. 이렇게 하면 개인 정보가 실수로 데스크톱에서 유출되는 것을 방지하고 스케치를 컴파일할 때 자동으로 포함됩니다.
또한 이 방법을 사용하면 새 스케치를 컴파일할 때마다 자격 증명이나 API 토큰을 하드코딩할 필요가 없습니다.
ESP32 유용한 Wi-Fi 라이브러리 함수(Arduino IDE) 도 읽어보시면 좋을 것 같습니다.
프로젝트 개요
우리의 접근 방식이 어떻게 작동하는지 간략하게 살펴보겠습니다.
- 개인 인증 정보(계정 이름, 비밀번호, 토큰 등)는 스케치 파일이 아닌 라이브러리 파일(.h)에 저장됩니다.
- 라이브러리 파일은 스케치 파일 시작 부분에 #include로 포함됩니다.
- 스케치 파일은 라이브러리 파일에 포함된 개인 정보의 #define된 이름을 참조하도록 수정되어, 개인 정보가 스케치 파일에 노출되지 않도록 합니다.
- 이후 스케치를 다른 사람에게 전송하거나 배포할 때 파일을 "정리"하기 위한 별도의 조치가 필요하지 않으며, 전송 전 파일 편집을 잊어 개인 정보가 실수로 노출될까 걱정할 필요가 전혀 없습니다.
MyLogin 라이브러리 생성/설치
MyLogin이라는 라이브러리를 생성하여 자격 증명을 보관할 것입니다. 원하는 다른 이름을 지정할 수 있습니다. 다음 단계를 따라 라이브러리에 MyLogin 스켈레톤 파일을 설치하세요:
1. Arduino 라이브러리 폴더로 이동합니다. Arduino 라이브러리 경로를 확인할 수 있습니다.도서관파일 > 환경 설정 으로 이동하여 폴더를 엽니다 . Sketchbook 위치 필드 의 경로 는도서관폴더가 위치해 있습니다.

Arduino IDE 라이브러리 폴더 위치
2. MyLogin 이름을 지정하여 폴더를 만듭니다. Arduino IDE에서 libraries 폴더에 있습니다.
3. 마지막으로 다음 스켈레톤 코드를 다음 이름의 파일에 복사합니다. MyLogin 폴더에서 MyLogin.h 파일을 만들어 저장하세요.

MyLogin 파일 Arduino 라이브러리 폴더 설치
/*********
Created by Ron Brinkman
Complete instructions at https://RandomNerdTutorials.com/esp32-save-credentials-separate-file/
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*********/
// Keep account names, passwords, tokens, etc. current in this file
// When visiting another location put their credentials in the "currently in effect" section
// Credentials currently in effect
#define STASSID "REPLACE_WITH_YOUR_SSID" // WiFi
#define STAPSK "REPLACE_WITH_YOUR_PASSWORD"
#define emailSenderAccount "YOUR_SENDER_EMAIL@gmail.com" // Email
#define emailSenderPassword "YOUR_EMAIL_APP_PASSWORD"
#define emailRecipient "YOUR_EMAIL_RECIPIENT@example.com"
#define DuckDNStoken "YOUR_DUCKDNS_TOKEN" // DuckDNS
/*********Saved credentials for substitution above when "on the road"
//Credentials used at home
#define STASSID "my_wifi_ssid"
#define STAPSK "my_wifi_password"
#define emailSenderAccount "my_sender_email@gmail.com"
#define emailSenderPassword "my_email_app_password"
#define emailRecipient "my_email_recipient@example.com"
#define DuckDNStoken "my_duckdns_token"
// Credentials used at Mom and Dad's house
#define STASSID "parents_wifi_ssid"
#define STAPSK "parents_wifi_password"
// Credentials used at wife's Mom and Dad's house
#define STASSID "wifes_parents_wifi_ssid"
#define STAPSK "wifes_parents_wifi_password"
// Credentials used at our daughter's house
#define STASSID "daughter_wifi_ssid"
#define STAPSK "daughter_wifi_password"
// Credentials used at our son's house
#define STASSID "son_wifi_ssid"
#define STAPSK "son_wifi_password"
// Credentials used at our friends Joe and Sally's house
#define STASSID "friend_wifi_ssid"
#define STAPSK "friend_wifi_password"
*********/
자격 증명으로 MyLogin.h 파일을 사용자 정의하세요.
Arduino IDE 설치 라이브러리 폴더에 있는 MyLogin.h 스켈레톤 파일을 엽니다. 이 개인 파일에서 개인 계정, 비밀번호 및 토큰 정보를 분리하려면 다음 단계를 따르세요:
1) "현재 적용 중인 자격 증명" 섹션을 편집합니다 . 애플리케이션이 로컬 네트워크에 연결할 수 있도록 다음 정의문에 네트워크 자격 증명을 입력합니다.
// Credentials currently in effect
#define STASSID "REPLACE_WITH_YOUR_SSID" // WiFi
#define STAPSK "REPLACE_WITH_YOUR_PASSWORD"
2) 애플리케이션에서 사용하는 다른 자격 증명을 계속 편집하거나 추가합니다. 여기에는 SMTP 이메일, SMS 메시지, Telegram 메시지, WhatsApp 인스턴트 메시징, Duck DNS, NoIP, DynDNS 또는 기타 동적 DNS 지원 등이 포함될 수 있습니다.
이 튜토리얼에서는 네트워크 자격 증명만 테스트하지만, 이를 통해 더 민감한 정보를 추가해야 할지 판단하는 데 도움이 됩니다.
#define emailSenderAccount "YOUR_SENDER_EMAIL@gmail.com" // Email
#define emailSenderPassword "YOUR_EMAIL_APP_PASSWORD"
#define emailRecipient "YOUR_EMAIL_RECIPIENT@example.com"
#define DuckDNStoken "YOUR_DUCKDNS_TOKEN" // DuckDNS
3) 선택적으로 파일의 주석 처리된 섹션에 자격 증명을 저장하면 다른 위치로 이동하여 신청서 작업을 할 때마다 자격 증명을 찾아볼 필요가 없습니다.
"여행 중"에 현재 신분증이 일시적으로 덮어씌워지는 경우를 대비해 집 신분증 사본부터 시작하세요.
// Saved credentials for substitution above when "on the road"
// Credentials used at home
#define STASSID "my_wifi_ssid"
#define STAPSK "my_wifi_password"
#define emailSenderAccount "my_sender_email@gmail.com"
#define emailSenderPassword "my_email_app_password"
#define emailRecipient "my_email_recipient@example.com"
#define DuckDNStoken "my_duckdns_token
4) 필요에 따라 다른 가족, 친구 또는 사업장의 자격 증명을 사용하여 계속해서 사용자 정의합니다.
// Credentials used at Mom and Dad's house
#define STASSID "wifes_parents_wifi_ssid"
#define STAPSK "wifes_parents_wifi_password"
.
.
.
이제 개인 정보가 포함된 파일을 저장하세요. 스크립트에서 개인 정보가 스크립트에 노출되지 않도록 이 파일을 사용할 준비가 되었습니다.
스크립트 파일 맞춤화
자격 증명이 실수로 공개되는 것을 방지하려는 각 스크립트 파일에는 두 가지 간단한 편집 작업이 필요합니다. 다음 단계를 따르세요.
1) 다음 문장을 목록에 넣으세요. #include 이전에 생성한 "라이브러리"를 포함할 파일:
#include <MyLogin.h>
2) 스크립트 파일에서 계정 이름, 비밀번호, 토큰 또는 기타 자격 증명을 일반적으로 입력하는 위치를 찾으세요. WiFi 계정의 경우 다음과 같습니다.
// Replace with your network credentials
const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";
3) 텍스트를 다음 내용으로 바꾸세요.
const char* ssid = STASSID;
const char* password = STAPSK;
여기에 자격 증명을 입력하지 마십시오. 자격 증명은 MyLogin.h 파일과 #include 문을 통해 자동으로 포함됩니다. 이는 MyLogin.h 파일에 정의된 STASSID 및 STAPSK 변수의 값을 사용합니다.
4) SMTP 이메일, SMS 메시징, Telegram 메시징, WhatsApp 인스턴트 메시징, Duck DNS, NoIP, DynDNS 또는 기타 동적 DNS 지원 등과 같은 애플리케이션에 필요한 계정 이름, 비밀번호 또는 토큰이 있는 스크립트의 다른 위치를 계속 찾습니다.
스크립트에서 개인 정보를 제외하려면 WiFi 자격 증명과 비슷한 코드 섹션을 업데이트합니다.
Wi-Fi 연결 코드로 테스트
지금까지 배운 내용을 간단한 Wi-Fi 예제를 통해 테스트해 보겠습니다.
다음 코드는 로컬 네트워크에 연결하고 연결이 설정되면 RRSI(신호 강도)를 출력합니다.
/*********
Created by Ron Brinkman
Complete instructions at https://RandomNerdTutorials.com/esp32-save-credentials-separate-file/
*********/
#include <WiFi.h>
#include <MyLogin.h>
// Replace with your network credentials (STATION)
const char* ssid = STASSID;
const char* password = STAPSK;
void initWiFi() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi ..");
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(1000);
}
Serial.println(WiFi.localIP());
}
void setup() {
Serial.begin(115200);
initWiFi();
Serial.print("RSSI: ");
Serial.println(WiFi.RSSI());
}
void loop() {
// put your main code here, to run repeatedly:
}
앞서 설명한 대로 MyLogin.h 파일을 성공적으로 생성했다면, 이 코드에 별도의 인증 정보를 추가할 필요가 없습니다. 해당 정보는 MyLogin.h 파일을 통해 자동으로 가져옵니다.
코드는 어떻게 작동하나요?
위 지침에 따라 사용자 정의한 MyLogin.h 파일에는 이제 모든 개인 인증 정보가 포함됩니다. 스크립트 컴파일 시 자동으로 포함되므로 다른 곳에 이 인증 정보를 입력할 필요가 없습니다.
MyLogin.h 라이브러리 파일은 스크립트 시작 부분에 포함될 때 안전하게 스크립트에 통합되며, 모든 개인 인증 정보를 포함합니다.
#include <MyLogin.h>
포함된 MyLogin.h 파일로부터 귀하의 인증 정보가 이미 스크립트에 통합되었으므로, 이제 해당 인증 정보는 실제로 프로그램에서 사용하기 위해 스크립트에 통합되었습니다.
const char* ssid = STASSID;
const char* password = STAPSK;
스크립트의 후속 섹션에서 다른 계정, 비밀번호 또는 토큰을 사용하는 경우 이전 섹션에서 설명한 대로 이를 사용자 지정하고 조정한 경우 해당 계정, 비밀번호 또는 토큰도 안전하게 통합됩니다.
데모
ESP32 보드에 프로젝트를 업로드하세요. 로컬 네트워크에 연결되고 신호 강도가 출력됩니다.

ESP32는 Wi-Fi에 연결하고 직렬 모니터에 RSSI를 인쇄합니다.
보시다시피, 네트워크 자격 증명을 코드에 하드코딩할 필요가 없습니다. 왜냐하면 코드에 네트워크 자격 증명이 포함될 때 포함되기 때문입니다.MyLogin.h파일입니다. Wi-Fi 자격 증명을 사용하는 다른 코드나 토큰, API, 비밀번호 등과 같은 다른 민감한 정보를 저장해야 하는 경우에도 이 작업을 수행할 수 있습니다.
귀하의 개인정보는 실수로 공개되는 것을 방지합니다.
마무리하기
이 프로젝트가 모든 프로젝트에 유용하고 쉽게 구현할 수 있기를 바랍니다. "앗, 개인 정보 삭제하는 걸 깜빡했네."라는 걱정 없이 프로젝트 코드를 게시하거나 배포할 수 있으니 안심하세요.
또한, 필요할 때마다 자격 증명이나 API 키를 찾아야 하는 번거로움이 없어 하드코딩할 필요가 없습니다.
Wi-Fi에 대해 유용할 만한 다른 튜토리얼도 있습니다.
- ESP32 Useful Wi-Fi Library Functions (Arduino IDE)
- ESP32 WiFiMulti: Connect to the Strongest Wi-Fi Network (from a list of networks)
- ESP32 Wi-Fi Provisioning via BLE (Bluetooth Low Energy) – Arduino IDE
이 튜토리얼이 도움이 되었기를 바랍니다. 번역 문서의 원문은 이 링크를 따라가세요.
'ESP32' 카테고리의 다른 글
| ESP-IDF: ESP32 GPIO PWM LED 밝기 조절 5 (0) | 2025.11.11 |
|---|---|
| ESP-IDF: ESP32 LED 깜박임 예제 VS 코드 2 (0) | 2025.11.10 |
| ESP-IDF: ESP32 GPIO 디지털 입력 읽기 4 (0) | 2025.11.10 |
| ESP-IDF로 ESP32 프로그래밍 시작 가이드 1 (0) | 2025.11.10 |
| ESP32 Devkit C V4 GPIO Table (0) | 2025.10.25 |
| ESP32 Devkit C V4 GPIO 할당 참고 (0) | 2025.10.24 |
| ESP32 MicroPython 개발 참고 문서 (0) | 2025.10.19 |
| ESP32 DevkitC V4 USB C 타입 32E 모듈 적용 개발보드 (0) | 2025.10.19 |
취업, 창업의 막막함, 외주 관리, 제품 부재!
당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약,
아이디어는 있지만 구현할 기술이 없는 막막함.
우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.
이제 고민을 멈추고, 캐어랩을 만나세요!
코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.
제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!
귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.
지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.
귀사가 성공하기까지의 긴 고난의 시간을 캐어랩과 함께 하세요.
캐어랩