프로젝트에 대한 설명, 진행하면서 발생했던 이슈와 해결과정 등은 팀 깃허브 레포에 포함되어 있으므로 회고글에선 기억에 남을만한 이슈나 진행과정, 심리에 대해 기록해보겠다.
프로젝트를 시작하기 전, 3일 혹은 일주일에 한번씩 회고글을 쓰려고 했는데 생각 이상으로 정신없이 하루하루를 보냈고 결국 첫 회고글 이후 이 글이 마지막 글이다.
기능 구현, 테스트는 끝난 시점에서 되돌아보면 팀원들을 정말 잘 만났다고 생각한다. 팀원들 모두 의견을 솔직하게 표현하고 배려하고 조율해나가며 모두가 어느정도 동의할 수 있는 선택을 이끌어낼 수 있었다는 점이 우리팀의 가장 큰 장점이라고 생각한다. 또한 다들 프로그래밍에 대한 욕심이 있었기 때문에 대충하려는 사람이 없었고 각자 맡은 업무에 대해 최선의 결과를 이끌어 낼 수 있었다고 생각한다.
그리고 좋은 팀원들과 같이 해서 그런지 힘든줄 모르고 하루종일 코딩만 했다. 툭하면 새벽이고, 툭하면 나오는 에러.. 지칠만한 상황이었지만 기능 구현이 성공하고, 에러를 해결했을 때가 자꾸 떠올라서 피곤했지만 마음은 설렜다. 클라이언트와 연계 테스트 하기 전까지 새벽 2~3시에 자고 9시에 일어나고 깨어있는 시간동안 코딩만 했는데 잠자리에 누울때면 신이 났다. 회사에서도 이런 팀원들과 같이 진행할 수 있다면 정말 재미있게 개발할 수 있을 거 같다.
백엔드에서 구현해야 했던 기능은 크게 서버 - DB 세팅, 소셜 로그인, aws 배포로 나눌 수 있다.
먼저 aws EC2, RDS를 이용해 서버, DB를 띄우고 로컬에서 express, mysql
을 이용해 구현을 했다. aws를 이용하는 부분은 어렵지 않았는데 가장 힘들었던 점은 스키마 작성 시 다 대 다 관계로 테이블을 짜놨는데 sequelize를 이용해 다 대 다 관계 설정 시 구현이 안되는 것이다! 공식문서에 나온 내용을 토대로 구현을 해도 계속 연결이 되지 않아 하루 반정도의 시간을 썼다. 구글링을 통해 이유를 찾아보고 적용해봐도 설정은 되지 않았고 페어분과 회의끝에 belongsToMany
대신 hasMany
, belongsTo
를 메인 테이블과 조인 테이블 각각에 맺어줌으로써 해결을 했다.
두번째로 소셜 로그인 기능을 구현이다. 앱 등록을 하고 인가코드를 이용해 토큰 받아오는 과정까진 수월하게 진행했는데 여기서 해결되지 않았던 부분이 클라이언트 부분, 즉 브라우저상에서 토큰을 이용해 사용자 정보를 요청하면 요청이 되지 않는 것이었다. 서버측에서 토큰을 이용해 요청을 보낼 경우엔 요청이 잘 가는데 클라이언트측에선 요청이 cors로 막혀서 요청이 불가능했다!
cors는 서버에서 막아버리면 해결을 할 수 없었기에 카카오 소셜 로그인 공식 문서 및 블로깅을 통해 알아낸 사용자 정보 요청 시 클라이언트가 아니라 서버에서 요청을 해야한다는 사실이었다. 이 사실을 알고 서버에서 사용자 정보 요청을 하고 클라이언트엔 요청 api를 넘겨주는 방식으로 구현을 했고 결과적으로 성공했다.
마지막으로 aws 배포를 하면서 서버를 https로 구현하고자 했다. aws 공식문서는 담고있는 내용이 방대하고 낯선 개념들이 너무 많아 초반에 route53-로드벨런서-EC2 의 흐름을 이해하는게 어려웠다. 많이 헤매기도 했고 로드벨런서에서 서버의 상태를 체크하기 위해 보내는 health check 도 알지 못해 서버가 unhealhy 인 상태로 켜두고 진행한적도 있다. 그래도 하나하나 구현하면서 개념들이 익숙해지니 aws 배포 및 https 적용 과정 흐름이 이해가 되었고 결국 배포까지 성공했다.
이번 first project를 하면서 기간은 2주였지만 실력이 정말 많이 늘었다. 개념적으로만 이해했던 http, https, 서버, 데이터베이스, aws, authentication, route, Rest API, git을 이용한 협업을 직접 구현, 사용해보면서 완벽하진 않지만 깊게 이해를 할 수 있었고, 잘못된 습관들을 고칠 수 있는 시간도 가질 수 있었는데 나는 오로지 공식문서에만 의지해야 한다는 생각을 가지고 있는 편이었고 에러가 생기면 에러원인을 찾고 해결 단서를 공식문서를 통해 찾으려고 했는데 공식문서 자체가 양이 방대하고 어렵기 때문에 시간이 꽤 걸렸다. 하지만 프로젝트를 하면서 해결 단서들을 구글링을 통해 찾고 단서에 대한 정확한 내용을 공식문서를 통해 찾아 해결함으로써 에러 해결 속도를 줄일 수 있게 되었다.
마지막으로 이번 프로젝트를 통해 개발을 정말 재밌다는 생각을 다시 한번 했고, 의사소통이 팀 성과와 분위기에 미치는 영향이 정말 크다는 사실을 몸소 체험했던 시간이었다.