React - 여행 컨셉의 뉴스피드(블로그 플랫폼) 만들기
프로젝트명 : Travel Vibe
개발 기간 : 2024.02.07 ~ 2024.02.14 (설연휴 제외 4일간)
프로젝트 소개 : 여행 컨셉의 블로그 플랫폼으로 각 카테고리에 따라 여행에 관련된 글을 쓰고, 공유할 수 있는 블로그 플랫폼 입니다.
주요 기능 : 로그인, 회원가입, 회원정보 수정, 게시글 CRUD, 내 게시글 모아보기
신서연 | 유한빈 | 김승희 | 곽인해 | 서지원 |
---|---|---|---|---|
@seoyeon-1206 | @picoloman6 | @HuaHuaChiChi | @innes-k | @seopport |
리더 | 팀원 | 팀원 | 팀원 | 팀원 |
마이페이지 | 게시물 페이지 , redux, firebase, 배포 | 게시물 작성, Storage | 로그인 및 회원가입 모달, Authentication | 메인페이지, 게시물 관리 페이지 |
1. git clone
$ git clone https://github.com/picoloman6/nbc_travel_vibe.git
$ cd nbc_travel_vibe
2. Firebase 환경변수 설정
3. npm start
npm i
npm start
메인페이지
로그인 모달
회원가입 모달
회원가입
로그인, 회원가입 기술 환경 : firebase authentication
- 로그인이 되지 않았을 때는 Post와 My Blog 기능을 사용할 수 없습니다.
- 로그인 했을 시에는 로그아웃 버튼을 눌러 로그아웃할 수 있습니다.
1.2. 카테고리 탭
1.3. 게시글 프리뷰
6.1. 기술적 어려움
6.2. 기술 이외의 어려움
6.3. 배운점
에러 메시지 : FirebaseError: Expected first argument to collection() to be a CollectionReference
원인 : collection을 참조하면서 where함수를 따로 호출하면서 생긴 오류
const usersRef = (collection(db, 'users'), where('email', '==', email));
해결 : Firestore에서 쿼리를 생성할 때, collection() 함수와 where() 함수를 따로 호출하는 대신 query() 함수를 사용하여 컬렉션과 쿼리를 동시에 정의해야 함
const usersRef = query(
collection(db, 'users'),
where('email', '==', email)
);
시도 :
isActive props를 넘겨줄 때 path 비교 로직 추가하기
opacity: ${(props) => props.$isActive ? '100%' : '50%'};
$isActive prop을 받아와서 isActive 상태로 스타일을 제어하려고 했으나, opacity가 계속해서 100%로 적용되었습니다.
$isActive={pathName==='/경로'}
이 경우 useLocation으로 path를 받아와서 NavLink isActive props에 현재 path와 비교하는 로직을 추가하여 해결할 수 있었습니다.
클래스 선택자 사용하기
props를 넘겨받는 방식이 아닌 .active 클래스 선택자를 사용하여 스타일을 변경하도록 하니 정상 작동하였습니다.
&.active {
opacity: 100%;
}
해결방안: Navlink에 $isActive prop을 넘겨주는 대신에 &.active 선택자를 사용하여 스타일을 지정하는 방법으로 문제를 해결했습니다. Navlink가 활성 상태일 때 자동으로 '.active' 클래스를 부여하므로, isActive prop을 따로 제어할 필요가 없었습니다. 이 방법을 통해 active 상태에 따라 스타일을 지정할 수 있었습니다.
초기 세팅의 중요성
: 협업에서는 모두가 같은 환경에서 작업하는 것이 중요하기 때문에 프로젝트를 시작하기 전에 CRA로 생성할지 Vite으로 생성할지 등의 작업 환경부터 해서, 폴더구조는 어떻게 할 것인지, 변수명은 어떻게 정할 것인지, 데이터 구조는 어떻게 구성할 것인지(DB ERD
) 등 함께 규칙을 정하는 시간을 가졌는데, 프로젝트가 진행되면 될수록 그 시간이 매우 중요했다는 것이 와닿았습니다.
dead line의 중요성
: 맡은 부분을 시간 내에 구현하는 것의 중요성을 느꼈습니다. 협업 특성 상 맡은 부분을 기한 내에 끝내지 못하면 다른 팀원들에게도 피해가 가기 때문에 기한 내에 맡은 부분을 완성하는 것이 협업에서는 특히 더 중요하다는 것을 느꼈습니다.
유지보수의 어려움
: 한가지 기능을 여러명이 동시에 사용하는 경우 유지보수가 어렵다는 것을 느꼈습니다. 본인이 사용하지 않는 부분이더라도 다른 팀원이 사용중일 수 있기 때문에 협업에서는 데이터의 수정과 삭제에 특히 더 신경써야한다는 점을 깨달았습니다.