3/31오후에 마지막 task를 진행하고 제 8월초부터 진행하던 인턴 생활이 끝났습니다.
제 개인 repository가 모든 Pull Request를 해결하고 main branch만 남겨지니 시원섭섭하더라구요
프론트엔드부터 백엔드와 데이터베이스까지 폭넓은 체험이 가능했고 정말 다양한 기술들을 익힐 수 있었습니다.
특히 스타트업의 법인인가부터 있으면서 정말 스타트업을 위해서 얼마나 많은 일과 노력이 필요한지 또 그런 과정을 회의를 통해 어떻게 해결하는지를 보고 배울 수 있는 정말 귀중한 시간이였습니다.
어떤회사였는가?
데이터 매니지먼트 솔루션을 SAAS로 제공하는 회사였습니다.
기업들의 다양한 데이터베이스들을 단 하나의 서비스로 묶어서 회사의 관련 직원들이 모든 데이터베이스로부터 데이터테이블을 검색/조회가가능하며 ( 실제 내부 데이터는 접근하지 않음) 태그나 별칭을 부여하여 관리하고 또 해당 데이터의 추가적인 정보를 제공하는 서비스를 개발하는 회사입니다.
제 주 담당은 다양한 데이터베이스/웨어하우스/레이크 서비스들을 고객이 연결정보를 제공하면 자동으로 접속하여 해당 데이터서비스로부터 필요한 정보를 스캔하여 회사의 고객용 데이터베이스에 담아두며 해당 데이터베이스에서 버전이나 백업등을 구성하는 일이였습니다.
덕분에 진짜 수많은데이터서비스를 알게 되었으며 실제로 다룰 수도 있게 되었습니다.
사람들
규모가 작을수록 특히 중요하다고 볼 수 있습니다. 정말 인복이 좋았는지 좋고 멋진 분들과 함께 할 수 있었습니다. 거짓말 안하고 힘들었지만 그만두면서도 저도 아쉬워서 눈물이 날 정도였습니다. 사람들이 좋았기에 힘든 스타트업의 개발일정도 견뎌내고 해내야겠다! 라는 생각으로 진행할 수 있었다고 생각합니다.
- 어떻게 매번 그렇게 많고 거물들이 섞이 클라이언트들을 만나고 투자를 끌어오고 회사내부도 운영하는지 진짜 대단한 CEO
- 회사의 큰 방향성과 법률관련 그리고 실무경력으로 든든한 추상적 로드맵을 잡아주시는 다른 공동창립자분
- 여러가지 실무적 관점에서 지적을 해주시며 그 끔찍한코드들을 코드리뷰해주시며 AWS활용 개념을 배울 수 있었던 CTO
- 사무/세일즈 작업이 얼마나 힘들고 바쁘고 꼼꼼해야하며 또 많은 사전조사를 하며 다양한 사람을 만나야하는지를 볼 수 있었던 세일즈 팀원분들
- API개발을 하시면서 제가 필요한 API연계코드를 필요해서 짜뒀다고 제공해주시며 저에게 실무자의 체계적 코드를 보여주신 풀스택엔지니어 분
- 털털하게 하고 싶은 말을 하며 자신의 개발 가치관을 강하게 제시하여서 퀄리티에 타협없는 프로그래밍을 보여주는 브라질출신의 프론트엔지니어 분
- 늦게 들어오셨지만 오랜 개발 짬으로 개발 로드맵을 관리하고 사용 프레임워크등 체계를 통일하고 개발환경을 체크해주시고 낯을 가리는 저도 금방 편하게 말할 수 있게 해주시는 말레이시아 출신 개발자 분
진짜 이렇게 오냐오냐 해도 괜찮은 것인가 싶을 정도로 좋은 분들과 일을 할 수 있었습니다.
초기업무 - 프론트엔드
초기에는 회사가 오픈소스들을 기반으로 간략한 영업용 이미지를 구축하기 위한 단계였습니다.
제 역할은 다양한 그래픽을 가진 데이터관련 오픈소스로부터 해당 프론트엔드 코드를 분석하고 수정하여 상품의 대략적인 이미지를 짐작가게 짜는 것이였습니다.
오픈소스기반이라 백지에서 시작은 아니라서 비교적 쉽게 할 수 있었으며 이미 정리된 OSS의 코드를 읽고 이해해서 수정하는 것만으로도 많은 실력이 쌓였습니다.
물론 실제 개발은 프론트 전담 엔지니어분이 오시고 그 분이 처음부터 짜겠다고 하시면서 처음부터 짜게 되었습니다.
솔직히 이 때는 이렇게 해서는 이 오픈소스들을 크게 뛰어넘는 무언가가 안 나온다고 제안을 드리기도 했었다.
이 과정에서 react에 관한 지식과 mock api와 데이터를 구성하여 프론트엔드를 테스트하는 기술을 익힐 수 있었습니다.
주 업무 - 백엔드 / 데이터엔지니어
프론트 담당분이 오시고 저는 본격적으로 제가 더 좋아하는 백엔드 작업을 시작할 수 있었습니다.
여러 데이터베이스에 연결하기 위해 해당 데이터베이스들이 제공하는 sdk의 확인과 스펙확인 실제로 해당 데이터서비스들을 사용해보면서 스펙이나 여러 특징들을 확인하고 그런 분석과 공부를 기반으로 다양한 데이터베이스들을 연결했습니다.
또한 다양한 데이터베이스에 대응하는 query를 구성하고 또 sample data를 구성하여 데이터베이스에 집어넣는 등 다양한 일을 할 수 있었습니다
이 과정에서 query를 구성하는 방법과 다양한 데이터웨어하우스들의 스펙과 특징과 연결방법 그리고 golang을 활용한 코드를 배울 수 있었습니다
GOlang
제 첫 실무코딩이 javascript 그 다음이 golang일 줄은 몰랐네요 ㅋㅋㅋ 처음에는 아 이거 왜이리 깐깐하게굴어~, 어떻게 자료형이 변수명 뒤에 붙어~ 하고 싫어했는데 쓰면 쓸 수록 매력적인 언어였습니다. 특히 그 struct driven 으로 코딩한다는 특징이 너무 실무 서비스 개발에 적합하다고 느꼈습니다. Library도 풍부하여 정말 python에 뒤지지 않는 편리한 개발언어이면서 빠름과 안전을 둘 다 가진 멋진 언어였습니다.
누군가가 배우고 써보고싶다면 추천이 가능한 언어였다고 생각합니다.
대규모 리펙터링
처음에는 리팩터링을 해야한다는 사실을 받아들이기 싫었습니다.
이걸 언제 다 다시쓰는지에 대한 고민과 제 코드가 쓰레기라고 인정하는 기분이싫었습니다.
물론 실제로는 쓰레기가 맞아서 필요성은 느끼고 있었지만요 ㅋㅋㅋ
약 3,4일동안 머리를 쥐어뜯어서 사용한 함수들을 블럭단위로 묶고 또 그것을 기능들로 묶고 이게 재활용이 가능한가, 이것은 어떠한 역할을 하는가 고찰하는 과정을 CTO분과 상담해 가면서 리펙터링을 설계했습니다.
끝내고 나니까 정말 깔끔한 코드들이 있고 또 코드의 활용도도 높아져서 이후에는 공장에서 찍어내듯이 서비스들을 연결해낼 수 있었습니다.
또한 코드의 추가와 수정에대해 디렉토리 구성등의 고민도 줄고 추가 기능들도 구현하기가 쉬워져서 정말 뿌듯했습니다.
처음 코드를 작성하면 사용 함수들의 스펙과 동작을 확인하면서 쓰고 중간중간 스펙변경 등 때문에 어쩔 수 없이 매끄럽지 못하고 지저분한 부분이 생깁니다.
리팩터링은 한번 작동하는 코드를 쓰면 그 이해를 기반으로 추후 개발을 위해 꼭 해야하는 과정이구나 하고 느낄 수 있었습니다.
클라우드 컴퓨팅 기술
AWS의 다양한 서비스와 해당 서비스들을 어떻게 안전하게 구성하는가. 또 서비스를 위해서는 어떠한 구성이 필요한가 등을 알 수 있었습니다.
덕분에 EC2정도만 쓰던 AWS에서 진짜 클라우드 컴퓨팅의 힘을 알게되었습니다. 또한 그 가능성과 다양한 설정법등을 익히고 테스트하며 한 때 동아리AWS에서 큰 사고를 쳐서 진짜 일시적으로 우울증에 걸리고 자신감이 바닥을 기어다녔던 그 트라우마를 극복할 수 있었습니다.
정말 심한 트라우마였는데 덕분에 잘 극복할 수 있었다고 생각합니다. 지금은 혼자서 개인 AWS계정이나 Oracle Cloud로도 잘 놀고 있을 정도로 자신감이 붙었습니다.
프로젝트를 끝까지 못 지켜본 것이 너무 아쉬웠습니다. 개발도 마음에 들고 사람들도 다 좋았지만 제 본업은 아직 학생이기 때문에 더 큰 목표를 위해서라도 마음을 굳게 먹을 수 밖에 없었습니다ㅜㅜ
사실 이러고 4월말에 회식은 참여합니다 ㅋㅋㅋ