반응형
정보
프로젝트 이름 | Plan + tiful |
기간 | 2023.06.12 ~ 2023.07.17 (약 31일) |
깃허브 링크 | https://github.com/seoyeonDev/Plantiful |
사용한 기술 | Java SpringBoot JPA RestAPI Vue.js ... 자세히 보기 |
서비스 및 주요 기능 소개
첫편이 서비스 개요이다.
내가 맡은 부분: 구독 공유 모집 서비스
위에 소개한 기능중에 내가 맡은 부분은 구독 공유 모집 서비스이다.
구독 서비스
- 구독 서비스 글 등록
- 6개 사이트 중 하나 선택
- 모집 마감일이 min date 설정 (현재 날짜 + 2day)
- 전체 금액 / 모집 인원 입력
- 구독 시작일을 모집 마감일 이후로 선택하도록 설정
- 구독 기간 1개월, 2개월 … 12개월 선택하여 구독 시작일을 기준으로 자동으로 구독 종료일 계산.
- 필수 항목 입력 확인 ( 미입력 시 등록 불가)
- confirm 창을 이용해 동의서 받기
- 모집자(등록자)의 포인트 확인 후 인당 금액(전체 금액/모집 인원) 만큼 포인트 자동 인출
- 등록 이후 파티에 자동 추가
- 구독 공유 시작하기 (모집 글 리스트)
- 모집중인 사이트 별로 검색 기능
- 모집중, 진행중, 종료 된 모집글 분리하여 다른 스타일로 보여줌
- 참여한 인원을 검색해 모집 현황 표시
- 진행상황 자동 갱신 기능
- 현재 날짜와 모집 마감일 비교
- 전체 인원과 현재까지 모집된 인원 비교
- 위 내용들을 비교해 진행중, 종료됨 자동 변경
- 글이 없으면 ‘모집이 없습니다’ 표시
- 구독이 시작하지 않고 종료되면 참여자에게 자동 환불
- 구독이 시작하고 구독 종료일이 지나면 모집자에게 전액 입금
- 글 삭제 시 참여 인원 확인, 본인(1명)이면 삭제가능. 참여자가 있으면 삭제 불가
- 내 구독 목록 보기
- 내가 참여하고 있는 구독 파티 목록 확인 가능
- 구독 파티에 참여하고 있는 다른 참여자 정보 확인 가능
- 구독 정보
- 파티 정보
- 각자 지불한 포인트
- 총 금액
- 인당 금액 등 ...
- 캘린더에 일정 추가하기
- 구독 시작일
- 구독 종료일
- 모집글 제목
협업하는 부분
세미 프로젝트에 이어, 이번에도 내 기능에 추가해야 할 기능이 많아 일정을 조율하며 기능 연결에 신경썼다. 여전히 느끼는 거지만, 협업은 쉽지 않다. 하지만 이전에 비해 더 나아지는 것 같아서 뿌듯하다.
- 캘린더 서비스 ( 구독 서비스 일정 추가 )
- 이건 스케줄 추가하는 메소드를 불러오기만 하면 되는 기능이다. 문제는, '언제'불러와야 하는지 시점을 모르는 것이 문제였다. '진행중'으로 변할 때 스케줄을 추가하면, 계속 스케줄 추가가 될 수도 있었기 때문이다. 첫 한번만 추가하는 기능의 경우, '처음'이라는 기준을 정확하게 입력하기 애매하기 때문에 직접 버튼으로 디테일 페이지에서 추가하는 방식으로 작업했다.
- 포인트 충전 & 환불 서비스 ( 금액 자동 출금/입금 )
- 결제 서비스를 담당한 팀원이 처음 해보는거라 얼마나 걸릴지 모르겠다고 해서 이부분은 제일 뒤로 미뤘다. 특히, 일정 기간이 지나야 하는 서비스 특성 상 테스트가 쉽지 않아 한참 뒤에야 오류를 발견했다. 디버깅 부분에 있어 좀 더 연습이 필요하다고 느꼈다.
- 채팅 서비스 ( 구독 현황이 진행중으로 변경되면 채팅방 생성 )
- 이건 내가 한 부분은 아니고 내가 만들어놓은 것에 채팅 그룹을 생성하는 서비스를 연결하기만 하면 되는 것이었다.
이번 프로젝트로 성장한 점
- 기술적 성장
- restApi, JPA, Vue.js 로 프로젝트를 진행하며 해당 기술들에 대해 이해도가 더 높아졌다. 아직 모든 기능을 아는 것은 아니지만. 적어도 기본 개념은 이해하게 되었다. 400, 500 에러에 대해 어떻게 대처해야하는지도 배웠고. 덜렁거리는 부분이 어딘지도 알게 되었다. Vue.js 는 더 공부해야할 필요성도 느꼈고.
- 프로젝트 시작전에는 내가 어떤 부분을 모르는지 몰랐는데, 프로젝트를 하며 뭘 모르는지 확실히 알겠다.
- computed, component, watch 등 속성에 대해 더 공부할 계획이다.
- 협업 능력 향상
- 협업하는 부분이 이전보다 더 많은 비중을 차지했는데, 상대방의 코드를 주고받으며 어떤 방식으로 코드를 작성해야 원활하게 진행될지에 대해 느꼈다. 주석을 깔끔하게 달아주고, 코드 설명을 간단하지만 분명하게, 변수명도 명확하게 지어야 한다는 것을 느꼈다.
- 변수명에 대해서 최대한 명확하게 작성하고자 항상 노력하는데, 너무 어렵다. 영어 단어로 작성해야하는데 내가 원하고자 하는 느낌을 내는 단어인지도 모르겠고, 이게 잘 전달이 될지도 의문이다.
- 정리하는 능력 향상
- 이번 프로젝트에서 내가 맡은 부분이 복잡했다 보니 기능을 분석하는 기간이 꽤나 길었다. 열심히 오랫동안 생각해도 실제로 구현할 때 예상치 못한 부분이 나타나기도 했다. 어쨌건, 차근차근 어떻게 해야할지 정리하는 능력은 확실히 늘었다. 꼬인 실타래를 푸는 인내심을 기른 느낌이랄까나.
- 내가 코드를 이렇게 이렇게 짜면, 어떤 결과와 문제가 나타날지에 대해서도 깊이 생각하게 되었다. 구독 자동 갱신 서비스의 로직에 대해서도 고민이 많았다. 놓친 부분도 많지만 해결하는 과정에서 논리력이 상승했다
아쉬웠던 점
- CSS 효과를 많이 주지 못한 것
- 스크롤 바를 꾸미고 싶었는데, 막판에 계속 기능에서 에러가 발생해서 수정을 못했다.
- setinterval 기능 대신 Created:function 으로 코드를 짠 것
- Vue.js 기능인 setInterval로 하고자 계획했지만, 얼마나 걸릴지 모르고 테스트를 위해 우선 created function으로 작성했다. 막상 작성하고보니 코드가 굉장히 길어지고 복잡해져 쉽게 setInterval 로 옮기지 못했다. Vue.js가 익숙하지 못해 하나 건들면 다른게 망가지니 쉽게 건들지 못했다.
- 7월 말까지 진행하는 리팩토링에서 업데이트 하고자 한다.
- 포인트가 매달 빠져나가는 기능을 구현하지 못한 것
- 1. 구독 종료일 지나면 포인트 전부 파티 모집자에게 이동
2. 매달 출금되는 포인트를 계산해서 모집자에게 매달 이동
(point_basket/(전체기간/30))해서 시작일에서 한번 빠지고, 시작일 +30마다 돈이 빠져나감. (아마 list의 created:function 에서 진행할 듯) - 첫 기획은 매달 포인트가 빠져나가는 것이었는데, 이걸 중복되지 않게 구현할 방법을 생각해내지 못했다. 만든 코드 상으로 모든 refresh 기능이 boardlist의 created function에 있는데, 2번의 경우 계속 새로고침을 할때마다 출금이 된다. 1번의 경우 예치금이 '0'이라는 기준이 있어 중복 실행을 방지할 수 있었다. 결국 2번으로 진행했는데, 이 부분이 너무 아쉽다. 근데 아직도 어떻게 해야할지 생각해내지 못했다.
- 1. 구독 종료일 지나면 포인트 전부 파티 모집자에게 이동
- 시간 계산에 실패한 것
- 시간을 꽉 채워서 기능을 구현하는 것도 (기능에 욕심을 덜 내서 시간이 남거나, 기능에 너무 욕심을 내서 시간이 너무 타이트하지 않게) 실력이라고 생각하는데, 시간이 내 기준에 많이 남은 것 같아 아쉬웠다.
- 기능 하나를 구현하는데 시간이 얼마나 걸릴지 예상을 못했기 때문에 발생한 문제라고 생각한다. 아직 병아리 개발자라 그런것일까? 이 부분을 극복하려 더 노력해야겠다.
- 우선 메인 기능을 구현하고자 했는데 메인 기능 디버깅이 끝났다고 생각해 새로운 기능을 추가하려고 하면 또 에러가 터져서 새로운 기능을 추가하는데 애를 먹었다. 정작 발표 당일 오전에는 너무 여유로웠다. 이때 새 기능을 추가하기엔 애매하고.. 디버깅만 계속했다.
- 코드 가독성
- 내가 작성한 코드 가독성이 좀 떨어지는 것 같아서 아쉽다. 이번 프로젝트는 기능을 구현하는데 급급했는데, 코드 가독성까지 신경쓰지 못했다. 결과적으로 코드를 다시 보는데 너무 헷갈렸다. 내 코드에 대해 내가 100% 파악한 느낌이 아니었다. 코드 리뷰를 통해 코드를 다시 분석하려고 한다. 그 과정에서 더 깔끔하게 작성하면 좋을 것 같고.
- 사용자를 위한 기능 구현
- flow chart 를 시간 들여서 열심히 작성했는데, 한번 정리하는 역할은 됐지만 잘 활용한 느낌은 아니었다. 구현하다보니 실제 계획과 달라진 부분이 있는데, 이게 내가 편하고자 해서 구현을 변경한 것인지. 실제 사용자를 위한 변경인지 애매하다. 좀 더 사용자 친화적인 개발을 하고자 해야겠다고 다짐했다.
이번 프로젝트 결론
반응형