Enjoy My Posts

개발동아리에서 경험한 첫 서버 개발

Posted on By Geunwon Lim

이 포스트에서는 제가 개발동아리에서 처음으로 서버 개발을 해봤던 경험을 적겠습니다. 이전 특허 출원 경험을 적을 때 곧 개발 동아리에서 활동했던 경험을 적을 것처럼 썼었는데, 6개월도 지나서 적네요. 과거 경험을 회고하는 것이 계속 우선순위에서 밀리다보니 생각보다 오래 걸렸는데요.

시기는 2018.1.2 ~ 2018.2.24 입니다. 약 2개월간 프로젝트를 했던 것인데요. 워낙 오래되다보니 개발적인 부분은 기억이 잘 안나서, 기억나는대로 편하게 적어보겠습니다.

개발동아리 넥스터즈에 들어간 과정

제가 참여한 개발동아리는 넥스터즈입니다. 이 동아리에 대해 소개드리자면, 학기별로 방학기간에 개발에 필요한 여러 포지션(백엔드 개발자, 프론트엔드 개발자, UI디자이너, UX디자이너 등)의 사람들이 모여, 2개월 간 어플리케이션을 만드는 프로젝트를 하는 동아리입니다. 제가 구성원으로서 자부심을 가지고 있는 동아리인데요. 실력있는 분들이 많고, 열정있는 분들도 많아서 아주 좋은 동아리라고 생각합니다. 만약 제가 넥스터즈에 들어가지 못했다면 실력을 쌓는 데 훨씬 더 오래 걸렸을 것입니다. 정말 실력이 부족한 상태에서 넥스터즈에 들어갔는데, 지금 생각해도 참 행운이라고 생각합니다. 넥스터즈에서 실력적으로도 많이 배우기도 했고, 여러 개발자들을 만나면서 긍정적인 자극을 받을 수 있으니 개발 동아리를 찾는 분들께는 강력 추천합니다. 저에게 큰 영향을 끼친 넥스터즈를 소개해준 임주현, 그리고 당시 저를 뽑아주신 운영진 세 분께 감사드립니다.

사실 2017년 말 이전에도 한 번 넥스터즈에 지원했다가 떨어진 경험이 있습니다. 아마 2017년 6월쯤이었던 것 같아요. 그 때 프로젝트학기제에서 경험했던 인공지능 OCR프로젝트를 자소서에 적어 냈었는데요. 면접 때 이것저것 물어보셨는데 다 잘 대답을 못했던 것 같아요. 기억나는 질문이 하나 있는데, “어떤 프레임워크를 써보셨나요?”라는 질문에 제가 “케라스요.. 저는 프레임워크가 케라스랑 텐서플로우를 말하는 것인 줄 알았는데요” 라고 대답했었습니다. 그 당시에 석사 선배님이 케라스, 텐서플로우가 프레임워크라고 말해주신 적이 있어서, 저는 그냥 ‘케라스 + 텐서플로우 = 프레임워크’인 줄 알았거든요. 아마 이것 말고도 엉뚱한 대답을 많이 했을 거예요. 그렇게 면접을 보고 떨어진 후, 2017년 말에 다시 한 번 지원했습니다.

이 때는 정말 간절했어요. 2017년 말까지는 계속 김종우 교수님의 연구실에서 공부를 했는데, 2018년부터는 전혀 계획이 없었거든요. 넥스터즈에 붙지 못하면 소속이 아예 없게 되어 혼자 공부해야 했기 때문에, 꼭 붙어서 좋은 환경에서 공부하고 싶었습니다. 특히 2017년 9월 쯤 이 영상(19년 영상으로 돼있는데, 재업로드되어 그런 것이고 실제로는 17년 영상입니다)을 보고, 좋은 환경을 만들고 싶었거든요. 이 영상에서 발표자는 자기가 성공한 비법을 한 줄로 ‘뭔가를 하고 싶으면, 그걸 할 수 있는 장소에 가서, 실제 그걸 하고 있는 사람들을 직접 만나는 것이다’라고 요약했는데요. 지금도 이 말에 공감하지만, 당시에 큰 영감을 받고 ‘진짜 개발자’들을 만나고 싶은 열망이 컸습니다. 자소서부터 몇 번을 고쳐쓰고, 면접에 나올만 한 질문들도 뽑아서 공부해갔습니다. 사실 첫 번째 지원했을 때 면접에서는 크게 간절하진 않았기 때문에, 별로 안 떨었는데 두 번째 면접에서는 많이 떨었습니다. 생각나는 질문이 ‘프로그래밍을 하면서 재밌었던 적이 언제예요?’ 인데, 인공지능OCR 프로젝트 할 때를 얘기했었습니다. 그리고 제가 비전공자에다가 경험이 별로 없다는 걸 아셔서 그런 지, 어려운 질문은 안해주셨습니다. 제가 했던 프로젝트에 대해 몇 가지 더 물어보시고, 마지막 질문으로 ‘넥스터즈에 얼마나 많은 시간을 쓰실 수 있어요?’라고 물어보셨습니다. 여기에 저는 ‘올인할 수 있습니다. 2개월 모든 시간을 넥스터즈에 쓰겠습니다’ 라고 답변했던 게 기억나네요. 실제로 그렇게 하기도 했고요. 그리고 지원자들이 궁금한 점이나, 마지막으로 하고 싶으면 하라는 말씀에 ‘저는 꼭 넥스터즈에 들어가고 싶고, 동아리 운영상 어려운 점이 있다면 적극적으로 돕겠습니다.’ 라고 얘기했었습니다. 지금 생각해보면 운영진 입장에서 좀 부담스러웠을 것 같기도 하네요… 다행히 운영진분들이 긍정적으로 봐주셨는 지 합격하긴 했지만요. 시간이 지나고, 당시 회장과 조금 친해져서 왜 뽑았냐고 물어보니까, 말 잘들을 것 같아서 뽑았다고 하더군요…^^;; 합격 발표까지 다른 일이 손에 안잡히고 발표만 기다렸던 것도 기억납니다. 합격 통보를 받았을 땐 정말 기뻤고요.

장고를 활용한 서버 개발 경험

합격 후, 본격적인 활동 전 OT가 있었습니다. 이 날 아이디어가 있는 사람들이 나와 자기의 아이디어를 발표하고, 팀원들을 모아 팀 구성을 하게 됩니다. 재밌을 것 같은 아이디어들은 많았는데, 대부분 도저히 제가 참여하겠다고 나서기 어려운 것들이었습니다. 언어도 다르고, 제가 들어보지도 못한 기술을 쓴다고 하니 자신있게 끼워달라고 할 수가 없었죠(OT가 끝나고 뒷풀이에서 어떤 분이 제게 “프론트 개발자예요 서버 개발자예요?” 라고 물어봤는데, 저는 둘 다 안해봐서 대답을 못하다가 “그런 거 없는데요…” 라고 답변했던 기억이 납니다. 그만큼 경험이 없다보니 선뜻 프로젝트에 참여하겠다고 하기 어려웠습니다.). 그나마 제가 할만 한 프로젝트가 동아리를 대표하는 위키 페이지를 만들자는 것이었습니다. 아이디어는 대강 이런 것이었습니다. “최근 개발 공부에 관심을 갖는 사람들이 아주 많습니다. 그만큼 개발 공부할 수 있는 자료들도 인터넷에 많죠. 하지만, 초보자들 입장에서 너무 방대한 양에 짓눌리기도 합니다. 무엇을 먼저 공부할 지 모르겠고, 중요하지 않은 것을 공부하기도 하죠. 넥스터즈 구성원들은 어느 정도 실력이 있다고 생각하기 때문에, 개발 관련 위키 페이지를 만들고 개발 지식을 정제하여 올려놓으면, 개발 초보자들이 겪는 어려움을 해소할 수 있다고 생각합니다.” 저는 초보자로서 이 아이디어에 공감하기도 했지만, 그보다도 “개발언어: 파이썬, 프레임워크: 장고”에 눈이 갔습니다. 장고를 써보진 않았지만 들어는 봤고, 제가 당시 다룰 수 있는 유일한 언어인 파이썬을 사용한다는 프로젝트도 여기밖에 없었기 때문에 고민을 많이 하지도 않고 이 프로젝트에 참여했습니다. 그런데 웃긴 게, 이 아이디어에 공감한 개발자가 저밖에 없었습니다. 팀 구성 마감시간이 거의 끝날 때까지 이 프로젝트에 모인 건 아이디어 발제자(디자이너), 저(개발자 포지션), 디자이너 총 세명이었습니다. 디자이너 두 분은 충분히 잘하시는 분들이었는데, 저는 개발 실력에 자신이 없는데 혼자 개발해야할 것 같아 식겁했죠. 팀 구성원들끼리 팀을 해체해야하나 하는 얘기를 하고 있었는데, 웃긴 게 옆 테이블은 두 명밖에 없었습니다. 그 팀과 합치고, 아이디어는 우리 팀의 아이디어로 가기로 합의하여 프로젝트를 시작합니다.

옆 테이블에도 개발자가 한 명이었는데, 다행히 저와 포지션이 겹치지 않았습니다. 그 분이 프론트엔드, 제가 백엔드를 맡기로 하고 프론트엔드는 리액트, 백엔드는 장고를 쓰기로 합니다. 팀 회의 땐 주로 팀장(아이디어 발제자)님이 자기가 생각하는 아이디어를 구체적으로 얘기해주셨고, 팀장님이 디자이너셨기 때문에 디자인적인 얘기를 많이 했습니다. 프론트엔드 개발자분과 저는 팀 회의 때 나온 얘기들을 토대로 어떤 기능이 필요할 지 이야기 나눴습니다. 그리고 각자 사용하는 기술을 공부했습니다. 그 분도 리액트를 처음 써보는 상황이었기 때문에, 각자 공부할 시간이 필요했습니다. 프로젝트를 2018년 초에 시작했는데, 리포지토리의 제 첫 커밋이 2월 10일인 걸 보니, 1달 정도는 공부를 한 것 같네요. 아마 1달간 공부만 한 것은 아니었을 걸로 추측하는 게, 그 때 깃허브를 쓸 줄을 몰라서 푸시를 못했을 가능성이 큽니다… 어쨌든 진짜 열심히 했습니다. 이 때 가장 크게 동기부여됐던 것은 “날 뽑아준 사람들이 날 잘 뽑았다는 생각이 들게 하자” 였습니다. 당시 저는 정말 넥스터즈에서 활동하고 싶었고, 동시에 제가 너무나 부족하다는 걸 알고 있었기 때문에 뽑아준 운영진 분들께 감사한 마음이 컸습니다. 근데 뽑고 보니 진짜 너무 못해서, 그분들이 “우리가 얜 잘못 뽑은 것 같다…“라는 생각을 하실 걸 상상하면 끔찍했습니다. 그래서 “반드시 내가 넥스터즈에 뽑힐만 한 인물이라는 걸 증명한다”라는 마음이 컸습니다. 개발 실력을 키운다는 목적도 물론 있었지만, 그것보다 앞서 말씀드린 이유 때문에 하루종일 공부했습니다. 그 때 공부했던 걸 적어보자면, 파이썬 웹 프로그래밍, 파이썬 웹 프로그래밍 실전편, 유튜브의 장고를 활용한 블로그 만들기 시리즈등을 주로 봤습니다. 특히 우리 프로젝트의 주요 기능이 유튜브의 영상과 거의 똑같았기 때문에, 유튜브 영상이 크게 도움이 됐습니다. 깃도 필요해서 생활코딩의 깃 강의를 하루, 이틀만에 다 봤던 기억도 납니다. 아래 이미지는 프로젝트 중 제가 구글링하면서 모아놓은 자료들입니다. 쭉 노트북을 바꾸지 않고 쓰다보니 당시 모아놓은 자료들이 북마크에 남아있네요.

그림1

그리고 아래는 당시 디자이너가 준 디자인에 프론트엔드/디자이너분들께 서버 쪽 엔드포인트와 매칭시켜 코멘트를 달고 공유했던 것 중 하나입니다.

그림2

이 때 짰던 코드를 잠깐 다시 봤는데, 무슨 코드인지 잘 모르겠습니다. 그 때 기억을 떠올려보자면, 장고가 “이러이러하게 코딩 해놓으면, 우리가 알아서 기능 작동시켜줄게~”라고 말하는 느낌, 즉 내가 뭔가를 알고 짠다기보다는 이렇게 짜면 어떤 기능을 해준다니까 짠 경우가 많았습니다. 요즘 하는 코딩이랑 아예 다르다보니까 좀 생소하게 느껴졌습니다.

당시 프로그래밍을 하면서 겪었던 구체적인 이슈들이 생각이 안나서, 이 때 했던 경험을 자소서에 쓴 걸 찾아봤습니다. 이 내용을 적은 자소서도 대부분의 대기업 서류를 통과한 걸 보면(물론 이후 코딩 테스트나 면접에서 많이 떨어졌습니다…), 어느정도는 인정받을만 한가 하고 우쭐해지네요…^^;

[당시 경험을 자소서에 쓴 것]


[체계적으로 정보를 정리해주는 웹서비스, 넥스트리]

저는 ‘넥스터즈’라는 개발동아리에서 디자이너 3명, 개발자 1명과 팀을 이뤄 웹 어플리케이션 개발 프로젝트에 참여한 경험이 있습니다. 이 프로젝트는 정보의 홍수와 같은 인터넷에서 원하는 정보를 찾기 위해서는 많은 시간을 투자해야하는 불편을 개선하기 위해 시작되었습니다. 구체적으로, 검증된 사용자만이 글을 쓸 수 있게 하여 정보의 질이 보장되고, 알아야 하는 순서대로 글들을 정렬하여 정보가 체계적으로 정리되는 웹페이지를 만들기로 했습니다. 프로젝트는 올해 1월 2일부터 2월 24일까지 2달간 진행되었고 제 역할은 서버 개발이었습니다. 서버 개발을 위해 개발언어로 Python을 사용하였고 Django, PostgreSQL, AWS EC2, NginX등을 사용하여 rest api를 배포했습니다. 서비스를 구체화하기 위해 매주 1회 이상 회의를 진행했습니다. 먼저 목표한 기간 내에 프로젝트를 완수하기 위해 다루는 정보의 주제를 팀원들에게 익숙한 IT와 디자인으로 한정했습니다. 그리고 동아리 회원들의 실력과 지식에 대한 신뢰를 바탕으로 글을 쓸 수 있는 사람을 동아리 회원으로 정하였습니다. 이 후 persona를 통해 서비스를 이용할 사용자들의 니즈를 명확히 했고, 대략적인 wireframe을 만들었습니다. 서비스 기획을 마무리한 후 성능을 고려하여 개발 스택을 정하고 개발을 시작했습니다. 저는 팀원들과 협의하여 다음과 같이 서버를 구축했습니다. 1) 테이블은 User테이블을 포함해 총 7개로 이루어져 있습니다. 모든 테이블에 대해 CRUD를 구현했습니다. 2) 4개의 테이블은 게시글을 저장하기 위한 것으로, 위계가 정해져있고 인접한 테이블끼리 연결되어 있습니다. 하나의 테이블에 대해서는 사용자가 검색할 수 있도록 했습니다. 3) 나머지 2개의 테이블은 각각 사용자가 게시글을 북마크에 등록할 때와 사용자가 게시글을 조회했다는 것을 확인할 때 사용됩니다. 4) 로그인 기능은 Json Web Token기반으로 이루어지고, Username으로 로그인해야 하는 Django의 기본값을 수정하여 Email로 로그인할 수 있게 했습니다. 5) 로그인된 사용자, 게시글의 작성자 등에 따라 권한을 다르게 부여했습니다. 코드를 작성할 때 어려웠던 점은 테이블을 원하는대로 정렬하는 것었습니다. 프론트에서 전달해주는 값에 따라 테이블을 재정렬하는 것과 연결된 테이블의 생성 날짜를 기준으로 정렬하는 것이 어려웠는데, 여러 시도 끝에 원하는대로 구현할 수 있었습니다. 2달 동안 모든 팀원들이 열심히 한 덕분에 도메인을 적용한 웹 어플리케이션을 배포할 수 있었습니다. 아직 프론트엔드의 기능 구현과 CSS가 완료되지는 않았지만, 2개월동안 팀원들과 합심하여 결과물을 냈다는 것만으로도 큰 성취감을 느꼈습니다. 짧은 기간동안 Django가 어떻게 동작하는지 익히는 것이 쉽지는 않았습니다. 뿐만 아니라 배포를 위해 AWS EC2를 공부해야 했고, EC2를 제어하기 위해 간단한 리눅스 명령어를 알아야 했습니다. 그리고 작성한 코드를 웹 서버, 데이터베이스와 연동시키기 위해 여러 설정값을 변경해줘야 했습니다. … 이후 위의 경험을 최선을 다해 포장하는 내용이 나와 하략합니다…


이 때 실력은 정말 보잘 것 없었습니다. 심지어 rest api라고 하기 어려운 api를 rest api라고 믿고 자소서에 썼었죠. 물론 지금도 많이 부족하지만, 이 때는 훨씬 더 부족했습니다. 실제로 당시 제가 2달 간 힘겹게 코딩 후 배포까지 한 다음에 든 생각이 “이거 내가 공부하는 데 시간이 걸려서 그렇지, 다시 하면 1주일이면 하겠다”는 생각이 들 정도의 양이었습니다. 장고에 익숙한 개발자가 하면 어쩌면 3일, 아니면 하루만에 했을 수도 있을 것 같아요. 코드 자체로 의미있다고 볼 순 없겠지만, 저에게는 의미가 큰 프로젝트였습니다. 어떻게해서든 목표했던 걸 이루고 나니까, 자신감이 급상승했습니다. “열심히 하면 빠르게 성장할 수 있다”라는 생각을 했던 것 같아요. 개발하는 것의 재미를 더 느끼기도 했고요. 제가 배포한 api를 프론트엔드에서 호출 성공했을 땐 정말 기뻤습니다. 아쉽게도 실제 사용자들을 경험하진 못했지만(당시 css등이 미완성되어 웹페이지를 배포하긴 했어도 주변 사람들에게 홍보하지 않았고, 몇달 간 추가작업을 하려고 했지만 진척사항이 없어 팀원들과 합의 하에 서버를 내렸습니다), 2달 간 빠르게 성장했기 때문에 의미있었습니다. 마지막 날 동아리원들을 대상으로 시연을 했는데, 완전히 완성은 못했다고 하더라도 “이 정도까지는 했다”라고 보여줄 수 있었기 때문에 제 목적이었던 “넥스터즈 구성원이 될 자격이 있다는 걸 보여주기”도 어느 정도는 달성했고요.

이 포스트에서는 개발동아리 넥스터즈에서 경험한 2달간의 서버 개발 경험을 적었습니다. 다음에는 오픈소스 블록체인 코어 개발 프로젝트에 참여했던 경험을 써보겠습니다.

읽어주셔서 감사합니다.