3 분 소요

길고 알찼던 2021년 1학기

드디어 길고도 알찼던 2021년 1학기가 마무리되었고 그와 동시에 대학생이라는 신분을 졸업하게 되었다. 돌이켜보면 지난 2021-1학기가 대학 인생동안 가장 개발에 빠져있던 시기가 아닐까 생각된다. 2021년 1월에 프론트엔드 개발자가 되기로 결심하였고, 생활코딩과 노마드 코더 강의를 보면서 HTML, CSS, JS를 열심히 학습하였다. 그러다가 4월에 운이 좋게 GDSC(Google Developer School Club)라는 교내 개발 커뮤니티에 참여하게 되었고 뛰어난 개발자가 되기 위해 열심히 노력하는 사람들을 보면서 많은 동기 부여를 받게되었다. GDSC내 있으면서 패스트캠퍼스 올인원 강의로 React와 Redux를 학습하고 JavaScript에 대한 이론적 배경에 대해서도 열심히 탐구하면서 주변 사람들과 Tech Talk를 진행하기도 하였다. (기술 토론이 이렇게 재밌을 줄이야! 😆)

이후, GDSC 내에서 프로젝트 팀을 모집하는 내용글이 올라왔고 학습한 React와 Redux를 실제로 활용하여 웹 페이지를 구성하는 좋은 기회가 될거라고 생각하여 참가하였다. 여러 논의 끝에 <어린이집 이상행동 모니터링 시스템> 이라는 주제로 프로젝트를 진행하기로 결정되었고, 여러 공모전에 참여하기 위해 계획서도 쓰고 열심히 오프라인 회의도 진행하였다. 공모전 성적이 좋지는 않았지만 스프린트 목표를 달성하기 위해 원하는 기능을 구상하고 검색하는 실력이 늘고 GitHub와 Jira를 활용해서 전문적으로 개발 협업 환경을 구성하고 활용한 경험이 매우 좋았다고 생각한다.

그러다 7월에 SSAFY 6기 모집 공고를 보게 되었고, GDSC에서 경험했던 개발 공동체의 활력을 다시 한 번 느끼고 싶었고 알고리즘과 웹 개발의 이론적 지식을 견고히 하기 위해 SSAFY에 지원하게 되었다. 다행히도 1차 적성 검사를 통과하고 이전 프로젝트 경험으로 마지막 면접까지 무사히 통과하게 되어 SSAFY 6기생이 되었고, 7월말부터 매우 바빠지기 시작하였다. GDSC 내에서 진행중인 프로젝트도 마무리하면서 SSAFY 내 생활에 적응해야했고, TypeScript 도 새롭게 학습하고 싶었기에 9시부터 18시까지 SSAFY 활동에 집중하고 이후 격일로 나누어 20시부터 24시까지 프로젝트와 TypeScript 학습을 진행하고 주말에 알고리즘 문제를 풀기로 계획하였다.

프로젝트의 마무리

2021-1학기 GDSC 활동이 8월 말로 예상되어있었기 때문에 자연스럽게 GDSC 프로젝트의 마감 기한도 8월 마지막 주말이 되었다. 따라서 8월 중순부터 이전에 잡은 계획들을 잠시 접어두고 저녁마다 프로젝트 작업에 몰두하게 되었다. 서비스가 점점 구체화되면서 점점 거대해지는 데이터에 대한 처리를 고민하게 되었고 백엔드 개발자분과 논의한 결과 API 데이터를 페이지네이션으로 구성하여 제공해주는 형식으로 작업하기로 결정되었다. (무려 마감 1주일 전이다! 😱)

그래도 담당한 파트는 반드시 구성해야한다는 생각에 일주일동안 20시부터 새벽 3시까지 커피를 마셔가며 작업하면서 열심히 API를 연계하고 검색 기능도 구현하였다. 마지막까지 발생하는 버그들을 수정하고 로그인 보안에 대한 이슈를 고민하면서 최대한 해결한 결과 다행히도 마감 기한을 지키면서 프론트엔드 파트를 마무리 지을 수 있었다. React와 Redux를 학습한지 얼마 되지 않았지만 누구의 도움없이 혼자서 프론트엔드 파트를 책임지고 다른 파트 개발자와 협업하면서 기능을 완성해 나가는 나 자신을 보면서 뿌듯하면서도 점점 더 개발의 매력에 빠져들게 되었다. 😍

기능_지도.png
<개인적으로 가장 만족하는 지도 모니터링 기능>

구현한 홈페이지

앞으로의 계획

1학기의 목표였던 프로젝트를 완료하면서 후련하기도 하고 한편으로는 처음으로 진행한 웹 프로젝트 였던만큼 아쉬운 점들도 굉장히 많아서 고민한 점도 한 두가지가 아니었다. 가장 먼저 효율적인 코드 구조를 생각하는 것이 아직 능숙하지 않다고 느껴졌다. 개발을 진행하면서 반복되는 부분이 존재했지만 이 부분에 대한 로직을 얼마만큼 구체화할지 애매한 경우가 많았다.

예를 들어, A+B+C 라는 로직을 짜야할 때 A+B+C 뿐만 아니라 B+C+D에 대해서도 동작하게 만들어야지라고 생각하는 것과 A+A+A는 A*3 이라고 새롭게 로직을 짜는 것이 더 효율적이지 않을까 같은 고민을 굉장히 많이 했던 것 같다.

두 번째로 많이 했던 고민은 대용량 데이터 처리에 대한 고민이 굉장히 많았던 것으로 기억한다. 프로젝트는 더미 데이터를 활용하였지만 실제 서비스를 운용한다면 몇 십만~백만 개의 이상행동 데이터가 생성될 수 있는데 이에 대한 처리는 어떻게 진행할까를 고민하면서 가장 먼저 내렸던 결론은 페이지네이션으로 데이터를 분할하여 사용자에게 제공해주는 것을 생각하였다. 하지만 명확한 페이지네이션 조건이 없거나 전체를 살펴봐야 하는 경우는 어떻게 진행하지? 이 부분은 백엔드 개발자의 영역인가? 같은 고민을 많이 하게 되었다.

세 번째로 타입스크립트 도입에 대한 고민이었다. 프로젝트를 진행할 때는 타입스크립트에 대해 학습하지 않아 도입하지는 않았지만 프로젝트를 진행하면서 점차 타입스크립트의 도입을 진지하게 고민해본 적이 매우 많았다. 가장 대표적인 문제로 당연히 Number로 API가 제공되겠지라고 생각하고 구현한 부분에서 오류가 발생한 것이 알고 보았더니 String으로 넘어와 문제가 된 적이 매우 많았고, 실제로 String으로 변환했다가 사용하는 부분에서 자동으로 Number로 변환해 사용하면서 관련 오류를 찾는 것이 매우 어려웠던 기억이 있다.

3600+”1” => 36001 을 숫자로 활용하고 있을 때가 제일 충격적이었다. 😡

마지막은 실시간 처리에 대한 고민이었다. 사실 초기에 목표했던 프로젝트는 <실시간 모니터링 기능> 을 제공하길 원했다. 하지만 아직 실시간 처리에 대한 구현 경험을 진행해보지 않았고 시간도 촉박하여 단순한 모니터링 기능만 제공하게 된 점이 매우 아쉬웠다. 대신 실시간 처리를 진행하기 위한 로직을 백엔드 개발자와 논의하였고, 서버에서 새롭게 발생한 데이터가 있다면 이를 클라이언트에 알리는 구조가 필요하다고 생각되었다. 따라서, 이를 위해 소켓을 활용할 수 있다고 생각하였고 관련 자료를 정리하면서 소켓에 대해 알아봐야겠다고 생각하게 되었다.

이외에도 안전한 로그인 기능 구성, http와 https의 차이, 프론트엔드에서의 배포 로직 등도 한 번씩 고민해 보게 되었던 시간이었던 것 같다.

9월이 시작되면 위와 관련된 내용을 집중적으로 학습하여 내가 진행한 파트를 보완할 수 있는 부분은 보완하고 추후에 동일한 문제가 처했을 때 해결해 나갈 수 있도록 정리하고자 한다. (이를 위해 지금 이 GitHub 블로그도 개설했다!😁) 따라서 9월부터는 리팩토링, 타입스크립트, 대용량 데이터 처리, 소켓 이 네 가지 주제를 집중적으로 학습해서 앞으로의 프로젝트에서는 보다 발전된 모습으로 프로젝트를 진행할 수 있기를 희망한다!