10월 04일 ~ 10월 13일 위코드 2차 프로젝트가 끝났다.
2차 프로젝트는 1차 프로젝트때 해보지 못했던 기능을 위주로 프로젝트를 진행했다. 이번 회고록을 통해 내가 느꼈던 점을 정리 해보려고 한다.
postman API Link, GitHub Link, YouTube Link
2차 프로젝트는 쇼핑 커머스 / 커뮤니티 사이트인 오늘의 집 클론 코딩을 진행 했다.
1차 프로젝트는 쇼핑 커머스 사이트 프로젝트를 진행했기에, 해당 페이지에서 중복 되는 쇼핑 기능(장바구니, 구매 등)을 제외한 커뮤니티 기능에 초점을 맞추어 진행했다.
Front-END
BACK-END
공통
1차 프로젝트와 동일하게 프로젝트의 진행은 에자일 방식으로 진행했고, 2주의 시간동안 1주 간격으로 스프린트를 총 2회 진행했다.
1차 프로젝트의 미숙했던 소통과 기록에 좀더 초점을 맞춰 2차 프로젝트를 진행했다.
프로젝트를 진행하며 진행사항 공유, 프론트엔드와 백엔드 간의 주요 통신 계획, 기능공유 등은 Trello와 Figma를 통해 진행했다.
Trello를 통해 팀 전체의 진행 사항을 한눈에 볼 수 있었고, Figma를 통해 구현 해야하는 기능 들을 좀더 자세하고 정확하게 파악 할 수 있었다.
1차 스프린트 미팅은 프로젝트 기간 내에 구현할 기능을 정하고, 이번주에 어떤 기능을 구현 할 것인가, 다음주엔 어떤 기능을 구현 할 것인가 세세한 작업을 나누는 작업을 했다.
오늘의 집 사이트가 워낙 방대하다 보니 첫 미팅때는 욕심이 생겨 기능 구현의 갈피를 잡지 못하고 이것 저것 구현 목록을 계속해서 넣게 되었다. 그러다 보니 구현 해야할 기능이 너무 많아져 버렸고, 멘토님의 조언을 받아 1차때 구현했던 기능들은 대부분 생략하고 경험해 보지 못한 기능들을 위주로 프로젝트를 진행하는 방향으로 결정 됐다.
2차 스프린트 미팅은 한 주간 진행한 경과, Blocker, 서로 공유 해야 할 점 등을 공유하고, 의기 투합 하는 시간을 가졌다.
이번 프로젝트의 중요 기능 중 하나인 포스팅 업로드 기능이 Blocker가 되어 첫 주 부터 2차 스프린트 미팅 때 까지 해결이 되지 않았다. 포스팅 하나에 이미지, 좌표 + 제품정보, 해시태그 등 관련 테이블만 4개 이상이며, 각각 이미지당 제품의 좌표값을 프론트에서 구현하는데 많은 애를 먹었다.
1차 프로젝트때 경험해본 소통을 기반으로 2차 프로젝트도 팀원간의 소통을 위주로 프로젝트를 진행했다. 이슈나 Blocker가 생길 때 마다 즉각적으로 서로 공유하고 해결해 나갔으며, 팀원간에 해결이 안되는 문제의 경우는 멘토님의 도움을 받으며 프로젝트를 진행했다.
1차 프로젝트와 마찬가지로 Postman으로 API명세서를 프론트와 공유해 엔드포인트당 기능, 예시 메시지 등을 즉각적으로 공유해 통신 테스트를 함에 있어서도 문제가 없이 진행되었다.
프론트에서는 Figma를 통해 구현해야할 페이지 목록과 페이지당 필요한 API에 대한 상세 내용을 기술한 뒤 공유를 해줘 더욱 빠른 진행이 가능했다.
사람이 작성한 코드는 완벽하지 않다. 사람은 언제나 실수를 하기 때문이다.
에러는 언제 어디서나 발생할 수 있으며, 이를 방지하기 위해 에러 핸들링과 같은 작업을 통해 프로그램이 중단되는 사태를 막아야 한다.
이번 프로젝트에는 유닛 테스트라는 새로운 경험을 했는데, 기존에는 우리가 API를 작성하고, 자체적인 통신을 통해 테스팅을 하는게 전부 였다.
유닛 테스트는 자체적인 테스트 코드 통해 내가 만든 API의 작동 여부, 에러 핸들링의 처리 작동 여부 등을 코드로 작성해 바로바로 테스트를 진행할 수 있게 해준다.
이러한 테스트 작업을 통해 새로운 코드가 추가 될 때 마다 기존의 코드가 제대로 작동하는지 새로운 통신작업을 하지 않고, 유닛 테스트만 진행해도 코드가 제대로 작동하는지 알 수 있다.
이번 프로젝트는 기존처럼 코드 병합을 merge
로 진행하지 않고, rebase
라는 새로운 방법으로 진행했다.
기존 merge
방식은 log가 복잡해 알아보기 힘들다는 단점이 있었다. 여러 사람이 branch
를 만들고 commit
을 하고 merge
를 하면 서로의 log 가 뒤엉켜 어떤 log가 어떤 기능을 하는지 제대로 파악하기 힘들다.
이번에 경험한 rebase
방식은 병합 당시 기존 commit
을 베이스로 잡아 내가 작성한 commit
을 베이스로 잡은 commit
의 뒤로 미뤄 정리해 준다. merge
와 달리 branch
당 commit
log가 분리 되어 있어, 더욱 가독성이 좋은 log를 볼 수 있다.
더불어 이전 commit
기록을 수정하거나, 합치거나, 분리 하는등 많은 기능을 가지고 있어 유용하다.
이번 프로젝트는 카카오 단일로 소셜로그인을 구현했다. 처음에는 함수를 통한 로직을 구현했으나, 멘토님의 권유로 class 방식으로 바꿔보았다.
아직까지 class 문법에 대한 이해도가 좋지 않아서 좋은 기회였고, 확장성을 고려하면 class로 하면 좋다고 권유를 해 주셨다.
유닛 테스트는 바깥의 영향을 받지 않고, 코드 내부에서 모든 테스트를 진행할 수 있어야 한다. 카카오 소셜로그인 API의 경우, 내가 카카오API에 총 2번의 요청을 보내고 데이터를 받아야 회원의 정보를 알 수 있다.
이 때 필요한게Mock
데이터 이다. Mock데이터를 만들어 내가 카카오API의 역할을 대신 해 가상의 데이터를 전송해 줘, 외부의 요인에 간섭받지 않고 유닛 테스트를 진행할 수 있다.
카카오 소셜 로그인 유닛 테스트를 진행을 하며, Mock
데이터의 생성방법을 위해 구글링을 했다. Mock
데이터를 생성했으나, 정상적인 작동을 하지 않아 계속 구글링을 했는데, 해결 방도를 찾지 못했다.
그래서 멘토님에게 도움을 구했고, 멘토님은 class 문법의 Mock
데이터는 구현방식이 다르다는것을 설명해 주시며, 관련 링크를 나에게 보여 주셨고, 덕분에 해당 유닛 테스트를 완료할 수 있었다.
이번 경험을 통해 현재 사태를 좀 더 면밀히 파악하고, 상세하게 구글링을 할 수 있게 됐다.
평소에 프론트와 백엔드간에 데이터를 주고 받는 경우 JSON
형식으로 데이터를 주고 받는다.
하지만 사진과 같은 멀티미디어 컨텐츠는 JSON
형식으로 담을수 없어 form-data
형식으로 데이터를 받게 된다.
기존에는 form-data
를 받더라고 하나의 key
값에 하나의 value
를 담아 데이터를 받았기에 상관이 없었지만, 이번에는 form-data
를 받으며, key
값에 객체나 배열을 담아 보내 보니 프론트가 보낼 당시에는 객체와 배열에 제대로 담겨 있었으나, 백엔드 입장에선 전부 String
타입으로 변환되어 데이터를 받게 되었다.
다행히 JSON.parse()
메소드 등을 활용해 객체와 배열로 다시 나눠 데이터를 처리 할 수 있었지만, 이 상황을 직면할 당시에는 상당히 당황했다.
앞으로는 예상 외의 사태가 닥치더라도 더 긴밀히 대처할 수 있는 개발자가 되고싶다.
이번 프로젝트에서는 팀장을 맡았고, 팀내의 전체적인 스케쥴을 맞춰볼수 있도록 노력했다.
프로젝트가 끝난 뒤 생각해 보면 소통은 잘 되었지만 기록에 있어 부족함이 느껴졌다. 기록이 부족하니 당사자에게 해당 내용을 다시 물어보는 등 시간적 손해가 조금씩 생기는거 같았다.
지금은 같은 공간에서 프로젝트를 하는 입장이기에 당사자에게 빠른 피드백을 받을 수 있지만, 나중에 현업에 가서 재택근무를 하거나, 여럿 이유로 작업자 끼리 같은 공간을 공유하고 있지 않는 경우, 피드백에 어려움도 있으며, 서로 시간낭비가 심하게 된다.
앞으로는 기록을 더 초점을 맞춰 시간 낭비를 줄여 프로젝트의 진행에 더욱 원활하게 진행 해보려고 한다.