베이스캠프 3주차 회고
떠먹여주는 기술 교육
3주차에는 강의식의 기술 교육이 대부분의을 차지하였다. 2주차에 기획하였던 예매 서비스의 구현을 위해서 필요한, 그리고 현업에서도 사용하게 될 중요한 정보들을 습득하기 위한 시간이었다. 초심자를 위한 '’떠먹여주는 교육’‘을 표방하고 있었지만, 개발 경험이 적다 보니 짧은 시간에 진행될 여러 분야의 기술 교육을 소화해낼 수 있을지에 대한 우려가 있었다. 그렇게 본격적으로 개발자를 위한 교육이 시작되었다.
3주차 - 기술 교육
월요일
3주차 첫날에는 2주차에 준비한 기획안을 발표하였다. 내가 소속된 TF를 포함하여 대체로 기획한 내용 전부를 기한 내에 구현하기에는 어려울 것이라는 운영진의 우려가 있었다. 필수 구현사항을 제외한 추가 사항은 우선순위를 낮추거나 기획에서 제외하는 쪽으로 피드백이 주어졌고, 야심차게 추가한 ‘지도에서 찾기’ 기능도 제외하는 방향으로 의견이 모아졌다.
오후에는 Git/Github의 사용법에 대한 강의가 진행되었다. 사실 지금까지는 공동작업을 할 경험이 적었고 복잡한 내용의 개발을 할 일은 거의 없었기 때문에 add/commit/push를 제외한 기능을 사용할 일이 거의 없었다. 하지만 앞으로 진행할 예매 서비스의 개발을 위해서, 그리고 현업에서의 협업을 위해서는 보다 다양한 기능의 습득이 필요한 시점이었다.
이번 교육에서는 기능 단위 브랜치 관리, 충돌 해결, 풀리퀘스트 및 코드리뷰 등 협업을 위한 기능들을 중점적으로 배울 수 있었다. 특히 브랜치 관리 모델인 git-flow을 이번 기회로 처음 접하게 되었는데, 다소 모호했던 브랜치 관리의 기준을 잡을 수 있어 좋았다. 그리고 Pro Git을 통해 기본적인 사용법을 익힌 이래로 지금까지는 CLI로만 Git을 활용해 왔었는데, 이번 강의를 통해서 Fork라는 GUI 클라이언트를 접하게 되었다. CLI보다 간편하고 직관적인 브랜치 관리가 가능해서 반가웠다. Fork는 앞으로도 유용하게 사용할 것 같다.
화요일
오전에는 vim 활용에 대한 강의가 진행되었다. 예전에 리눅스 쉘에서 처음으로 문서를 열어보고 난 뒤 종료하지를 못 해서 당황했던 경험 이후로, 틈틈이 vim을 사용하는 습관을 들여왔기 때문에 크게 어려운 부분은 없었다. 그럼에도 불구하고 매일 쓰던 기능만 쓰다 보니 다양한 기능들을 알지는 못했는데, 이번 기회를 통해 문서 내 커서 이동 및 편집을 위한 다양한 기능들을 익힐 수 있었다. 앞으로도 터미널을 통해 원격으로 서버에 접속하다 보면 vim을 활용할 일이 종종 있을 텐데, 그럴 때마다 이번 강의에서 배운 기능들이 유용하게 활용될 것이라고 생각한다. 무엇보다도 카페에서 vim으로 문서 편집하면 멋있잖아…
오후에는 html, css 활용에 대한 강의가 진행되었다. 사실 예전부터 별로 좋아하지도 않았고 관심도 없던 부분이라 실습 과정이 다소 험난했다. 다양한 기능을 단시간에 훑어나가다 보니 놓친 부분도 많았지만, display:flex 속성의 활용은 확실하게 기억에 남는다. flex를 활용하면 복잡한 사이즈나 정렬 설정 없이도 깔끔한 레이아웃을 구현할 수 있었다. 특히 flex-wrap까지 함께 활용하면 viewport 영역의 크기 변화에 따라 화면 내 요소들의 행 분할이 자동적으로 이루어져, 간단한 마크업으로도 유동적인 UI의 구현이 가능하였다.
수요일
오전에는 bash 강의가 진행되었다. 기본적으로 터미널을 활용해서 파일 및 폴더를 탐색/생성/삭제하는 등의 기본적 기능은 알고 있었지만, 그 외의 기능은 활용하지 못하고 있었다. 이번 강의를 통해서 파이프라인(‘|‘)을 통해서 여러 개의 명령어를 연쇄적으로 작동시키는 방법을 익혔고, 쉘스크립트를 통해서 보다 복잡하고 반복적인 작업을 수행하는 과정 또한 경험해 볼 수 있었다. 사실 쉘스크립트를 통해 별도의 컴파일 없이도 반복문 등의 제어문을 포함하는 쉘 작업을 수행할 수 있다는 사실을 이번 기회를 통해 처음으로 알게 되었다. 방대한 컨텐츠에 비해 강의 시간이 짧았던 터라 아쉬움이 남지만, 리눅스 쉘의 고급 기능을 맛보고 그에 대한 흥미를 느꼈다는 것만으로도 충분히 가치있는 시간이었다.
오후는 스프링 프로젝트 설정 강의였다. 스프링부트 프로젝트를 설정해서 빌드하고, 그 기본적인 기능을 수행해 보는 시간을 가졌다. 사전과제로 스프링부트를 경험해 보기는 했지만, 내용을 100% 이해하지 못하고 코드를 따라서 치기만 했던 터라 여전히 스프링부트는 낯설었다. 이번 시간을 통해 스프링부트 및 필수적인 라이브러리에 조금 더 익숙해지게 되었다. 특히 복잡한 설정 없이도 가볍게 사용할 수 있는 H2 데이터베이스를 처음 접하게 되었는데, 앞으로 가벼운 DB 테스트를 수행하는 데에 유용하게 쓰일 것이라고 생각한다.
목요일
전날 밤의 폭설로 인해 목요일은 재택근무로 전환되었고, 줌을 통해 자바스크립트 강의 및 실습이 진행되었다. 이전부터 자바스크립트 교재(모던 자바스크립트 Deep Dive) 학습이 과제로 주어졌던 터라 강의 내용을 이해하는 데에는 큰 어려움이 없었다. DOM(Document Object Model)을 활용하여 화면을 조작하고 이벤트에 반응하도록 하는 경험이 있긴 했지만 딱히 능숙하지는 않았다. 이번 기회를 통해 개념과 문법을 다시 한번 정리할 수 있었다.
특히 querySelector*와 getElement*의 결정적인 차이를 이번 기회에 이해하게 되었다. querySelector*의 경우 정적인 NodeList를 반환하고, getElement*의 경우 동적인 HTMLCollection을 반환한다. 이 때문에 querySelector*를 통해 반환받은 객체는 반환 시점 이후의 변화를 반영하지 않지만, getElement*를 통해 반환받은 객체는 반환 시점 이후의 변화를 지속적으로 반영하여 업데이트된다. 이러한 속성을 이해하지 못하고 엘리먼트를 조작할 경우 예상치 못한 버그가 발생할 가능성이 있었는데, 이번 강의를 통해 이러한 위험을 피할 수 있게 되었다.
금요일
금요일은 강의가 없었고, 예매 서비스 개발 절차 명확화를 위한 TF 구성원 간 협의를 진행하게 되었다. 우선 기능 리스트를 정리하고 업무를 분담할 필요성이 있었다. 의외로 기능 리스트를 정리하는 과정에서 혼란이 있었다. 프론트엔드의 페이지를 기준으로 작성하는 것이 맞는지, 백엔드의 로직을 기준으로 작성하는 것이 맞는지, 아니면 프론트엔드 기능 리스트와 백엔드 기능 리스트를 별도로 작성하는 것이 맞는지에 대해서 확신이 없었다. 교육의 목적상 하나의 기능을 백엔드로부터 프론트엔드까지 온전하게 구현하는 경험이 필요하였기 때문에, 프론트엔드와 백엔드를 세밀하게 구분한 기능 리스트를 작성하지는 않기로 했다. 결국 프론트엔드의 화면을 중심으로 업무를 분담하되, 겹치는 백엔드의 기능은 팀원 간 협의를 통해서 수시 분담하는 방식으로 프로젝트를 진행하게 되었다.
오후에는 멘토 분과 함께 한 주의 회고를 진행하였다. TF 구성원들이 한 주 간 학습에 기울인 노력과 열정을 느낄 수 있었고, 멘토 분께서 근무하시는 클라우드 인프라 부문에 대한 정보도 접할 수 있었다. 사실 높은 진입장벽으로 인해 인프라 부문에 대해 막연한 두려움을 느끼고 있었다. 하지만 멘토 분께서 누구든지 배치 이후에는 오랜 학습의 기간이 필요하고, 이러한 부분을 조직장님께서도 감안해 주신다는 이야기를 해 주셨다. 이 때문에 인프라 영역에 대한 막연한 두려움을 걷어내고, 앞으로의 부서 지망에 있어서도 보다 열린 마음을 갖게 되었다.
마지막으로 수요일 오후 스프링 프로젝트 설정 강의를 통해 배운 내용을 바탕으로 프로젝트를 생성 및 시험 빌드하였다. 이로써 본격적으로 개발을 진행할 수 있는 환경을 갖추게 되었다.
3주차를 정리하며
새로운 것을 배우고 실행해 볼 수 있어서 즐거웠고, 한 주가 너무나도 빠르게 지나갔다. 배운 것들을 100% 이해하지는 못 했지만, 평소 막연히 어렵고 낯설다고 생각했던 기술들을 접해보고 흥미와 관심을 가질 수 있었다. 시작이 반이라고 하니, 회사의 도움으로 절반은 한 셈이다. 나머지 절반은 나의 몫이다. 앞으로도 즐겁게 배워 나갈 수 있기를! 사실 다른 거 안 하고 평생 공부만 하면서 살고 싶다.
댓글남기기