국민대학교 인턴 이진구

현업에 대해 궁금증이 커져만 가던 차에 이노베이션 아카데미 인턴을 하게 되는 기회를 얻게 되었습니다. 2달간 평소에 궁금했었던 것들도 많이 해소되었고 앞으로 공부해야할 것들을 많이 알게되었습니다. 그 과정들을 한번 기록으로 남겨보려 합니다.

1주차 (6/29 ~ 7/3)

첫 주는 맥북을 받고 맥 환경에 익숙해지는 시간을 가졌습니다. 평소에 윈도우 환경에 너무 익숙해져 있어서 첫날과 둘째날 많이 당황스러운 시간이였습니다. 리눅스, 유닉스 환경으로 넘어가야지 하고 생각만 하고있던 차에 익숙하지 않은 환경에 직면하게 되었습니다. 평소에도 클라우드 서비스 같은 것을 보면 다 리눅스 서버를 사용중이고 윈도우 서버의 경우 별도의 비용이 존재했었는데, 멘토님을 통해 윈도우 서버의 경우 따로 비용이 발생하기 때문에 보통 리눅스 환경의 서버를 사용한다는 것을 알게 되었습니다.

맥 환경에 적응하고 나서 데이터 베이스 샤딩에 대한 개념들을 듣게 되었습니다. 테이블이 구조적으로 분리되는 이유와 분리된 테이블, 데이터 베이스들을 통합하여 관리하는 것이 매우 어렵고 분산환경이기 때문에 발생하는 동기화문제, 성능 문제 등등 많은 이슈가 발생한다는것을 알게 되었습니다. NoSQL이 등장하고 디비와 캐시 저장소 처럼 사용된다는 것을 배웠습니다.

마지막 날에는 협업을 위해 슬랙, 트랠로, 구글폼등을 세팅하고 본격적으로 서로 이노베이션 아카데미 본과정 교육생들과 멘토들을 매칭시켜주는 멘토링 시스템에 대해 의견을 나누게 되었습니다. 각자 생각하는 방향이 조금씩 달라서 이를 통합해 좀 더 나은 서비스를 만들수 있도록 의견을 통합했습니다.


2주차 (7/6 ~ 7/10)

2주차에는 구상한 서비스에 대한 요구사항 정의와 시스템 시퀀스 다이어그램을 작성해 보았습니다. 유즈 케이스 정의서를 정의해보고 정의서에 맞게 시스템 시퀀스 다이어그램을 그려보았습니다.

처음 유즈 케이스 정의서에 맞게 전체적인 시퀀스를 한번 그렸습니다. 그려진 시퀀스를 보면서 검토하는 과정과 조금 엉성한 시퀀스 다이어그램을 다시 그려보는 시간을 가졌습니다. 각각 서비스 데이터가 전달되는 과정을 검토해봤습니다.

3주차 (7/13 ~ 7/17)

3주차에는 각자 프론트, 백엔드(서비스), 운영 팀중에 한곳을 선택해 팀별로 활동을 하기 시작했습니다. 저는 운영툴에 관한 것들을 제대로 구현해 본적이 없어서 경험해보고 싶은 마음에 운영팀에 지원하게 되었습니다. 운영서비스에 대한 부분을 얘기한적이 없었기 때문에 운영팀 3명이 모여서 운영툴에 어떤 기능들이 들어가야 하는지 회의했습니다. 기능들을 명세한 후에 각 기능별 시퀀스 다이어그램을 그려서 검증하는 시간을 가졌습니다.

기본적인 CRUD기능과 각각의 관리자들에 대한 권한 인증, 시스템 로그를 조회할 수 있는 기능들을 생각해봤습니다.


4주차 (7/20 ~ 7/24)

4주차에는 본격적인 개발에 들어가기에 앞서서

  • ERD를 작성하고 개발환경을 세팅하는 작업을 진행했습니다.
  • 또 통일성을 위해서 코딩 컨벤션도 정의하게 되었습니다.
  • 개발언어와 사용할 프레임워크를 선정하고
  • 배포환경은 어떻게 구성할 것인지,
  • 서버는 어떻게 위치시킬 것인지를 생각해봤습니다.

운영팀에서는 자바와 노드js중에서 고민을 했는데 결국 러닝커브 문제로 팀원 모두 익숙한 노드js와 익스프레스를 선택하게 되었습니다.

언어 선정과정에서 단순히 익숙하니까 그 언어를 쓰는게 아니라 각 개발언어의 특성을 파악하고 그 중에서 제공하려는 서비스와 가장 알맞는 언어를 사용해야 한다는 것을 배웠습니다.


개발환경을 세팅하고 난 후에는 중요도 별로 개발 페이즈를 설정하여 우선적으로 구현할 기능들을 정했습니다. 개발을 들어가기에 앞서서 프론트, 백엔드 개발을 담당할 인원을 정했습니다. 저와 정현씨가 프론트를, 성재씨가 백엔드를 담당하게 되었습니다. 벌써 부터 프론트의 고통이 밀려들어오는 것 같았습니다;;

5주차 (7/27 ~ 7/31)

본격적인 개발에 들어가게 되었습니다. 프론트에서는 먼저 구상했던 와이어프레임이 있었기 때문에 와이어프레임을 참고해서 개발을 하게 되었습니다. 저는 유저 페이지와 알림 페이지를 담당하게 되었습니다. 레이아웃을 잡은 후에 컨트롤러에서 더미 데이터를 넘겨줘서 데이터를 받아와서 구상한 화면에 제대로 들어오는지를 테스트했습니다.

원래는 유저 정보들에 대한 조회나 수정을 모달로 처리하려고 하였으나 보여주는 정보의 양도 너무 많고 처리해야 할 데이터들도 많아서 결국 페이지로 분리하기로 하였습니다. 몇시간을 날렸던 기억이… ㅠㅠ
6주차 (8/3 ~ 8/7)

와이어프레임과 거의 동일하게 레이아웃을 잡고 더미데이터를 받아와 화면에 그려주는 것도 정상 작동을 하는 것을 확인했습니다. 그 후 각 컴포넌트 별로 이벤트 핸들러를 붙이고 동기, 비동기로 설계해 놨었던 함수들을 구현하는 작업을 진행했습니다. 최대한 반복 코드가 없고 각각의 역할에 맞는 부분만 변경이 일어나도록 깔끔한 구조가 나올 수 있게 코드를 작성해보려고 했으나.. 역시나 쉬운 작업은 아닌 것 같습니다.

백엔드 쪽에서 변경사항이 일어나면 고치고, 또 고치고… 조금 고통스러운 쳇바퀴 구르는 듯한 작업도 있었습니다. 하지만 그만큼 구현한 이벤트가 제대로 동작하고 하나 하나씩 완성을 해나갈 때면 뿌듯함을 느꼈습니다.

이미지: 사람 1명, 앉기, 실내

중간에 한번 멘토님에게 코드 리뷰를 받아서 개선할 부분과 변경할 부분들에 대해 피드백을 받았습니다.

그에 맞게 코드를 리팩토링 하는 작업도 같이 병행하였습니다.

7주차 (8/10 ~ 8/15)

어느정도 구현 작업을 마무리한 후에 오류처리나 잘못된 데이터가 들어가지 않게 유효성 검증, 페이징 처리를 하는 등의 디테일 적인 부분들을 추가적으로 처리했습니다. 프론트의 경우에는 컨트롤러에서 각 익셉션별로 상태코드를 넘겨줘서 각 상태코드(400, 200, 501, 500 등등)에 맞게 각각 오류 메세지나 다른 페이지로 이동하도록 처리를 해줬습니다. 유효성 검증의 경우에는 정규 표현식을 사용해서 검증을 한 후에 각 형식에 맞게 재입력을 요청하는 작업들을 진행했습니다.

오류 처리의 경우에는 조금 더 체계적으로 단위 테스트를 각 레이어 별로 진행하고 오류 케이스들과 사용자 정의 익셉션을 정의해서 좀 더 깔금하게 처리할 수 있지 않았을 까 하는 아쉬움이 남습니다.


8주차 (8/17 ~ 21)

마지막 주에는 발표자료와 작성했던 문서들을 수정하는 작업을 했습니다. 처음 작성했던 시퀀스와 잘 맞는 부분도 있었지만 많이 변경된 부분도 존재했습니다. 문서 작성을 하면서 초반 설계부터 좀 더 철저히 검증하고 들어갔으면 개발할 때 편하지 않았을까 하는 아쉬움이 남습니다.

후기

현업에 대한 궁금증이 점점 더 해지던 시기에 이노베이션 아카데미 인턴 활동을 통해 정말 많은 것들을 배우고 갑니다. 단지, 문서화와 단계를 설정한 개발을 경험해 보는 것 뿐만 아니라 중간중간에 멘토님들이 교육해 주시는 현업에 대한 이야기들이  해서 유익했던 시간이었습니다.

첫 번째로는 마음가짐의 변화 입니다.

수동적인 학생의 자세에서 벗어나 능동적으로 제가 할 일을 찾고 궁금한게 있으면 바로바로 조사하고 공부하는 태도를 가져야 한다고 느꼈습니다.

전체적인 시야가 넓어진 것 같습니다. 제가 인턴생활을 하면서 가장 경험해보고 싶었던 것이 이것이 였습니다.

대체 현업에서는 어떤 식으로, 어느 단계까지 설계를 하는지, 서버는 어떻게 분산하는 지, 로그들은 어떻게 활용하는 지 정말 궁금했었는데 

멘토님이 진행해 주시는 주간 회의, 인턴분들이 각자 조사해온 내용들을 발표하는 자체 세미나에서 그 답을 찾을 수 있었습니다.

특히나 준영님이 발표하신 로그 분석쪽은 대체 로그를 어떤식으로 활용하는 지 알게됨과 동시에 모르면 찾아보면 되는 것을 안 찾아보고 있는 제 자신을 반성하게 되는 계기가 되었습니다.

제가 발표를 하게 된 시스템 인프라와 네트워크에 관한 부분도 마침 제가 공부하려고 하던 부분이라 겸사겸사 조사하게 되는 좋은 기회였습니다.

Public, private 네트워크에 대한 개념이 모호했었는데 발표를 준비하면서 각 서버들이 어떻게 배치되는지 알게 되었고 특히, 시스템 인프라에 대한 개념을 알게되어 정말 유익했습니다.

당연한걸 당연하지 않게 생각하게 됨

개인적으로 개발자로서 경계해야 되는 부분중 하나라고 생각합니다.

  1. 개발언어에 대해 설정할 때도 명확한 근거를 가지고 어떤 언어를 사용할지 생각해보게 되었습니다.
  2. 프레임워크를 사용하면서도 프레임워크가 동작하는 원리, 추구하는 방향을 생각하면서 사용하게 되었습니다.
  3. 단순히 이렇게 코드를 짜면 돌아가니까 따라 쓰면 된다라는 생각에서 벗어나 자신의 코드를 점검해보게 되었습니다.

이 외에도 면담을 통해서 막연했던 개발 직군에 대한 방향을 잡게 되었고 무엇을 우선적으로 공부할지 계획을 세우게 되었습니다.

2개월간 정말 얻어가는게 많았습니다. 학교 후배들이 학생 인턴을 하게 된다면 이노베이션 아카데미를 꼭 추천하고 싶을 정도로 유익한 시간들이였습니다.

2개월간 같이 고생한 인턴분들 모두 수고하셨고 저희 지도해주신 멘토님들도 정말 감사했습니다!