나는 2021년에 대구소프트웨어마이스터고등학교에 입학했다. (6기)
그 후로 현재까지 꾸준히 백엔드 개발 공부를 하는 늅늅이 개발자이다. CS 지식을 포함해 아직 부족한 것들이 너무나도 많다. 그래서 이번 기회로, 지금까지 해온 활동들을 회고하면서 앞으로 어떤 방향으로 나아가야 하는지 정리하려고 한다 :)
대소고에 입학하다
2021년 2월에 최종적으로 중학교를 졸업하고, 대구소프트웨어마이스터고(이하 대소고)에 입학했다.
나는 왜 인문계 고등학교가 아닌 대소고를 택했나?
대소고에 원서를 넣기 전으로 돌아가보자.
중학교 3학년 봄방학 시절에 생활코딩을 통해 html과 css를 접했고, 너무 재미있어서 쉬는 시간도 없이 몇 일간 강의를 계속 들었다. 웹이 무엇인지, 코딩이 무엇인지, html 태그 등의 개념을 재미있게 공부했고, css로 웹을 예쁘게 만드는 법 또한 배웠다.
이때 배운 것들을 활용해서 오미자샵이라는 웹사이트 (근데 JS 없는..) 를 만들어봤다. 할머니, 할아버지께서 오미자 농장을 운영하시는데, 힘들어 보이셔서 조금이라도 도와드리고 싶었다. 그래서 젊은 층으로 오미자 판매를 좀 더 촉진시킬 수 있는 웹사이트를 만들어보기로 했다. 그 당시에는 HTML과 CSS를 활용해 웹페이지를 만드는 게 너무 재미있었고, 결과적으로 꽤 멋진 웹페이지를 완성했다.
하지만 실제 서비스를 하기 위해서는 백엔드 개발이 필요했다. 그 당시에는 백엔드와 DB가 뭔지도 몰랐고, 굉장히 어려운 개념이라고 느껴서 배울 생각도 하지 못했다. (핑계 그만해!!) 이때부터 뭔가 전문적인 개발자가 되고 싶었다. 때마침 어머니께서 대소고에 가는 것을 추천해주셨고, 그것을 계기로 대소고 입학을 목표로 잡았다.(지금 생각해보면 이때부터 백엔드 개발자의 꿈을 키워온 것 같다.)
그 시점부터 학교 내신 점수를 불나게 챙겼고, 프로그래밍 학원을 다니면서 C언어 기초를 배웠다. 그렇게 대소고에 원서를 넣고 면접을 본 결과, 6기에 최종 합격했다.
바인드팀 인턴이 되다
대소고에 입학해서 가장 먼저 목표로 잡았던 것이 바인드팀 (교내 동아리)에 들어가는 것이었다. 여러 동아리를 홍보(발표)하는 자리에서 한 선배님이 바인드 동아리의 개발 문화, 도담도담 서비스 등에 대해 소개하는 것을 보고 홀딱 반해버렸다.
1학년이 되어 교과목과 C언어, 자료구조, JavaScript 등을 공부하는 중에 채용 공고가 떴고, 마감 몇 시간 전까지 신중하게 고민하다가 과제와 함께 지원 이메일을 넣었다. 2차 면접까지 마친 끝에 바인드팀 인턴이 되었고, 인턴 동료들끼리 글래스(Glass) 프로젝트를 진행했다.
"글래스(Glass)"란?
대구소프트웨어마이스터고등학교에서는 밴드 SNS 서비스를 통해 학부모-교직원-학생 간의 연결이 이루어지고 있다. 아무래도 학부모, 교직원, 학생이 같은 그룹에 있다 보니 부담스러움 때문에 학생의 활동이 거의 없었다. 또한 공지사항, 건의사항, 기타 사진들을 구분하지 않고 게시해서 소통보다는 공지 위주의 SNS라는 느낌이 들었다. 이러한 문제점을 해결해보고자 시작한 프로젝트가 글래스이다. 글래스 서비스는 오로지 소통에만 초점을 맞춰 학생들의 일상을 투명하게 담아내는 서비스라는 비전을 토대로 하여 학생-학부모-교직원 간의 활발한 소통을 도모한다. 학생들이 일상 사진을 공유하고, 학부모들과 교직원들이 댓글과 공감을 남기며 반응할 수 있다. 그 외에도 인기 게시물 및 해쉬태그 기능이 있다.
이번 바인드 6기 인턴 프로젝트를 통해 처음으로 완전한 백엔드 서비스를 만들었고, 협업에 있어서 소통의 중요성, Git, DB 등의 기본 개념의 중요성을 깨달았다. 코드 퀄리티 측면에서는 굉장히 초보 냄새가 나기 때문에, 곧 Nest.js를 활용해 리팩토링을 진행할 예정이다.
기술 스택을 간단히 소개하자면 express 프레임워크를 활용해Node.js로 개발했으며, 문서 중심의 MongoDB를 사용했다. 왜 Relational DB가 아닌 Documentation 기반 DB를 사용했는지 묻는다면, 서버를 처음 공부하며 배운 DB가 MongoDB라서 꽤 능숙하게 다룰 수 있었기 때문이다. (사실 User와 Posting 관계에서 Join이 없어서 많이 힘들었다.. 리팩토링 할때는 무조건 RDB로!)
그리고 감사하게도 이 프로젝트로 1학년 말(2021/11)에 ICT에서 부스를 운영할 기회를 얻었다. 그리하여 바인드 6기 인턴 동료들과 부스를 운영했고, 쉽게 얻지 못할 멋진 경험을 쌓았다. 외부 사람들에게 우리 프로젝트에 대해 설명하며 프로젝트의 장점을 어필했고, 가끔은 멋진 피드백도 받을 수 있었다.
STA+C 2021 대회 최우수 팀이 되다
나는 대구소프트웨어마이스터고등학교에 입학한 후에, 선배들의 STA+C 대회 수상 소식을 많이 들어왔다. 그래서인지 나도 그 대회에 꼭 참여해서 수상하고 싶다는 생각을 많이 했었다.
마침 STA+C 2021 대회 참가 공고가 올라왔고, 나와 뜻이 맞는 친구 4명을 섭외하여 함께 참여했다. 몇 달의 고난을 거친 후에 먹어보시개 서비스로 최우수상을 받았고, 사람들의 문제 해결에 기여할 수 있었던 데에서 큰 행복을 느꼈다.
"먹어보시개"란?
반려견이 먹어도 되는 음식, 먹으면 안되는 음식을 객관적 지표(안전 스펙트럼)를 통해 알려주는 서비스이다. 필자가 실제로 반려견을 키우며 느낀 불편함을 해결해보고자 만들었으며, 음식 정보 조회 외에도 바코드 스캔, 인근 병원 조회 기능 또한 제작했다.
이 서비스를 제작하면서 팀장으로 팀을 이끈 동시에 백엔드 개발자로 참여했다. 백엔드 기술 스택은 인턴 프로젝트와 비슷하게 express, Node.js 및 MongoDB를 사용했다. 이 프로젝트 또한
그리고 팀을 이끌면서 많은 것을 배워서 뿌듯했다. 대회를 진행하는 과정에서, 팀원들과 여러 회의를 거치면서 좋은 리더가 무엇인지에 대해 배웠고, 긍정적인 팀 분위기가 프로젝트 진행에 얼마나 중요한 영향을 미치는지를 몸소 깨달았다.
자세한 설명은 이 글에 기록해놓았다 :)
여름 교내 해커톤에 참가하다
우리 학교에서는 매 학기마다 해커톤을 진행한다. 이번 해커톤은 이 학교에 들어온 뒤 첫번째 해커톤이었고, 그만큼 뜻깊었다. 2학년 선배들과 함께 팀이 구성되었고 이때는 개발 역량이 부족했기에, 2학년 선배들에게 앱/서버 개발을 맡기고 나를 포함한 1학년 팀원은 아이디어를 구상하고 로고 디자인 및 PPT 제작을 맡았다.
네트워크 문제로 인한 개발 지연으로 비록 우리 팀이 수상하진 못했지만, 협업 방법 및 계획의 중요성을 알게 되었다. 그리고 무엇보다도 다음엔 더 열심히 참가할 원동력을 제공해준 대회였다.
자세한 글은 여기에 작성해놓았다 :)
창업놀이터 본선에 올라가다
대소고에 들어온 뒤 대회 참가에 목말라 있을 즈음에, 학교 복도에 붙어있는 홍보 포스터를 보고 옆에 있던 친구들과 참여하게 되었다.
우리 팀의 이름은 moreversal이었다. 이는 more과 universal의 합성어로, 모든 세대에 선한 영향을 주어 세대 간의 화합을 이루자는 포부를 담고 있다. 우리 팀은 민재, 경태, 현우와 나(팀장)로 이루어져 있다.
여러 시행착오를 거친 후, 최종 아이디어인 호미를 잡고가 나오게 되었고, 수차례의 멘토링 및 군청 농업담당자와 인터뷰를 통해 아이디어가 실제로 문제점을 해결하는지 검증했다. 그리고 여러 노력과 운이 따라준 덕분에 2021 창업놀이터에서 멘토링, 예선 등을 거쳐 본선에 오를 수 있었다.
"호미를 잡고"란?
농업에 종사하시는 어르신들의 일손 고용의 어려움, 인력중개사를 통할 경우 인력을 제공하는 입장에서 높은 수수료를 부담해야 한다는 점 등을 고려하여 나온 아이디어이다. 농장주와 일손을 앱 서비스로 연결하여 서로 더 합리적이고 신속한 연결이 가능해진다.
이번 호미를 잡고 프로젝트의 백엔드는 TypeScript라는 언어로 작성되었고, Node.js(Express) + MySQL(TypeORM) 기술로 개발되었다. 이전에 나는 위의 먹어보시개나 GLASS 등의 프로젝트에서 JavaScript(+ Node.js + MongoDB)를 활용하여 개발하는 것에 익숙했는데, 이번 기회로 TypeScript 및 RDB를 다뤄보고 백엔드 개발에 좀 더 친숙해진 것 같다.
다른 팀들의 발표와 전시를 보면서 AI, IoT 등의 더 멋진 기술력과 언변 능력에 정말 많이 감명받았고, 내년에는 더욱 발전된 기술력과 내 아이템에 대한 확신, 향상된 발표력 등을 통해 나도 그 자리에 있을 것이라 다짐했다.
또한 창업가에게 필수불가결한 요소인 기업가 정신(entrepreneurship)에 대해서도 많이 고찰하는 시간을 가졌고, 내가 앞으로 어떤 방향으로 가야 할지를 깊게 생각해보았다. 포기하지 않는 정신, 돈이 나를 위해서 일하게 한다는 생각, 문제의 극복과 끝없는 배움을 바탕으로 계속 성장해가려는 마음가짐.
자세한 설명은 이 글에 기록해놓았다 :)
알고리즘 대회에서 입상하다
2021년 막바지에 대구소프트웨어마이스터고등학교에서 주최한다는 소식을 듣고 예선에 참가했다. 평소에 알고리즘에 대한 부족을 꽤 느꼈기에, 이번 대회 준비를 계기로 알고리즘을 파보고 싶었다. Python 언어로 알고리즘 문제들을 풀어보며 준비했고, 구현 문제들과 그리디(Greedy) 등의 알고리즘을 익혔다.
주변에 알고리즘을 많이 공부한 학생들이 적지 않았기에 자신감이 없었지만, 감사하게도 운이 따라줘서 예선에서 통과하고 본선에 올라갈 기회를 얻었다. 본선을 준비하면서는 좀 더 많이 알고리즘 문제들을 풀었고, 끝내 고등부 은상을 수상했다. 물론 알고리즘 측면에서 나는 아직 많이 부족하기에 알고리즘에 대해 꾸준히, 좀 더 깊게 파볼 것이다.
겨울 교내 해커톤에서 입상하다
드디어 기다리던 교내 동계 해커톤이 2021년 12월 29일부터 이틀에 걸쳐 진행되었다. 나는 평소에 개발에 열정적이던 팀원들(민재, 태환, 건호)을 모아 팀을 형성했고, 루티나이저(ROUTINIZER)라는 아이디어를 구상하고 개발을 진행했다.
"루티나이저(Routinizer)"란?
서비스 이름은 Routinize + er에서 유래되었으며, 학생들의 루틴(습관) 형성에 도움을 주자는 취지로 시작되었다. 사용자는 자신이 참여하고 싶은 챌린지에 참여하여 일일 인증을 통해 자신의 랭킹을 올릴 수 있다. 여기서 중점은, 돈을 걸지 않고 랭킹 및 티어를 도입해서, 금전적인 부담을 줄이고 게임하는 느낌으로 꾸준히 임할 수 있다.
처음에는 트렌드 코리아 2022에서 영감을 받았다. 바른생활 루틴이라는 파트에서 근로 시간의 축소와 코로나19가 불러온 소소한 루틴 생활이라는 소재가 학생들에게도 굉장히 적합한 주제라고 생각했고, 이와 비슷한 서비스 중 실제 출시한 서비스(챌린저스)가 있었지만, 돈을 걸지 않고 게임하는 느낌(랭킹 및 티어 도입)으로 임할 수 있다면 더욱 학생들에게 최적화된 서비스라고 생각했다.
나는 백엔드 개발을 맡았고, express 프레임워크와 TypeScript 를 사용하여 서버를 개발했다. DB는 MySQL을 사용하였으며, TypeORM을 통해 엔티티와 DB 테이블을 매핑했다. 내가 가장 자신있어한 기술 스택이었기에 개발이 그렇게 오래 걸리진 않았다. 하지만 이번 서비스의 특성상 배치 처리(스케쥴링)를 해야 했고, 이를 서비스에 처음 도입해봤다.
TypeORM에서 QueryBuilder를 사용하는 중에 오류가 생겼고, 그때 많이 헤맸다. 해커톤에 멘토로써 참여한 우리 학교 졸업생분들 중 백엔드 개발하는 선배에게 찾아가 오류 해결법과 궁금했던 것들을 여쭤보았고, 오류 해결 뿐만이 아닌 개발 기술 및 백엔드 개발에 대해 황금같은 배움을 얻었다.
1일차에 어찌저찌 백엔드 개발을 마치고 안드로이드 앱과의 통신을 시작했고, 잠깐 시간이 있을 때 아이디어 소개 PPT를 제작했다.
나는 대상을 타고 싶었지만, 우수상 을 수상했다. 최선을 다하지 못한 것과 대상을 타지 못한 것에 대해 아쉬운 마음도 많았고, 이 정도면 잘 했는데 왜 우리가 이 만큼밖에 못 얻었지 하는 생각도 들었다.
차분히 전공 공부를 이어가며 다시 생각해보니 내가 끝까지 팀과 결과물에 대한 책임감을 가지지 못한 탓도 있고, 진부한 아이디어를 가공하지 않고 그대로 가져가다 보니 생긴 결과 같았다. 그래서 내가 못가진 것보다 지금까지 배운 것에 집중해 성찰해보고, 결과보다 과정에 집중하는 내가 되기로 마음먹었다.
고등학생, 개발자로서의 1년을 마치다
내게 있어서 2021년은 정말 뜻깊은 해였다. 대구소프트웨어마이스터고에 들어온 내 선택을 옳게 만들었고, 뭐든 할 수 있다는 마음가짐과 뭐든 하고싶어 하는 열정을 깨달았다. 이를 기반으로 학업적인 성취(전교 2등!!) 뿐만이 아니라 나 자신에 대한 도전을 수없이 경험했다.
물론 여기서 멈추지 않고 더 큰 도전을 향해 나아갈 것이다. 나보다 멋진 개발자는 수없이 많고, 나는 아직 많이 부족하다. 하지만 너는 부족하니까 안돼라는 마음가짐은 개나 줘버리고, 부족하니까 더 노력하자라는 생각을 가지고 앞으로의 개발자 인생을 맞이하고 싶다. 다시는 없을 고등학생 시절, 멋진 성공 경험들을 쌓고 싶다.
긴 글 읽어주셔서 감사합니다!! :)