드디어 숨가쁘게 달려온 인턴쉽이 마무리되었다.
학교 수업을 벗어나 아르바이트를 제외한 다른 조직에서 내 분야로 일을 해본 건 처음 있는 일이라 시작 전부터 설레었다. 내가 갈 곳은 그로우앤베터라는 스타트업! 이젠 멘토링 없이 같이 배정된 2명의 팀원들과 이때까지 키워온 실력으로 개발을 전부 진행해야 한다는 부담감도 있었지만, 한편으론 빨리 내 진짜 실력을 확인하고 증명하고 싶다는 생각이 들기도 했다
2021/02/14 ~ 2022/03/11 (4주)
그로우앤베터 Admin 페이지에서 프로그램 설문지 양식을 관리하고 설문지에 대한 유저 응답 데이터의 통계 결과를 확인할 수 있는 서비스를 구현하는 프로젝트
기획: 1명, 프론트: 1명 ,백엔드: 2명 (추가로 회사에 프론트 한 분, 백엔드 한 분이 계셨지만, 사수 역할)
Backend: Node.js, Typescript, Sequelize, MySQL
Development Tools: VScode, Github, TablePlus, Postman
Community Tools: Slack, Zoom, Notion
- 프로젝트 기획안 확인
- 백엔드에 필요한 Task와 일정 산정
- 백엔드 업무 분담 및 Task Timeline 작성
- dbdiagram.io를 활용한 Database ERD 설계
- Sequelize를 활용한 Database Modeling
- Task Timeline에 맞춰 API 구현 & 프론트와 연결 & 테스트
- 최종 시현
- API 명세서 작성
- Database ERD 설계 - 기존 그로우앤베터 Database 모델링을 활용하여 프로젝트에 필요한 Entity 설계 및 Sequelize를 활용한 모델링 (팀원과 공동 담당)
- Survey 생성 API - admin이 특정 프로그램 수강생들을 대상으로 하는 Survey 양식을 생성할 수 있게 해주는 API
- Survey 전체 조회 API - admin이 생성한 모든 Survey 양식을 조회할 수 있게 해주는 API
- Survey 상세 조회 API - admin이 전체 Survey 중 특정 Survey 양식을 상세 조회할 수 있게 해주는 API
- Survey 수정 API - admin이 이미 존재하는 특정 Survey 내부 양식을 수정할 수 있게 해주는 API
- 자동완성 검색 API - admin이 Survey 내부 양식에 있는 프로그램 검색란에서 한 글자 단위로 프로그램명을 입력시 이에 해당하는 전체 프로그램명을 자동으로 보여주고 선택할 수 있게 해주는 API
- Task 진행 상황을 상세히 알기 위해 가장 작은 단위까지 쪼개서 Timeline 설정
- ORM을 이용하여 비즈니스 로직을 구현할 때, 종속 관계의 테이블이 많아질수록, 구현 난이도가 어려워진다는 것을 이번 인턴쉽을 통해 깨닫게 되었다. 테이블에 Attribute가 많아지더라도, 테이블 수를 줄이는 것이 차후 구현을 위해 편하다!
- Survey 전체 조회 API
Survey 생성 API & 자동완성 검색 API
Survey 상세 조회 API & Survey 수정 API
- 주어진 기간 내 담당 업무 마무리 - 주어진 기간 내에 내가 담당한 API들을 테스트와 시현까지 모두 마무리했다는 것에 뿌듯했다
- Typescript에 맞게 any 처리 없이 모두 type 지정 - 처음엔 Typescript가 익숙하지 않아 대부분 any로 type을 지정하고 넘어갔지만, 리팩토링을 진행하면서 에러가 안 뜰 때까지 모두 type을 지정해준 것이 잘했다고 생각한다
- 데이터 보존을 위한 soft delete 처리 - Survey 수정 API 구현 간에 있어 수정이 발생했을 시 기존 Survey 양식은 기획 의도에 맞게 Database에서 삭제되면 절대 안된다고 하여 deleted라는 attribute를 생성하여 Boolean값으로 soft delete 처리를 했고 정상 작동했을 때 감격했다
- 레거시 코드 이해의 어려움 - 외주사에서 만든 레거시 코드라 구현보다 코드 이해하는데 시간 소모가 너무 많아 추가 기능 구현을 못한게 아쉬웠다
- 코드 방향 불확실 - 코드리뷰를 해주시는 개발자분들과 비대면으로 커뮤니케이션이 계속 오가다 보니 내가 작성하는 코드 방향이 옳은지 확인하기가 어려웠다
- 기획 의도에 맞는 개발의 어려움 - 내가 필요한 대로 자유롭게 기능을 추가/삭제하는 것이 아닌 미리 기획된 또는 수정된 유즈 케이스에 맞춰 구현하는 것은 생각보다 많이 어려워서 이것이 진짜 실무라는 것을 느낄 수 있었다
- 프론트와 사전 조율의 중요성 - 어떤 데이터를 주고 받고, 데이터명은 어떻게 할지, 그리고 백엔드 엔드포인트는 어떻게 할지 등등 프론트와 백엔드 연결간에 발생할 문제들을 프론트 개발자와 사전 조율하는 것이 매우 중요하다는 것을 깨달았다
- 가독성 좋은 코드 작성의 중요성 - 진짜 실력있는 개발자가 되려면, 기능 구현만 했다고 끝나는 것이 아니라 나만 이해할 수 있는 코드가 아닌 다른 개발자들도 쉽게 이해할 수 있는 코드를 작성하는 것이라는 걸 너무 잘 알게 되었다