나는 2021년 현재 15살, 중학교 2학년이다.
난 어릴 적부터 지금까지 쭉 개발자가 되고 싶었다. 왜 개발을 하고 싶었는지, 어떻게 시작하게 된 건지 그 과정을 다시 한 번 돌아보며 기록해 보고자 한다.
📌 아직 학생이고 공부할 것이 한참 많이 남아 있어 기술에 대한 지식이 부족할 수 있습니다. 이 글은 지금까지의 개발 과정에 대해 기록하고 있으니, 읽으실 때 거슬리는 부분이 있더라도 양해 부탁드립니다. (살짝 댓글로 알려주세요!)
처음 개발에 관심을 가진 건 초등학생 때였다. 아마 저학년 때였을 것이다. 처음 메일 주소를 만들고, 아빠가 하이퍼링크 거는 법을 알려주셨었다. 내가 그걸 보고 신기해하자 간단한 html 페이지를 작성하는 것도 보여주셨는데, 난 그것이 지금 나의 진로에 가장 큰 영향을 미쳤다고 생각한다.
그 후로 종종 html 페이지를 만들며 놀았다. 하지만 당연하게도 아는 문법이 너무 적었고, 그 당시에는 CSS도 전혀 몰랐기에 뭔가 더 할 수가 없어 금방 시들해지고 말았다.
그러다 학교에서 코딩 수업을 시작하고, 엔트리를 배우기 시작했다. 나는 수업 시간에 작성한 코드가 원하는 대로 작동할 때마다 큰 행복을 느꼈다. html 페이지를 만들 때와 비슷했다. 처음에는 안 되던 것을 되도록 만드는 작업이 너무나 매력적이었다.
그렇게 나는 학교에서 하던 작업을 집에서도 이어서 하고, 매일 새로운 것들을 시도해 보면서 엔트리를 익혔다. 다른 사람이 올린 엔트리 프로젝트를 보며 배운 것도 많았다. 기본적인 코드의 역할들을 모두 알아냈고, 로그인 기능을 구현해 보기도 했다. 놀랍게도 구글 검색은 전혀 이용하지 않았다. 엔트리여서 가능한 일이긴 했지만 스스로 모든 걸 시도해 보며 알아낸 것이다. 만약 C나 파이썬 혹은 자바스크립트였다면... 🤭
그 기술들을 총동원해 초등학교 고학년 때 만든 게임은 아직도 엔트리에 있고, 900뷰를 넘어섰다. 사실 그렇게 잘 만들지는 않았다
개발의 즐거움을 알고 난 후, 본격적으로 html 장난질을 시작했다. 사실 html은 웹을 개발하는 마크업 언어이기 때문에 보통 프로그래밍 언어들과 많이 다른 것이 사실이다. 그럼에도 똑같이 재미있었다. 왜일까? 내 맘대로 컴퓨터를 조작할 수 있다는 것에서 재미를 느꼈던 것 아닐까, 생각해본다.
https://stella-jo.github.io/finger
알림을 띄워 "닫기" 버튼을 1000번 눌러야 하는 사이트를 만들어 친구들에게 뿌리기도 하고, 귀여운 gif를 띄우기도 하고, 친구들을 소개하는 페이지를 만들기도 했다. 이때부터 구글 검색을 시작하고, 시맨틱 태그와 문법들을 배우고, CSS를 배웠다. 게다가 알림을 띄우는 등 간단한 자바스크립트도 작성할 수 있게 되었고, 깃허브 호스팅도 할 수 있는 수준이 되었다.
그러나 지금까지의 내용은 극히 초기 단계에 불과하다. 중학교에 입학하며 나는 훨씬 더 많은 시간을 개발에 쏟기 시작했다.
처음에 뭣도 모르고 그냥 앱 개발하고 싶다!!! 하는 마음으로 덥석 책을 사 버렸다. 굉장히 두꺼운 책이었는데, 도대체 어디로 간 건지 이제는 찾을 수도 없다.
아무튼, 스위프트로 앱 개발에 입문하려고 그 책을 읽으며 Xcode를 열었는데 어째선지 Xcode의 UI와 책에 보이는 화면이 많이 달랐다. 점점 한 단계씩 따라할수록 이건 아닌 것 같다는 생각이 들기 시작했고, 바로 급히 검색을 시작했는데, 얼마 전 애플이 SwiftUI라는 새로운 UI 구현 방식을 발표했다는 걸 알게 되었다.
나는 SwiftUI 책을 구하기 위해 다시 검색을 시작했다. 하지만 SwiftUI는 새로 나온 따끈따끈한 기술이었고, 책이 있을 리 만무했다. 결국 구글을 통해 SwiftUI를 배우며 개발해보기로 했다. 구글에도 정보는 많이 없었지만 책을 찾는 것보다는 나았다. 당연했다, 구글이니까.
그렇게 꽤 긴 시간을 스위프트와 함께 보내게 되었다. 코어 데이터를 이용해 다이어리 앱을 만들었는데, 날짜별로 조회할 수 있도록 캘린더를 만들기로 했고 윤년, 윤달을 계산해 현재 날짜의 요일 알아내는 것까지 하고는 격자 레이아웃으로 나타내려다가 때려쳐 버렸다. 아무래도 그 때의 실력으로 캘린더는 무리였다.
게다가 자꾸 내비게이션 바가 버벅거리는 바람에 다이어리 앱 개발 자체를 관둬 버렸다. 그렇게 당찬 포부로 시작했던 나의 첫 스위프트 프로젝트는 증발해 버렸지만 얻은 건 많았다. 개발할 때 잘 검색하는 법도 조금씩 알게 되었고, 어떻게 하면 더 효율적인 코드를 짤 수 있을지, 개발자처럼 사고하는 법을 길렀다.
다시 전으로 돌아가, 초등학교에서의 마지막 해가 거의 끝나갈 때쯤, 담임선생님의 추천으로 영재교육원을 알아보았다. 그렇게 교육청에서 운영하는 융합정보 영재교육원에 지원했고, 시험과 면접을 거쳐 합격했다. 그 후 중학교에 입학하고, 토요일 아침마다 가는 데 40분, 오는 데 40분 걸리는 거리를 지하철로 왕복하기 시작했다.
다니는 것이 많이 힘들었음에도 매일 행복했다. 영재원에서는 내가 몰랐던 것을 다 알려주었기 때문이다. C언어도 시도해보았고, 파이썬, 아두이노 등 새로운 것들이 너무나 많았다.
나는 그 중 파이썬에 꽂혀 파이썬 개발을 시작하게 되었다.
Discord.py
영재원에서 파이썬을 막 배웠을 때, 마침 산출물 대회를 준비하며 팀원들과 디스코드라는 플랫폼을 사용하게 되었고 그때부터 디스코드 봇에 관심을 가지기 시작했다.
디스코드 봇은 파이썬, 자바스크립트 등 다양한 언어, 라이브러리를 통해 개발할 수 있었다. 난 당연히 파이썬을 골랐고, 다행히 생각보다 쉬웠다. 어려운 부분도 있었지만 스택오버플로우, 레딧 등 앱 개발할 때 알게 된 유용한 사이트들을 한 바퀴 돌고 나면 금방 해결되곤 했다.
봇 개발은 정말 재미있었고 나는 욕심이 생겨 점점 더 많은 기능을 넣기 시작했다. 다양한 모듈을 다운로드했고 헤로쿠라는 사이트에 봇의 깃허브 리포지토리를 연결해 호스팅까지 했다. 24시간 실행될 수 있게 한 것이다. 그 뒤로도 자잘한 기능을 추가하며 봇 개발을 이어나갔다.
중학교 2학년이 되면서 특성화고등학교에서 운영하는 영재교육원에 합격했다. 커리큘럼을 보며 가장 눈이 꽂혔던 부분은 db라고 쓰인 부분, 데이터베이스를 배우는 날이었다. 그렇게 영재원에서 mysql 데이터베이스를 배웠지만 온라인으로 윈도우 환경에 맞춰 수업을 했기 때문에 맥북에서 따라 하는 게 많이 어려웠고, 결국 수업 이후로 건드리지 않게 되었다. 그러나 후술할 내용에서 데이터베이스 지식이 필요한 상황이 오게 된다.
어느덧 2021년, 올해 중반까지 다다랐다. 이제부터는 올해 있었던 여러 가지 문제들 중 블로그를 만들 때 있었던 문제들에 대해 설명해보려고 한다.
벨로그를 시작하는 데 도대체 무슨 문제가 있었다는 건지, 이해가 되지 않을 것이다. 당연히 벨로그를 시작하는 건 어렵지 않았다. 처음에 블로그를 직접 만들려고 했던 게 문제였다.
먼저 github.io 블로그를 시도해보려고 했다. 근데 jekyll 템플릿을 사용해 만드는 건 별로 내 취향이 아니었다. 게다가 깃허브를 이용하면 정적 파일만 호스팅할 수 있어서 express.js
를 이용해 처음부터 완전히 다 내 손으로 만들기로 했다.
프론트엔드 디자인이 어느 정도 완성되었을 때, 나에게 백엔드 지식이 너무 없다는 걸 깨달을 수밖에 없었다. 블로그 글 데이터를 만들고 페이지에 구현하는 게 너무 어려웠다. 제목과 미리보기 텍스트를 따로 자바스크립트 객체 안에 만들었는데, 너무 비효율적이고 불편했다. 데이터베이스를 만들어야 하나 생각해보기도 했지만 글을 파일로 관리하고 싶었으니 그것도 어려웠다.
그러다 또다른 문제를 만났다. 접근성이 너무 떨어진다는 것이었다. 나는 유명한 개발자도 아니고 이제 막 개발 공부를 시작하는 학생인데, 누가 내 블로그를 볼까? 일부러 내 글이 나오게 검색을 하지 않는다면 구글에 노출될 일도 없을 것이다.
그렇게 내가 자주 둘러보던 블로그 플랫폼, 벨로그를 선택할 수밖에 없었다. 내 맘에 드는 유일한 곳이었다. 지금까지 만든 블로그 페이지들이 아깝긴 했지만 디자인들은 작게 쪼개서 코드샌드박스에 업로드하고, 그 후로는 미련을 버리기로 했다. 게으른 나는 아직까지도 업로드하지 않았다. 🙃
Discord.js
8월 28일, Discord.py
라이브러리의 개발을 중단한다는 충격적인 소식이 들려왔다. 사실 그 당시에 알게 된 게 아니고 한참 후에 친구가 알려줘서 알게 되었다. 다른 방법은 딱히 없었고 Discord.js
, 자바스크립트 라이브러리로 봇 개발을 진행하게 되었다.
Discord.js
라이브러리는 정말 문서와 가이드가 미쳤다. 미쳤다고밖에 할 수가 없다.
문서: https://discord.js.org/#/docs/main/stable/general/welcome
파이썬을 쉽게 떠나보낼 수 있었던 이유가 바로 이 문서들 덕분이다. 정리가 깔끔하게 잘 되어 있어서 개발할 때 정말 유용했다.
그러나 파이썬보다 훨씬 어려웠다. 문서라도 이렇게 잘 되어 있지 않았다면 진작에 포기했을 것이다. 다행히 가이드가 정말 너무 심각하게 잘 알려주고 있어서 쉽게 따라하며 금방 파이썬 때보다 더 많은 기능을 구현할 수 있었다. 사용자가 보낸 메시지에 대답하도록 하는 건 물론이고, 음성 채널에 참가하는 기능도 만들었다.
그리고 친절한 가이드를 따라, 디스코드 봇에 화폐 시스템 만들기를 성공했다. 그리고 바로 이때, 데이터베이스가 필요하게 되었다. 전에 사용한 건 mysql, 이때 사용한 건 sqlite이긴 하지만 한 번 배워봤기에 어떻게 돌아가는 건지 원리를 파악하기가 훨씬 쉬웠다. 데이터베이스에 사용자 정보와 가진 돈의 정보를 저장하고 여러 가지 명령어들을 통해 조회할 수 있도록 한 것이었다. 이 화폐 시스템 덕분에 내 봇은 훨씬 기능이 풍부한 봇으로 나날이 발전했다.
하지만 또다시 문제가 생기고 말았다. 헤로쿠 호스팅은 깃허브를 연결해서 했었는데, 깃허브에는 정적 파일 업로드밖에 되지 않았기 때문이다. 헤로쿠에 호스팅한다면 실시간으로 데이터베이스를 업데이트할 수가 없었고, 다른 대안을 찾아야 했다. 그렇게 찾은 것이 AWS(Amazon Web Services)였다.
AWS EC2를 이용해 봇을 호스팅하는데, 정말 정말 어려웠던 기억이 난다. 그 날 하루종일 구글만 붙들고 폐인처럼 살았다. 결국 성공하고 친구가 따라 만든 봇 호스팅도 도와줬었는데, 일단은 잘 해결한 것 같지만 AWS EC2 프리 티어가 1년만 무료라서 집에 있는 안 쓰는 컴퓨터로 서버를 만들고자 계획 중이다. 그런데 그 컴퓨터 모니터가 나갔다. 이런
호스팅이 끝나고, PM2
라이브러리로 잘 관리하는 중이다. 그리고 기능도 앞으로 더 많이 추가할 예정이다.
봇 호스팅이 불과 며칠 전 일이다. 이제 곧 시험인데 코딩 그만
개발에 처음 입문할 때부터 현재까지의 긴 이야기를 늘어놓았는데, 두서없는 뒤죽박죽 글이어서 나중에 읽고 지금 이 순간을 기억할 수 있을지 모르겠다. 그러나 결국에는 소중한 기록이 될 것이라고 믿겠다. 또한, 이 글이 나만의 기록이 아닌 누군가에게 영향을 끼칠 수 있는 글이 되었으면 한다. 영향을 끼칠 만한 내용이 있긴 한가
코딩을 멈출 수가 없고, 할 때마다 행복하고, 안 할 때마다 하고 싶어지니 천생 개발자가 맞긴 한 것 같다. 지금까지는 그냥 코딩이 재밌어서 닥치는 대로 아무렇게나 했었는데, 앞으로는 계획도 세우고 공부도 좀 하면서 인간답게 살아야겠다.
긴 글 읽어주셔서 감사합니다! 벨로그의 모든 개발자 분들 응원합니다 💖
와 제목도 안읽고 글부터 읽고있었는데 다 읽고나서야 중학생이라는걸 봤습니다.. 장래가 기대되네요 너무 빨리 달려 지치지 마시고 천천히 꾸준히 화이팅!!
대단하시네요. 중학교때 아무것도 몰랐는데 ㅜㅜ
아예 정보올림파이드를 목표로 대입을 준비하시는게 어떨까 싶을 정도네요 ㅋㅋ
저는 정보올림피아드 준비를 했던거랑 대학에서 CS 이론을 공부했던게 현업때 많은 도움이 되고 있습니다.
대단하시네요. 35년전쯤인가 중3무렵 전 gw-basic 쓰는데, 같은 반 친구가 어셈블러 공부하던 친구 있었는데... 그때 그 놈 대단하다 했었는데. 지금은 그래도 시대가 좋아져서 구글 검색하면 어지간한 정보는 잘 나오니
내용을 떠나서 일단 글을 너무 간결하고 가독성 좋게 잘 쓰셨네요. 물론 내용도 정말 대단하신 것 같고, 덕분에 자극 많이 받고 갑니다. 꼭 원하는 좋은 개발자로 성장하시길 바랍니다 화이팅 하세요~!!
"미쳤다. 미쳤다고밖에 할 수가 없다."
찐 개발자시네요. 개발의 세계에 오신 것을 환영합니다 :) 장래가 촉망되어 보여 미리 찜해두고 갑니다!