데브코스를 진행하면서 누군가에게 내가 공부한 내용을 설명 할 때, 내 지식이 더욱 공고해지는 경험을 하게 되었다
다른 사람의 글을 읽고, 소통하는 과정을 통해 내 지식의 공백을 메울 수 있는 경험 또한 하게 되었다
그래서 우리는 이 둘을 한 곳에 아우를 수 있는 서비스를 기획했다
프로젝트 세부 내용
사용자는 30일 동안 매일 리액트 관련 키워드에 대한 질문을 부여받는다. 사용자는 매일 주어진 질문에 대해 스스로 학습해 나가며 나름의 답변을 작성하여 제출한다
또한, SNS 기능을 활용하여, 동일한 키워드를 학습하고 있는 다른 사용자의 답변이 공유되며 '댓글'과 '좋아요'를 통한 소통이 가능하다. 이를 통해 사용자는 해당 키워드에 대한 지식의 완성도를 높일 수 있다
답변 내용이 트리 형태로 저장되어 나만의 리액트리(정리 노트)를 만들 수 있다
서비스타겟층
현재 사용자: 프로그래머스 프롱이 2기~
잠재적 사용자: 리액트를 처음 학습하는 프론트엔드 개발자 준비생
기대효과
사용자는 리액트 관련 키워드에 관한 자기주도적인 학습 경험을 토대로 이후 학습 계획 수립에 도움을 얻을 수 있음
동일 키워드를 학습 중인 사용자들과의 소통을 통해서 지식의 완성도를 높일 수 있음
30일 동안 진행되는 일련의 과제 수행을 통해, 성취감 고취 및 꾸준한 학습 습관 배양
기술 스택
라이브러리: React,
컴포넌트관리: StoryBook
상태 관리: ContextAPI
배포: Netlify
로고
'매일매일 나는 성장 할 수 있어!'
대표 색상
#14bd7e
💾 기능 명세
사용 API 기능 : 인증, 유저, 설정, 채널, 포스트, 좋아요, 댓글
페이지 별 상세 기능 스펙
인트로 페이지
회원 가입 Modal
회원 가입 페이지는 Modal로 구현합니다
이메일, 풀네임, 패스워드를 입력 받습니다
유효성 검사를 진행합니다
이메일 - 정규 표현식을 이용한 검증, 중복 확인
풀네임 - 한글로만 입력 가능, 최소 2자 이상 최대 6자
패스워드 - 정규 표현식을 이용한 검증(영어 대소문자, 숫자, 특수문자), 패스워드 검증
위의 조건 미 충족시 빨간색 글자로 warning 메세지
회원 가입 요청 후 완료 시 완료 메세지(alert)를 띄어줍니다
데이터를 하나라도 입력하지 않은 상태에서 회원가입 요청 시 실패 메세지(alert)를 띄어줍니다
완료 후 로그인 페이지로 이동합니다
이전으로와 x 버튼이 있고, 클릭 시 로그인 Modal로 이동합니다
로그인 Modal
로그인과 회원 가입 버튼이 존재합니다
회원 가입 버튼 클릭 시 회원 가입 Modal로 이동합니다
회원 가입 시 입력한 이메일과 패스워드로 로그인이 가능합니다
로그인이 성공하면 서버로 부터 토큰을 받고 받은 토큰을 로컬 스토리지에 저장합니다
로그인에 성공하면 Welcome Modal로 이동합니다 🥳
웰컴 Modal
웰컴 메세지를 2초간 띄어줍니다
2초후 메인 페이지로 이동합니다
메인 페이지
Header
로고를 클릭하면 메인 페이지로 이동합니다
메뉴 탭(메인, 피드, 마이 트리, 설정)이 존재하며 해당 탭 클릭 시 해당 페이지로 이동이 가능합니다
NavChannel
채널은 1~30개가 존재하며 버튼 컴포넌트로 구성됩니다
각 채널 클릭시 해당 채널의 질문이 보여집니다
사용자별 진도율의 경우 user API의 posts length와 createdAt의 날짜를 이용하여 계산합니다
진도율에 따라 버튼이 열리고, 질문을 확인할 수 있습니다
NavSocial
팔로우한 친구 목록을 볼 수 있습니다
접속 중인 친구의 경우 뱃지로 확인이 가능합니다
친구 추가 버튼이 존재하며, 버튼 클릭 시 Social Modal이 띄어집니다
Social Modal에는 searchbar가 존재하고, 이름으로 검색이 가능합니다
검색한 유저의 팔로우 상태에 따라 팔로우 또는 언팔로우 버튼이 활성화됩니다
Main Contents Container
Question 컴포넌트에는 오늘의 질문이 보여집니다
오늘의 질문 배경은 포스트잇 이미지이고 랜덤으로 불러옵니다
Answer 컴포넌트는 textarea 형태이며, 답변(Post)을 작성할 수 있습니다
제출 버튼을 클릭하여 답변 제출이 가능합니다
답변을 제출하면 제출 버튼은 수정 버튼, textarea는 readonly 상태로 변경됩니다
// 예시
printWidth: 100, // 코드 라인 길이
tabWidth: 2, // 탭 간격, 스페이스 설정 시 2칸 띄어쓰기
singleQuote: true, // '' 작은 따옴표 사용
trailingComma: 'all', // , 자동으로 붙이기
semi: false, // ; 사용 안 함
useTabs: false, // tab키 사용. false 추천 == space 대체
arrowParens: 'always', // (x) => x, x => x로 전자처럼 괄호 유지
endOfLine: 'auto',
bracketSpacing: true, // 대괄호 {} 사이 공백
jsxBracketSameLine: true, // JSX 요소 > 줄바꿈
NavChannel 컴포넌트 내부 질문의 경우, 사용자별 진도율에 따라 버튼의 활성화 여부가 다릅니다
이를 핸들링하기 위해서는 각 유저마다 현재 진도율을 저장하고 불러와야합니다
하지만 현재 유저 속성에는 이러한 정보를 저장할 프로퍼티가 없습니다
따라서 만약 user API에 currentStep이라는 number(1 ~ 30)값 추가가 가능한지 요청드립니다
💡
만약 필드 값 추가가 어려운 경우
→ user API의 posts length와 createdAt의 날짜를 이용하여 사용자별 진도율을 계산하여 사용하려 합니다