[개발일지] 22년 30주차 - 실패

FeRo 페로·2022년 7월 31일
0

첫 번째 팀 프로젝트

이번 주에는 첫 번째 팀 프로젝트를 했다. 지난 3주간 스프링을 배운 백엔드 분들과 리액트를 배운 프론트 분들이 모여서 한 팀을 만들어서 간단한 프로젝트를 진행했다. 결론부터 말하자면 우리 팀은 기능 구현에 완전히 실패를 했다. 정확하게 말하자면 백엔드와 프론트 간의 연결이 안돼서 로그인부터 되지 않았다. 그 뒤 모든 기능은 로그인을 했을 때 이용할 수 있게 설계를 했기 때문에 로그인이 안되고서는 제대로 된 이용을 할 수 없었다.

모든 조원들이 속상해 했다. 정말 마지막에는 모두가 간절한 마음을 가지고 40시간 잠도 자지 않으면서 해결을 하려고 했기 때문이다. 하지만 안된다는 걸 직감한 순간에는 그 상황을 받아들이기 위해 많은 에너지를 써야만 했다. 오늘은 실패 과정과 이번 실패 동안에 내 생각들을 정리하려고 한다.

순조로운 시작

시작은 몹시 순조로웠다. 백엔드 세 분과 프론트 세 분, 총 여섯 명이 있는 팀이었고 이것은 다른 팀들이 5명이었던 것에 비해 메리트를 하나 안고 가는 것이었다. 그리고 와이어 프레임과 api 설계도 시간을 들여서 잘 만들었다. 매니저님들의 피드백도 좋았다. 이후 백엔드와 프론트 엔드가 서로 나누어서 각각 작업 영역을 할당하고 작업에 들어갔다.

특히나 메인 페이지를 맡은 나는 페이지네이션을 백엔드에서 처리해 주어야 하는지도 모르고 모든 데이터를 백엔드에서 받아와서 slice메소드를 이용해 분절하여 한 화면에 12개씩 게시물을 보여줘야겠다는 생각을 가지고 페이지네이션도 구현해 보았다. (심지어 성공했고 잘 됐음.. 이것도 소름..)

뒤늦게 백에서 페이지네이션에 맞게 로직을 구현해야지 의미가 있다는 것을 알았지만 우리 팀에서는 페이지네이션을 해보거나 해당 부분을 공부해 본 분들이 없었기 때문에 그냥 이렇게라도 페이지네이션을 구현했다는 사실을 다행으로 삼았다.

이렇게 시작이 순조로웠음에도 불구하고 왜 실패를 했을까?

사실 개발 공부를 하는 과정에 있어서 실패는 자주 겪지 않는다고 생각한다. 나 역시도 지난 1년 3개월 동안 프로그래밍을 하면서 이렇게 아예 실패라고 할 만큼의 경험을 해본 적은 처음이다. 매번 어려움은 겪지만 어떤 프로젝트가 됐든 정말 안 되는 것이면 구현을 하지 않고 빼면 되는 것이고, 그 기능 대신에 다른 기능을 넣고 프로젝트를 만들어 나가면 된다.

하지만 이번에 우리는 그러지 못했다. 물론 소통에도 문제가 있었지만, 돌이켜 보면 이런 대안을 찾는 것 대신에 어떻게 해서든지 그 문제를 돌파하려고 했던 것도 다시 한 번 생각해 볼 문제다. 일주일이란 기간이 있었고 그 기간 안에 어떻게 해서든지 완성을 해야 했다면 그냥 로그인 기능을 과감하게 빼든지, 아니면 브라우저의 storage API를 이용해서 어떻게 해서든지 대안을 만들 수 있었다. 하지만 우리는 마감 5시간 전에도 되지 않는 JWT를 잡고 있었으니, 지금 생각하면 잠도 못 잔 상태에서 모두가 급하다 보니 시야가 극도로 좁아진 게 아닌가 하는 반성을 하게 된다.

나 역시도 그때는 이런 생각을 하지 못했고 JWT를 실전 프로젝트에서 처음 써보는 팀원들에게 JWT가 어떤 것인지 설명을 하면서 탈출구를 찾는 대신에 돌파구를 마련하는 것에 급급했던 것 같다. 무조건 완성을 해야 하는 프로젝트라면 돌파구 대신 탈출구를 찾아야 했다고 생각한다.

소통의 방법

앞서 말했듯이 소통도 문제가 있었다. 특히나 회고를 하면서 든 생각은 백엔드의 언어와 프론트 엔드의 언어로 서로 대화를 하면, 특히나 우리 조처럼 프로그래밍 경험이 평균 4~6개월도 안된 사람들 사이에서는 소통이 거의 불가능하다는 것이었다.

몇 개월 사이에 프론트는 프론트의 경험만, 백엔드는 백엔드의 경험만을 가지고 있기 때문에 서로가 서로의 기술적 용어로 대화를 한다면 결코 원활한 소통을 할 수가 없었다.

소통을 안한 건 절대 아니었다. 모두가 열심히 소통했고 필요한 부분이 있으면 가서 api 수정을 건의하기도 하면서 열심히 소통은 했다. 하지만 프론트에서는 백에서 어떤 데이터를 어디로 주는지, 백에서는 프론트에서 어떻게 데이터를 받아야 하는지를 잘 모르다 보니 모두가 자기 할 말만을 하게 되는 상황이 됐다.

분명 node.js로 OAuth2를 통해서 깃허브, 네이버 로그인 구현할 땐 잘 됐는데, 스프링 시큐리티에서는 설정이 매우 까다로워 보였다.

결국은 경험

나 역시 속상하기도 하고 답답하기도 했지만 어쩔 수 없었다. 대부분의 팀원들이 프로그래밍은 거의 처음이었고 그런 상황에서 프로젝트를 하려고 하다 보니 이런 상황이 나올 수 있는 상황이었다. 그래서 모든 것이 이해가 됐고 속상해도 어쩔 수 없었다.

결국은 경험이다. 우리가 경험이 부족하니까 겪은 문제들이고 그래도 이번 경험을 통해서 다들 조금이라도 성장을 했을 거라고 생각하기 때문에 그런 부분에서 위안을 얻고자 한다.

나 역시 axios를 통한 비동기 통신을 프로젝트에 처음 적용해 보았고 프론트 엔드에서 페이지네이션을 구현하고 게시물의 개수에 따라 페이지 네비게이션이 늘어나는 것 역시 해볼 수 있었다. 또 댓글 기능도 맡았는데, 이번에는 오랜만에 thunk를 쓰지 않고 props로만 구현을 해보았다.

그래서 setState 함수를 부모 컴포넌트로부터 받아와서 댓글이 추가 및 수정될 때마다 바뀐 데이터를 비동기 통신으로 DB에 전달하고 state를 변경해 주었다. 느낀 점은 왜 thunk를 쓰는 것이 훨씬 편한지 알게 되었다는 것이다ㅋㅋ 몇 단계의 props drilling이 있는 상황이었기 때문에 만들면서 'thunk를 쓸 걸 그랬나?'하는 생각을 몇 번 했다.

위에 내가 하고 느낀 것도 경험이다. 이런 경험을 통해서 함께 밤을 지새우면서 실패를 맛 본 팀원들이 각자의 방법으로 잘 이겨내어 더 성장했으면 좋겠다.

모두에게 정말 수고 많았다고 전해주고 싶고 너무 절망하고 속상해하지 않았으면 좋겠다. 그래도 배우는 과정에서 겪은 실수니까!

profile
주먹펴고 일어서서 코딩해

1개의 댓글

comment-user-thumbnail
2022년 8월 3일

실패를 배움으로 삼는 마인드가 대단하네요!
다음에는 더 멋지게 성공하실 거라는 생각이 듭니다.

답글 달기