안녕하세요.
국민대학교에서 이노베이션 아카데미로 2020 하계 현장실습에 참여한 이지훈입니다.
저는 이 글에서 2020년의 여름을 이노베이션 아카데미에서 보낸 경험을 적어보려 합니다.
1주차 (6/29 ~ 7/3)
인턴 기간인 8주 중에 가장 강렬하게 기억에 남았던 주는 1주차였습니다.
첫 출근날 맥북을 지급받고 2달동안 진행할 프로젝트의 주제인 멘토와 멘티의 멘토링 시스템에 대해 들었습니다.
맥북이 생소한 저는 맥북을 익히고 기본적인 설정과 개발환경을 설정하며 시간을 보냈습니다. 그러나 2일, 3일차가 되자 막연히 다음 지시를 기다리며 시간을 보내고있는데 멘토님이 인턴들을 모아서 말씀하셨습니다.
‘ 너희는 아직 학생의 관점에서 벗어나지 못하였다. 졸업하고 회사에 가면 너희가 할일은 스스로 찾아서 해야한다. ‘
이후 인턴들끼리 스스로 모여 회의하고 토의하며 남은 8주 동안 막연히 멘토님의 지시를 기다리며 멍때리는 일은 없었습니다.

또한 개발자로서 가져야할 생각과 학교 레벨의 프로젝트가 아니라 실제 현업에서의 개발에 대해서도 많은 말씀을 해주시고 인상깊게 들었습니다.
그 중 하나의 에피소드는 인턴들끼리 기획회의를 하면서 ‘우리가 어떤 서비스를 얼마나 제공해줘야 하지?’ 라는 의문이 생겨 멘토님께 질문하였는데
‘개발자가 생각하고 만들어서 사용하라고 제공하는 것이 아니라, 사용자가 원하고 필요한 것을 개발자가 만들어야 한다.’
라는 답변을 듣고 다같이 돌아가서 내가 멘티라면 어떠한 서비스가 필요할지에 대한 것부터 생각하고 기획 회의를 진행하였습니다.
1주차를 멘토님의 표현을 빌려 표현하면 ‘학생 관성에 의해 딱딱하게 굳어있던 머리를 말랑하게 만드는 주’ 였습니다.
2주차 (7/6 ~ 7/10)
2주차 부터는 프로젝트의 주제인 멘토링 시스템에 대해여 본격적으로 회의를 시작하였습니다.
처음에는 다같이 모여 하나부터 열까지 정하는 방식이었는데 사람이 8명으로 많다보니 하루 근무시간 9시간중 6시간 이상을 회의해도 진도가 잘 나가지 않고 제자리 걸음이였습니다.
이러한 상황이 며칠 반복되자 체력 소모도 심하고 비효율적이라고 판단하여 소주제를 정하고 각자의 자리에서 생각을 정리 한 후 모여서 취합하는 방식으로 변경하였습니다.
물론 사람이 많고 각자의 생각이 달라서 서로를 설득하는 데 시간이 걸리긴 하였지만 전보다는 효율적이었다고 생각합니다.

또한 팀을 클라이언트 쪽 보여지는 화면을 책임지는 프론트엔드, 전체적인 로직과 데이터베이스를 담당하는 백엔드 서비스, 관리자를 위한 페이지를 만드는 백엔드 운영 3개로 나누고 저는 그중 평소에 관심과 경험이 있던 프론트엔드 팀에 들어갔습니다.
3주차 (7/13 ~ 7/17)
3주차에는 각 팀별로 해야할 일을 하였는데 프론트 엔드팀은 기획한 시스템에 대한 전체적인 와이어 프레임을 그리고 개발에 어떤 언어를 사용할지 정하였습니다. (React.js)
평소 개발 언어를 정할 때는 그냥 손에 익은 언어나 유행하는 언어 등과 같이 별 이유없이 선택하였습니다. 하지만 이 때 인상깊었던 멘토님의 조언이 있었습니다.
‘모든 언어는 언어별 특징이 있고 장단점이 있다. 지금 너가 하려는 프로젝트에 사용할 언어를 정했으면 그 언어를 사용한 이유와 다른 언어들을 사용하지 않은 이유들을 알아야 한다.’
이러한 조언을 듣고 언어별 특징들을 조사하고 내가 만드려는 시스템에 적합한 언어가 무엇인지 정하고 선택하지 않은 언어들에 대한 이유를 정리하는 작업을 하였습니다.

또한 와이어 프레임에 대한 피드백도 있었습니다.
저희가 만든 와이어 프레임에는 큰 틀만 있고 세부적인 사항에 대한 것들은 없었는데 모든 상황(이메일 혹은 비밀번호가 틀렸을 시 처리, 에러 처리 등)에서의 플로우를 만들어야 한다고 하셔서 생각할 수 있는 모든 경우의 수에 대한 프레임을 작성하였습니다.


https://ovenapp.io/project/xUJzYGV5rmFzgAHN5pBE2Vw1A2M1sfHz#jmtWY
4주차 (7/20 ~ 7/24)
4주차 부터는 본격전인 개발을 위한 전 단계로 3주차에 언어를 정하였으니 언어에 대한 Coding Convention 을 정하였습니다.
Coding Convention 이란 코드의 가독성과 효율성, 개발자들의 협업을 위하여 정하는 약속입니다.
개발자 한명이 모든 것을 할 수 없으니 협업이 필수인데 이 때 다른 사람이 작성한 코드를 빠르게 이해하고 능률을 올리기 위해 정하는 것입니다.
멘토님 표현을 빌리면 ‘모르는 사람이 보았을 때 한명이 작성한 코드처럼’ 작성해야 합니다 . 이 작업 역시 8명의 사람의 습관과 생각을 통일하는데 쉽지 않았지만 서로서로 양보하며 작성하였습니다.

5주차 (7/27 ~ 7/31) 6주차 (8/3 ~ 8/7) 7주차 (8/10 ~ 8/14)
React.js를 사용하여 본격적인 개발을 시작하였습니다.
그려놓은 와이어 프레임을 참고하여 컴포넌트 단위로 화면을 쪼개고 폴더 구조를 어떤식으로 구성할까 고민하였습니다.
우선 라우팅이 될 큰 컴포넌트 들은 pages 로 따로 분리하고 components 폴더안에도 사용되는 곳에 따라 폴더를 나누어 관리하였습니다.
또한 전역 상태관리를 위해 Redux 와 Context 중에 고민하다가 전역 상태관리만을 위해 사용하고 React Hooks의 useContext를 사용하면 좀 더 편리하게 사용 할 수 있으므로 Context API를 사용하기로 결정하였습니다.

개발을 진행하면서 중간중간 멘토님이 코드 리뷰를 해주셨습니다.
프론트 팀 뿐만 아니라 전체적인 피드백으로는 개발자를 위한 리팩토링을 해야한다고 하셨습니다.
피드백 후 리액트 컴포넌트와 구조를 점검하면서 중복되는 코드를 함수화 하여 사용하려고 노력하였습니다.
또한 프론트 팀 피드백은 클라이언트 뷰에 관한 피드백으로 기능에 대한 설명이 부족하다는 점이 있었습니다.
디자인적인 부분은 배제하고 기능에 집중하여 개발하다보니 데모 버전에서 무슨 행동을 해야하는지 알기 힘든 단점이 있었습니다.
따라서 피드백 후 임시로라도 기능에 대한 설명을 추가하였습니다.

8주차 (8/17~8/21)
3주간의 개발이 끝나고 마지막 주는 문서정리와 발표준비를 하였습니다.
멘토님이 개발보다 문서 작성하는 일이 훨씬 어렵고 힘들 수 있다고 경고하셨는데 저 역시 격하게 동의하는 부분이었습니다.
실제 현업에서의 문서보다 훨씬 간소화된 정도의 문서만 작성하는데도 글쓰는 재주가 없어 힘들었습니다.

후기
학교 수업 시간에 진행했던 프로젝트는 보통 기획단계를 생략하고 주제를 정하면 바로 개발을 시작하였습니다.
하지만 이번 인턴을 하면서 기획만 무려 4주를 토의하고 3주 개발과 1주 문서정리를 해보면서 여러가지를 배운 것 같습니다.
우선 충분히 긴 기획단계를 거치니 여러사람들의 좋은 아이디어만 뽑아서 적용할 수 있었습니다.
또한 그저 토의만 길게 하는 것이 아닌 시퀀스 다이어 그램, ERD 다이어그램, 와이어 프레임, API 문서 등 실제 개발에 필요한 문서들을 미리 작성하고 개발을 들어가니 훨씬 효율적으로 작업 할 수 있었습니다.
이노베이션 아카데미에서의 8주는 단지 회사에 인턴으로 출근해서 일을 하는 경험이 아니었습니다.
실제 현업에서의 프로젝트가 진행되는 과정을 배우고, 진로와 이력서에 대한 피드백을 받고, 좁고 갇혀있던 시야를 넓혀주는 그런 경험이었습니다.
마지막으로 8주동안 총 10명의 인턴, 4개의 팀을 모두 케어하느라 고생하신 멘토님들께 감사의 말씀을 드립니다.