AI 활용 기술창업·메이커 통합 강의
아이디어 선정부터 하드웨어 제작, 웹 배포, AI/LLM, 3D프린팅까지 하나의 흐름으로 읽는 통합 교육자료입니다.
AI 활용 기술창업·메이커 통합 강의
2026년 6월 30일 작성된 AI 활용 강의 초안 9개를 하나의 웹 교육자료로 정리했습니다.
이 자료는 아이디어를 찾고, 하드웨어와 소프트웨어로 구현하고, 웹에 배포하고, AI와 3D프린팅까지 연결하는 흐름으로 배치했습니다.
전체 학습 흐름
| 순서 | 강의 | 분야 | 핵심 |
|---|---|---|---|
| 1 | 하드웨어 창업 준비하기 | 기술창업 | 초안 내용을 웹 강의용으로 정리 |
| 2 | 창업아이템 선정 조언 | 기술창업 | 초안 내용을 웹 강의용으로 정리 |
| 3 | 웹페이지 FastAPI 실행과 배포 준비 | 웹/배포 | 초안 내용을 웹 강의용으로 정리 |
| 4 | 아두이노 기초 입문 | ICT-IOT | 초안 내용을 웹 강의용으로 정리 |
| 5 | 손가락 인식으로 네오픽셀 제어하기 | AI+피지컬컴퓨팅 | 초안 내용을 웹 강의용으로 정리 |
| 6 | 노래 페이지 만들고 웹호스팅하기 | 웹/배포 | 초안 내용을 웹 강의용으로 정리 |
| 7 | VS Code와 Python 개발환경 구축 | 기초 세팅 | 초안 내용을 웹 강의용으로 정리 |
| 8 | LLM 동작방식, API, 로컬 모델 이해 | AI - 파이썬 | 초안 내용을 웹 강의용으로 정리 |
| 9 | 3D프린팅 FDM, DLP, SLA 이해 | 기구설계 | 초안 내용을 웹 강의용으로 정리 |
하드웨어 창업 준비하기
- 원본 폴더:
260630-하드웨어-창업-준비 - 카테고리: 기술창업
하드웨어 창업 준비하기
이 강의는 하드웨어 창업을 막연한 아이디어에서 끝내지 않고, 실제 제품과 창업 레퍼런스로 키우는 방법을 다룹니다.
핵심은 무엇을 센싱해서 어떤 출력으로 바꿀 것인가를 정하고, 그 과정을 제작 기록, 고객 피드백, 수상, 특허, 인증, 납품 같은 신뢰 자료로 쌓아가는 것입니다.

이 강의에서 보는 것
- AI 서비스가 많아진 환경에서 실제 작동하는 하드웨어가 주는 차별점
- 같은 센서와 기술을 다른 고객, 장소, 서비스로 바꾸는 방법
- 비타민형 아이디어를 진통제형 문제 해결 아이템으로 설명하는 방법
- 고객탐색, 설문, 피드백을 시장성 근거로 만드는 방법
- 재료비와 외주용역비를 시제품과 제작 기록으로 바꾸는 방법
- 수상, 특허, 인증, 납품을 초기 창업의 신뢰 자료로 쌓는 흐름
핵심 메시지
초기 창업은 한 번에 성공을 증명하는 과정이 아닙니다.
작게 만들고, 보여주고, 반응을 얻고, 고치고, 다시 도전하면서 다음 기회를 열 수 있는 신뢰를 쌓는 과정입니다.
아이디어 -> 제품 -> 근거 자료 -> 다음 기회
추천 수업 흐름
| 단계 | 질문 | 대표 활동 | 결과 |
|---|---|---|---|
| 1 | 왜 하드웨어 창업인가? | 작동 장면과 지원사업 흐름 이해 | 하드웨어 창업의 장점 이해 |
| 2 | 어떤 문제를 해결할 것인가? | 비타민/진통제 비교, 고객 문제 정리 | 문제 중심 아이디어 정리 |
| 3 | 누가 필요하다고 말하는가? | 고객 인터뷰 질문 만들기 | 고객탐색 방향 확보 |
| 4 | 만들 수 있음을 어떻게 보여줄까? | 시제품, 팀 역량, 제작 기록 정리 | 실행력 증거 확보 |
| 5 | 다음 기회로 어떻게 연결할까? | 수상, 특허, 인증, 납품 로드맵 작성 | 신뢰 기반 성장 계획 |
1. 하드웨어 창업을 왜 해야 하는가
제품이 눈에 보이고, 만질 수 있고, 작동하는 장면을 보여줄 수 있다는 것은 큰 장점입니다.
AI 서비스와 소프트웨어 아이디어가 많아질수록, 실제 공간에서 움직이는 하드웨어는 대회와 지원사업에서 다른 인상을 줄 수 있습니다.

강의 포인트
- 하드웨어는 말이 아니라 작동 장면으로 신뢰를 줄 수 있습니다.
- 지원사업은 목적지가 아니라 학습과 재도전의 기회로 볼 수 있습니다.
- 첫 제품이 실패해도 제작 경험과 자료는 다음 사업의 자산이 됩니다.
2. 같은 기술도 서비스가 달라지면 다른 아이템이 된다
같은 온습도 센서라도 가정 화분, 농장, 창고, 학교, 박물관에 설치되면 전혀 다른 서비스가 됩니다.
중요한 것은 센서 자체가 아니라 누가 어떤 문제를 어떤 방식으로 해결하는가입니다.

3. 이미 있는 기술을 더 쓸 수 있게 만드는 것도 창업이다
세상에 없는 기술을 발명하지 않아도 창업 기회는 있습니다.
이미 있는 기술을 특정 고객이 바로 쓸 수 있는 형태로 바꾸는 것, 그리고 큰 기업이 놓치는 세부 시장을 해결하는 것도 충분히 창업이 됩니다.

4. 비타민이 아니라 진통제처럼 보이게 만들기
창업 아이디어는 무엇을 만들까?보다 누가 어떤 문제로 불편해하는가?에서 시작하는 것이 좋습니다.
심사위원이 듣고 있으면 좋겠네요가 아니라 이 문제는 해결해야겠네요라고 느끼게 만들어야 합니다.

체크 질문
- 이 문제를 겪는 고객은 누구인가?
- 그 문제가 반복적으로 발생하는가?
- 시간, 비용, 안전, 스트레스 중 어떤 손실이 있는가?
- 고객 인터뷰나 설문으로 확인했는가?
5. 우리가 만들 수 있다는 믿음 주기
하드웨어 창업에서는 아이디어만큼 중요한 질문이 있습니다.
이 팀이 정말 만들 수 있는가?
전공, 역할 분담, 제작 경험, 수상 이력, 작은 시제품은 모두 제작 가능성을 보여주는 신뢰 자료가 됩니다.

6. 사업 초기에는 재료비, 외주용역비 확보하기
사업 초기에는 센서, 보드, 케이스, 테스트 부품뿐 아니라 PCB, 3D 모델링, 앱·웹 화면, 디자인 같은 외주가 필요할 수 있습니다.
재료비와 외주용역비는 단순 지출이 아니라 제작 경험과 포트폴리오로 바꿔야 합니다.

7. 제작 과정 자체가 레퍼런스가 된다
제작 과정은 반드시 기록해야 합니다.
아이디어 스케치, 부품 선정, 회로 연결, 테스트 영상, 실패와 개선, 고객 피드백이 모이면 하나의 포트폴리오가 됩니다.

8. 발표와 수상으로 실용성을 증명하기
발표와 수상은 단순한 이벤트가 아닙니다.
외부 평가를 통해 제품의 실용성과 가능성을 검토받았다는 신뢰 자료가 됩니다.

9. 특허와 지식재산권 준비
특허는 기술 보호뿐 아니라 기술적 차별점을 보여주는 자료가 될 수 있습니다.
센싱, 판단, 출력, 효과를 구체적으로 정리하는 것이 중요합니다.

10. 제작 지원에서 양산 지원으로 넘어가기
브레드보드에서 작동하는 제품과 실제 판매 가능한 제품은 다릅니다.
PCB, 케이스, 금형, 양산 가능성까지 단계적으로 완성도를 높여야 합니다.

11. 인증 지원과 판매 준비
하드웨어 제품을 판매하려면 KC, CE 같은 인증과 안전성, 전자파, 설명서, 포장 준비가 필요할 수 있습니다.
인증은 판매와 납품을 위한 신뢰 자료입니다.

12. 작은 납품과 매출 증명 만들기
처음부터 대량 판매를 목표로 하지 않아도 됩니다.
3개, 5개, 10개라도 실제 사용처에 납품하고 피드백과 매출 증빙을 남기면 다음 단계의 강한 근거가 됩니다.

13. 펀딩, 나라장터, 전시회, B2C로 확장하기
시제품 사진, 테스트 영상, 인증 자료, 납품 사례, 고객 피드백이 쌓이면 판매 채널 확장에 사용할 수 있습니다.

14. 제품에서 파생되는 외주 개발 기회
하드웨어 제품은 판매 상품이면서 제작 역량을 보여주는 포트폴리오가 됩니다.
제품을 본 고객이 커스텀 제작, B2B 납품, 외주 개발을 요청할 수 있습니다.

15. 하드웨어 창업 성장 로드맵 정리
초기 창업에서 쌓아야 하는 것은 돈만이 아닙니다.
기술에 대한 신뢰, 고객에 대한 신뢰, 실행력에 대한 신뢰, 다음 단계로 갈 수 있다는 신뢰를 쌓아야 합니다.

미션
미션 1. 내 아이디어를 진통제형으로 바꾸기
- 고객을 한 문장으로 정리합니다.
- 고객이 겪는 반복 문제를 씁니다.
- 이 문제가 시간, 비용, 안전, 스트레스 중 무엇을 줄이는지 적습니다.
미션 2. 고객탐색 질문 만들기
- 고객에게 물어볼 질문 5개를 작성합니다.
- 시제품 사진이나 스케치를 보여주고 받을 피드백 항목을 정합니다.
미션 3. 초기 창업 신뢰 자료 체크리스트 만들기
- 제작 기록
- 고객 피드백
- 발표 자료
- 수상 증빙
- 특허 또는 인증 준비 자료
- 납품 또는 사용 후기
퀴즈
- 하드웨어 창업에서
센싱 -> 판단 -> 출력 -> 서비스구조가 중요한 이유는 무엇인가? - 비타민형 아이디어와 진통제형 아이디어의 차이는 무엇인가?
내가 필요해서 만들었다만으로 시장성 설명이 부족한 이유는 무엇인가?- 제작 과정 기록이 다음 지원사업에서 어떤 역할을 하는가?
- 초기 창업에서 신뢰를 쌓는 자료에는 어떤 것이 있는가?
창업아이템 선정 조언
- 원본 폴더:
260630-창업아이템-선정-조언 - 카테고리: 기술창업
창업 아이템 쉽게 정하는 방법: 필요한 아이템을 찾아라
강의 목적
오늘은 창업을 처음 준비하는 분들이 가장 많이 막히는 질문을 다뤄보겠습니다.
"도대체 어떤 아이템으로 창업해야 할까?"
이 질문을 할 때 한 가지 먼저 생각해야 할 것이 있습니다.
창업은 보통 한 번에 성공하는 구조가 아닙니다. 처음 정한 아이템이 바로 큰 수익을 만들고, 바로 시장에서 인정받고, 바로 안정적인 사업이 되는 경우는 많지 않습니다.
대부분의 창업은 여러 번 시도하고, 고객을 만나고, 실패하고, 수정하고, 다시 검증하는 과정을 거치면서 만들어집니다. 특히 하드웨어나 기술 기반 창업은 더 그렇습니다. 시제품을 만들고, 테스트하고, 문제를 발견하고, 다시 개선하는 시간이 반드시 필요합니다.
그래서 창업 아이템을 고를 때는 당장 큰 수익을 낼 수 있는지만 보는 것도 중요하지만, 그 아이템을 개발해나가는 과정에서 내가 성장할 수 있는지도 함께 봐야 합니다.
이 아이템을 준비하면서 내가 어떤 기술을 익힐 수 있는지, 어떤 시장을 배울 수 있는지, 어떤 고객을 만나게 되는지, 어떤 제작 경험이나 데이터가 쌓이는지를 봐야 합니다.
처음 아이템이 완벽하지 않아도 괜찮습니다. 그 과정을 통해 내가 가진 역량이 쌓이고, 기술 스택이 생기고, 시장을 보는 눈이 생긴다면 다음 아이템은 훨씬 더 강해질 수 있습니다.
그렇기 때문에 유행하는 아이템을 당장 따라갈 필요는 없습니다.
지금 AI가 유행한다고 해서 무조건 AI 아이템을 해야 하는 것도 아니고, 로봇이 유행한다고 해서 무조건 로봇을 해야 하는 것도 아닙니다. 중요한 것은 내 역량을 중심으로 성장할 수 있는 방향을 잡는 것입니다.
자기의 경험과 환경 안에서 문제를 찾고, 그 문제를 해결하기 위해 필요한 기술을 하나씩 쌓아가다 보면 새로운 기술이 등장했을 때 오히려 더 빠르게 접근할 수 있습니다. 이미 문제를 알고 있고, 고객을 알고 있고, 현장을 알고 있기 때문입니다.
결국 새로운 기술이 왔을 때 가장 앞서가는 사람은 단순히 유행어를 먼저 붙인 사람이 아닙니다.
자기 분야의 문제를 깊이 이해하고, 그 문제를 해결하기 위한 역량을 계속 쌓아온 사람입니다.
예비창업패키지나 초기창업패키지를 준비하다 보면 많은 분들이 아이템 선정 단계에서 멈춥니다. 요즘 유행하는 AI, ICT, IoT, GPT 같은 키워드를 붙이면 좋아 보일 것 같지만, 실제 심사에서는 그것만으로 설득하기 어렵습니다.
중요한 것은 유행하는 아이템을 고르는 것이 아닙니다.
고객에게 정말 필요한 아이템인지, 내가 왜 이 문제를 풀 수 있는지, 이 시장에 어떻게 접근할 수 있는지를 논리적으로 설명할 수 있어야 합니다.
오늘 강의의 핵심은 세 가지입니다.
- 창업 아이템은 "있으면 좋은 것"보다 "없으면 불편한 것"에서 찾아야 합니다.
- 그런 문제는 보통 나의 경험과 나의 환경 안에 있습니다.
- 심사위원을 설득하려면 아이템보다 문제의 근거와 실행 가능성이 먼저 보여야 합니다.
그리고 이 강의에서 가장 중요하게 기억해야 할 멘트는 이것입니다.
창업은 새로운 것을 억지로 만드는 것이 아니라, 고객이 겪고 있는 문제를 혁신적으로 해결하는 것입니다.

1. 유행하는 아이템이 항상 좋은 아이템은 아니다
창업 아이템을 고민할 때 많은 분들이 먼저 요즘 뜨는 분야를 떠올립니다.
AI, ICT, IoT, 로봇, GPT, 플랫폼, 자동화 서비스 같은 것들입니다.
물론 이런 분야가 나쁘다는 뜻은 아닙니다. 시장의 관심이 있고, 투자자나 지원사업 심사위원들도 익숙하게 듣는 키워드입니다. 하지만 문제는 대부분의 사람이 비슷한 아이템을 들고 온다는 점입니다.
"AI로 무언가를 분석하겠습니다."
"GPT를 활용해서 자동화 서비스를 만들겠습니다."
"IoT 기기로 데이터를 수집하겠습니다."
이런 설명만으로는 심사위원을 설득하기 어렵습니다. 왜냐하면 이미 비슷한 아이템이 많고, 그 분야를 더 잘 아는 전문가들도 많기 때문입니다.
창업 아이템이 좋아 보이는 것과, 고객이 실제로 필요로 하는 것은 다릅니다.
심사위원은 보통 이런 질문을 합니다.
- 이 사람이 이 시장을 정말 알고 있는가?
- 이 문제가 실제로 존재한다는 근거가 있는가?
- 고객이 이 문제를 해결하기 위해 돈을 낼 가능성이 있는가?
- 이 사람이 이 문제를 풀 수 있는 이유가 있는가?
- 이미 있는 서비스와 무엇이 다른가?
그래서 아이템을 고를 때는 "요즘 무엇이 유행인가?"보다 먼저 "누가 어떤 문제로 불편해하고 있는가?"를 봐야 합니다.
2. 진통제인가, 비타민인가
창업 아이템을 판단할 때 유용한 기준이 있습니다.
바로 이 아이템이 진통제인지, 비타민인지 보는 것입니다.
비타민 같은 아이템은 있으면 좋습니다. 쓰면 기분이 좋고, 편리하고, 재미있을 수 있습니다. 하지만 없어도 당장 큰 문제가 생기지는 않습니다.
반대로 진통제 같은 아이템은 없으면 불편합니다. 고객이 이미 반복적으로 겪고 있는 문제를 해결합니다. 시간이 낭비되거나, 돈이 새거나, 안전 문제가 생기거나, 스트레스가 커지는 지점을 줄여줍니다.
창업 초기에는 보통 진통제형 아이템이 더 설득하기 쉽습니다.
왜냐하면 고객의 필요가 분명하기 때문입니다.
| 구분 | 의미 | 창업 아이템으로 볼 때 |
|---|---|---|
| 비타민형 아이템 | 있으면 좋지만 없어도 괜찮은 것 | 재미있고 멋져 보일 수 있지만 필요성이 약할 수 있음 |
| 진통제형 아이템 | 없으면 불편하고 반복되는 문제를 해결하는 것 | 고객의 필요가 선명하고 설득하기 쉬움 |
예를 들어 학생 생활을 생각해보겠습니다.
친구들과 공부 목표를 꾸미고 공유하는 앱은 비타민형에 가깝습니다. 있으면 재미있을 수 있지만, 꼭 필요하다고 느끼지 않을 수도 있습니다.
반면 수행평가 제출 여부를 자동으로 확인해주고, 마감 전에 알려주는 시스템은 진통제형에 가깝습니다. 제출을 놓치면 실제 손해가 생기기 때문입니다.
급식 사진을 예쁘게 공유하는 서비스는 비타민형일 수 있습니다. 하지만 급식 대기 시간을 줄이고, 알레르기 정보를 미리 알려주는 서비스는 진통제형에 가깝습니다.
창업 아이템을 볼 때는 이렇게 질문해야 합니다.
- 고객이 이 문제를 자주 겪는가?
- 이 문제 때문에 시간, 돈, 안전, 스트레스 중 하나를 잃고 있는가?
- 문제가 해결되지 않으면 고객에게 실제 손해가 생기는가?
- 고객이 이 문제를 해결하기 위해 이미 무언가를 하고 있는가?
- 이 아이템이 없어도 괜찮은가, 없으면 불편한가?
비타민형 아이템이 나쁘다는 뜻은 아닙니다. 다만 초기 창업에서는 "좋아 보이는 아이템"보다 "필요해서 찾게 되는 아이템"이 더 강합니다.
3. 기술보다 문제가 먼저다
기술창업이라고 하면 많은 분들이 기술부터 떠올립니다.
AI를 붙일 수 있을까, 로봇을 만들 수 있을까, 앱을 만들 수 있을까, 데이터를 분석할 수 있을까를 먼저 생각합니다.
하지만 순서는 반대입니다.
기술이 먼저가 아니라 문제가 먼저입니다.
창업은 누군가의 문제를 발견하고 해결하는 과정입니다. 기술창업은 그 문제를 AI, 로봇, 센서, 3D 프린팅, 데이터, 자동화 같은 기술로 더 빠르고 편하게 해결하는 것입니다.
즉, 기술은 목적이 아니라 수단입니다.
예를 들어 "AI 서비스를 만들겠다"는 말은 아직 아이템이 아닙니다. 어떤 고객이 어떤 문제를 겪고 있고, 그 문제를 해결하는 데 AI가 왜 필요한지가 설명되어야 합니다.
좋은 설명은 이런 방향입니다.
"지역 소상공인들이 온라인 홍보 문구를 매번 직접 만들기 어려워합니다. 광고 대행사를 쓰기에는 비용 부담이 크고, 직접 쓰기에는 시간이 많이 듭니다. 그래서 업종과 지역 특성을 입력하면 바로 사용할 수 있는 홍보 문구와 게시물을 추천하는 서비스를 만들고자 합니다."
이렇게 말하면 기술보다 문제가 먼저 보입니다. 그리고 AI는 그 문제를 해결하기 위한 도구가 됩니다.
4. 첫 번째 기준: 나의 경험에서 찾기
진통제형 문제를 찾는 가장 좋은 출발점은 나의 경험입니다.
여기서 경험은 꼭 대단한 경력만을 뜻하지 않습니다. 직장 경험, 프로젝트 경험, 전공 지식, 연구 경험, 아르바이트 경험, 동아리 활동, 이전에 직접 겪은 불편함까지 모두 포함됩니다.
예를 들어 이런 식입니다.
"이전에 제조 현장에서 일하면서 반복적으로 발생하는 불량 관리 문제를 봤습니다."
"전공 프로젝트를 하면서 특정 장비를 쓰는 사람들이 데이터를 정리하는 데 어려움을 겪는 것을 알게 됐습니다."
"직장에서 고객 응대를 하면서 소상공인들이 가장 힘들어하는 부분을 계속 봤습니다."
이런 경험이 있으면 아이템에 힘이 생깁니다. 단순히 아이디어를 떠올린 사람이 아니라, 실제 문제를 관찰한 사람처럼 보이기 때문입니다.
내 경험에서 나온 아이템은 다음과 같은 장점이 있습니다.
- 문제 상황을 구체적으로 설명할 수 있다.
- 고객이 누구인지 더 선명하게 말할 수 있다.
- 기존 해결 방식의 한계를 알고 있다.
- 내가 왜 이 아이템을 해야 하는지 스토리가 생긴다.
- 심사위원에게 전문성과 진정성을 줄 수 있다.
아이템을 정할 때는 먼저 자신의 경험을 펼쳐놓고 봐야 합니다.
내가 해본 일은 무엇인지, 반복해서 본 문제는 무엇인지, 사람들이 불편해하던 지점은 무엇인지, 내가 남들보다 조금 더 잘 아는 분야는 무엇인지 적어보는 것입니다.
5. 두 번째 기준: 나의 환경에서 찾기
아이템을 찾는 또 하나의 중요한 기준은 나의 환경입니다.
환경이란 내가 속해 있는 주변 조건을 말합니다. 가족, 부모님의 사업, 친척의 업종, 친구나 지인의 일, 내가 사는 지역, 자주 접하는 산업, 주변에서 반복해서 보는 문제들이 모두 환경입니다.
예를 들어 부모님이 특정 업종의 사업을 하고 있다면, 그 안에서 계속 보이는 문제가 있을 수 있습니다.
"부모님이 방산 관련 일을 하시는데, 특정 부품이나 서비스가 계속 유찰되는 것을 봤습니다."
"지역 농가에서 반복적으로 겪는 포장, 유통, 판로 문제가 있습니다."
"주변 소상공인들이 온라인 홍보를 어려워하는 것을 계속 봤습니다."
이런 아이템은 본인이 직접 오랜 경력을 갖고 있지 않더라도 설득력이 생깁니다. 왜냐하면 문제를 접할 수 있는 환경이 있고, 시장에 접근할 수 있는 통로가 있기 때문입니다.
창업에서 환경은 매우 큰 자산입니다.
고객을 만날 수 있는가, 문제를 계속 확인할 수 있는가, 초기 테스트를 해볼 수 있는가, 실제 구매자나 관계자를 만날 수 있는가가 중요합니다.
내 환경에서 나온 아이템은 다음과 같은 장점이 있습니다.
- 실제 시장 문제를 가까이서 볼 수 있다.
- 초기 고객 후보를 찾기 쉽다.
- 현장의 언어로 문제를 설명할 수 있다.
- 시장 진입의 근거를 만들기 쉽다.
- 단순한 아이디어가 아니라 관찰에서 나온 아이템이 된다.
그래서 아이템이 떠오르지 않을 때는 내 주변을 봐야 합니다.
부모님이나 친척은 어떤 일을 하는지, 내가 사는 지역에는 어떤 산업이 많은지, 주변 사람들이 반복해서 겪는 불편함은 무엇인지, 내가 쉽게 접근할 수 있는 고객군은 누구인지 생각해보는 것입니다.
6. 경험과 환경으로 아이템을 좁히기
아이템을 처음 생각하면 너무 넓습니다.
AI도 할 수 있을 것 같고, 플랫폼도 만들 수 있을 것 같고, 제품도 만들 수 있을 것 같고, 앱도 만들 수 있을 것 같습니다. 하지만 넓게 생각할수록 실행은 어려워집니다.
그래서 경험과 환경이라는 두 가지 기준으로 아이템을 좁혀야 합니다.
먼저 나의 경험에서 가능한 문제를 적어봅니다.
- 내가 해본 일에서 발견한 문제
- 내가 배운 분야에서 풀 수 있는 문제
- 내가 참여한 프로젝트에서 알게 된 불편함
- 내가 직접 겪은 문제
그다음 나의 환경에서 가능한 문제를 적어봅니다.
- 가족이나 지인의 업종에서 보이는 문제
- 내가 사는 지역에서 반복되는 문제
- 내가 접근할 수 있는 고객군
- 내가 쉽게 테스트해볼 수 있는 시장
이렇게 적어보면 아이템 후보가 무한정 나오지는 않습니다. 보통 많아도 몇 개 안으로 줄어듭니다.
그다음에는 각각의 후보를 진통제형인지 확인해야 합니다.
- 이 문제가 반복적으로 발생하는가?
- 고객이 이 문제 때문에 시간이나 돈을 잃고 있는가?
- 고객이 이 문제 때문에 스트레스를 받고 있는가?
- 고객이 이미 불편을 줄이기 위해 임시방편을 쓰고 있는가?
- 해결되면 고객이 바로 가치를 느낄 수 있는가?
여기에서 점수가 높은 아이템이 더 검토할 만한 아이템입니다.
좋은 아이템은 단순히 멋있어 보이는 아이템이 아닙니다. 고객이 필요로 하고, 내가 설명할 수 있고, 초기 고객을 만날 수 있으며, 실행 가능성을 보여줄 수 있는 아이템입니다.
7. 심사위원을 설득하는 아이템의 구조
창업 지원사업에서 심사위원은 아이디어 자체만 보지 않습니다. 그 아이디어가 왜 지금 필요하고, 왜 이 사람이 해야 하며, 어떻게 사업이 될 수 있는지를 봅니다.
그래서 아이템을 설명할 때는 다음 구조가 필요합니다.
첫째, 문제의 발견입니다.
"어떤 현장에서 어떤 문제가 반복되고 있다"는 것을 말해야 합니다.
둘째, 문제를 알게 된 배경입니다.
"내가 이 문제를 어떻게 알게 되었는가"를 설명해야 합니다. 이 부분에서 경험과 환경이 중요해집니다.
셋째, 기존 해결 방식의 한계입니다.
이미 있는 방식이 있다면 왜 충분하지 않은지 말해야 합니다.
넷째, 나의 해결 방식입니다.
제품, 서비스, 기술, 플랫폼 등 내가 제안하는 해결책을 설명합니다.
다섯째, 시장성과 수익성입니다.
누가 고객이고, 어떤 방식으로 돈을 낼 수 있는지 말해야 합니다.
여섯째, 실행 가능성입니다.
내가 어떤 자원, 네트워크, 경험, 기술을 바탕으로 이 아이템을 실제로 추진할 수 있는지 보여줘야 합니다.
이 구조로 설명하면 아이템이 단순한 생각에서 사업 계획으로 바뀝니다.
8. 아이템 선정에서 피해야 할 실수
창업 아이템을 정할 때 피해야 할 실수도 있습니다.
첫 번째는 유행어만 붙이는 것입니다.
AI, GPT, IoT 같은 단어가 들어갔다고 해서 좋은 아이템이 되는 것은 아닙니다. 기술은 수단입니다. 먼저 해결할 문제가 분명해야 합니다.
두 번째는 내가 전혀 모르는 시장을 고르는 것입니다.
관심이 있다고 해서 바로 사업화할 수 있는 것은 아닙니다. 시장을 모르면 고객도 흐릿하고, 문제도 흐릿하고, 수익 구조도 흐릿해집니다.
세 번째는 비타민형 아이템을 진통제형 아이템처럼 착각하는 것입니다.
재미있고 보기 좋은 서비스라도 고객이 꼭 필요로 하지 않으면 구매나 사용으로 이어지기 어렵습니다. "좋다"와 "필요하다"는 다릅니다.
네 번째는 이미 강한 경쟁자가 있는 영역에 아무 차별점 없이 들어가는 것입니다.
기존 서비스가 있다면 내가 무엇을 더 잘할 수 있는지 설명해야 합니다. 기능이 조금 다르다는 정도로는 부족할 수 있습니다.
다섯 번째는 고객보다 제품을 먼저 생각하는 것입니다.
"무엇을 만들까?"보다 "누가 어떤 문제로 불편해하고 있는가?"를 먼저 봐야 합니다.
9. 실습: 필요한 아이템 후보 찾기
이제 직접 아이템 후보를 찾아보겠습니다.
먼저 제품이나 서비스를 떠올리기 전에 주변의 불편한 장면을 20개 적어봅니다.
| 고객 | 어떤 상황에서 | 무엇 때문에 불편한가 |
|---|---|---|
| 학생 | 급식 줄을 기다릴 때 | 대기 시간이 길고 순서를 알기 어렵다 |
| 소상공인 | 온라인 홍보물을 만들 때 | 문구 작성과 이미지 제작이 번거롭다 |
| 부모님 사업장 | 고객 문의가 몰릴 때 | 예약과 문의 내용을 정리하기 어렵다 |
그다음 각 문제에 진통제 점수를 매깁니다. 1점은 약하고, 5점은 강하다고 생각하면 됩니다.
| 기준 | 질문 |
|---|---|
| 반복성 | 자주 생기는 문제인가? |
| 고통 크기 | 시간, 돈, 안전, 스트레스 손실이 있는가? |
| 고객 선명도 | 누가 겪는 문제인지 분명한가? |
| 해결 가능성 | 우리가 시제품이나 데모를 만들 수 있는가? |
| 발표성 | 짧게 설명해도 설득되는가? |
마지막으로 가장 점수가 높은 아이템을 한 문장으로 정리합니다.
우리는[고객]이 겪는[문제]를[해결책]으로 해결한다. 기존 방식보다[차별점]이 있고, 고객은[이유]때문에 사용할 것이다.
예를 들면 이렇게 쓸 수 있습니다.
우리는 지역 소상공인이 온라인 홍보 문구를 매번 직접 작성해야 하는 문제를 업종별 AI 홍보 문구 추천 서비스로 해결한다. 기존 대행 방식보다 비용이 낮고 빠르며, 고객은 매장 홍보 시간을 줄일 수 있기 때문에 사용할 것이다.
이 한 문장이 자연스럽게 나오면 아이템이 조금 더 선명해진 것입니다.
마무리
창업 아이템은 갑자기 하늘에서 떨어지는 것이 아닙니다.
그리고 꼭 가장 유행하는 분야에서 찾아야 하는 것도 아닙니다.
좋은 창업 아이템은 보통 내가 지나온 경험, 내가 속한 환경, 내가 접근할 수 있는 시장 안에서 발견됩니다.
아이템을 정할 때는 이렇게 생각해보면 좋습니다.
이 아이템은 비타민인가, 진통제인가?
고객이 이 문제를 반복적으로 겪고 있는가?
내가 이 문제를 왜 알게 되었는가?
내가 이 시장에 어떻게 접근할 수 있는가?
이 질문에 답할 수 있다면 아이템은 훨씬 설득력 있어집니다.
오늘의 핵심 문장은 이것입니다.
창업 아이템은 좋아 보이는 것을 고르는 것이 아니라, 고객에게 필요하고 내가 설득할 수 있는 것을 고르는 것입니다.
그리고 더 짧게 정리하면 이렇게 말할 수 있습니다.
창업의 본질은 문제를 혁신적으로 해결하는 것입니다.
웹페이지 FastAPI 실행과 배포 준비
- 원본 폴더:
260630-웹배포하기 - 카테고리: 웹/배포
웹페이지를 FastAPI로 실행하고 배포 준비하기
이번 시간에 배울 내용
이번 수업에서는 내 컴퓨터에 있는 index.html 파일을 FastAPI 서버로 실행해 봅니다.
HTML 파일은 그냥 더블클릭해서 열 수도 있지만, 실제 웹서비스처럼 동작하게 만들려면 서버를 통해 실행하는 방법을 알아야 합니다. 이번 실습에서는 VS Code에서 작업 폴더를 열고, 터미널에서 FastAPI 실행 명령을 입력해 웹페이지를 브라우저에서 확인합니다.
준비 파일
현재 실습 폴더에는 다음 파일들이 들어 있습니다.
index.html: 브라우저에 보여줄 웹페이지app.py: FastAPI로index.html을 실행하기 위한 파이썬 파일fastapi-실행명령.md: 실행할 명령어를 정리한 파일
1. 작업 폴더 만들기
먼저 바탕화면에 실습에 사용할 작업 폴더를 만듭니다.
예시 화면처럼 바탕화면에 gona라는 폴더를 만들어 주세요. 앞으로 HTML 파일과 파이썬 파일은 이 폴더 안에서 관리합니다.

2. 실습 폴더 선택하기
VS Code를 실행한 뒤 왼쪽 위의 File 메뉴를 클릭하고 Open Folder...를 선택합니다.
VS Code가 처음 열렸을 때 화면에 따라 메뉴 모양은 조금 다를 수 있습니다. 중요한 것은 위쪽의 File을 클릭한 다음 Open Folder...로 폴더를 여는 것입니다.

만약 시작 화면이 보인다면 가운데에 있는 Open Folder...를 눌러도 같은 방식으로 폴더를 열 수 있습니다.

파일 탐색기 창이 열리면 바탕화면에 만든 gona 폴더를 선택합니다.

3. 파일 목록 확인하기
폴더를 열면 VS Code 왼쪽 탐색기 영역에 파일 목록이 나타납니다. 여기에서 app.py, index.html, fastapi-실행명령.md 파일을 확인할 수 있습니다.
4. 기본 터미널 설정하기
명령어를 입력하기 전에 VS Code의 기본 터미널을 Command Prompt로 설정합니다.
위쪽 메뉴에서 Terminal을 클릭하고 New Terminal을 선택합니다.

터미널이 열리면 터미널 오른쪽의 아래쪽 화살표 버튼을 누릅니다. 메뉴에서 Select Default Profile을 선택합니다.

목록이 나오면 Command Prompt를 선택합니다.

이렇게 설정해 두면 앞으로 새 터미널을 열 때 명령 프롬프트가 기본으로 실행됩니다.
5. 통합 터미널 열기
VS Code 왼쪽 파일 목록에서 app.py 또는 작업 폴더를 마우스 오른쪽 버튼으로 클릭한 뒤 Open in Integrated Terminal을 선택합니다.
이렇게 하면 현재 작업 폴더 위치에서 바로 명령어를 입력할 수 있는 터미널이 열립니다.

6. 파이썬 버전 확인하기
FastAPI를 설치하기 전에 내 컴퓨터에 설치된 파이썬 버전을 먼저 확인합니다.
py -0
이 명령을 입력하면 설치된 파이썬 버전 목록이 나옵니다.
예를 들어 목록에 3.11, 3.12, 3.13이 보이면 수업에서 사용할 버전을 골라 py -3.13처럼 적으면 됩니다.
VS Code에서는 Ctrl + Shift + P를 누른 뒤 Python: Select Interpreter를 검색해서 기본 파이썬을 선택할 수도 있습니다.

목록에서 Python 3.13을 선택하면 VS Code에서 사용할 파이썬을 지정할 수 있습니다.

하지만 오늘 수업에서는 헷갈리지 않도록 명령어를 py -3.13으로 통일해서 사용합니다.
7. FastAPI 설치하기
터미널에 아래 명령을 입력합니다.
py -3.13 -m pip install fastapi uvicorn
이 명령은 FastAPI 서버를 실행하는 데 필요한 패키지를 설치합니다.
참고로 파이썬이 하나만 설치되어 있거나 기본 파이썬 설정이 잘 되어 있다면 아래 명령도 사용할 수 있습니다.
python -m pip install fastapi uvicorn
8. FastAPI 서버 실행하기
설치가 끝나면 먼저 터미널의 현재 위치를 확인합니다.
명령어를 입력하는 줄 앞쪽에 web-hosting-basic 폴더 이름이 보이는지 다시 한번 확인해 주세요. 이 폴더 안에서 실행해야 app.py와 index.html을 제대로 찾을 수 있습니다.

위치가 맞다면 아래 명령을 입력합니다.
py -3.13 -m uvicorn app:app --reload --host 127.0.0.1 --port 8000
참고로 기본 파이썬 설정이 잘 되어 있다면 아래 명령도 사용할 수 있습니다.
python -m uvicorn app:app --reload --host 127.0.0.1 --port 8000
명령어의 의미는 다음과 같습니다.
py -3.13 -m uvicorn: 여러 파이썬 중 3.13 버전으로 uvicorn 서버를 실행합니다.python -m uvicorn: 기본 파이썬으로 uvicorn 서버를 실행합니다.app:app:app.py파일 안에 있는app이라는 FastAPI 객체를 실행합니다.--reload: 파일을 수정하면 서버가 자동으로 다시 실행됩니다.--host 127.0.0.1: 내 컴퓨터에서 접속하도록 설정합니다.--port 8000: 8000번 주소로 서버를 엽니다.
9. 브라우저에서 확인하기
서버가 실행되면 브라우저 주소창에 아래 주소를 입력합니다.
http://127.0.0.1:8000
또는 VS Code 터미널에 표시된 http://127.0.0.1:8000 주소를 Ctrl 키를 누른 상태로 클릭해도 브라우저 창이 열립니다.

이 주소에서 index.html로 만든 웹페이지가 보이면 성공입니다.
10. 공유기 포트포워딩으로 외부 접속하기
지금까지는 내 컴퓨터 안에서만 접속할 수 있는 주소로 확인했습니다.
외부 사람이 내 컴퓨터에서 실행 중인 웹페이지에 접속하게 하려면 공유기에서 포트포워딩을 설정해야 합니다. 포트포워딩은 외부에서 들어온 접속을 내 컴퓨터의 특정 포트로 연결해 주는 설정입니다.
기본 흐름은 다음과 같습니다.
- 내 컴퓨터의 내부 IP 주소를 확인합니다.
- 공유기 관리자 페이지에 접속합니다.
- 외부 포트
8000을 내 컴퓨터 내부 IP의8000포트로 연결합니다. - Windows 방화벽에서 Python 또는
8000포트를 허용합니다. - 외부 인터넷에서
http://공인IP:8000주소로 접속을 확인합니다.
주의할 점도 있습니다.
- 집 인터넷 환경에 따라 공인 IP가 없을 수 있습니다.
- 컴퓨터가 꺼지면 다른 사람이 접속할 수 없습니다.
- 공유기, 방화벽, 통신사 환경에 따라 설정 방법이 다를 수 있습니다.
- 보안상 임시 실습 용도로만 사용하는 것이 좋습니다.
11. 터널링 프로그램으로 임시 공개 주소 만들기
포트포워딩이 어렵다면 터널링 프로그램을 사용할 수 있습니다.
터널링은 내 컴퓨터에서 실행 중인 localhost:8000 주소를 외부에서 접속 가능한 임시 주소로 연결해 주는 방식입니다.
대표적인 프로그램은 다음과 같습니다.
- ngrok
- Cloudflare Tunnel
- localtunnel
예를 들어 FastAPI 서버를 먼저 실행합니다.
py -3.13 -m uvicorn app:app --reload --host 127.0.0.1 --port 8000
그다음 ngrok을 사용한다면 아래처럼 입력합니다.
ngrok http 8000
그러면 https://xxxx.ngrok-free.app 같은 임시 공개 주소가 만들어집니다. 이 주소를 다른 사람에게 보내면 내 컴퓨터에서 실행 중인 웹페이지를 확인할 수 있습니다.
참고로 FastAPI가 아니라 HTML 파일만 간단히 테스트할 때는 아래처럼 파이썬 기본 웹서버를 사용할 수도 있습니다.
py -3.13 -m http.server 8000
12. GitHub Pages로 무료 호스팅하기
정적인 HTML 파일은 GitHub Pages로 쉽게 공개할 수 있습니다.
GitHub Pages는 HTML, CSS, JavaScript 파일을 무료 웹주소로 보여주는 기능입니다. 서버 코드를 실행하는 FastAPI와는 다르게, 정적인 웹페이지를 공개할 때 사용하기 좋습니다.
기본 흐름은 다음과 같습니다.
- GitHub 저장소를 만듭니다.
- HTML 파일을 업로드합니다.
- 저장소의
Settings로 이동합니다. Pages메뉴에서 배포할 브랜치를 선택합니다.- 생성된 GitHub Pages 주소로 접속합니다.
예시 주소는 다음과 같습니다.
https://아이디.github.io/저장소이름/
특정 HTML 파일로 접속할 때는 파일 이름까지 붙일 수 있습니다.
https://아이디.github.io/저장소이름/index.html
13. 도메인 연결하기
후이즈, 가비아 같은 도메인 등록 업체에서 도메인을 구매한 뒤 GitHub Pages 또는 서버에 연결할 수 있습니다.
기본 개념은 다음과 같습니다.
- 도메인: 사람이 읽기 쉬운 웹주소입니다.
- DNS: 도메인을 실제 서버 주소로 연결하는 설정입니다.
- A 레코드: 도메인을 IP 주소로 연결합니다.
- CNAME 레코드: 도메인을 다른 도메인 주소로 연결합니다.
GitHub Pages에 도메인을 연결할 때는 보통 CNAME 설정을 사용합니다.
예시는 다음과 같습니다.
www.example.com -> 아이디.github.io
즉, 사용자는 www.example.com으로 접속하지만 실제로는 GitHub Pages 주소로 연결되는 구조입니다.
14. 제출할 것
수업을 마친 뒤에는 아래 내용을 제출합니다.
- 완성한 HTML 파일
- 브라우저에서 열린 화면 캡처
- 어떤 방식으로 호스팅했는지 한 줄 설명
- 접속 주소
예시는 다음과 같습니다.
FastAPI로 로컬 서버를 실행했고, http://127.0.0.1:8000 주소에서 확인했습니다.
또는 외부 공개까지 했다면 아래처럼 적을 수 있습니다.
ngrok으로 임시 공개 주소를 만들었고, https://xxxx.ngrok-free.app 주소에서 확인했습니다.
정리
이번 실습의 핵심은 다음 세 가지입니다.
- VS Code에서 웹페이지 파일이 들어 있는 폴더를 연다.
- 통합 터미널에서 FastAPI 실행 명령을 입력한다.
- 브라우저에서
http://127.0.0.1:8000주소로 결과를 확인한다.
HTML 파일을 서버로 실행하는 방법을 익히면 이후 GitHub, Render, Railway, Vercel 같은 서비스에 올려 실제 웹주소로 배포하는 과정도 이해하기 쉬워집니다.
마지막으로 이 문장을 기억해 주세요.
웹페이지는 파일이고, 호스팅은 그 파일을 다른 사람이 접속할 수 있는 위치에 올리는 일입니다.
아두이노 기초 입문
- 원본 폴더:
260630-아두이노-기초-입문 - 카테고리: ICT-IOT
블링크 코드로 시작하는 아두이노 기초 입문 발표 스크립트
교육의 목적
이번 교육의 목적은 아두이노를 단순히 LED를 켜는 보드로 이해하는 데서 멈추지 않고, 센서와 출력 장치를 연결해 현실 세계와 상호작용하는 작은 제어 장치로 이해하는 데 있습니다.
아두이노를 처음 배우는 분들은 보통 두 가지 지점에서 막힙니다.
첫째, 회로와 부품 이름이 낯섭니다.
LED, 저항, 브레드보드, GND, 디지털 핀, 아날로그 핀 같은 말이 한꺼번에 나오면 시작하기 전부터 어렵게 느껴집니다.
둘째, 코드가 낯섭니다.
setup()과 loop()가 왜 있는지, pinMode()와 digitalWrite()가 무슨 뜻인지, 숫자 13과 1000이 왜 반복해서 나오는지 모르면 코드를 복사해서 실행해도 오래 기억에 남지 않습니다.
그래서 이번 강의는 아두이노 기초를 너무 작게 다루지 않습니다. 아두이노를 처음 배우는 사람이 이후 계속 마주치게 되는 중요한 개념을 한 번에 정리합니다.
다만 모든 것을 외우게 하려는 강의는 아닙니다. 이 강의의 핵심은 흐름을 잡는 것입니다.
센서가 읽고, 코드가 판단하고, 액추에이터가 반응한다.
이 문장을 중심으로 아두이노를 이해하면 됩니다.
전체 세션 목차
- 아두이노는 무엇인가
- 아두이노를 컴퓨터와 비교하며 설명합니다.
- 입력과 출력의 구분
- 센서와 액추에이터의 차이를 이해합니다.
- 아두이노 보드와 핀 구조 이해하기
- 디지털 핀, 아날로그 핀, PWM 핀, 전원 핀, GND를 살펴봅니다.
- 전기와 회로의 아주 기초
- 전압, 전류, 저항, LED, 브레드보드의 기본을 이해합니다.
- 통합 개발환경 IDE 이해하기
- Arduino IDE에서 코드를 작성하고 업로드하는 흐름을 봅니다.
- 블링크 예제로 시작하기
setup(),loop(),pinMode(),digitalWrite(),delay()를 이해합니다.
- 주석의 의미와 코드 읽는 법
- 주석을 통해 코드의 의도를 읽고 남기는 방법을 배웁니다.
- 변수와 데이터 타입
int,float,char,bool을 메모리와 데이터 할당 관점에서 이해합니다.
- 디지털 신호와 아날로그 신호
- 버튼, PIR 센서, 조도 센서, 가변저항, DHT 센서를 예시로 신호 차이를 이해합니다.
- PWM으로 LED 밝기 조절하기
- 디지털 출력으로 밝기를 조절하는 원리를 이해합니다.
- 조건문과 반복문 기초
- 조건에 따라 반응하고, 반복되는 동작을 줄이는 방법을 배웁니다.
- 시리얼 모니터로 아두이노와 대화하기
- 센서값과 변수값을 컴퓨터 화면에서 확인합니다.
- 라이브러리란 무엇인가
- 복잡한 기능을 쉽게 쓰기 위한 코드 묶음의 개념을 이해합니다.
- DHT11/DHT22 온습도 센서 사용하기
- 라이브러리를 사용해 온도와 습도 값을 읽습니다.
- 업로드와 컴파일 오류 읽기
- 오류 메시지를 실패가 아니라 힌트로 읽는 방법을 익힙니다.
- 지금은 깊게 들어가지 않아도 되는 내용
- 입문 이후에 배울 내용과 지금 집중해야 할 범위를 정리합니다.
1. 아두이노는 무엇인가
먼저 아두이노가 무엇인지부터 보겠습니다.
아두이노를 처음 보면 작은 회로판처럼 보입니다. 그래서 어떤 분들은 "이게 컴퓨터인가요?"라고 묻기도 합니다.
맞습니다. 넓게 보면 아두이노도 컴퓨터의 한 종류라고 말할 수 있습니다. 하지만 우리가 평소에 쓰는 노트북이나 데스크톱 컴퓨터와는 목적이 다릅니다.
일반 컴퓨터는 화면, 키보드, 마우스, 파일, 인터넷, 프로그램을 중심으로 동작합니다. 문서를 쓰고, 영상을 보고, 웹사이트에 접속하고, 여러 프로그램을 동시에 실행합니다.
반면 아두이노는 그런 일을 잘하려고 만들어진 장치가 아닙니다.
아두이노는 현실 세계의 장치를 읽고 제어하는 데 강합니다.
예를 들어 이런 일을 할 수 있습니다.
- 버튼이 눌렸는지 확인합니다.
- 방이 어두워졌는지 확인합니다.
- 온도와 습도를 읽습니다.
- 사람이 가까이 왔는지 감지합니다.
- LED를 켭니다.
- 부저로 소리를 냅니다.
- 모터를 움직입니다.
즉, 일반 컴퓨터가 화면 속 정보를 다루는 데 강하다면, 아두이노는 현실의 물건과 연결되는 데 강합니다.
아두이노 안에는 마이크로컨트롤러라는 작은 칩이 있습니다. 이 칩은 우리가 업로드한 코드를 계속 실행합니다. 복잡한 운영체제를 돌리거나 여러 프로그램을 동시에 실행하는 PC와는 다르게, 아두이노는 정해진 코드를 단순하고 안정적으로 반복하는 데 적합합니다.
그래서 아두이노를 이렇게 이해하면 좋습니다.
아두이노는 센서로 현실을 읽고, 코드로 판단하고, LED나 모터 같은 장치를 움직이는 작은 제어 장치입니다.
생활 속 예시로 생각해보겠습니다.
자동 조명은 주변이 어두워지면 불이 켜집니다.
스마트 화분은 흙이 마르면 물이 필요하다고 알려줍니다.
거리 감지 장치는 사람이 가까이 오면 소리를 냅니다.
온습도 측정기는 현재 온도와 습도를 읽어서 화면이나 컴퓨터로 보여줍니다.
이런 장치들의 공통점은 모두 입력과 출력이 있다는 점입니다.
2. 입력과 출력의 구분
아두이노를 이해할 때 가장 중요한 구조는 입력과 출력입니다.
입력은 아두이노가 바깥 세계에서 정보를 읽는 것입니다.
출력은 아두이노가 바깥 세계로 반응을 내보내는 것입니다.
입력 장치에는 여러 종류가 있습니다.
버튼은 사람이 눌렀는지 안 눌렀는지를 알려줍니다.
조도 센서는 주변이 얼마나 밝은지 알려줍니다.
온습도 센서는 현재 온도와 습도를 알려줍니다.
거리 센서는 물체가 얼마나 가까운지 알려줍니다.
토양 수분 센서는 흙이 얼마나 젖어 있는지 알려줍니다.
이런 입력 장치를 보통 센서라고 부릅니다.
센서는 현실 세계의 상태를 아두이노가 이해할 수 있는 값으로 바꿔주는 장치입니다.
반대로 출력 장치는 아두이노가 명령을 내렸을 때 실제로 반응하는 장치입니다.
LED는 빛을 냅니다.
부저는 소리를 냅니다.
서보모터는 정해진 각도로 움직입니다.
DC모터는 회전합니다.
릴레이는 더 큰 전기 장치를 켜고 끄는 스위치 역할을 할 수 있습니다.
이런 출력 장치를 액추에이터라고 부르기도 합니다.
액추에이터는 코드의 판단을 현실의 움직임이나 빛, 소리로 바꿔주는 장치입니다.
아두이노의 전체 흐름은 아주 단순하게 정리할 수 있습니다.
입력 -> 판단 -> 출력
예를 들어 자동 조명을 생각해보겠습니다.
조도 센서가 주변 밝기를 읽습니다. 이것이 입력입니다.
코드는 밝기 값이 기준보다 낮은지 판단합니다. 이것이 판단입니다.
어두우면 LED를 켭니다. 이것이 출력입니다.
이 흐름을 잡고 있으면 이후 어떤 센서를 배우더라도 훨씬 덜 헷갈립니다.
수업 내내 이 문장을 반복해도 좋습니다.
센서가 읽고, 코드가 판단하고, 액추에이터가 반응한다.
3. 아두이노 보드와 핀 구조 이해하기
이제 아두이노 보드를 보겠습니다.
아두이노에는 여러 종류가 있지만, 입문에서는 Arduino UNO를 기준으로 설명하는 경우가 많습니다. UNO는 자료가 많고, 예제가 많고, 처음 배우기에 구조가 비교적 명확합니다.
먼저 USB 포트가 있습니다.
USB 포트는 컴퓨터와 아두이노를 연결합니다. 이 연결을 통해 코드를 업로드할 수 있고, 컴퓨터에서 전원을 공급할 수도 있습니다. 시리얼 모니터를 통해 아두이노가 보내는 값을 확인할 때도 USB 연결을 사용합니다.
다음으로 디지털 핀이 있습니다.
디지털 핀은 보통 0, 1, 2, 3처럼 번호가 붙어 있습니다. 디지털 핀은 켜짐과 꺼짐, 즉 HIGH와 LOW 같은 신호를 다룰 때 사용합니다.
LED를 켜고 끄거나, 버튼이 눌렸는지 읽을 때 디지털 핀을 사용합니다.
다음으로 아날로그 입력 핀이 있습니다.
아날로그 입력 핀은 보통 A0, A1, A2처럼 표시됩니다. 밝기, 소리, 가변저항처럼 중간값이 계속 변하는 값을 읽을 때 사용합니다.
Arduino UNO 기준으로 아날로그 입력을 읽으면 보통 0부터 1023 사이의 값으로 읽힙니다.
또 하나 중요한 것이 PWM 지원 핀입니다.
보드에서 핀 번호 옆에 ~ 표시가 있는 경우가 있습니다. 이 핀들은 PWM 출력을 지원합니다. PWM은 LED 밝기나 모터 속도처럼 세기를 조절할 때 사용합니다.
전원 핀도 중요합니다.
5V는 5볼트 전원을 제공합니다.
3.3V는 3.3볼트 전원을 제공합니다.
GND는 그라운드입니다.
GND는 회로에서 기준점이 됩니다. 많은 초보자가 GND 연결을 빠뜨려서 회로가 동작하지 않는 경우가 많습니다. 전기는 한쪽으로 나가기만 해서는 흐르지 않습니다. 다시 돌아오는 길이 있어야 합니다. 그래서 센서나 LED를 연결할 때 GND를 함께 연결하는 것이 매우 중요합니다.
코드가 맞는데 동작하지 않는다면, 핀 번호와 GND 연결을 가장 먼저 확인해보는 습관이 필요합니다.
4. 전기와 회로의 아주 기초
아두이노를 배우려면 전기회로를 아주 깊게 알 필요는 없습니다. 하지만 최소한의 개념은 알아야 합니다.
먼저 전압입니다.
전압은 전기를 밀어주는 힘으로 생각할 수 있습니다. 물의 흐름에 비유하면 물을 밀어주는 압력과 비슷합니다. 아두이노에서는 5V, 3.3V 같은 표현을 자주 보게 됩니다.
다음은 전류입니다.
전류는 실제로 흐르는 전기의 양입니다. 물의 흐름에 비유하면 실제로 흐르는 물의 양과 비슷합니다.
다음은 저항입니다.
저항은 전류의 흐름을 줄이는 성질입니다. LED를 연결할 때 저항을 함께 사용하는 이유가 여기에 있습니다.
LED는 전기가 흐르면 빛을 내는 부품입니다. 그런데 LED에 너무 많은 전류가 흐르면 LED가 손상될 수 있습니다. 그래서 LED 앞이나 뒤에 저항을 연결해 전류를 적당히 줄여줍니다.
LED에는 방향이 있습니다.
보통 긴 다리가 플러스 쪽, 짧은 다리가 마이너스 또는 GND 쪽입니다. LED를 반대로 연결하면 빛이 나지 않을 수 있습니다.
브레드보드는 납땜 없이 회로를 연결해볼 수 있는 판입니다.
브레드보드 내부에는 줄마다 금속 연결이 되어 있습니다. 겉으로는 구멍만 보이지만, 실제로는 같은 줄끼리 연결되어 있는 구조입니다. 그래서 브레드보드의 연결 방향을 이해하지 못하면 선을 꽂아도 회로가 이어지지 않을 수 있습니다.
회로에서 중요한 것은 닫힌 길입니다.
전원에서 출발한 전류가 부품을 지나 다시 GND로 돌아올 수 있어야 합니다. 중간에 길이 끊기면 전류가 흐르지 않고, LED도 켜지지 않습니다.
초보자가 자주 하는 실수는 다음과 같습니다.
- LED 방향을 반대로 꽂습니다.
- 저항 없이 LED를 연결합니다.
- GND 연결을 빠뜨립니다.
- 브레드보드 내부 연결 방향을 착각합니다.
- 코드의 핀 번호와 실제 연결한 핀 번호가 다릅니다.
이런 실수는 매우 자연스럽습니다. 중요한 것은 회로가 동작하지 않을 때 무작정 포기하지 않고, 전원, GND, 핀 번호, 부품 방향을 차례로 확인하는 것입니다.
5. 통합 개발환경 IDE 이해하기
이제 코드를 작성하는 도구를 보겠습니다.
IDE는 Integrated Development Environment의 줄임말입니다. 우리말로는 통합 개발환경이라고 합니다.
이름은 어렵지만, 역할은 단순합니다.
IDE는 코드를 쓰고, 확인하고, 아두이노 보드에 업로드하는 프로그램입니다.
글을 쓰기 위해 워드프로세서를 사용하는 것처럼, 아두이노 코드를 작성하고 보드에 넣기 위해 Arduino IDE를 사용합니다.
Arduino IDE에서 중요한 부분은 몇 가지입니다.
첫째, 코드 작성 공간입니다.
여기에 아두이노가 실행할 코드를 작성합니다.
둘째, 확인 버튼입니다.
확인 버튼은 코드에 문법 오류가 있는지 검사하고 컴파일합니다.
컴파일은 사람이 작성한 코드를 아두이노가 이해할 수 있는 형태로 바꾸는 과정입니다.
셋째, 업로드 버튼입니다.
업로드는 컴파일된 코드를 실제 아두이노 보드에 넣는 과정입니다.
넷째, 보드 선택입니다.
Arduino UNO를 사용한다면 IDE에서도 보드를 UNO로 선택해야 합니다. 보드를 잘못 선택하면 업로드가 실패할 수 있습니다.
다섯째, 포트 선택입니다.
컴퓨터에 연결된 아두이노가 어느 통로로 연결되어 있는지 선택하는 것입니다. 포트가 잘못되면 컴퓨터가 어느 장치에 코드를 넣어야 하는지 알 수 없습니다.
여섯째, 시리얼 모니터입니다.
아두이노에는 화면이 없기 때문에, 센서값이나 변수값을 확인하려면 컴퓨터 화면으로 값을 보내야 합니다. 이때 시리얼 모니터를 사용합니다.
IDE는 이렇게 설명할 수 있습니다.
IDE는 아두이노에게 줄 명령서를 작성하고, 검사하고, 전달하는 작업실입니다.
6. 블링크 예제로 시작하기
아두이노 입문에서 가장 유명한 예제는 블링크입니다.
블링크는 LED를 깜빡이게 하는 예제입니다.
겉으로 보기에는 단순합니다. 하지만 블링크 안에는 아두이노 코드의 핵심 구조가 들어 있습니다.
기본 코드는 다음과 같습니다.
void setup() {
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
먼저 setup()을 보겠습니다.
setup()은 아두이노가 시작될 때 한 번만 실행되는 부분입니다.
여기에는 보통 준비 작업을 적습니다.
예를 들어 몇 번 핀을 입력으로 쓸지, 몇 번 핀을 출력으로 쓸지 정합니다. 시리얼 통신을 시작할 때도 setup() 안에 적습니다.
다음은 loop()입니다.
loop()는 이름 그대로 계속 반복되는 부분입니다.
아두이노는 전원이 켜져 있는 동안 loop() 안의 코드를 반복해서 실행합니다.
그래서 아두이노 코드는 기본적으로 이렇게 이해하면 됩니다.
처음 한 번 준비하고, 그다음 계속 반복한다.
이제 pinMode(13, OUTPUT);을 보겠습니다.
이 코드는 13번 핀을 출력으로 사용하겠다는 뜻입니다.
출력은 아두이노가 바깥으로 신호를 내보내는 것입니다. LED를 켜려면 아두이노가 LED 쪽으로 신호를 보내야 하므로 출력으로 설정합니다.
digitalWrite(13, HIGH);는 13번 핀을 HIGH 상태로 만듭니다. LED가 연결되어 있다면 켜집니다.
digitalWrite(13, LOW);는 13번 핀을 LOW 상태로 만듭니다. LED가 꺼집니다.
delay(1000);은 1000밀리초 동안 기다리라는 뜻입니다. 1000밀리초는 1초입니다.
따라서 이 코드는 이렇게 동작합니다.
13번 핀을 출력으로 준비합니다.
LED를 켭니다.
1초 기다립니다.
LED를 끕니다.
1초 기다립니다.
이 과정을 계속 반복합니다.
여기서 중요한 것은 단순히 LED가 깜빡인다는 결과가 아닙니다.
코드 한 줄을 바꾸면 현실의 장치 동작이 바뀐다는 경험입니다.
delay(1000)을 delay(200)으로 바꾸면 LED가 더 빠르게 깜빡입니다.
delay(2000)으로 바꾸면 LED가 더 느리게 깜빡입니다.
이렇게 코드와 현실의 반응이 연결되는 순간이 아두이노의 핵심 재미입니다.
7. 주석의 의미와 코드 읽는 법
코드를 배우다 보면 //로 시작하는 문장을 보게 됩니다.
이것을 주석이라고 합니다.
주석은 컴퓨터가 실행하지 않는 설명문입니다.
예를 들어 다음 코드를 보겠습니다.
// 13번 핀을 LED 출력으로 사용한다
pinMode(13, OUTPUT);
여기서 // 13번 핀을 LED 출력으로 사용한다는 아두이노가 실행하지 않습니다. 사람을 위한 설명입니다.
주석은 초보자에게 특히 중요합니다.
처음에는 코드가 낯설기 때문에, 각 줄 옆에 설명을 적어두면 나중에 다시 볼 때 훨씬 쉽게 이해할 수 있습니다.
주석은 다른 사람을 위한 메모이기도 하지만, 사실 가장 많이 도움을 받는 사람은 미래의 나입니다.
오늘은 이해한 코드도 며칠 뒤에 보면 낯설 수 있습니다. 그때 주석이 있으면 "아, 이 줄은 핀을 출력으로 설정하는 부분이었지" 하고 빠르게 기억할 수 있습니다.
여러 줄 주석도 있습니다.
/*
이 코드는 LED를 1초 간격으로 깜빡이는 예제입니다.
setup에서는 핀을 준비하고,
loop에서는 켜고 끄는 동작을 반복합니다.
*/
다만 주석을 너무 많이 쓰는 것도 좋지는 않습니다.
좋은 주석은 코드만 봐서는 바로 알기 어려운 의도나 이유를 설명합니다.
예를 들어 delay(1000); 옆에 // 1초 기다림이라고 적는 것은 초보 단계에서는 도움이 됩니다.
하지만 어느 정도 익숙해진 뒤에는 "왜 1초를 기다리는지"를 적는 주석이 더 좋습니다.
delay(1000); // LED가 켜진 상태를 눈으로 확인할 수 있도록 1초 유지
주석은 코드의 뜻을 설명하는 작은 안내판입니다.
8. 변수와 데이터 타입
이제 변수와 데이터 타입을 보겠습니다.
블링크 코드에는 숫자가 직접 들어가 있습니다.
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
delay(1000);
여기서 13은 LED가 연결된 핀 번호입니다.
1000은 기다리는 시간입니다.
처음에는 이렇게 숫자를 직접 써도 괜찮습니다. 하지만 코드가 길어지면 문제가 생깁니다.
예를 들어 LED를 13번 핀이 아니라 9번 핀으로 옮겼다고 생각해봅시다. 코드 안에 13이 여러 번 들어 있다면, 그 숫자를 모두 찾아서 바꿔야 합니다.
이때 변수를 사용하면 편합니다.
int ledPin = 13;
int waitTime = 1000;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
digitalWrite(ledPin, HIGH);
delay(waitTime);
digitalWrite(ledPin, LOW);
delay(waitTime);
}
변수는 값을 담아두는 이름 붙은 공간입니다.
ledPin이라는 공간에 13을 담아두고, waitTime이라는 공간에 1000을 담아둔 것입니다.
이제 LED 핀 번호를 바꾸고 싶으면 맨 위의 int ledPin = 13;만 수정하면 됩니다.
그런데 여기서 int라는 말이 나옵니다.
int는 데이터 타입입니다.
데이터 타입은 이 값이 어떤 종류의 값인지, 그리고 메모리에 어떤 크기와 방식으로 저장할지를 정하는 약속입니다.
사람은 100이라는 값을 보고 상황에 따라 점수, 온도, 개수, 문자 코드처럼 이해할 수 있습니다. 하지만 아두이노는 스스로 의미를 추측하지 못합니다.
그래서 우리가 코드로 알려줘야 합니다.
int count = 100;
float temperature = 24.7;
char grade = 'A';
bool buttonPressed = true;
int는 정수를 저장합니다.
핀 번호, 반복 횟수, 대기 시간처럼 소수점이 필요 없는 숫자에 자주 사용합니다.
float는 소수점이 있는 숫자를 저장합니다.
온도 24.7, 습도 53.2, 거리 12.5처럼 정밀한 값이 필요할 때 사용합니다.
char는 문자 하나를 저장합니다.
예를 들어 'A', 'B', 'Y', 'N' 같은 문자 하나입니다.
bool은 참과 거짓을 저장합니다.
버튼이 눌렸는지, LED가 켜져 있는지, 경고 상태인지처럼 두 가지 상태를 표현할 때 사용합니다.
여기서 중요한 점이 있습니다.
데이터 타입은 단순히 개념 구분만 하는 것이 아닙니다.
아두이노의 메모리에 데이터를 어떻게 할당할지 정하는 일이기도 합니다.
아두이노는 일반 PC보다 메모리가 훨씬 작습니다. 그래서 값을 저장할 때 필요한 만큼만 적절하게 사용하는 감각이 중요합니다.
예를 들어 LED 핀 번호는 13처럼 작은 정수입니다. 여기에 소수점이 필요하지 않습니다.
int ledPin = 13;
이렇게 정수 타입으로 충분합니다.
반면 온도는 24.7처럼 소수점이 필요할 수 있습니다.
float temperature = 24.7;
버튼 상태는 눌림 또는 안 눌림이면 됩니다.
bool buttonPressed = false;
이런 값을 굳이 복잡한 숫자 타입으로 저장할 필요가 없습니다.
데이터 타입은 물건에 맞는 보관함을 고르는 것과 비슷합니다.
작은 물건을 너무 큰 상자에 넣으면 공간이 낭비됩니다.
큰 물건을 너무 작은 상자에 넣으면 제대로 들어가지 않거나 값이 이상해질 수 있습니다.
소수점이 필요한 값을 정수 타입에 넣으면 소수점 아래가 사라지는 문제가 생길 수 있습니다.
참/거짓만 필요한 값에 숫자를 복잡하게 쓰면 코드의 의미가 흐려집니다.
그래서 변수와 데이터 타입을 배울 때는 "문법"으로만 외우지 말고 이렇게 이해하는 것이 좋습니다.
변수는 값을 담는 공간이고, 데이터 타입은 그 공간의 크기와 해석 방식을 정하는 약속입니다.
9. 디지털 신호와 아날로그 신호
이제 신호에 대해 보겠습니다.
아두이노에서 가장 많이 듣는 말 중 하나가 디지털과 아날로그입니다.
디지털 신호는 상태가 분명한 신호입니다.
켜짐 또는 꺼짐.
1 또는 0.
HIGH 또는 LOW.
참 또는 거짓.
이런 식으로 나뉩니다.
버튼을 예로 들어보겠습니다.
버튼은 눌렸거나, 눌리지 않았거나 둘 중 하나로 볼 수 있습니다.
int buttonState = digitalRead(2);
이 코드는 2번 핀에 연결된 버튼 상태를 읽습니다.
결과는 보통 HIGH 또는 LOW입니다.
PIR 인체 감지 센서도 디지털 센서처럼 동작하는 경우가 많습니다.
사람의 움직임이 감지되면 HIGH, 감지되지 않으면 LOW처럼 값을 보냅니다.
문 열림 센서도 마찬가지입니다.
문이 열렸는지 닫혔는지처럼 상태가 두 가지로 나뉘는 경우 디지털 신호로 이해하기 좋습니다.
반면 아날로그 신호는 중간값이 있습니다.
밝기, 소리 크기, 수분 정도, 가변저항의 회전 정도처럼 값이 연속적으로 변합니다.
int lightValue = analogRead(A0);
이 코드는 A0 핀으로 들어오는 아날로그 값을 읽습니다.
Arduino UNO 기준으로 보통 0부터 1023 사이의 값으로 읽습니다.
조도 센서를 예로 들어보겠습니다.
방이 아주 어두우면 값이 낮게 나오고, 밝으면 값이 높게 나올 수 있습니다. 회로 구성에 따라 반대로 나오는 경우도 있지만, 중요한 것은 값이 두 개만 있는 것이 아니라 계속 변한다는 점입니다.
가변저항도 좋은 예시입니다.
손잡이를 조금 돌리면 값이 조금 변하고, 많이 돌리면 값이 많이 변합니다. 이 값을 LED 밝기나 모터 속도 조절에 사용할 수 있습니다.
토양 수분 센서는 흙이 마른 정도와 젖은 정도에 따라 값이 달라집니다. 스마트 화분 프로젝트에서 많이 사용합니다.
여기서 한 가지 더 중요한 점이 있습니다.
센서를 무조건 디지털 센서와 아날로그 센서로만 단순하게 나누면 헷갈릴 수 있습니다.
센서는 두 가지 관점으로 봐야 합니다.
첫째, 무엇을 측정하는가.
둘째, 아두이노에게 값을 어떤 방식으로 전달하는가.
예를 들어 DHT11과 DHT22는 온도와 습도를 측정합니다. 온도와 습도는 연속적으로 변하는 값입니다. 그래서 측정 대상만 보면 아날로그적인 값처럼 느껴집니다.
하지만 DHT 센서는 아두이노의 analogRead()로 단순히 읽지 않습니다. 센서 내부에서 측정한 값을 정해진 디지털 통신 방식으로 보내기 때문입니다.
그래서 DHT 센서는 라이브러리를 사용해 읽습니다.
이 차이를 이해하는 것이 중요합니다.
버튼은 상태 자체가 눌림과 안 눌림으로 분명합니다.
조도 센서는 밝기의 정도를 읽습니다.
PIR 센서는 움직임 감지 여부를 보냅니다.
DHT 센서는 온도와 습도라는 연속적인 값을 측정하지만, 전달 방식은 디지털 통신입니다.
정리하면 이렇습니다.
디지털 신호는 상태를 판단하기 좋습니다.
아날로그 신호는 정도를 측정하기 좋습니다.
라이브러리를 쓰는 센서는 측정값이 연속적이더라도 전달 방식이 복잡할 수 있습니다.
10. PWM으로 LED 밝기 조절하기
디지털 출력은 기본적으로 켜짐과 꺼짐입니다.
그렇다면 LED 밝기를 중간 정도로 조절하려면 어떻게 해야 할까요?
디지털은 HIGH와 LOW만 있으니 중간이 없어 보입니다.
이때 사용하는 것이 PWM입니다.
PWM은 Pulse Width Modulation의 줄임말입니다. 우리말로는 펄스 폭 변조라고 합니다.
말은 어렵지만 원리는 단순합니다.
전기를 진짜로 약하게 보내는 것이 아니라, 아주 빠르게 켰다 껐다 하면서 약하게 켜진 것처럼 보이게 만드는 방식입니다.
예를 들어 LED를 아주 빠르게 켰다 껐다 한다고 생각해보겠습니다.
켜져 있는 시간이 짧고 꺼져 있는 시간이 길면 LED는 어둡게 보입니다.
켜져 있는 시간과 꺼져 있는 시간이 비슷하면 중간 밝기로 보입니다.
켜져 있는 시간이 길고 꺼져 있는 시간이 짧으면 밝게 보입니다.
사람의 눈은 너무 빠른 깜빡임을 구분하지 못하기 때문에 LED가 중간 밝기로 켜진 것처럼 느낍니다.
이때 전체 시간 중 켜져 있는 시간의 비율을 듀티비라고 합니다.
듀티비가 0%이면 계속 꺼져 있습니다.
듀티비가 50%이면 절반 정도 켜져 있고 절반 정도 꺼져 있습니다.
듀티비가 100%이면 계속 켜져 있습니다.
아두이노에서는 PWM을 사용할 때 analogWrite()를 사용합니다.
int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
analogWrite(ledPin, 50);
delay(1000);
analogWrite(ledPin, 150);
delay(1000);
analogWrite(ledPin, 255);
delay(1000);
}
analogWrite()라는 이름 때문에 진짜 아날로그 출력처럼 보일 수 있습니다.
하지만 Arduino UNO 기준에서는 실제로 중간 전압을 계속 내보내는 것이 아니라 PWM 방식으로 빠르게 켜고 끄는 것입니다.
값은 보통 0부터 255까지 사용합니다.
0은 꺼짐입니다.
255는 최대 밝기입니다.
중간값은 중간 밝기처럼 보입니다.
주의할 점은 모든 핀이 PWM을 지원하지는 않는다는 것입니다.
Arduino UNO에서는 보통 3, 5, 6, 9, 10, 11번 핀이 PWM을 지원합니다. 보드 위에 ~ 표시가 있는 핀을 확인하면 됩니다.
그래서 PWM 실습에서는 13번 핀보다 9번 핀 같은 PWM 지원 핀을 사용하는 것이 좋습니다.
LED를 서서히 밝아졌다가 어두워지게 할 수도 있습니다.
int ledPin = 9;
void setup() {
pinMode(ledPin, OUTPUT);
}
void loop() {
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(ledPin, brightness);
delay(10);
}
for (int brightness = 255; brightness >= 0; brightness--) {
analogWrite(ledPin, brightness);
delay(10);
}
}
이 예제에서는 brightness 값이 0부터 255까지 증가하면서 LED가 점점 밝아집니다.
다시 255부터 0까지 감소하면서 LED가 점점 어두워집니다.
PWM은 나중에 센서값과도 연결할 수 있습니다.
예를 들어 조도 센서값이 어두울수록 LED를 밝게 만들거나, 가변저항을 돌리는 정도에 따라 LED 밝기를 조절할 수 있습니다.
11. 조건문과 반복문 기초
아두이노가 재미있어지는 순간은 조건에 따라 다르게 반응할 때입니다.
예를 들어 버튼이 눌리면 LED를 켜고, 버튼이 눌리지 않으면 LED를 끄고 싶다고 해봅시다.
이때 조건문을 사용합니다.
int buttonPin = 2;
int ledPin = 13;
void setup() {
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop() {
int buttonState = digitalRead(buttonPin);
if (buttonState == HIGH) {
digitalWrite(ledPin, HIGH);
} else {
digitalWrite(ledPin, LOW);
}
}
if는 만약이라는 뜻입니다.
buttonState == HIGH라면 LED를 켭니다.
그렇지 않으면 LED를 끕니다.
여기서 ==는 같은지 비교하는 연산자입니다. 변수에 값을 넣을 때 사용하는 =와 다릅니다.
센서값에도 조건문을 사용할 수 있습니다.
int lightValue = analogRead(A0);
if (lightValue < 300) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
이 코드는 조도 센서값이 300보다 작으면 LED를 켭니다.
즉, 어두우면 LED가 켜지는 자동 조명과 비슷한 구조입니다.
반복문도 중요합니다.
반복문은 비슷한 코드를 여러 번 쓰지 않기 위해 사용합니다.
PWM에서 LED 밝기를 0부터 255까지 바꾸는 예제가 좋은 사례입니다.
for (int brightness = 0; brightness <= 255; brightness++) {
analogWrite(9, brightness);
delay(10);
}
이 코드는 brightness 값을 0부터 255까지 하나씩 증가시키며 같은 동작을 반복합니다.
조건문과 반복문은 아두이노 코드의 중요한 뼈대입니다.
조건문은 상황에 따라 다르게 반응하게 합니다.
반복문은 반복되는 동작을 간결하게 만듭니다.
아두이노의 많은 프로젝트는 이 두 가지로 설명할 수 있습니다.
센서값을 읽습니다.
조건을 판단합니다.
필요한 출력을 실행합니다.
이 과정을 반복합니다.
12. 시리얼 모니터로 아두이노와 대화하기
아두이노에는 기본적으로 화면이 없습니다.
그래서 아두이노가 지금 어떤 값을 읽고 있는지 바로 볼 수 없습니다.
이때 사용하는 것이 시리얼 모니터입니다.
시리얼 모니터는 아두이노가 컴퓨터로 보내는 글자와 숫자를 확인하는 창입니다.
기본 예제를 보겠습니다.
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.println("Hello Arduino");
delay(1000);
}
Serial.begin(9600);은 시리얼 통신을 시작하겠다는 뜻입니다.
9600은 통신 속도입니다. 처음에는 너무 깊게 외울 필요는 없습니다. 아두이노와 컴퓨터가 같은 속도로 대화하기 위한 약속이라고 이해하면 됩니다.
Serial.println()은 값을 출력하고 줄을 바꿉니다.
Serial.print()는 값을 출력하지만 줄을 바꾸지 않습니다.
변수값도 출력할 수 있습니다.
int count = 10;
void setup() {
Serial.begin(9600);
}
void loop() {
Serial.print("count: ");
Serial.println(count);
delay(1000);
}
센서값을 확인할 때 시리얼 모니터는 매우 중요합니다.
예를 들어 조도 센서를 연결했는데 LED가 원하는 대로 켜지지 않는다고 해봅시다.
이때 바로 코드를 의심하기보다, 먼저 센서값이 어떻게 들어오는지 확인해야 합니다.
int lightValue = analogRead(A0);
Serial.println(lightValue);
시리얼 모니터에 값이 계속 출력되면, 손으로 센서를 가리거나 빛을 비추며 값이 어떻게 변하는지 볼 수 있습니다.
이렇게 보면 기준값을 정하기 쉬워집니다.
예를 들어 어두울 때 값이 200 근처이고 밝을 때 값이 800 근처라면, 기준값을 500으로 잡아볼 수 있습니다.
시리얼 모니터는 단순 출력창이 아닙니다.
아두이노가 지금 무엇을 보고 있는지 알려주는 창입니다.
13. 라이브러리란 무엇인가
이제 라이브러리를 보겠습니다.
아두이노를 배우다 보면 어떤 센서는 코드가 아주 간단하고, 어떤 센서는 라이브러리를 설치하라고 합니다.
DHT11, DHT22 온습도 센서가 대표적인 예입니다.
라이브러리는 자주 쓰는 기능을 미리 만들어 둔 코드 묶음입니다.
비유하면 요리할 때 모든 양념을 처음부터 만들 수도 있지만, 미리 만들어진 소스를 사용하면 훨씬 쉽게 요리할 수 있습니다.
센서도 마찬가지입니다.
어떤 센서는 내부에서 데이터를 주고받는 방식이 복잡합니다. 그 방식을 우리가 매번 직접 구현하려면 입문 단계에서는 너무 어렵습니다.
라이브러리를 사용하면 복잡한 부분은 라이브러리가 처리하고, 우리는 간단한 명령으로 값을 읽을 수 있습니다.
예를 들어 DHT 센서 라이브러리를 사용하면 다음과 같은 명령을 사용할 수 있습니다.
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
이 두 줄만 보면 온도와 습도를 쉽게 읽는 것처럼 보입니다.
하지만 내부에서는 센서와 정해진 방식으로 통신하고, 받은 데이터를 해석하고, 우리가 사용할 수 있는 숫자로 바꿔주는 과정이 들어 있습니다.
라이브러리를 사용할 때는 보통 코드 맨 위에 #include를 씁니다.
#include <DHT.h>
이것은 DHT 라이브러리를 이 코드에서 사용하겠다는 뜻입니다.
라이브러리를 설치하지 않았는데 #include <DHT.h>를 쓰면 오류가 납니다.
그래서 라이브러리를 사용하는 수업에서는 설치 방법도 함께 안내해야 합니다.
Arduino IDE에서는 라이브러리 매니저를 열고 필요한 라이브러리 이름을 검색해 설치할 수 있습니다.
라이브러리에는 예제 코드가 포함되어 있는 경우도 많습니다. 처음 사용하는 센서는 라이브러리 예제를 먼저 열어보는 것이 좋습니다.
라이브러리는 어렵고 복잡한 것을 감추는 도구가 아니라, 복잡한 것을 안정적으로 사용하게 해주는 도구입니다.
14. DHT11/DHT22 온습도 센서 사용하기
DHT11과 DHT22는 온도와 습도를 측정하는 센서입니다.
DHT11은 저렴하고 입문 실습에 많이 사용됩니다.
DHT22는 DHT11보다 측정 범위가 넓고 정확도가 더 좋은 편입니다.
둘 다 온도와 습도를 측정하지만, 단순히 analogRead()로 값을 읽지 않습니다.
이 센서들은 측정한 값을 정해진 디지털 통신 방식으로 아두이노에 보냅니다. 그래서 라이브러리를 사용하는 것이 일반적입니다.
예제 코드를 보겠습니다.
#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
delay(2000);
}
먼저 #include <DHT.h>는 DHT 라이브러리를 사용하겠다는 뜻입니다.
#define DHTPIN 2는 DHT 센서의 데이터 핀을 2번 핀으로 사용하겠다는 뜻입니다.
#define DHTTYPE DHT11은 우리가 사용하는 센서 종류가 DHT11이라는 뜻입니다. DHT22를 사용한다면 이 부분을 DHT22로 바꿔야 합니다.
DHT dht(DHTPIN, DHTTYPE);는 DHT 센서를 다루기 위한 객체를 만드는 부분입니다. 입문 단계에서는 너무 깊게 객체 개념을 설명하기보다, "DHT 센서를 사용하기 위한 이름표를 만든다" 정도로 설명하면 충분합니다.
dht.begin();은 센서 사용을 시작하는 준비 명령입니다.
dht.readTemperature();는 온도를 읽습니다.
dht.readHumidity();는 습도를 읽습니다.
온도와 습도는 소수점이 나올 수 있으므로 float 타입으로 저장합니다.
시리얼 모니터에 값을 출력하면 현재 온도와 습도를 확인할 수 있습니다.
만약 값이 nan으로 나온다면 읽기에 실패했다는 뜻입니다.
이때는 다음을 확인합니다.
- 센서의 전원과 GND가 제대로 연결되어 있는지 확인합니다.
- 데이터 핀이 코드에서 지정한 핀과 같은지 확인합니다.
- DHT11인지 DHT22인지 코드의 타입이 맞는지 확인합니다.
- 라이브러리가 제대로 설치되어 있는지 확인합니다.
- 센서값을 너무 빠르게 반복해서 읽고 있지 않은지 확인합니다. DHT 센서는 너무 짧은 간격으로 읽으면 문제가 생길 수 있으므로 보통 2초 정도 간격을 둡니다.
DHT 센서 예제는 라이브러리, 데이터 타입, 시리얼 모니터, 센서값 읽기를 한 번에 연결해주는 좋은 예제입니다.
15. 업로드와 컴파일 오류 읽기
초보자가 아두이노를 배우면서 가장 당황하는 순간은 오류가 날 때입니다.
하지만 오류는 실패가 아닙니다.
오류는 어디를 확인해야 하는지 알려주는 힌트입니다.
먼저 컴파일 오류와 업로드 오류를 구분해야 합니다.
컴파일 오류는 코드 문법에 문제가 있을 때 발생합니다.
예를 들어 세미콜론을 빠뜨렸거나, 중괄호를 닫지 않았거나, 변수 이름을 잘못 썼을 때 발생합니다.
int ledPin = 13
이 코드에는 세미콜론이 없습니다.
아두이노 코드는 많은 문장 끝에 ;가 필요합니다.
중괄호 오류도 자주 납니다.
void loop() {
digitalWrite(13, HIGH);
delay(1000);
이 코드는 loop()를 닫는 }가 없습니다.
변수 이름 오타도 흔합니다.
int ledPin = 13;
digitalWrite(ledpin, HIGH);
ledPin과 ledpin은 다릅니다. 대문자와 소문자를 구분하기 때문입니다.
라이브러리 오류도 자주 만납니다.
#include <DHT.h>
이렇게 썼는데 DHT 라이브러리가 설치되어 있지 않으면 파일을 찾을 수 없다는 오류가 납니다.
반면 업로드 오류는 코드가 아니라 컴퓨터와 아두이노 보드 연결 쪽 문제일 때가 많습니다.
예를 들어 보드를 잘못 선택했거나, 포트를 잘못 선택했거나, USB 케이블이 데이터 전송을 지원하지 않거나, 다른 프로그램이 포트를 사용하고 있을 수 있습니다.
오류가 났을 때는 다음 순서로 확인하면 좋습니다.
첫째, 오류가 컴파일 단계에서 난 것인지 업로드 단계에서 난 것인지 봅니다.
둘째, 오류 메시지에서 몇 번째 줄을 가리키는지 확인합니다.
셋째, 세미콜론, 중괄호, 괄호, 따옴표가 빠지지 않았는지 봅니다.
넷째, 변수 이름의 대소문자가 일치하는지 봅니다.
다섯째, 라이브러리가 설치되어 있는지 확인합니다.
여섯째, 보드와 포트 선택을 확인합니다.
일곱째, 실제 회로 연결과 코드의 핀 번호가 같은지 확인합니다.
이 습관이 생기면 오류가 나도 덜 당황하게 됩니다.
16. 지금은 깊게 들어가지 않아도 되는 내용
아두이노에는 더 많은 내용이 있습니다.
함수를 직접 만들 수도 있습니다.
배열을 사용해 여러 값을 묶어서 관리할 수도 있습니다.
클래스와 객체를 제대로 배우면 라이브러리 구조도 더 깊게 이해할 수 있습니다.
인터럽트를 사용하면 특정 이벤트에 빠르게 반응할 수 있습니다.
I2C와 SPI 같은 통신 방식을 배우면 LCD, OLED, 다양한 센서 모듈을 더 잘 다룰 수 있습니다.
모터 드라이버를 배우면 DC모터나 스테핑 모터를 안정적으로 제어할 수 있습니다.
블루투스와 와이파이를 배우면 스마트폰이나 인터넷과 연결할 수 있습니다.
배터리 전원 설계를 배우면 컴퓨터와 분리된 독립 장치를 만들 수 있습니다.
이 내용들은 모두 중요합니다.
하지만 입문 단계에서 한꺼번에 다루면 핵심 흐름을 놓칠 수 있습니다.
처음에는 다음을 확실히 잡는 것이 좋습니다.
아두이노가 무엇인지 이해합니다.
IDE에서 코드를 업로드할 수 있습니다.
블링크 코드를 읽을 수 있습니다.
변수와 데이터 타입을 이해합니다.
디지털과 아날로그 신호를 구분합니다.
PWM으로 밝기를 조절할 수 있습니다.
조건문과 반복문으로 반응을 만들 수 있습니다.
시리얼 모니터로 값을 확인할 수 있습니다.
라이브러리로 센서를 사용할 수 있습니다.
오류 메시지를 보고 기본적인 원인을 찾을 수 있습니다.
이 정도가 잡히면 이후에 어떤 부품을 만나도 접근할 수 있습니다.
마무리
오늘 강의의 핵심은 하나입니다.
아두이노는 현실 세계와 연결되는 작은 제어 장치입니다.
아두이노는 센서를 통해 바깥의 상태를 읽습니다.
코드는 그 값을 기준으로 판단합니다.
그리고 LED, 부저, 모터 같은 출력 장치가 반응합니다.
이 흐름을 이해하면 아두이노가 훨씬 덜 어렵게 느껴집니다.
처음에는 LED 하나를 깜빡이는 블링크 코드로 시작합니다.
하지만 그 안에는 아두이노의 기본 구조가 들어 있습니다.
setup()에서 준비하고, loop()에서 반복합니다.
변수로 값을 관리합니다.
데이터 타입으로 값을 어떤 방식으로 저장할지 정합니다.
디지털 신호로 켜고 끄는 상태를 다룹니다.
아날로그 신호로 연속적인 정도를 읽습니다.
PWM으로 밝기나 세기를 조절합니다.
시리얼 모니터로 값을 확인합니다.
라이브러리로 복잡한 센서를 쉽게 사용합니다.
오류 메시지를 읽으며 문제를 찾아갑니다.
아두이노 기초는 부품을 많이 외우는 것이 아니라, 이 흐름을 몸에 익히는 것입니다.
마지막으로 이 문장을 기억하면 좋겠습니다.
센서가 읽고, 코드가 판단하고, 액추에이터가 반응한다.
이 문장만 제대로 이해해도 아두이노의 큰 그림은 이미 잡은 것입니다.
손가락 인식으로 네오픽셀 제어하기
- 원본 폴더:
260630-손가락-네오픽셀-제어 - 카테고리: AI+피지컬컴퓨팅
파이썬 컴퓨터비전으로 손가락을 인식해 네오픽셀 제어하기
이 강의는 카메라로 손을 인식하고, 손가락 움직임을 숫자로 바꾼 뒤, 그 값을 아두이노로 보내 네오픽셀 LED를 제어하는 프로젝트형 교육입니다.

이 강의에서 배우는 것
- MediaPipe Hands로 손의 랜드마크를 인식하는 방법
- 엄지 끝과 검지 끝 좌표를 이용해 픽셀 거리를 계산하는 방법
- 픽셀 거리값을
0~255네오픽셀 밝기값으로 바꾸는 방법 - 파이썬에서 아두이노로 JSON 데이터를 시리얼 전송하는 방법
- 아두이노에서 네오픽셀 색상과 밝기를 제어하는 방법
- 손가락 펼침 개수에 따라 다른 LED 결과를 만드는 확장 아이디어
전체 프로젝트 흐름

기본 구조는 다음과 같습니다.
- 카메라가 손을 촬영합니다.
- 파이썬과 MediaPipe가 손 랜드마크를 찾습니다.
- 엄지 끝과 검지 끝 사이의 픽셀 거리를 계산합니다.
- 거리값을 밝기값으로 바꿉니다.
- 파이썬이 JSON 한 줄을 아두이노에 보냅니다.
- 아두이노가 네오픽셀 밝기와 색상을 바꿉니다.
손동작을 숫자로 바꾸면, 손이 센서가 됩니다.
손 인식과 랜드마크

MediaPipe Hands는 손 하나에서 21개의 랜드마크를 찾아줍니다.
이번 프로젝트에서 가장 중요한 점은 다음 두 개입니다.
| 번호 | 의미 |
|---|---|
| 4 | 엄지 끝 |
| 8 | 검지 끝 |
이 두 점의 좌표를 알 수 있으면 엄지와 검지 사이의 거리를 계산할 수 있습니다.
픽셀 거리 계산

카메라 화면은 픽셀 좌표계입니다.
엄지 끝 좌표와 검지 끝 좌표를 가져오면 두 점 사이의 거리를 계산할 수 있습니다.
이 값은 실제 센티미터가 아니라 화면 안에서의 픽셀 거리입니다.
거리값을 밝기값으로 바꾸기

네오픽셀 밝기는 0~255 범위로 제어할 수 있습니다.
예를 들어 다음처럼 매핑할 수 있습니다.
| 손가락 거리 | 네오픽셀 밝기 |
|---|---|
| 30px 이하 | 0 |
| 30px~180px | 비율에 따라 0~255 |
| 180px 이상 | 255 |
픽셀 거리의 한계

픽셀 거리는 실제 길이가 아닙니다.
손이 카메라에 가까워지면 같은 손동작도 크게 보이고, 멀어지면 작게 보입니다.
이번 실습에서는 단순하게 픽셀 거리만 사용합니다. 하지만 더 안정적인 프로젝트를 만들려면 다음과 같은 기준 크기를 사용할 수 있습니다.
- 손바닥 폭을 기준으로 나누기
- ArUco 마커나 카드 같은 기준 물체 사용하기
- 손과 카메라 사이 거리를 일정하게 유지하기
시리얼 통신

파이썬은 계산한 색상과 밝기값을 JSON 한 줄로 보냅니다.
{"r":255,"g":255,"b":255,"v":123}
각 값의 의미는 다음과 같습니다.
| 키 | 의미 |
|---|---|
| r | 빨강 |
| g | 초록 |
| b | 파랑 |
| v | 밝기 |
네오픽셀 제어

아두이노는 시리얼로 받은 값을 읽고 네오픽셀에 반영합니다.
파이썬은 인식과 계산을 맡고, 아두이노는 하드웨어 제어를 맡습니다.
실습 1: 엄지-검지 거리로 밝기 조절

손가락을 붙이면 네오픽셀이 어두워지고, 손가락을 벌리면 밝아집니다.
이 실습에서는 컴퓨터비전 입력값이 실제 LED 출력으로 바뀌는 과정을 확인합니다.
실습 2: 손가락 펼침 개수로 모드 바꾸기

손가락 개수에 따라 다른 색상이나 효과를 만들 수 있습니다.
| 손가락 개수 | 네오픽셀 결과 예시 |
|---|---|
| 0개 | 꺼짐 |
| 1개 | 빨강 |
| 2개 | 초록 |
| 3개 | 파랑 |
| 4개 | 노랑 |
| 5개 | 흰색 또는 무지개 |
거리 제어는 연속적인 밝기 제어에 좋고, 손가락 개수 제어는 모드 선택에 좋습니다.
확장 아이디어

- 왼손은 색상, 오른손은 밝기 제어
- 주먹은 꺼짐, 손바닥은 전체 켜짐, 브이는 깜빡임
- 네오픽셀 여러 줄을 이용한 미디어아트
- 서보모터, 부저, 릴레이 등 다른 하드웨어 제어
마무리

컴퓨터비전은 화면 속 인식에서 끝나지 않습니다.
손동작을 좌표와 숫자로 바꾸고, 그 숫자를 아두이노로 보내면 실제 장치를 움직일 수 있습니다.
손동작이 숫자가 되고, 숫자가 빛이 됩니다.
노래 페이지 만들고 웹호스팅하기
- 원본 폴더:
260630-노래페이지-웹호스팅 - 카테고리: 웹/배포
AI IDE로 노래 페이지 만들고 웹 호스팅하기
이 강의는 AI IDE를 활용해 간단한 노래 소개 HTML 페이지를 만들고, 그 페이지를 내 컴퓨터와 인터넷에서 확인하는 방법을 배우는 입문 자료입니다.

이 강의에서 배우는 것
- AI에게 웹페이지 제작을 요청하는 입력 양식
- HTML 파일을 저장하고 브라우저에서 여는 방법
- 더블클릭 실행과 웹 호스팅의 차이
python -m http.server 8000으로 로컬 서버 실행하기localhost, 내부 IP, 공인 IP의 차이- 공유기 포트포워딩의 기본 개념
- ngrok, Cloudflare Tunnel 같은 터널링 도구의 역할
- GitHub Pages로 무료 정적 웹페이지 배포하기
- 후이즈, 가비아 등에서 구매한 도메인을 DNS로 연결하는 개념
수업 실습 자료
| 파일 | 설명 |
|---|---|
examples/402_노래_페이지_1.html | 첫 번째 노래 페이지 완성 예시 |
examples/403_노래_페이지_만들기_미션.md | 수강자 미션지 |
examples/404_노래_페이지_2.md | AI에게 입력할 노래 페이지 양식 |
examples/405_노래_페이지_2.html | 웹 호스팅 설명이 포함된 HTML 예시 |
핵심 개념
웹페이지는 파일입니다.
브라우저는 HTML 파일을 읽어 화면에 보여줍니다. 그런데 파일이 내 컴퓨터 안에만 있으면 다른 사람은 볼 수 없습니다. 그래서 다른 사람이 접속할 수 있는 위치에 파일을 올려야 합니다. 이것이 호스팅입니다.
웹페이지는 파일이고, 호스팅은 그 파일을 다른 사람이 접속할 수 있는 위치에 올리는 일입니다.

실습 흐름
- 노래 정보 입력 양식을 채운다.
- AI에게 HTML 페이지 제작을 요청한다.
- HTML 파일을 저장하고 더블클릭으로 확인한다.
python -m http.server 8000으로 로컬 서버를 실행한다.localhost:8000주소로 접속한다.- 같은 와이파이에서는 내부 IP로 접속해본다.
- 포트포워딩과 터널링의 차이를 이해한다.
- GitHub Pages로 배포한다.
- 도메인과 DNS 연결 개념을 정리한다.



방법별 비교
| 방법 | 좋은 점 | 주의할 점 |
|---|---|---|
| 더블클릭 | 가장 쉽고 빠름 | 나만 볼 수 있음 |
| Python 로컬 서버 | 서버 개념을 체험하기 좋음 | 기본적으로 내 컴퓨터 중심 |
| 포트포워딩 | 외부 접속 구조를 이해할 수 있음 | 보안과 공유기 설정 주의 |
| 터널링 프로그램 | 임시 공개 주소를 빠르게 만들 수 있음 | 무료 주소는 바뀔 수 있음 |
| GitHub Pages | 무료 정적 페이지 배포에 적합 | 서버 기능은 제한적 |
| 도메인 연결 | 전문적인 주소 사용 가능 | DNS 반영 시간이 필요 |




수업 후 과제
- 자신이 고른 노래로 HTML 페이지를 하나 만든다.
- GitHub Pages에 올려 접속 주소를 제출한다.
- 도메인을 연결한다면 어떤 DNS 레코드가 필요한지 설명한다.
VS Code와 Python 개발환경 구축
- 원본 폴더:
260630-VSCode-Python-개발환경구축 - 카테고리: 기초 세팅
Visual Studio Code와 Python 개발환경 구축 발표 스크립트
교육의 목적
오늘 교육의 목적은 파이썬을 배우기 전에 필요한 기본 개발 환경을 직접 준비하는 것입니다.
우리가 설치할 것은 크게 세 가지입니다.
첫 번째는 코드를 작성할 도구인 Visual Studio Code입니다.
두 번째는 파이썬 코드를 실제로 실행해주는 Python입니다.
세 번째는 VS Code 안에서 파이썬을 더 편하게 사용할 수 있도록 도와주는 확장팩입니다.
오늘은 설치만 하고 끝내지 않겠습니다. 마지막에는 Hello World를 직접 출력해보면서 설치가 제대로 되었는지 확인하겠습니다.
전체 세션 목차
- VS Code가 무엇인지 이해하기
- Visual Studio Code 다운로드 및 설치
- Python 다운로드 및 설치
- 설치 확인하기
- VS Code 한국어 언어팩 설치
- VS Code Python 확장팩 설치
- Hello World 실행하기
- 자주 생기는 문제 해결
- 마무리
1. VS Code가 무엇인지 이해하기
먼저 VS Code가 무엇인지 간단히 보겠습니다.
VS Code는 Microsoft에서 제공하는 무료 코드 편집기입니다.
메모장에도 코드를 쓸 수는 있습니다. 하지만 코딩을 계속하려면 파일을 관리하고, 코드 색상을 구분하고, 실행 결과를 확인하고, 오류를 찾는 기능이 필요합니다.
VS Code는 이런 기능을 제공하기 때문에 파이썬 입문자가 사용하기 좋은 도구입니다.
오늘 기억할 문장은 이것입니다.
VS Code는 코드를 쓰는 작업 공간이고, Python은 코드를 실행하는 엔진입니다.
2. Visual Studio Code 다운로드 및 설치
이제 VS Code를 설치하겠습니다.
웹브라우저를 열고 VS Code 공식 홈페이지로 이동합니다.
주소는 다음과 같습니다.
https://code.visualstudio.com/
홈페이지에 들어가면 운영체제에 맞는 다운로드 버튼이 보입니다. Windows 컴퓨터라면 Windows용 설치 파일을 다운로드하면 됩니다.
다운로드가 끝나면 다운로드 폴더에서 설치 파일을 실행합니다.
설치 과정에서는 기본값으로 진행해도 괜찮습니다. 다만 설치 옵션 화면에서 다음 항목이 보이면 체크하는 것을 권장합니다.
- 바탕 화면에 바로가기 만들기
- PATH에 추가
- 파일 또는 폴더를 VS Code로 열기 메뉴 추가
설치가 완료되면 VS Code를 실행합니다.
처음 실행하면 영어 메뉴가 보일 수 있습니다. 괜찮습니다. 뒤에서 한국어 언어팩을 설치해 한글 메뉴로 바꾸겠습니다.
3. Python 다운로드 및 설치
이제 파이썬을 설치하겠습니다.
웹브라우저에서 Python 공식 홈페이지로 이동합니다.
주소는 다음과 같습니다.
https://www.python.org/
상단 메뉴에서 Downloads를 선택하면 현재 운영체제에 맞는 Python 다운로드 버튼이 보입니다.
공식 홈페이지의 최신 안정 버전을 다운로드합니다.
설치 파일을 실행하면 첫 화면에서 아주 중요한 체크박스가 나옵니다.
Add Python.exe to PATH
이 항목은 반드시 체크합니다.
PATH는 컴퓨터가 Python 실행 파일을 어디에서 찾을지 알려주는 설정입니다. 이 체크를 하지 않으면 나중에 터미널이나 VS Code에서 python 명령어가 작동하지 않을 수 있습니다.
체크한 뒤 Install Now를 눌러 설치를 진행합니다.
설치가 끝나면 Setup was successful과 비슷한 완료 메시지가 나타납니다.
4. 설치 확인하기
설치가 끝났다면 제대로 설치되었는지 확인해야 합니다.
Windows 검색창에서 cmd 또는 명령 프롬프트를 실행합니다.
그 다음 아래 명령어를 입력합니다.
python --version
Python 버전이 표시되면 설치가 정상적으로 된 것입니다.
만약 python을 찾을 수 없습니다라는 메시지가 나오면 PATH 설정이 빠졌을 가능성이 있습니다. 이 경우 Python을 다시 설치하면서 Add Python.exe to PATH를 체크하거나, 환경 변수에 Python 경로를 추가해야 합니다.
초보자 수업에서는 다시 설치하면서 PATH 체크를 확인하는 방식이 가장 쉽습니다.
5. VS Code 한국어 언어팩 설치
이제 VS Code를 한글 메뉴로 바꾸겠습니다.
VS Code 왼쪽을 보면 네모 모양 아이콘이 있습니다. 이것이 Extensions, 즉 확장 메뉴입니다.
확장 메뉴를 클릭하고 검색창에 다음을 입력합니다.
Korean Language Pack
검색 결과에서 Korean Language Pack for Visual Studio Code를 선택합니다.
그리고 Install 버튼을 누릅니다.
설치가 끝나면 VS Code가 언어를 바꾸기 위해 다시 시작하겠냐고 물어볼 수 있습니다. 이때 재시작을 선택하면 메뉴가 한국어로 바뀝니다.
만약 자동으로 바뀌지 않는다면 Ctrl + Shift + P를 누릅니다.
커맨드 팔레트가 열리면 Configure Display Language를 검색합니다.
그 다음 ko를 선택하고 VS Code를 다시 시작합니다.
이미지 참고


6. VS Code Python 확장팩 설치
이제 파이썬 확장팩을 설치하겠습니다.
다시 VS Code 왼쪽의 확장 메뉴로 이동합니다.
검색창에 다음을 입력합니다.
Python
검색 결과에서 Microsoft에서 제공하는 Python 확장을 설치합니다.
가능하면 Python Extension Pack도 함께 설치하면 좋습니다. Python 확장팩은 코드 실행, 자동완성, 문법 표시, 디버깅 같은 기능을 편하게 사용할 수 있도록 도와줍니다.
여기서 중요한 점은 이렇습니다.
Python 프로그램 설치와 VS Code Python 확장팩 설치는 서로 다른 작업입니다.
Python 프로그램은 코드를 실행하는 도구이고, VS Code 확장팩은 VS Code 안에서 Python을 편하게 쓰게 해주는 도구입니다.
이미지 참고


7. Hello World 실행하기
이제 첫 번째 Python 파일을 만들어보겠습니다.
VS Code에서 새 파일을 만듭니다.
파일 이름은 다음처럼 저장합니다.
hello.py
파일 안에 아래 코드를 입력합니다.
print("Hello World")
이제 실행해보겠습니다.
VS Code 오른쪽 위에 실행 버튼이 보이면 실행 버튼을 눌러도 됩니다.
또는 터미널을 열고 아래 명령어를 입력해도 됩니다.
python hello.py
터미널에 아래처럼 출력되면 성공입니다.
Hello World
이 순간이 오늘 설치 과정의 최종 확인 지점입니다.
프로그램이 설치되어 있는 것만으로는 부족합니다. 실제 코드가 실행되어야 개발 환경이 준비된 것입니다.
8. 자주 생기는 문제와 해결 방법
첫 번째 문제는 python 명령어가 인식되지 않는 경우입니다.
대부분 Python 설치 과정에서 Add Python.exe to PATH를 체크하지 않았을 때 발생합니다.
이 경우 Python 설치 파일을 다시 실행해서 PATH 옵션을 체크하거나, Python을 삭제 후 다시 설치하는 방식으로 해결할 수 있습니다.
두 번째 문제는 VS Code에서 Python 파일 실행 버튼이 보이지 않는 경우입니다.
이때는 Python 확장팩이 설치되어 있는지 확인합니다.
세 번째 문제는 한국어 메뉴가 적용되지 않는 경우입니다.
이때는 Ctrl + Shift + P를 누르고 Configure Display Language를 검색한 뒤 ko를 선택합니다. 그 다음 VS Code를 다시 시작합니다.
네 번째 문제는 Python 인터프리터를 선택하라는 메시지가 나오는 경우입니다.
이때는 VS Code 하단 또는 커맨드 팔레트에서 설치된 Python 버전을 선택하면 됩니다.
9. 마무리
오늘 우리는 파이썬 학습을 시작하기 위한 기본 개발 환경을 만들었습니다.
정리하면 순서는 이렇습니다.
- VS Code를 설치했습니다.
- Python을 설치했습니다.
- Python 설치 과정에서 PATH 옵션을 확인했습니다.
- VS Code에 한국어 언어팩을 설치했습니다.
- VS Code에 Python 확장팩을 설치했습니다.
Hello World를 출력해 설치 상태를 확인했습니다.
앞으로 파이썬을 공부할 때는 VS Code에서 .py 파일을 만들고, 코드를 작성하고, 실행 결과를 확인하는 흐름을 반복하게 됩니다.
마지막으로 오늘의 핵심 문장을 다시 강조하겠습니다.
설치의 끝은 프로그램 실행이 아니라, 내가 작성한 코드가 정상적으로 실행되는 순간입니다.
수고하셨습니다.
LLM 동작방식, API, 로컬 모델 이해
- 원본 폴더:
260630-LLM-동작방식-API-로컬 - 카테고리: AI - 파이썬
LLM 동작 방식과 API/로컬 활용 기초
이 강의는 GPT, Gemini 같은 LLM을 단순히 사용하는 것을 넘어, LLM이 어떤 방식으로 응답을 만들고 실제 코드에서는 어떻게 호출되는지 이해하기 위한 입문 자료입니다.
참고 예제는 C:\Users\gona\Documents\GitHub\edu-resources\203_LLM의 Gemini API 코드입니다.
이 강의에서 배우는 것
- LLM의 기본 동작 방식
- 토큰, 문맥, 다음 토큰 예측 개념
- API 방식 LLM과 로컬 LLM의 차이
- Gemini API 기본 호출 흐름
- API 키 보안과 환경변수 관리
- 시스템 프롬프트의 역할
- 생각의 고리와 단계적 추론의 발전
- 대화 히스토리를 사용하는 챗봇 구조
- 좋은 프롬프트를 구성하는 방법
핵심 개념
LLM은 정답 데이터베이스가 아닙니다.
사용자가 입력한 문장, 시스템 프롬프트, 이전 대화, 참고 자료를 하나의 문맥으로 보고 다음에 이어질 토큰을 생성합니다.
LLM을 잘 쓰는 핵심은 질문 문장보다 맥락 설계에 있습니다.
API 방식과 로컬 LLM 비교
| 구분 | API 방식 LLM | 로컬 LLM |
|---|---|---|
| 시작 난이도 | 낮음 | 중간 이상 |
| 장점 | 최신 모델을 빠르게 사용 | 데이터 통제와 내부 운영에 유리 |
| 단점 | 비용과 외부 전송 정책 확인 필요 | 장비와 설치 관리 필요 |
| 추천 상황 | 빠른 실습, 프로토타입, 일반 서비스 | 내부 문서, 보안 환경, 오프라인 실험 |
예제 코드 흐름
1. 기본 호출
201_llm.py는 Gemini API를 호출해 하나의 질문에 답변을 받는 가장 기본적인 예제입니다.
API 키 준비 -> 모델 선택 -> 프롬프트 작성 -> 클라이언트 생성 -> 응답 출력
2. 시스템 프롬프트
202_llm_system.py와 203_llm_system_setup.py는 모델에게 역할과 규칙을 주는 예제입니다.
시스템 프롬프트는 AI에게 주는 운영 규칙입니다.
3. 대화 히스토리 챗봇
204_llm_system_chatbot.py는 이전 사용자 메시지와 모델 응답을 리스트에 저장하고, 다음 호출에 함께 전달하는 챗봇 구조를 보여줍니다.
안전한 API 키 관리
학습 예제에는 키를 직접 넣는 형태가 있을 수 있지만, 실제 프로젝트에서는 환경변수를 사용해야 합니다.
import os
API_KEY = os.environ.get("GEMINI_API_KEY")
실제 키는 코드와 GitHub 저장소에 남기지 않습니다.
좋은 프롬프트의 구조
좋은 프롬프트는 다음 요소를 포함합니다.
| 요소 | 설명 |
|---|---|
| 역할 | AI가 어떤 관점으로 답할지 |
| 목표 | 무엇을 만들어야 하는지 |
| 입력 자료 | 참고해야 할 내용 |
| 출력 형식 | 표, 목록, 코드, 문서 등 |
| 제약 조건 | 하지 말아야 할 것 |
| 예시 | 원하는 결과의 샘플 |
실습
- 기본 API 호출 실행 구조 확인
- 시스템 프롬프트 문장을 바꿔 응답 변화 확인
- 로컬 LLM과 API LLM 선택 기준표 작성
- 대화 히스토리가 쌓이는 챗봇 구조 확인
- 본인 업무에 맞는 프롬프트 템플릿 작성
마무리
LLM을 잘 쓰는 사람은 질문만 잘하는 사람이 아닙니다.
모델 선택, 맥락 설계, 시스템 프롬프트, 보안, 비용, 검증 절차를 함께 설계할 수 있는 사람이 LLM을 실제 업무 도구로 만들 수 있습니다.
3D프린팅 FDM, DLP, SLA 이해
- 원본 폴더:
260630-3D프린팅-FDM-DLP-SLA - 카테고리: 기구설계
3D프린팅 기초교육: FDM, DLP, SLA는 무엇이 다를까
3D프린팅은 아이디어를 빠르게 손에 잡히는 물건으로 바꾸는 기술입니다.
하지만 3D프린터라고 해서 모두 같은 결과물을 만드는 것은 아닙니다. 어떤 장비는 플라스틱을 녹여 선처럼 쌓고, 어떤 장비는 액체 레진을 빛으로 굳힙니다.

이 강의에서 배우는 것
- 3D프린팅의 공통 원리
- FDM 방식의 동작 구조와 결과물 특징
- DLP 방식의 동작 구조와 결과물 특징
- SLA 방식의 동작 구조와 결과물 특징
- 출력 방식별 표면, 강도, 비용, 후처리 차이
- 만들 물건에 맞는 출력 방식 선택 기준
3D프린팅의 기본 원리
3D프린팅은 한 번에 통째로 물건을 만드는 기술이 아닙니다.
3D 모델을 얇은 단면으로 자르고, 그 단면을 한 층씩 만들면서 입체를 완성합니다.

기본 흐름은 다음과 같습니다.
- 3D 모델을 준비합니다.
- 슬라이서 프로그램이 모델을 얇은 층으로 나눕니다.
- 프린터가 각 층을 쌓거나 굳힙니다.
- 출력물을 떼어내고 후처리합니다.
3D프린팅은 얇은 단면을 반복해서 만드는 기술입니다.
출력 방식이 중요한 이유
처음에는 "어떤 3D프린터가 제일 좋은가요?"라고 묻기 쉽습니다.
하지만 실제로는 "무엇을 만들 것인가?"가 먼저입니다.

| 판단 기준 | 확인할 질문 |
|---|---|
| 크기 | 출력물이 큰가, 작은가 |
| 디테일 | 작은 글자나 얼굴 표현이 필요한가 |
| 강도 | 힘을 받는 부품인가 |
| 표면 | 매끈한 외관이 중요한가 |
| 비용 | 재료비와 실패 비용을 감당할 수 있는가 |
| 후처리 | 세척, 경화, 샌딩을 할 수 있는가 |
FDM: 플라스틱 선을 쌓는 방식
FDM은 필라멘트라는 플라스틱 줄을 녹여 노즐로 밀어내고, 그 선을 한 층씩 쌓아 올리는 방식입니다.

FDM은 가장 흔하게 접하는 방식입니다. 장비와 재료가 비교적 저렴하고, PLA, PETG, ABS, TPU 같은 다양한 필라멘트를 사용할 수 있습니다.
FDM 결과물 특징

- 층결이 보이기 쉽습니다.
- 출력 방향에 따라 강도가 달라질 수 있습니다.
- 내부 채움 비율로 재료 사용량과 강도를 조절합니다.
- 큰 출력물이나 구조 부품에 접근하기 좋습니다.
- 아주 작은 디테일과 매끈한 표면에는 한계가 있습니다.
DLP: 레진 한 층을 면으로 굳히는 방식
DLP는 액체 레진을 프로젝터 빛으로 한 층씩 굳히는 방식입니다.

한 층 전체를 동시에 비추기 때문에 작은 정밀 부품을 출력할 때 강점이 있습니다. 출력 후에는 세척, UV 후경화, 서포트 제거가 필요합니다.
DLP 결과물 특징

- 작은 디테일 표현이 좋습니다.
- 표면이 매끈한 편입니다.
- 피규어, 치과 모형, 주얼리 원형 등에 적합합니다.
- 레진 후처리와 안전관리가 필요합니다.
- 환기, 장갑, 세척 환경을 함께 준비해야 합니다.
SLA: 레이저로 레진을 굳히는 방식
SLA도 레진을 빛으로 굳히는 방식입니다. DLP가 한 층을 면으로 비춘다면, SLA는 레이저가 필요한 부분을 따라가며 굳힙니다.

SLA 결과물 특징

- 정밀하고 매끈한 결과물에 강점이 있습니다.
- 곡면과 작은 디테일 표현이 좋습니다.
- 외관 샘플, 정밀 모형에 적합합니다.
- 레진 종류와 후경화 조건에 따라 강도와 성능이 달라집니다.
- 출력 후 세척, 후경화, 서포트 제거가 필요합니다.
FDM, DLP, SLA 한눈에 비교

| 구분 | FDM | DLP | SLA |
|---|---|---|---|
| 기본 원리 | 녹인 플라스틱을 선으로 적층 | 레진 한 층을 면으로 경화 | 레진을 레이저로 경화 |
| 재료 | 필라멘트 | 광경화 레진 | 광경화 레진 |
| 표면 | 층결이 보이기 쉬움 | 매끈하고 디테일 좋음 | 매끈하고 정밀함 |
| 강도 판단 | 출력 방향, 재료, 내부 채움 중요 | 레진 종류와 후경화 중요 | 레진 종류와 후경화 중요 |
| 후처리 | 서포트 제거, 샌딩 등 | 세척, 후경화, 서포트 제거 | 세척, 후경화, 서포트 제거 |
| 추천 용도 | 큰 구조물, 간단한 부품, 교육용 모델 | 피규어, 치과 모형, 작은 정밀 부품 | 정밀 외관 샘플, 모형, 원형 |
출력 방식 선택 실습

| 만들 물건 | 우선 검토 방식 | 이유 |
|---|---|---|
| 큰 정리함 | FDM | 크기와 비용이 중요 |
| 작은 피규어 | DLP 또는 SLA | 디테일과 표면이 중요 |
| 기구 브라켓 | FDM 또는 특수 레진 | 강도와 재료 특성 확인 필요 |
| 주얼리 원형 | DLP 또는 SLA | 작고 정밀한 표면 필요 |
마무리

FDM은 녹인 플라스틱을 선으로 쌓습니다.
DLP는 액체 레진 한 층을 면으로 굳힙니다.
SLA는 레이저로 액체 레진을 필요한 부분만 굳힙니다.
좋은 3D프린팅은 좋은 장비를 고르는 것보다, 만들 물건에 맞는 방식을 고르는 것에서 시작합니다.