이제 내일이면 프로젝트 제출일이다.
이번 주말에는 제출할 서류들을 검토하고, 프론트쪽과 맞춰보다가 발견한 오류를 수정하고,
기술영상 촬영을 위한 대본작성과 PPT작성을 하는데 시간을 보냈다.
기술영상은 2분내로 촬영되어야하는데 하고싶은 이야기가 너무 많아서 최대한 간략하게 수정해야했다.
나는 평소에 글쓰기를 좋아해서 그런지 대본을 작성하는 일은 재미있었는데, 영상을 촬영하는 일은 긴장을 많이 되서 땀이 잔뜩 났다. 나중에 면접 볼 때도 이렇게 긴장하게 될 텐데 벌써부터 걱정이 된다. 🥲
기술발표영상: https://www.youtube.com/watch?v=rH2CvAi1WB8
안녕하세요 저는no complete no sleep 팀에서 팀장을 맡게된 백엔드 개발자 김소희입니다.
저희 팀에서 준비한 프로젝트는 바이리케이드라는 이름의 위리시스트가 있는 가계부 프로그램입니다.
사고 싶은 물건들을 사기 위해 도와주는 가계부라는 기획에서 출발한 저희 애플리케이션은 일반적인 가계부와의 차별점으로 위시리스트가 있습니다. 우리가 사고 싶은 물건들이 여러 개일 경우 하나의 사이트에 판매하지 않을 경우가 대부분이라 한 번에 관리하는 것이 불편한 점이 있을 수 있는데, 저희 가계부의 위시리스트에 사고 싶은 물건을 담아서 관리하면 우선순위에 따라 볼 수도 있고, 목표 금액에 맞춰서 어떤 품목들을 살지 결정하는 데 도움이 됩니다. 또한 목표 지출 금액을 설정하여 그에 맞는 지출을 하게 유도하고, 목표 금액에 맞춰서 위시리스트의 품목을 구입할 수 있게 도와주는 시스템이 있습니다.
가계부의 기본적인 수입지출 관리 측면에서는 일간, 주간, 월간으로 내역을 볼 수 있고, 소비 패턴 분석을 해주는 페이지에서 카테고리별로 금액을 확인할 수도 있습니다.
프리미엄 혜택을 월 2000원에 구독하시면 자산 관리사가 소비 패턴을 분석하여 피드백을 이메일로 알려주는 서비스까지 이용하실 수 있습니다. 추후에는 자산 관리사의 역할을 chatGPT와 같은 인공지능 알고리즘을 이용하여 자동화할 계획을 가지고 있습니다.
백엔드에서 사용한 기술 스택으로 JDK JAVA 11 버전과 SPRING BOOT프레임워크, JPA 라이브러리를 사용하였고, Security는 JWT 토큰을 사용하여 구현했습니다. 데이터베이스는 관계형 DB인 MYSQL을 사용하여, 로그인한 회원의 데이터만 가져올 수 있게끔 사용했습니다.배포는 테스트 단계에서는 NGROK을 사용했고, 데모데이에는 AWS EC2를 사용했습니다. 테스트코드를 작성할때는 Mockito 라이브러리를 사용했고, 협업을 위해서는 JIRA 툴을 사용하여 칸반을 작성하였고, Git은 git flow 브런치전략을 사용하여 작업했습니다.
이번 프로젝트를 하면서 많은 오류를 해결했었는데, 그 중에서 기억나는 오류는 엔티티 구조를 잘못 설계한 탓에 순환 참조가 일어나서 발생한 409 Conflict Error가 있었습니다. 맴버가 거래 내역을 참조하고, 거래 내역이 맴버를 참조하며 데이터가 무한으로 생성되고, 이를 가공하려고 할 때 오류가 발생하는 문제였습니다. JPA를 사용하다보면 한 번쯤 마주치는 문제라는 점을 알고 있었는데 디버거로 잘 잡히지 않아서 찾아내는데 시간이 좀 걸렸습니다. 발견한 이후에는 양방향 매핑을 끊어내고 필드에 memberId 칼럼을 추가하여 조회하는 방식으로 수정하여 해결했습니다.
프로젝트를 완료하고 나니 혼자서 프로그램을 하나 만들어보았다는 경험이 저에게 자신감을 불어넣어주었습니다. 시큐리티에 대해 막연한 두려움이 있었는데 시큐리티 필터들의 역할을 알게되어 원하는 대로 커스터마이징하는 법에 대해 익힐 수 있었고, 클라이언트가 원하는 비즈니스 로직을 만들어내는 것에 익숙해졌습니다. 로그와 디버그를 잘 활용하게 되어 오류들을 해결하는 데 드는 시간을 많이 단축할 수 있었고, cors 에러를 해결한 배포까지 해낼 수 있어서 기쁩니다.
다만 프로젝트 기간내에는 테스트 코드를 작성할 시간이 부족해서 완성하지 못한 점이 아쉬웠고, 그로 인해 Postman으로 테스트하느라 시간을 많이 소비했습니다. 다음프로젝트에서는 TDD개발방법을 도입하여 개발해야겠다는 교훈을 하나 얻었습니다.
이제 프로젝트는 제출했지만 저는 그 이후에도 테스트코드를 치밀하게 작성하여 업데이트하고 있습니다. 테스트코드 작성을 마치면 성능 테스트로 트래픽부하도 걸어보고 속도개선도 해보며 계속 발전시킬 계획입니다.
프로젝트를 하면서 가장 힘든 점은 팀원 중에 실력이 부진한 팀원과 협업하는 것이 어려웠던 점입니다. 팀장으로서 팀원들에게 많은 관심을 가지고 여러 정보들을 알려주고, 질문들에 대한 해답을 같이 찾아주고, 검색하는 방법을 알려주는 등 적극적으로 도움을 드렸지만, 결과적으로 참여도를 높이거나 더 많은 노력을 하게끔 이끌 수는 없었고, 결국 하차 하시게 되어 함께 성과를 만들어내는 데는 실패했습니다. 혼자서 프로젝트를 이끌어가야하는 상황이였는데 내가 실패하면 프로젝트도 실패라는 생각에 부담감을 많이 느끼게 되었습니다. 하지만 그로 인해 더 열심히 하게 되는 원동력을 삼아 백엔드의 모든 개발 과정을 도맡아 해볼 수 있어서 많은 성장을 이룰 수 있었던 것 같습니다. 다음 프로젝트에서는 서로 협업하는 기쁨을 느낄 수 있을 거라고 생각하며 이상 발표를 마칩니다. 지금까지 발표를 들어주셔서 감사합니다.
잘 봤습니다. 좋은 글 감사합니다.