벌써 2022년이 마무리되었다. 학교에 복학한 지도 벌써 2년, 나는 이제 4학년을 앞두고 있다. 그동안 뒤도 안 돌아보고 온 탓인지 사실 아직 마음의 준비가 안 되었다. 올해는 더 늦기 전에, 내 기억력이 다하기 전에 발자취를 꼭 남기고자 글을 쓴다.
2학년 마치고 3학년 올라가는 작년 이맘때 즈음 교내 웹 캠프를 통해 7여 명의 팀원과 함께한 프로젝트이다. 인스타그램의 주요 기능들을 Git
으로 버전 관리하면서 개발했다. 팀에서 내가 맡은 부분은 메인 페이지로 UI를 비롯하여 공통 부분인 페이지 상단 헤더 모듈화, 게시글 좋아요 및 북마크, 무한스크롤(페이징 없이 스크롤에 따라 동적으로 게시글을 불러오는 것), 게시글에 사진 업로드할 때 S3
에 저장하고 불러오는 것 등을 구현했다.
프로젝트 초기에는 스스로 실력이 많이 부족하다고 느껴서 내가 팀에 도움이 될 수 있을까 걱정이 많았다. 주 3회 미팅에서 무엇을 구현 했는지 성과를 보여야 하는 압박감은 생각보다 컸다. 그래서인지 팀에 도움이 되기 위해 더 시간을 들였고, 팀에서의 나의 위치 그리고 팀에 기여하는 것에 대해 걱정한 만큼 오히려 많이 성장할 수 있었다. 준비되어 있지 않았기 때문에 많이 배웠지만, 준비되어 있지 않았기 때문에 시간이 많이 걸린 부분도 있다. 사용하는 스택을 더 이해하고 전체적인 구조 아래 프로그래밍을 했다면 코딩하는 시간을 더 줄일 수 있지 않았을까 아쉬움이 남는다. 시간이 되면 해당 프로젝트에 대해 자세히 다루도록 하겠다. 키워드는 Flexbox
, JS
, Spring Boot
, JSP
, Mybatis3
.
3학년 1학기 때 수업 프로젝트로 Flutter
를 이용하여 혼자서 데모 앱 개발을 진행했다. 앱 주제는 글쓰기(특히 시)에 관심 있는 사람들이 자신의 글을 공유하는 것이다. 인스타그램과 같은 플랫폼이 사진 위주라면 나는 글(문자)이 중심이 되는 플랫폼을 만들고 싶었다. 비슷한 서비스로 씀
어플이 있는데, 개인적으로 애용할 만큼 훌륭하지만 가끔 버벅이거나 튕기는 버그가 있었고, RN
으로 개발된 해당 어플과 비교했을 때 Flutter
를 이용하면 어떤 퍼포먼스가 나올지 궁금해서 프로젝트 주제로 선정했다.
단언컨대, Dart
언어도 그렇고 Flutter
생태계에 대한 지식이 전무했음에도 단기간에 프로젝트를 진행할 수 있었던 것은 구글의 상세한 튜토리얼과 API 문서 덕분이다. 문서화가 정말 잘 되어 있다. 튜토리얼의 목표를 하나 하나 달성하면서 자연스럽게 프레임워크에 익숙해지게 된다. 그리고 웬만한 컴포넌트가 이미 다 내장되어 있기 때문에 API 문서보면서 잘 활용하기만 하면 된다. 컴포넌트에 따라서 색상이나 사이즈 등 컴포넌트 안에서 조금씩 변화를 줄 수 있는 경우에는 Dart
의 Named Parameter
가 도움이 많이 된다. 필요한 부분만 변경하면서 가독성도 올라간다. Flutter
덕분에 4주라는 제한된 기간 내에 기본적인 CRUD
와 검색을 지원하는 데모를 개발 할 수 있었고 나중에 개선할 의향이 있다. 이 프로젝트도 나중에 따로 자세히 다루도록 하겠다. 키워드는 Flutter
, Firebase
, Named Parameter
, Provider
.
일 년 간 교내 전산 동아리에서 활동을 했다. 학과 내 소속감과 결합도가 높지 않은 우리 학교 특성상 이렇게 전공 관련 공동체에서 같이 공부할 사람을 찾는 것은 분명 도움이 된다. 학기 중에서는 전공 스터디를 진행하고 방학 중에는 팀을 꾸려 프로젝트를 진행했는데, 나는 2명과 함께 동아리 홍보 웹사이트를 구축하는 것을 주제로 선정했다. 전산 동아리임에도 불구하고 당시 동아리를 알릴 웹사이트가 따로 없었기 때문이었다. 에브리타임, 카톡방 등 기존 플랫폼에 의존하지 않고 동아리만의 자체 웹사이트로 홍보를 하면 좋겠다는 생각이 들었다.
문제는 나를 제외한 팀원 모두 웹개발이 처음이라는 점이다. 나도 이전에 웹개발을 경험했지만 리드할 수준은 아니다보니 가장 숙련도가 낮은 사람의 수준에 맞추어야 했다. 그래서 프로젝트 목표를 Github Pages
를 이용하여 정적 웹사이트를 구축하는 것으로 조정했고 학기 중에 Git
, HTML
, CSS
등 기초적인 스터디를 진행했다. 프로젝트의 일원으로 참여하는 것과 프로젝트를 주도하는 것은 차원이 다른 역할임을 체험했다 …
전산 동아리에서 만난 인연으로 나를 포함하여 3명이서 기업체에서 주관하는 교내 공모전에 참가해 대상을 수상했다. 공모전 내용은 기업의 솔루션 중 하나인 로우코드(low-code) 플랫폼을 이용하여 웹사이트를 구현하는 것이었다. 발표도 매끄럽지 못했고 구현도 기존 계획에 비해 다 마치지 못했던 와중에 좋은 평가를 받았던 부분은 의외로 디테일한 부분에 있었다. 해당 플랫폼에서 지원하는 기능을 충실히 이용하여 데이터를 연동한 것, 데이터베이스에 개인정보를 저장하기 전 해시 알고리즘을 통한 암호화, Zulu
타임을 로컬 타임으로 변환, 절차 간 예외 처리 등 기능 구현하기 전에 했던 고민들을 궁금해 하셨고 들어주셨다. 그리고 이러한 고민들을 좋게 생각해주셔서 대상까지 수상할 수 있었다. 중요한 것은 눈 앞의 기능 구현이 아닌 그 속에 담긴 구조적(거시적) 고민들과 안전하고 유연한, 유지보수가 용이한 소프트웨어를 만드는 것임을 느낀 경험이었다.
2학기에 수강한 전공 수업 프로그래밍 언어론
의 마지막 과제가 기억에 많이 남는다. 이 과제는 한 학기 동안 배운 범위 내에서 Interpreter
를 구현하는 것이다. Interpreter
는 간단한 사칙연산을 기본으로 Substitution
, 일급함수, 재귀, Laziness
, Call by Value
, Call by Reference
를 적용 및 해석할 수 있어야 한다. 개념을 아는 것과 이를 구체화(구현)하는 것은 차원이 다르다. 기말고사 시험기간부터 종강 이후 일주일 내내 밥만 먹고 고민에 고민을 거듭했는데도 잘 풀리지 않아서 꽤나 애를 먹었다. 그런데 아예 건들지도 못할 수준은 아니었고 Laziness
개념만 구현이 잘 안 되어서 오기로 어떻게든 해내고 싶은 마음이 정말 강했다. 결국 완성(완벽하지는 않지만 sample output에 대한 테스트 케이스, 그리고 그 과정에 대한 설명 준비)했고 코딩 인터뷰까지 잘 마칠 수 있었다. 정말 한 줄 한 줄 디버깅하며 시간 가는줄도 모르고 하루종일 프로그래밍에 몰입했던 경험이었다. 그리고 그 몰입 경험이 나쁘지 않았다. 알을 깨는 순간은 고단하지만 깨고 나오는 순간 새로운 세상을 맞이한다.