한달 지난 시점에서 뒤늦게 진행하는 프로젝트 회고
엘리스 AI 8기에서 진행한 2차 프로젝트에 프론트엔드 개발자로 참여했다. 1차 프로젝트는 사실 초반에 스켈레톤 코드가 주어졌고, 백엔드와의 협업이 어떻게 진행되고 어떤게 필요한지 느끼기 바빴던 프로젝트였기 때문에, 솔직히 내 프로젝트라고 말할 수가 없었다. 그냥 좀 주어진 로직의 구조를 바꾸는 정도였다. 사실 다같이 초보자였기 때문에 경험으로 충분했고, 이번 프로젝트가 나의 포트폴리오에 넣을 수 있는 내 프로젝트였던 것 같다.
기획을 합시다
처음에는 프론트가 한 분 더 계셨기 때문에, 같이 알 수 있는 리액트를 사용했고, 이왕 리액트를 사용하는 김에 인터넷 앱처럼 만들고 싶었다. 사실 기획에 대한 감조차 안잡힌 상태였기 때문에, 일단 어떤 페이지를 만들지, 해당 페이지에서 어떤 기능을 다룰지를 결정했다. 사실 지금 생각해보면 '데이터 분석' 프로젝트였는데, 뭔가 서비스를 만들고 싶다는 욕심이 컸다. 특히 1차에서 서비스 완성도 측면에서 아쉬움이 있었어서 기획이 자연스럽게 흘렀던 것 같다. 그리고 팀장이 부담스럽게 다가왔는지, 결정을 빨리해야한다는 생각이 있었다. 침묵은 긍정이라고 생각하고 어차피 말 안할꺼면 빨리 빨리 한 마음으로 그냥 기획을 빨리 헤치웠다. 돌아보면 아이스브레이킹 시간이 필요하지 않았나 싶다. 내가 남들한테 한없이 T적인 인간인가 나를 돌아보면서도 침묵할거면 동의해야하는거 아닌가 하는 의문이 든다. 기대하는게 다 다르고, 열정도 다 달라고, 생각도 다 달라서 협업은 언제나 어려운거같다. 생각하는 개발자가 되기 위해서 협업과 소통은 필수적인데, 어떻게 해야할지 모르겠다. 사회성 제로 코로나학번의 인생.
사실 이건 지금 내가 돌아보면서 다른 사람들이 어떤 생각을 가지고 있었는지 아예 모르는 상태에서 나를 돌아봐서 불편했던 사람이 있었는지는 모르겠다. 일단 너구리님이 내가 생각하지 못한 기능을 추가하는걸 보면서 재미있었고, 피그마작성할때도 뭔가 힘을 합쳐서 완성하는 느낌이라 프로젝트를 하고 있다는 기분좋음이 계속 있었다. 다만 기획에서 어떤 걸, 어디까지 정해야하는지 방법론 같은걸 배워야할거같다. 어쨌든 내 성격상 리드에 갈망이 있을거기 때문에 다양한 경험과 생각이 필요함을 느꼈다.
진짜 개발하기
페이지를 늘리거나 새로운 컴포넌트를 렌더링하기 보다 모달을 사용한게 가볍고 깔끔해서 좋았는데, api 요청에 따른 상태관리에 대한 고민이 커졌다. 처음에는 useEffect를 이용하여 처음 렌더링될때 get 요청을 하는 교과서적인 코드를 계속 작성했는데, 쓸 수록 뭔가 다른 방법이 있지 않을까 싶었다. 마감기한은 지켜야 했기 때문에 어쩔 수 없이 useEffect를 사용했지만, 리팩토링 과정에서 커스텀훅을 fetch에도 활용할 수 있다는 것을 깨달았다. 커스텀훅에 대한 막연한 두려움이 있어서 잘 사용하지 않았는데, 막상 사용해보니 그냥 다른 utils 함수와 비슷했다. 내가 불편한 부분을 함수로 만들게 되니까 함수들이 점점 좋은 것들임을 깨닫게 되었다. 그렇지만 다른 문제도 있었다. 그렇게 컴포넌트에서 받아온 데이터을 모달을 띄운 최 상단으로 옮길 수가 없는 것이다. 그래서 데이터를 추가했을때 구조할당을 통해 데이터에 끼워넣는것에 어려움을 겪었다. 사실 처음에는 전역 상태로 데이터를 관리해버려야하는 건가 생각하면서 혼자 심각해지기도 했다.
그러다가 코치님한테 한탄하듯이 장난아 왜 원격 렌더링은 안되는거냐고 했었는데 이것도 커스텀이벤트를 이용한 방법이 있었음을 알려주셨다. 코치님이 A물어보면 ABC 다 알려줘서 BC노리고 물어본것도 있긴 했다. 근데 처음에는 뭔가 너무 막연한 질문이라서 이래도 되나싶고 죄송스러웠는데 진짜 생각도 못한 D를 알려주시니까 자꾸 나는 파닉스를 물어본다..뭐 어차피 둘이 만담하는 시간이라 그냥 편하게 원리를 설명받을 수 있어서 좋았다. 물론 비효율적인 방법이라고 사용하지 말라고 하셨지만, 가능성을 볼 수 있었다. 생각하고 선택하는건 언제나 재밌다. 나같은 고민을 설마 다른 사람들이 안했을까 하는 생각이 들었고, 리액트 쿼리의 유용함을 본격적으로 깨달아버렸다. 유행하는 건 사용방법은 아니어도 적어도 원리나 탄생 배경, 목적에 대해서 한번쯤 읽어야겠다는 생각이 많이 들었다.
상태관리 많이 쓰면 좋겠지?
상태관리 라이브러리의 필요성을 모른 상태에서 일단 배우기 위해 리덕스 툴킷과 리코일을 사용해봤다. 근데 당연히 state는 라이브러리당 하나만 관리해야한다고 생각하고 로그인에 리덕스 툴킷, 모달에 리코일을 써놓고 하나 더 추가하고 싶은데 뭐써야하는지 혼란을 그대로 받았다. 그러다가 리코일에 몰아넣었는데, 리코일은 생성할때 간편하긴 한데 가져올때 오히려 불편한 감이 있다. 여러 상태를 쓰면 가져오는 코드가 길어졌다. 게다가 스토어없이 그냥 아톰만 생성하면 되기 때문에 state의 종류만 명확하게 알긴 어려웠다. 그래서 전역 상태가 많아질수록 뭔가 이게 아닌데..? 라는 생각이 들었다. 그러다가 마지막 오피스아워때 왜 두개나 쓴건지 물어봐서 서로 띄용? 이었고 일단 내 생각을 말했고, 납득 당했다. 다 끝나고 돌아보니 혼자 신박하게 오버로 사용해놓고 왜 안되냐고 물었던게 웃기다. 스스로 localStorage, sessionStorage, search, ContextAPI, Recoil, Redux-Toolkit 온갖 라이브러리 다써놓고 상태관리 저장소 부족하다고 괴로워하던 나.
그래서 리팩토링 과정에서 리덕스 툴킷으로 돌렸다. 물론 프로젝트 규모가 크지 않았기 때문에 내가 괜히 불편해하나 하는 생각이 들긴했는데, 스타일과 로직을 분리하듯이, 리듀서와 스토어를 분리해야겠다는 마음이 더 크게 들었다. 두 개 다 장단점이 있는 것 같다. 리코일은 간편 그자체라서 전역 상태의 규모가 크지 않으면 정말 사용하기 좋고, 리덕스 툴킷은 스토어에서 상태 이름을, 슬라이스에서 액션 이름을 지정할 수 있었기 때문에 상태의 변화가 크면 오히려 사용하기 더 편했다. 초반에 그냥 Context API랑 state만으로 해결할 수 있지 않냐고, 상태관리를 왜 하라는건지 이해가 안된다고 생각했던 게 웃겼다. 편한거 왜 안써? SWR도 신기함,, 반환값 맨날 빼먹었는데 바꿔치기라니
작은 트러블
솔직히 프로젝트 결과물은 만족스럽다. 애초에 나는 결과 안나오면 금방 포기하고 딴거하는 스타일인데 백 짱짱맨한분이 계셔서 내가 원하는대로 나왔고, 진짜 생각한게 만들어지니까 기분 좋아서 더 열정적으로 했다. 근데 그 과정에서 한분이랑 트러블이있었다. 3주 중에 2주 잠수타놓고 필드명은 이게 더 좋아요~라고 하니까 짱짱맨이 터지셨다. 솔직히 그전부터 이 분 혼자 백 기획 담당하신거였는데, 갑자기 그거 아니고 이거예요~하니까 나같아도 화날만 했다. 솔직히 나는 이분안하시면 그냥 인증글 프론트에서 핸들링해야겠다는 생각으로 포기한 상태였다. 아무튼 갑자기 이미 진행한창인 필드명을 가지고 그러시면 기분나쁘지않겠냐고 말했다. 근데 냅다 본인도 불만있는데 참은거라고 하시는거다 침묵은 그냥 동의라고 생각했기 때문에 이런 생각을 하고 있을줄은 몰랐다. 하지만 애초에 서로 자신의 입장에서 상대방이 원하는대로 맞춰주고 자기가 배려한거라고 생각했던거 같다. 아무튼 난 당시에 솔직히 이 사람이 그냥 참여의사없는 사람이라고만 생각해서 더 소통을 진행할 생각도 없었다. 지금와서 계속 생각해보면 프로젝트에 대한 참여 열정이 당연히 다 다를 수도 있는건데, 나는 내 기대치만큼 열정이 있는 사람들만 바라보면서 프로젝트를 진행했던 거같다. 지금이야 배우기 위한 프로젝트이기 때문에 엄청나게 갭이 크지 않지만, 진짜 '일'이 된다면 그 격차가 클텐데, 이에 대해 생각을 많이 해봐야할거같다.
아무튼 그때 게임수업도 듣고 있었어서 그렇게 넘어갔는데 커밋하고 올려주신게 혼자 냅다 진행하고 연결도 안하신거다. 솔직히 처음보자마자 그냥 연결해달라했다 애초에 난 디비를 볼 줄 몰라서 저걸 내가 어떻게 할 수도 없었다. 하지만 서로 감정이 좋지 않은 상태여서 인지 뭘 연결하라는건지 물어보셨고 나는 그냥 ERD 이미지만 보여줄 수밖에 없었다. 서로 기분나쁜 상태에서 말이 오고 갔고 짱짱맨님이 참여안하실거라 생각하시고 일단 개인적으로 만드신 대안쓰는걸로 마무리되었다. 솔직히 이대로 기분나쁘시고 커밋도 없어서 참여안하실 줄 알았는데 끝에가서 테스트의견 계속 주셨다. 그런 모습을 보면서 내가 너무 참여 열정에 대한 기대치를 높게 잡고, 참여의사가없다고 판단했던 걸까 싶다. 사람은 너무 입체적이야..
좋은 팀장이란 뭘까
사실 내가 잘 한건없다 팀장이었는데 참여독려도 안하고 그냥 참여안하면 안하는대로 무시했으니까. 애초에 팀장 지원한것도 어차피 의견안낼꺼 기획빨리 끝내버리고 프론트 작업하고 싶어서 였기때문에 팀장의 의미에 크게 생각해보지도 않았다. 근데 뭔가 돌이켜보면 그게 발목을 잡지않았나 싶다. 나는 프론트, 보여지는 결과물에 집착이 좀 심하다. 제일 좋아하는 것도 프로젝트 마지막 UI 피드백일정도.. 사실 팀장을 하겠다고 맡았으면 팀원들에게 관심을 갖고 피드백을 했어야했던거같다. 스크럼도 사실 내 입장에서 나혼자 프론트를 하느라 스크럼이 왜 필요한건지 체감을 못해서 적극적이지 못했다. 만약 트러블있을때 서로 포기하는게 아니라 끝까지 트러블 더 진행했으면 걍 프로젝트 날렸을거같다 그리고 내가 만약 기획에서부터 의견강한분들을 만났다면 솔직히 나는 어떻게 했을지 모르겠다. 프론트는 사실상 백, 디자이너, 기획하고 다 소통해야하는데, 내가 스트레스안받을 수 있을까? 이건 좀 프론트로서의 내가 달린 진지한 고민덩어리가 된거같다.
그리고 사실 짱짱맨이라고 느낀것도 실력보다는 팀 분위기를 좋게 해줘서다 솔직히 실력은 다들 시작시점도, 상황도 달라서 다 다를 수밖에없다 근데 계속 부드러운 말투쓰셔서 분위기가 편해졌다 1차때는 진짜 딱딱해서 뭔가 2주내내 일하는 느낌이었는데 3주동안 마음은 편안했다. 솔직히 처음에는 적응이 안됐었는데 할수록 뭔가 편해졌다 은진님도 한번봐서인건지 편했기때문에 좋았다. 심지어 두분 다 마지막날에 나혼자만 할거있어도 남아계셔주셨다. 팀 분위기를 받아들이는게 아니라 만들어가는것도 능력인 걸 느꼈다. 그리고 나는 면접준비가 필요하다..! 사실 대학도 면접안보고 들어가서 살면서 면접이란 써브웨이 면접이런거밖에 없어서 몰랐는데 나 말 진짜 못한다 면접가서 아무말대잔치하게 생김 호엥 다들 어케 말을 그리 잘하시는건지 발표도 가관이었는데 질문엔 걍 아무말을 뱉었다 기억도 안남 이세상 살아가기힘들다!
아무튼 결론은 난 팀장하기엔 진짜 멀었다
프론트는 좀 자신감을 얻었다
발표, 면접은 가관이다!
Seoul Plog Fiesta
'회고록' 카테고리의 다른 글
늘 확장 가능성을 열어둡시다 (0) | 2024.05.08 |
---|---|
냉장고 관리 애플리케이션, Fridge Link (0) | 2024.03.27 |
나의 첫 해커톤, 9oormthonUNIV 벚꽃톤 28팀 스타트업 밸리 (0) | 2024.03.25 |
엘리스 3차 AI 프로젝트 감정 추출 캘린더, 이모티어리 (0) | 2024.03.03 |
테오의 스프린트 16기 컨벤션 메이커 (0) | 2024.03.03 |