4주 프로젝트-dev log #17 마지막

rlcjf0014·2020년 2월 27일
1

im_16 프로젝트

목록 보기
21/21
post-thumbnail

Introduction

기나긴 4주 프로젝트가 모두 끝이 났다. 시간도 무지하게 많이 투자했고 또 새로운 기술도 배웠고 또 아쉬운 점도 많이 남는 프로젝트였다. 아직 자잘한 버그도 수정할 것이 남아있고 optimize 하고 싶은 백엔드 코드들도 있기에 아직 안드로이드 어플을 정식 출시하지는 않았지만 곧 출시할 예정이다.

처음 DediCats 프로젝트를 조인하고 나서 솔직히 많은 생각을 했다. 이 프로젝트를 하는 것이 맞을까? 내가 잘 할수 있을까? 스트롤 (2주 프로젝트 아이디어)을 확장해서 하는 것도 괜찮은 것 같은데...하지만 시작한 후 지금까지 정신없이 달리면서 많은 성장한 내 모습을 보니 보람차고 과거의 걱정들이 다 괜한 걱정인 것 같기도 하다. 과거로 돌아간다면 내 자신에게 말하겠다...데디캣츠 바로해! (사랑으로 일망타진)

Things I learned

이번 4주 프로젝트를 진행하면서 느낀점이 많고 배운 것도 많다. 한번 날 잡고 회고 하는 시간을 가지고 싶었다. 후딱 쓰는게 아닌, deep 하게...

Stacks

이번 프로젝트에 백엔드로 코딩을 하며 배운 새로운 스택들이 많다. 그리고 이미 알던 스택을 더 사용해 좀 더 익숙해진 스택도 있다. 나에게 새롭게 온것을 환영한다 스택들이여...

Typescript

세세한 타입 지정을 통해 에러를 줄이고 가독성을 향상시키기 위해 선택한 새로운 언어 툴이다. 다행이 빌드를 하면 자바스크립트로 컴파일 할 수 있고 그 전에 에러가 있다면 잡아주기 때문에 훨씬 편리했다. 그리고 마우스 커서를 올릴 시 초기에 지정한 그 변수의 타입도 나와서 헷갈리지 않을 수 있었다. enum (열거형) 타입은 엔지니어 분의 추천을 받아 사용했는데 확실 히 가독성 면에서 도움이 된 것 같다. 조금 힘들었던 점은 eslint와 같이 사용하다보니 진짜 자잘한 것들도 빨간 줄이 자주 떴고 (recommendation 이라도), 빨간 줄을 용납하지 못하는 나는 일일히 고쳐주거나 ignore를 실행해 없애주었다. 시간이 매우 오래 걸렸지만 타입스크립트라는 강력한 무기를 손에 넣었다는 점이 매우 고무적이고 기분이 좋았다. 공식 사이트를 보니 현재 내가 사용한 부분은 모든 기능들을 사용하지 않는 것이었고 더욱 많은 타입들을 활용해보고 싶은 마음이 들었다.

TypeORM

타입스크립트를 이용한 ORM 언어라니...이것보다 더 운명적인 스택이 있을까? 사실 내가 그 전에 사용해 본 스택은 sequelize밖에 없었는데 타입스크립트도 사용하고 ORM 관련 스택도 사용해 보자! 페어분과 결정해 TypeORM에 입문하게 되었다. 개인적으로 난 매우 마음에 들었다. 사실 SQL문을 일일히 쓰고, sequelize를 통해 migration도 하더라도 조금 거리감을 느낀건 사실이다. 그런데 TypeORM의 QueryBuilder를 통해 조금 더 함수처럼 SQL문을 작성할 수 있다고 느꼈고 한줄이 넘어갔더라도 조금 더 직관적이고 CRUD를 구현할 때 더 많은 옵션이 있었기에 매우 좋았다. 클래스처럼 데코레이터를 작성하는게 신기했다. 엔티티 작성과 관계 설정도 sequelize 때보다 더 수월하다고 느꼈고 Data Mapper 패턴을 도입했기에 코드도 깔끔하고 보기 좋았다. 보통 Active Record를 많이 사용하는데, 우리는 유지보수를 목적으로 Data Mapper로 작성했다.

MariaDB

이번 프로젝트에서는 일반 MySQL을 사용하지 않고 MariaDB를 사용했는데 과금정책에 있어서도 그렇고, 엔진 성능 면에서도 그렇고 MariaDB가 더 좋다고 나온 많은 글을 보기도 하였고 또 떠오르는 추세라고 해서 비슷하지만 다른 MariaDB를 새로 사용해보고 싶었다. 처음 스키마를 설계할 때 테이블 끼리의 관계 설정할 요소들이 많았기에, RDBMS를 사용한다면, 새로운 MariaDB 도 좋아보였다. 프로젝트가 끝난 지금 보면 만족스러웠던 것 같다. 다른 대규모 프로젝트에 비해 우리 프로젝트는 그리 크지 않았기에 그렇게 큰 성능 차이를 느낄 수 없었고 우리가 사설 업체가 아니여서 과금정책에서 큰 이득을 보지는 못했지만 그래도 새로운 데이터 베이스를 사용해 봤다는 점이 만족스러웠다. 마스코트도 더 귀엽다! 한가지 아쉬운 점은 aws rds 설정 상 mysql에는 있는 parameter option이 다 있는 것 같지 않아 업데이트가 필요해 보인다. 그리고 웹상의 리소스도 mysql에 비해 아직 걸음마 수준이다.

Socket.io & aws-sdk & wkx

이번 프로젝트를 진행하는 와중 엄청나게 많이는 아니지만 그래도 새롭게 알아간 스택 / 모듈이 있다면 aws-sdk 와 wkx 이고 또 실제로 프로젝트에 내가 직접 작성해서 사용한 것은 socket.io이다. socket.io는 실시간 댓글 기능을 구현하기 위해 사용했는데 실제 코드 작성은 어렵지 않았지만 그 흐름을 따라가는 부분이 생각보다 헷갈렸다. 실시간 채팅을 언젠가는 해봐야겠다 생각했는데 이번에 해보니 보람찼다. 한번 했으니 이제 필요할 때 계속 사용할 수 있을 것 같다. aws-sdk는 s3 버킷에 파일 업로딩을 위해 사용한 모듈이였는데 인터넷에 리소스가 많아서 쉽게 구현할 수 있었고 wkx는 포인트 타입 데이터를 저장할 때 사용한 모듈로 wkt 스트링으로 변환시켜주는 역할을 해줘 내가 데이터베이스에 데이터를 바로 저장할 수 있게 해주었다. 지금 생각해보면 위도, 경도 값만 저장하고 가져오는 것 이기에 그냥 공간 데이터가 아닌 일반 스트링으로 저장해서 사용했어도...기능은 했을 것 같다. 그래도 새로운 모듈을 사용하고 알 기회가 있어 좋았다. wkx모듈은 다른 많은 기능도 갖추고 있어 필요할 시 사용하면 될 것같다. 아직 GIS 관련 프로젝트를 해본적이 없지만 언젠가 해볼 기회가 생기면 좋을 것 같다.

Express & MVC

익스프레스 프레임워크는 전에도 자주 사용하던 프레임워크인데 많이 사용하고 봐서 그런가 수월하게 사용할 수 있었다. Express안의 미들웨어도 필요한 것을 사용할 수 있었고 다양한 미들웨어를 경험한 것 같아 좋았다. 이번 서버 코드는 체계적으로 MVC 패턴으로 정리를 해 가독성을 높혔고 또 역할별로 나눠 추후의 유지보수와 확장 가능성을 열어두었다. Route, Controller, Service 그리고 DAO (Custom Repository) 까지로 정리하니 시간이 매우 오래걸렸고 까다로웠지만 훨씬 보기 좋았고 정말정말 뿌듯했다.깔끔한 코드를 작성하고 정리를 잘하는 개발자로 한걸음 내딛은 것 같았다.

AWS & Nginx

이번 프로젝트의 배포는 AWS의 요소들을 많이 사용했는데 이미지 저장용 s3부터 ec2, rds 까지 다양한 서비스를 사용했다. 특히 ec2 같은 경우 리버스 프록시 서버용으로 인스턴스를 하나 더 생성해서 사용하면서 보안에 힘을 썼다. 실제 내가 작성한 서버코드가 배포 후 모바일 어플에 연결돼 사용되는 것을 보니 신기했고 현재 사용하는 데이터는 중요한게 많지 않아 ssl과 도메인을 따로 구비하지는 않았지만 나중에 필요할 것 같다는 생각도 했다. 그리고 이번 프로젝트를 통해 nginx라는 프록시 소프트웨어를 사용해 리버스 프록시를 구축했다. 새로운 소프트웨어에 소개받아 사용하는 것은 항상 흥미롭다. nginx는 따로 더 깊게 들어가보고 싶다. 다른 포스트에도 Apache와 간단하게 비교한 적이 있는데 아예 한 포스트를 nginx에 dedicate해서 공부하고 싶다.

Team Work

이번 4주 프로젝트에 같인 팀 코드스테이크 (Stake, not steak)멤버들과는 매우 분위기도 좋고 소통도 잘 됐다. 확실히 애자일 스크럼식으로 프로젝트를 진행해서 서로 어떠한 생각을 가지고 있고 어떤 방향으로 코딩을 하고 있는지 확실히 알 수 있어 더욱 효과적으로 프로젝트를 개발할 수 있었던 것 같다. 서로 의견이 있다면 과감하게 나눌 수 있는 분위기가 형성되었던 것 같고 다들 서로를 존경하며 말을 해줘서 고마웠다. 워낙 할께 많아서 분업을 해서 진행했지만 항상 자신의 코드를 공유하며 원리도 설명했고 또 백 담당 멤버들은 프런트에 넘어가서 도와줄 기회가 있었기에 React Native와 MobX를 경험할 수 있어 좋았다. 백은 더 추상적이기에 실질적으로 보이는 것이 없지만 실제 서버가 띄워져 요청을 보내고 받는 걸 보면 매우 짜릿했고 또 프런트로 넘어갔을 때 내가 실제로 작성한 부분이 엑스포를 통해 핸드폰에 나오는 것을 보면 또 매우 신기했다.

이번 프로젝트의 팀워크면에서 내 자신에게 점수를 준다면 후한 점수를 주고 싶다. 편안한 분위기 유지를 위해 힘썼다고 생각하고 또 내 맡은 파트를 시간안에 책임감 있게 완수했다고 생각한다. 어떻게든 에러가 나면 해결하려고 검색하며 애를 썼고 그 결과 많은 에러를 해결하고 새로운 접근법을 찾아볼 수 있었다. 개발만 하며 보낸 4주가 처음이여서 걱정도 했는데 돌이켜보니 보람차고 행복했던 것 같다. 이 성취감을 더욱 자주 느끼고 싶다.

아쉬운 점

DediCats 어플을 개발하면서 좋은 점도 매우 많았지만 아쉬운 점도 존재했다. 이러한 아쉬움은 내 실력 부재에서 나온 것이기에 이러한 부분을 스스로 깨닫고 발전한다면 더 좋은 개발자가 될 것 같다.

인증서버

  • 먼저 인증서버를 따로 구현 못한것이 아쉽다. 처음 로그인 부분에서 인증을 공부할때 보안을 위해 인증만을 담당하는 서버가 따로 있다면 효과적이라고 읽어서 그 부분을 구현하고 싶어 서버를 새로 하나 구축했었는데 우리 서버 인증 과정을 쿠키에 토큰을 넣어서 구현했기 때문에 서버가 다르면 쿠키도 달라진다는 것을 나중에 인지했다. 이것을 미리알만큼 공부했다면 인증 과정에서 토큰을 헤더에 넣었을 텐데 하는 아쉬움이 있다. 쿠키에 토큰을 집어넣는 방법이 optimal 하지는 않다하니 리팩토링 대상으로 일단 올려놓았다. 리팩토링이 완료되면 인증용 서버를 따로 셋업하는 것도 좋은 경험일 것이라고 생각한다.

TypeORM

  • TypeORM을 사용할 때 처음부터 Active Record 혹인 Data Mapper 패턴을 적용하지 않고 이후에 어느정도 코드가 완성되고 나서 적용했다. 방향성을 어느정도 잡고 코드를 작성해야 했는데 시간이 촉박했기에 정신없이 코드를 짜는데에만 집중했다. 기능이 되는 코드를 짜는 것도 중요하지만 공식문서를 더욱 꼼꼼하게 읽고 방향성과 스택의 어떠한 기능과 패턴을 도입할 건지 확실하게 정하고 시작하는것이 더욱 효과적일 것이라 생각한다.

Time Constraint

  • 처음 기획 단계에서 팀이 미니멈, Advanced, 그리고 nightmare로 정해놓은 목표가 있었는데 아쉽게도 두번째, 세번째는 완수하지 못했다. 새로운 스택들을 많이 사용했기에 확실하게 미니멈이라도 잡고 가자는 마음도 있었지만 너무 두번, 세번 체크하느라 시간을 쏟은 것도, 생각보다 자잘했던 버그들에 시간을 많이 쏟은 것도 지금 생각하면 시간이 아깝다. 정해진 시간 이상으로 많이 시간을 쏟으면서 개발에 힘을 썼는데 시간이 계속 부족하다고 느꼈다. 꼼꼼하게 하는 것도 좋지만, 조금 더 내가 짠 코드를 믿고 넘어가는 것도 필요한 것 같다.

React-Native

  • 리액트 네이티브를 경험만 한 것이 좀 아쉽다. 리액트는 2주 프로젝트를 통해 해볼 기회가 있었는데 이번 4주는 서버도 할께 많아서 리액트 네이티브를 생각보다 많이 사용해보지 못했다. 모바일 어플을 개발한다면 엄청나게 중요한 리액트 네이티브는 상당해 매력적으로 보인다. 프런트 분들이 어느정도 짜놓은 틀 안에서 개발을 했지만 후에 내가 처음부터 사용해서 리액트 네이티브로 개발을 해보고 싶다. 미래에 모바일 어플을 하나 개발하는 것이 목표이다. 아이템도 몇 개 생각한게 있지만..지금은 비밀이다.

Test Case

  • 서버를 다 짠 후 Mocha 혹은 Chai, Jest를 사용해 테스트 케이스를 만들어 잘 돌아가나, 그리고 조금 더 완성도 높은 코드를 구현하고 싶었는데 시간이 부족해 작성하지 못했다. 하지만 프로젝트가 끝나고 개인적인 시간이 생기면 이 부분은 혼자 꼭 해보고 싶다. 내가 작성한 코드의 이해도를 높이고 또 관련 경험을 쌓을 수 있는 좋은 기회라고 생각한다.

마무으리

4주 프로젝트가 끝나고 수료식을 하며 몇 달간의 길었던 대장정이 끝났다. 빽빽하고 바쁜 스케줄과 교육과정으로 인해 잠도 많이 못자고 끊임없이 앉아서 코딩을 했지만 (살을 얻었다!) 그래도 끝까지 포기하지 않고 완료한 내 자신에게 칭찬을 해주고 싶다. 세상은 넓고, 실력 좋은 개발자들도 넘치고, 흥미롭고 좋은 스택들이 너무나도 많다. 하루하루 새로운 걸 배우고 적용해 볼때마다 즐거움을 느끼고 보람을 느낀다. 개발자가 된다면 이걸 매일 공부할 수 있다니...더 깊은 학문을 위해 올해 말 다시 미국으로 돌아가 복학할 생각인데 복학하면 컴퓨터공학으로 전과할 것이다. 심리학도 재밌지만 성취감과 결과물이 바로 나오는 코딩이 조금 더 재밌는 것 같다. 이제 인턴을 구하러 열심히 탐색하고 이력서를 제출해야 하는데, 좋은 결과가 있으면 좋겠다. 잘하고 싶다. 계속 공부해야 겠다.

DediCats 프로젝트, 첫 모바일 프로젝트이고 2주에 비해서 기여를 많이 했기에 또 애착이 많이 간다. 돈은 못 벌더라도 나의 첫 어플로 자랑스럽게 내밀 수 있어 기쁘다. 안드로이드 마켓에서 찾아주세요~ 이 기회에 고양이와 더 친해져야 겠다. 도도한 동물 고양이. 대연님, 수지님, 윤정님도 너무 고생 많으셨다. 계속 연락하며 지내요~

profile
Grow Joshua, Grow!

2개의 댓글

comment-user-thumbnail
2020년 3월 11일

진짜 멋진 회고네요.
클라이언트 고쳐야 할 부분까지 챙겨주시느라 고생하셨어요 성현님. 협업 점수 100점 드리고 싶습니다!
저도 DediCats 클라이언트에 unit test 붙여볼 계획이에요. test case 같이 붙여요~ 성현님!

1개의 답글