Skip to main content

코드스테이츠 메인 프로젝트 회고입니다.

· 18 min read

길었던 프로젝트가 끝이 났다. 메인 프로젝트는 프리때 보다 신경을 써야할 것도 많았고 노력도 더 많이 필요하였다. 내가 맡았던 부분 이외에도 팀장으로서, 세세하게 신경써야 하는 부분이 힘들기도 하였지만 돌이켜보면 성장 할 수 있는 계기가 되었던 것 같다.

특히 이번 프로젝트에서는 소통이 얼마나 중요한지 알 수 있는 기회였고, 어떤식으로 풀어나갈건지에 대해 깊이 있게 고민할수있는 시간이었다. 회고는 잘했던 점과 부족했 점을 나눠서 작성해 보려고 한다. 특히 부족했던 점을 발판 삼아서 앞으로 어떤식으로 진행을 해야할지 기록으로 남겨놓겠다.

잘했던 점

팀장으로써

프리 프로젝트에서 만났던 팀원분들과 마음이 잘맞아서 이번 프로젝트도 함께 진행하였다. 감사하게도 팀장역할도 한번더 하게 되었다. 이번에 가장 어려웠던 부분도 이부분이였다. 첫번째로 의견을 취합하는 부분이 어려웠던것같다. 사람이 7명이다 보니 얼마나 의견이 많겠는가...ㅎㅎ 이전 회사의 업무에서도 메인을 잡고 업무를 진행한 적은 있었지만, 이렇게 다수의 사람들을 이끌어본 경험은 없었기에 조금은 힘들게 다가왔다.

하지만 무언가 결정에 있어 최대한 팀원들 모두의 의견을 반영하려고 노력했고, 아무리 많은 아이디어가 있더라도 팀원 모두가 같은 방향으로 움직여야하기에 방향을 정하는 것에 힘을썼다. 결국 원했던 결과를 얻을수있었고, 이러한 노력을 팀원분들이 알아줘서 정말 고마웠다. 두번째로, 프리때는 클론코딩이였다면 이번에는 설계부터 구현까지 모두 진행해야 했으므로, 시간은 촉박했고 팀원들은 모두 예민해질수밖에 없었다.

이런상황에서 다들 본인의 역할에만 몰두하다보니 전체적인 흐름을 놓치는 경우가 있었다. 나는 최대한 큰부분을 보려고 노력하였다. 프론트엔드와 백엔드의 진행상황을 지속적으로 체크하였고, 이를 바탕으로 구현을 이끌어 나갔다. 이러한 노력덕분에 마감기한을 지킬 수 있었고 완벽하진않지만 만족스러운 결과를 냈다. 프로젝트를 주도적으로 이끌어 나갈수있는 아주 좋은 경험이였다.

프로젝트의 주제는 자격증 조회 서비스. 팀원들 중 누군가는 자격증 정보를 불러와서 저장하는 역할을 맡아야만 했다. 하지만 모두들 처음해보는 작업이다 보니 불확실성에 맡지 않으려고 하였고 나는 한번 도전해 보고 싶었다.

하지만 생각보다 쉽지 않은 작업이였고, 데이터베이스 설계부터 잘못된 부분이 있어서 수정을 하고 공부를 하고 적용하는 과정에서 많은 시간이 지나갔다. 그래도 결과적으로 내가 작성한 코드가 성공적으로 동작했고, 프로젝트의 핵심을 구현한 것에 매우 뿌듯했다. 처음 시작하는 일은 항상 힘들지만 즐길줄 아는 사람이 되어야겠다. 

어려워하는 팀원

꽤 많은 시간을 자격증 정보 구현하는 부분에 쓰다보니, 다른 팀원들이 얼마나 코드를 구현했는지 자세히 알아보기 힘든 상황이 있었다. 시간이 좀 더 지나가다 보니 프론트쪽에서 작성이 거의 끝나가는데 백엔드에서는 게시판의 구현이 거의 안되어있는 상황이 발생하였다...

마침 해당 팀원분이 도움을 요청하셨고 나는 흔쾌히 수락했다. 왜냐하면 마침 자격증부분 구현을 마쳤기 때문이다! 다른 팀원분이 작성해놓았던 코드를 건드는 것이 쉽지는 않았다. 하지만 처음부터 하나씩 구현해 가면서 어려워하는 팀원분께 설명을 드리고 시간내로 프로젝트를 마칠 수 있었다. 

그리고 팀원 한분은 프로젝트가 진행중인 상황에서 참여하게 되었다. 시작부터 배정되어있었지만 개인사정으로 참여가 많이 어려운 분이였다. 개인사정으로 인해 백엔드구현에 관한 공부도 못한부분이 있어 프로젝트진행에 많이 힘들어하였다. 그럴때 DM으로 여러번 격려해주고 작성한 코드도 여러번 봐주었다.

하지만 마지막엔 시간내는 것이 더 어려워졌고 팀원분이 맡았던 게시판 CRUD부분을 내가 대신 맡아서 작성하였다. 코드를 처음부터 구현해야해서 시간압박이나 스트레스도 있었지만 프로젝트를 마친후에 팀원분이 보내주신 감사인사에 마음이 따뜻해졌다. 

부족했던 점

구현의 한계

처음 프로젝트를 시작할때 많은 것들을 구현하고 싶었다. 프로젝트의 방향이나 아이디어 같은 기능적인 부분도 있었고, 기술적으로도 이건 한번 사용해보고싶다 했던것들이 있었다. 구현에 들어가기전 정보를 찾다가 QueryDSL을 알게되었고 프로젝트를 진행하면서 한번 적용해 보고싶다고 생각하였다.

하지만 이번 프로젝트에서는 생각보다 복잡한 쿼리를 다룰일이 없었고, 동적쿼리로 해결해야할 문제도 없었다. 그래서 JPQL만으로 해결하였는데 앞으로 기능을 추가하면서 QueryDSL에 대해서 공부하여 한번 적용해보고싶다. 또한 트랜잭션관련 부분에서 부족함을 많이 느꼈다.

SQLD나 정보처리기사같은 자격증을 취득하고, 이전 업무에서도 데이터베이스에 접근해 쿼리를 사용하는 일이 있었지만 코드를 작성하면서 이부분에 왜 트랜잭션이 들어가는지 모르는채로 구현한 부분이 있었다. 이런부분은 코드리팩터링을 진행하면서 공부를 해야겠다. 

스프링 배치를 구현하면서 이해가 부족한 부분이 꽤나 많았다. 공부를 마친후에 구현을 하는 방식으로 진행할수있으면 좋았겠지만 꽤나 일정이 빡빡했고, 내가 구현하는 부분이 이번 프로젝트에서 핵심이 되는 부분이기 때문에 최대한 빠른시일내로 끝내야하는 부분이였다. 정보를 찾아가면서 구현을 바로 해야한다는것은 큰 부담이였고, 결과를 내기까지의 예상시간보다 오래  걸리게 되었다.

이부분에 느낀게 참 많았다. 구현을 시작할때, 확실한 정보와 지식을 가지고 시작해야한다는 것이다. 팀회의를 진행할때, 다들 처음이기도 하고 모르는 부분이 많다보니 이렇게 하면 되지않을까? 했던 것들이 많았다. 다시한번 프로젝트를 하게 된다면 모르는 부분에 대해서는 최대한 서칭을 진행하고 시간을 고려하여 구현을 할수있을지 없을지 여부를 확실히 해야겠다. 

프론트와의 소통

오마이갓. 프로젝트 기간동안 정말 어려운 부분이 많았다. 특히 페이지네이션의 경우 백엔드에서 페이지네이션으로 처리하여 보내는 것으로 이야기가 됐었고, 프론트엔드에서도 페이지네이션으로 진행하기로 한 상황이였다. 우리는 당연 우리가 로직을 페이지네이션으로 구성하여 보내주는 것이 맞다고 생각하여 그렇게 보냈다.

하지만 프론트에서는 페이지네이션을 직접 구성해버렸고 그렇게 됨으로써 프론트 코드를 모두 뒤집어야 하는 상황이 생겨버린 것이다. 이 부분에 사전에 좀 더 많은 이야기가 오고 갔어야하는데 소통의 부재가 있었다. 프론트쪽에서는 당연히 프론트만으로 구현하는 방법을 익혔고 백엔드는 백엔드만으로 구현하는 방법을 익히다 보니 발생한 문제였다.그래서 API명세서를 다시 작성하고 이부분에 대해서 회의를 진행하여 결과적으로

백엔드에서 페이지네이션 처리를 하고, 이를 프론트에서 받아서 화면에 렌더링 해주는 방법으로 다시 작업을 하였다. 이부분은 어느정도 해당 부분을 구현하는 사람의 자율에 맡겼던 부분이였다. 이러한 선택이 문제를 만들었던 것 같다. 앞으로는 이렇게 프론트와 접점이 생기는 부분에서 많은 대화를 통해 어떤식으로 어떻게 구현해 나갈지를 확실히 해야한다는 점을 느꼈다.

프론트엔드와 백엔드가 나누어져있고 둘의 업무는 분명 다를지라도 결과적으로는 하나의 사이트를 만든다는 점을 꼭기억해야겠다. 어느 하나라도 모자라면 동작하지 않는다!

이번에도 CORS와 관련해서 문제가 참 많이 발생했다. 분명 바로 전 프로젝트를 진행하면서 겪었던 에러인데도 처리하느라고 꽤나 시간을 잡아먹었다. CORS의 경우 API서버에서는 정상적으로 로그가 찍히고 있는데 프론트에서는 동작을 안하는 경우도 있다보니 한쪽에서만 확인을 하고 코드를 수정하기보단 양쪽에서 함께 처리를 해야했다. 결과적으로는 거의 프론트단의 문제였지만 확신을 가지지 못했던것을 보면 나도 공부가 부족했던것이다.

문제가 일어난 곳을 파악하고 처리를 하는것이 해결의 기본이다. 나는 이러한 파악을 잘하지 못했던것같다. 프론트쪽 코드를 완벽하게 알지는 못해도, 최소한 읽을줄알고 여기에 문제가 있다는 것을 알수있을정도로 공부를 해야겠다. 이번에 겪었던 문제 중 하나를 예를들어보자.

클라이언트에서 보내는 Get요청에 body값으로 memberId를 받도록 코드를 작성했었다. 조회시에 memberId를 받아서 해당 member가 북마크한 정보를 표출하려고 작성하였는데, 이는 프론트에서 받아서 처리를 할 필요가 없었다. 그래서 급하게 코드를 수정하였는데 API 문서 수정을 잊어버렸다...그렇다보니 프론트엔드 팀원분은 API문서에 따라서 memberId를 Get요청에 계속 보내고 있었던것이다.

이부분에서 문제가 발생했는데 양쪽다 API문서가 문제라는 것을 알지못하고 있다가 많은 삽질후에 찾게 되었다. 이러한 경험을 바탕으로 수정이 있을때는 그에 해당하는 문서나, 기록들도 함께 수정되야하고 이와 관계된 사람들에게 전달 하는것까지가 수정이라는 것을 알았다.

몸 챙기기

프로젝트 기간동안 정말 많은 시간을 컴퓨터 앞에서 보냈다. 돌아서 생각해보면 건강하게 식사를 할시간도 충분했고, 매일 운동을 할시간도 충분히 있었다. 하지만 시간에 대한 압박감이나 귀찮음 때문에 건강을 제대로 돌보지 못했다. 매일 커피를 마시다보니 밤에 잠을 못잘때가 많았고 뭔가 밤에 집중이 더 잘되는것 같아서 밤을 새서 코딩하고 낮에 몰아서 자기도 했다.

그러다보니 밤 12시가 되면 정신이 맑아지고, 낮 12시가 되면 미친듯이 잠이 쏟아지는 기이한 경험도 했다...ㅋㅋㅋ 지금은 어느정도 정상패턴으로 돌려놓았지만 이런식으로 프로젝트를 하다보면 몸이 완전 망가질것같았다. 앞으로는 건강을 생각해 가면서 작업을 해야겠다. 이를 위해서 필요한 것들을 적어보면 아래와 같고 이를 꼭 지켜나가야겠다.

  • 매일 1시간 이상 운동
  • 손목보호대 착용하기
  • 잘시간이 되면 컴퓨터 종료하고 눕기