Home
home
빅스쿨
home

프로그래밍 입문기

작성일
2021/12/07 22:30
생성일
2022/08/01 01:29
저자
키워드
#프로그래밍, #컴퓨터과학, #개념지도
분류
진로진학
리더십
초기 창업가나 IT서비스 기획자를 꿈꾸는 사람이라면 프로그래밍에 대한 기본적인 지식은 필수다. 어떤 분야든 간에 중요하지만 반복적으로 진행되는 일이 있고, 이 일을 자동화할 수 있다면 생산성을 기하급수적으로 향상시킬 수 있기 때문이다. 2020년 10월부터 11월까지 8주간 관련 프로그램을 수강하며 나는 웹 개발에 대한 전체적인 개념지도와 디렉토리에 대한 감각을 얻을 수 있었다. 또한 '컴퓨터과학'의 본질이 '연결'에 있다는 것을 알게 됐는데, 이러한 깨달음을 개별화된 진로진학 컨설팅에 적용하고자 한다.
창업 초기에 겪었던 어려움 중 가장 기억나는 건 홈페이지를 구축하는 일이었다. 개발자, 디자이너와 협업하는 과정에서 내가 원하는 바를 정확히 전달할 수 없는 상황이 얼마나 답답했는지 모른다. 나는 프로그래밍 언어에 대한 가장 기초적인 이해조차 없었을 뿐더러 가능한 것과 불가능한 것, 시간이 오래 걸리는 일과 그렇지 않은 일, 일의 전체와 부분을 몰랐다. 그렇기 때문에 말 그대로 언어가 통하지 않는 해외에 홀로 고립된 이방인 같은 처지가 되버렸던 것이다.
우여곡절 끝에 홈페이지를 완성하고 3년 정도 사업을 운영하면서 어느 정도 시간이 생기자 나는 프로그래밍을 배워보고 싶다는 생각이 들었다. 전업 프로그래머가 되겠다는 생각은 아니었고 개발자나 디자이너와 원활하게 소통할 수 있는 수준의 역량을 쌓고 싶은 마음이었다. 또한 이 시점에 나는 IT서비스 기획에 대해 관심을 갖기 시작했는데, 그 이유는 입시컨설팅의 단계와 수준이 세분화·구체화·고도화되면서 몇몇 단계를 자동화할 수 있다면 생산성이 기하급수적으로 향상될 수 있다고 생각했기 때문이다.
예를 들어 입시컨설팅을 의뢰한 학생이 전체 모집단에서 어느 정도 위치의 학생인지 파악하는 것은 입시컨설팅의 시작이면서 동시에 가장 중요한 업무라고 할 수 있다. 이때 다양한 양적·질적 자료를 참고해 종합적인 분석을 실시하는데, 이 과정은 각각의 정보를 담고 있는 여러 사이트를 방문해 여러 번의 클릭을 통해 필요한 자료를 추출한 뒤 이를 하나의 양식으로 종합하는 것으로 상당한 시간과 노력이 필요한 일이다. 이는 마치 요리를 위해 재료를 구매하고 손질하는 과정과 같은데, 이러한 사전작업이 요리의 맛을 결정하기 때문에 매우 중요하지만 반복적인 수작업의 성질을 띠고 있어 소요되는 시간과 에너지가 크다. 그래서 이러한 비효율을 해결하기 위해 데이터 ‘수집-분류-출력’을 자동화할 수 있는 기술에 대해서 배우고 싶다는 생각이 들었다.
시중에 있는 다양한 프로그램들 중 나는 스파르타코딩클럽의 웹개발 종합반(8주)을 선택했다. 프로그램이 갖고 있는 세 가지 특징이 나의 니즈에 적합했기 때문이다. 첫째, 개발의 전 과정을 배운다. 둘째, 이론과 실습이 조화를 이룬다. 셋째, 오프라인 수업을 진행한다. 이를 정리하면 개발의 전 과정을 배움으로써 웹개발의 큰 그림을 이해할 수 있고, 미니 프로젝트와 개인 프로젝트를 통해 실제 작동하는 서비스를 만들어봄으로써 내실을 다질 수 있으며, 오프라인으로 진행되는 그룹 대면수업을 통해 튜터-튜티간, 튜티-튜티간 질문과 피드백이 활발히 진행될 수 있다고 판단했다.
이 중 가장 중요한 건 프론트엔드, 파이썬응용, 백엔드에 대한 이론과 실습 도구를 8주 동안 촘촘히 제공함으로써 웹 개발에 대한 큰 개념 지도를 그려준다는 것이다. 이게 왜 중요하냐면 지금 당장 내가 특정 개념을 모르거나 도구의 사용법을 모르더라도 내가 필요한 지식과 정보를 찾기 위해 어떤 키워드를 검색해야하는지에 대한 감각 즉, 디렉토리에 대한 감각을 심어주기 때문이다. 프로그래머들 역시 모르는 문제를 해결하기 위해 일상적으로 구글링을 하듯이 입문자들 또한 모르는 것 투성일텐데 이때 전체적인 그림과 도구에 대한 지도를 머리 속에 갖고 있는 것과 그렇지 않은 것은 실력 향상에 있어서 매우 큰 차이를 만든다.
또한 내가 원하는 서비스를 기획하고 A-Z까지 직접 만들어 볼 수 있다는 점이 인상적이었다. 백문이 불여일견이고 실행이 답이라는 말처럼 직접 서비스를 구현해보니 인터넷에서 우스갯소리로 여겼던 개발자의 고충이 무엇인지 조금이나마 알 수 있었다. 특히 강의를 진행하는 튜터님이 개발상의 문제를 해결하는 과정이 인상적이었는데, 키워드의 꼬리에 꼬리를 잡고 집요하게 구글링을 하거나 문제 해결을 위해 여러 각도에서 다양한 방법을 시도하는 모습을 보면서 개발자의 능력은 문제 해결을 위한 집요함에서 나온다는 것을 알 수 있었다.
내가 만든 서비스는 '고등학교 선택가이드_우리 동네 고교순위'라는 서비스이다. 이 서비스는 학교알리미의 시도별 4년제 대학교 진학률 수치를 Python Selenium을 통해 크롤링한 뒤 이를 MongoDB에 저장하고, 이후 Flask를 활용한 Get 방식 Ajax 통신을 통해 원하는 시군구의 진학률만 뽑을 수 있게 만든 서비스로서 단일 학군의 4년제 대학교 진학률을 한 눈에 비교해 볼 수 있다는 장점이 있다. 이 서비스를 만들면서 가장 어려웠던 것은 Python Selenium을 활용한 데이터 크롤링이었다. 4년제 대학교 진학률과 관련된 Api가 따로 존재하지 않았기 때문에 웹사이트 클릭 시 작동하는 네트워크 패널의 데이터를 분석하는 과정이 필요했는데, 전체 시도, 시군구 코드 안의 학교 코드를 가져와서 학교 코드 안에 있는 html을 추출하도록 변수를 연결하고 반복문을 돌리는 과정이 잘 이해되지 않아 힘들었다. 또한 서버를 구축하는 과정에서 드랍다운 버튼의 시도 선택에 따라 각 시도에 해당하는 학교 정보를 보내줘야 하는데 이 과정에서 url을 추상화시키는 과정이 복잡했다. 끝으로 서비스를 AWS에 배포하는 과정에서 로컬에서 잘 작동하는 Python Selenium이 AWS 내에서 작동하지 않아 고생했다.
2020년 10월부터 11월까지 8주 간의 수업을 통해서 느낀 점은 세 가지로 정리할 수 있다. 첫째, Python Selenium을 잘 활용한다면 여러 곳에 흩어져 있는 정보를 비교적 손쉽게 집대성(수집-분류-출력)할 수 있다고 생각했다. 이를 통해 교육수요자에게 필요한 정보를 효율, 효과적으로 제공함으로써 교육격차의 감소에 기여할 수 있겠다고 생각했다. 둘째, 이제 갓 코딩의 세계에 입문한 초심자이지만 웹개발의 큰 그림을 이해할 수 있게 됐다. 이론과 용어, 그리고 도구에 대한 큰 그림을 바탕으로 꾸준히 노력한다면 2~3년 내에 개발자, 디자이너들과 원활히 소통할 수 있는 뛰어난 웹/앱 기획자가 될 수 있겠다는 확신이 생겼다. 셋째, 정보를 수집, 전달, 축적, 가공하는 도구로서의 기계와 관련 기술을 연구 대상으로 하고 있는 ‘컴퓨터과학’의 진정한 힘과 역할에 대해 조금이나마 이해할 수 있었다. 짧은 식견으로 ‘컴퓨터과학’의 의미는 ‘연결’에 있다는 결론을 얻게 됐다. 앞으로 이러한 깨달음을 교육공학 분야로 연결시켜 인공지능과 빅데이터 기반의 개별화된 진로진학 컨설팅 플랫폼을 만들고자 한다.