프로젝트 일정
2021년 10월 3일 ~ 10월 28일 약 4주간 4명이 한 팀이 되어 완성했습니다. 첫 일주일간 함께 와이어프레임 작성, 데이터베이스 스키마 작성 등을 했고 약 3주간 개발 및 배포를 진행했습니다.
dagachi
586세대부터 z세대까지 모든 세대가 자신의 고민과 생각을 공유할 수 있는 게시판입니다. 세대간의 갈등은 깊어지고 있지만, 이들이 모여 소통할 수 있는 공간이 없어 만들어보게 되었습니다.
세대는 회원가입 시 입력한 생년월일에 따라 구분됩니다. 예를 들어 출생연도가 97년이라면 z세대로 계산되어 데이터베이스에 저장됩니다. z세대의 유저가 고민 게시물을 업로드할때, 답변자의 희망세대를 선택할 수 있습니다. 또한 타인이 올린 게시물을 답변 희망세대 등으로 필터링해 보고싶은 게시물만 골라볼 수 있습니다.
세대간의 소통을 활발히 할 수 있는 소통의 장을 만들어 세대간 갈등이 아닌 화합을 이끌어낼 수 있는 커뮤니티를 만들어보았습니다.
회원가입
nodemailer
)을 거칩니다. 가입된 이메일은 이미 가입된 계정이 존재한다는 알림이 뜹니다.로그인, 카카오 로그인, 아이디/비밀번호 찾기
게시물 작성/수정/삭제
html-react-parser
를 import해 parse
해주어야함)req.body
에 담아 서버로 보내면 서버에서 데이터베이스에 쿼리를 요청해 데이터베이스를 수정 또는 삭제합니다.게시물 필터링 및 pagination
react-js-pagination
모듈을 사용해 한 페이지에 최대 10개의 게시물이 보이도록 구현했습니다.댓글 작성/수정/삭제
postView()
) 댓글데이터가 저장된 useState를 업데이트해줍니다(setCommentData
). 업데이트된 댓글 정보를 map
메소드를 사용해 렌더링합니다. 댓글 채택
댓글 좋아요
회원탈퇴
마이페이지 유저 정보 수정
서버 api 작성
프로젝트 초반에는 백엔드 부분만 맡아 목업이 완성되는 동안 api를 작성했습니다.mysql
을 사용했습니다.
회원가입
사용가능한 아이디입니다
라는 내용이 뜨고, 중복 데이터가 존재한다면 이미 사용중인 아이디입니다
라는 내용이 뜨도록 삼항 연산자로 구현했습니다. 입력하지 않은 항목이 존재합니다
, 이메일 인증 절차를 진행하세요
등의 알림창이 뜹니다.메일인증
nodemailer
를 사용해 구현했습니다. 이메일을 작성한후 인증번호 전송 버튼을 눌렀을때 해당 이메일로 가입된 데이터가 존재한다면 이미 가입된 이메일 계정입니다
라는 글이 표시됩니다. 가입 가능한 이메일 계정이라면 입력한 이메일로 6자리 인증번호가 전송됩니다. 인증되었습니다
라는 내용이 표시되고, 일치하지 않으면 인증에 실패했습니다
라는 내용이 뜹니다.유저 정보수정
patch
)합니다. 유저 탈퇴
on delete cascade
제약조건을 추가하여 부모 테이블의 데이터를 삭제했을때 fk로 연결된 자식 테이블의 데이터도 자동으로 삭제되도록 했습니다.tech-stack
이번 프로젝트를 진행하며
첫 프로젝트인만큼 완성에 의의를 두고 구현했지만, 좋은 팀원들을 만난 덕분에 끝까지 완성할 수 있었습니다. 서로 겪은 에러를 같이 고민해주면서 팀원의 중요성을 느꼈고, 도움이 되기 위해 더 노력했던 것 같습니다. 처음에는 팀원들 모두 게시판이 간단할 거라고 생각했지만, 데이터베이스 테이블도 6개 이상 필요했고, 페이지도 만들수록 추가되어 복잡했습니다. 데이터베이스를 수정하거나 기존에 작성해놓은 서버 api도 추가, 수정 과정을 거쳤습니다.
이번 프로젝트에서는 초반에는 백엔드 부분을 맡아서 서버 api를 작성했지만 회원가입, 유저정보 수정, 탈퇴 등의 부분은 클라이언트 일부도 맡아 구현했습니다. 프로젝트 중반부터는 모든 팀원이 풀스택으로 참여했는데, 덕분에 웹사이트의 동작과정을 모두 경험해볼 수 있었습니다. 특히 프론트를 하면서는 useEffect, useState, useHistory 등의 리액트 모듈들을 사용하며 데이터의 흐름을 이해할 수 있었습니다.
효율적인 코드를 작성하는데에는 아직 부족함이 있지만, 코드를 작성하고 실행여부를 확인하면서 에러를 해결하는 연습이 도움이 많이 되었습니다. 처음에는 에러를 보면 당황하고 의욕을 잃었는데, 수많은 에러를 겪으면서 해결방법을 찾아 블로그에 기록해두었습니다. 그래서 같은 에러가 발생했을때에는 당황하지 않고 쉽게 해결할 수 있었습니다. 앞으로도 트러블 슈팅을 체계적으로 정리해보려고 합니다.
다음 프로젝트를 위해서
다음 프로젝트에서는 기능별로 나누어 팀원 모두가 풀스택으로 참여하기로 한만큼 제가 맡은 부분을 처음부터 끝까지 다루기 될 예정입니다. 이번 프로젝트에서 다른 팀원들은 여러 라이브러리와 react 모듈을 사용했는데, 그중에서 pagination
과 ck에디터
는 직접 구현한 부분은 아니어서 이해도는 아직 부족하지만 다음 프로젝트 때에는 에디터 부분을 맡아 구현해보려고 합니다. 또한 이번에는 직접 사용하지 않았던 리덕스와 여러 리액트 라이브러리들도 사용해보려고 합니다.
뿌듯하기도 하지만 효율적으로 코드를 작성하지 못한 점과 다른 팀원의 코드를 100% 이해하지 못해 아쉬움이 남습니다. merge
를 하기 전에 코드리뷰를 하는 시간을 갖지 못해 작업하며 코드가 어떻게 변경되었고, 어떤 에러가 있었는지 등을 이야기나누는 시간이 부족했던 것 같습니다. 하루하루 작업량을 공유하는 과정을 다음 프로젝트에서는 가져보려고 합니다.
sql 문법을 배워 사용하고 있지만 아직도 기초적인 단계에 머물러있는 것 같다는 생각이 들었습니다. 그래서 추가적인 강의로 기초를 다져서 효율적으로 sql 쿼리문을 작성하려고 합니다. 배포하는 데에 있어서 aws ec2, cloudfront, s3, rds를 사용했는데 각각의 사용과 흐름을 이해하는 것이 어려웠습니다. 그래서 다음 프로젝트까지는 aws를 추가적으로 공부하려고 합니다.
멋있는 분이시네요 많이 배우고 갑니다