우선 회고에 앞서, 어떤 방식으로 회고를 할지 참고하기 위해 주간 인프런에 적혀있는 KPT 방식을 참고했다.
KPT는 Keep, Problem, Try의 약자로,
- Keep (프로젝트에서 만족했고, 앞으로의 업무에서 지속하고 싶은 부분)
- Problem (프로젝트에서 부정적인 요소로 작용했거나 아쉬웠던 점)
- Try (Problem에 대한 해결 방식으로 다음 프로젝트에서 시도해 볼 점)
에 대해서 작성하는 것이다.
대략적인 프로젝트의 소개를 먼저 하고, 이후에 KPT 양식에 맞춰서 작성할 예정이다.
(첫 블로그 글이라 KPT 방식을 사용하고, 이후에 여러 방식도 사용해 볼 것이다)
프로젝트 소개
데이터베이스 전공 수업의 캡스톤 디자인에서 진행한 프로젝트로, DB를 이용한 응용 프로그램을 작성하는 과제였다.
개발 기간
2023.10.20 ~ 2023.11.20
개발 환경
FE : HTML, CSS, JavaScript(Vue)
BE : Node.js, Express.js
DB: MYSQL
버전 관리 및 협업도구 : Git & Github
기능 / 순서도
- 로그인 페이지
- 로그인 기능
- 아이디와 비밀번호를 통해 로그인 가능
- 로그인 검증 기능
- 아이디 3자 이상, 비밀번호 3자 이상, 닉네임 2자 이상인지, null값은 아닌지 검증
- 로그인 기능
- 회원가입 기능
- 회원가입 기능
- 아이디, 비밀번호, 닉네임을 입력하여 검증 시작
- 회원가입 검증 통과하면 데이터베이스에 등록
- 회원가입 검증 기능
- 아이디 중복 확인
- 아이디 3자 이상, 비밀번호 3자 이상, 닉네임 2자 이상인지, null값은 아닌지 검증
- 회원가입 기능
- todolist 기능
- 삽입
- todo 추가시 중요도 순위도 함께 부여
- 삭제
- 개별 삭제, 전체 삭제(RESET)
- 수정
- 할 일의 내용, 상태 여부를 변경할 수 있다.
- 조회
- 로그인 상태인 경우 항상 가장 최근의 todo상태를 갱신해 출력
- 정렬 기능
- 중요도 순위에 따라 정렬
- 상태(할 일, 하고 있는 일, 한 일)에 따라 정렬
- 삽입
- 회원정보 기능
- 닉네임 수정
- 비밀번호 수정
- 로그아웃
DB
ERD
TABLE 소개
user 테이블
- id: user 테이블의 attribute중 primary key / Not Null, Auto Increment
- userid: 로그인할 때 사용하는 아이디 / Not Null, Unique
- userpw: 로그인할 때 사용한 비밀번호 / Not Null
- nickname: 로그인 후 소개 페이지에 출력되는 닉네임 / Not Null
todos 테이블
- id: todos 테이블의 attribute 중 primary key / Not Null, Auto Increment
- userid: user의 외래키 참조하는 attribute로, todo를 저장하는 아이디 / Not Null, Unique
- content: todo의 내용 / Not Null
- status: 할 일(1), 하고 있는 일(2), 한 일(3)을 구분 / Not Null, Default 값: 1
- rank: 중요도 순위를 구분 / Not Null
Keep, Problem, try
keep
- 화면 및 기능 구현, 서버에서부터 데이터베이스까지 대략적인 과정을 이해했다.
- 이번 학기부터 소프트웨어학과를 복수전공을 시작하면서, 제대로 개발을 시작한 지 한 달 반정도 지난 시점이었는데 서버와 데이터베이스와 UI/UX와 기능 구현을 제한된 시간 안에 구현하면서 많은 것을 배웠다.
- 내 상황과 수준을 정확히 파악하고 계획을 짜서 결국 성공적으로 프로젝트를 완수했다.
- 'DB를 이용한 응용프로그램 제작' 이라는 넓은 의미를 가진 주제의 캡스톤 디자인 프로젝트였지만, 중간고사 끝나고 기말고사 2주 전까지의 약 한 달이라는 시간 내에 구현해야 했다.
- 다른 팀들은 좀 더 어려운 주제의 프로그램을 도전했지만, 기간 내에 구현하기에는 실력과 시간이 모두 부족해 실패한 경우가 많았다.
- 1학기에 Js를 이용해 약간의 공부를 해본 것이 전부였던 나에게 거의 제대로 된 프로젝트는 처음이었기에, 레퍼런스가 많아 공부할 게 많으면서, 기본적으로 모든 crud를 구현할 수 있는 todolist 프로젝트를 계획했고 매일 새벽까지 했지만 결국 기간 내에 프로젝트를 완성했다.
- 제대로 프로젝트를 완성한 경험에서 오는 자신감이 엄청나다는 것을 배웠다.
- 어떤 프로젝트를 주어지더라도, 시간의 문제일 뿐 언젠가 해결할 수 있겠다는 생각이 들었다.
problem
- 협업
- 나도 풀스택을 사용하는 과정에 아직 미숙하다 보니, 팀원에게 맡길 부분과 내가 할 부분을 잘 배분하지 못하였다.
- 그래서 거의 모든 부분을 내가 도맡아 하다보니 새벽 3~4시까지 개발하고 아침 일찍 전공 수업 가는 일정을 몇 주간 반복하느라 굉장히 지쳤다
- 구현
- 페이지 별로 구현해서 사용
- 페이지 이동을 페이지를 전부 출력한 상태에서, 상태 값에 따라 화면에 출력되고 사라지는 것으로 구현
- 뷰 2 api를 사용
- 로그인 기능 구현시 express-session에 대해서 완벽히 이해하지 못하고 구현
- 페이지 별로 구현해서 사용
- 기록
- 당시에 시간과 실력이 부족했기 때문에 하루하루 배우고 구현하는데 급해서, 기록의 중요성에 대해 알면서도 제대로 하지 못했다.
- 데이터베이스 구성에 대해서만 배우고 프로젝트를 시작했기 때문에, 종강할 때까지 지나고 나니 알게된 정석적인 데이터베이스 설계대로 구현하지 못함
try
- 팀원과 나의 리소스를 정확하게 파악하고, 협업 관련해서 많은 소통을 할 것
- 외래 키로 보통 PK를 사용
- 컴포넌트 단위로 나누어서 구현 (아토믹 디자인패턴 참고)
- 뷰 라우터를 통해서 관리
- 뷰 3 컴포지션 api를 사용
- express-session에 대해서 좀 더 배우기
- mevn 책과 공식문서를 통해서 배우고 블로그에 이에 대해 정리할 예정
- 좀 더 복잡한 테이블을 사용할 수 있는 주제로, 요건분석 - 개념적 - 논리적 - 물리적 - 정규화 과정을 거치는 개발을 해봐야겠다.
- 다음에는 일정을 좀 더 잘 배분하고 시간이 부족하더라도 오늘 생긴 문제 - 어떻게 해결했는지에 대해서 간략하게 정리해야겠다.
깃허브
참고사이트