Skip to content

책으로 소통하는 SNS형 오픈 마켓 팀 프로젝트

License

Notifications You must be signed in to change notification settings

love-work-club/README

Repository files navigation

📚 프로젝트 소개

"내 이야기 좀 들어봐. 그리고 나를 읽어봐."

  • 책으로 소통하는 SNS형 오픈 마켓 서비스 READ.ME 입니다.
  • READ.ME는 읽은 책의 내용을 SNS 형식으로 공유하며, 읽은 책에 대하여 교환 / 판매할 수 있는 서비스입니다.
  • 상품을 등록하지 않아도 게시물에 글과 사진을 통해 자신의 일상을 공유하며 즐거운 SNS 활동을 할 수 있습니다.

🗓 일정

기간 : 2022. 12. 09.(금) ~ 2023. 01. 04.(수)

주간 회의 진행 및 데일리 스크럼 진행 🔗회의록


👨‍👩‍👧‍👧 팀원

FE 김민지 FE 박태원 FE 백승지 FE 이시현
minji_profile_img taewon_profile_img baeggoose_jeon_profile_img sihyeon_profile_img
GitHub: minzyee GitHub: taewonnn GitHub: baeggoose GitHub: hey210056

🔍 담당

  • UI : Splash, 상단 내비게이션, 프로필 셋팅 및 수정, 모달, 검색 페이지
  • 기능 : 회원가입 및 프로필 셋팅, 프로필 수정, 검색 기능
  • 디자인 담당, 프로젝트 아이디어
  • UI : 회원가입 페이지 / BottomNavBar / Input,Label / Profile
  • 기능 : 프로필 페이지(상대방 프로필 / 나의 프로필), 팔로우 / 팔로잉 목록 페이지, 팔로우 / 팔로우 기능
  • 회의록 담당
  • UI : 채팅 / 채팅룸 페이지
  • 기능 : 상품 등록 페이지
  • 디자인 기획, 회의록 담당
  • UI : 피드, 게시글, Splash, modal, 댓글, 버튼
  • 기능 : Splash, 로그인, 홈 피드, 상세 게시글, 댓글, 모달 창 페이지
  • 기능 구현 담당, ContextAPI / ESLint, Prettier

🚩 프로젝트 목표

  • 리액트를 접해보며 익숙해지기
  • 내 손으로 돌아가는 코드 만들어보기
  • 익숙치 않았던 깃허브를 Git-flow 전략을 도입하여 협업을 경험하기

🛠️ 기술 스택 & 협업 전략

✨ 기술 스택

Front-End

React Styled-Component JavaScript HTML/CSS

Back-End

제공된 API 사용

협업 관리

Git Github Github Issues Notion Figma


✨ 협업 전략

Git-flow


esLint와 Prettier

  • 각자 다른 코딩 스타일로 인하여 일관적인 코드 작성을 위해 eslint, prettier를 적용했습니다.

✨ 깃 커밋 / 코드 컨벤션

커밋 컨벤션

Label Description
Feat 새로운 기능을 추가할 경우
Add 코드 추가 (어떠한 기능 내에 기능을 더 추가할 때)
Modify 코드 수정 (버그 수정, 코드 지우고, 추가하고, 수정하는 모든 과정들
Docs 문서를 수정한 경우
Rename 파일 혹은 폴더명을 수정하거나 옮기는 작업만 하는 경우
Remove 파일을 삭제하는 작업만 수행하는 경우
Design CSS 등 사용자 UI 디자인을 변경할 경우
!HOTFIX 급하게 치명적인 버그를 고친 경우
Style 코드 포맷 변경, 세미 콜론 누락, 코드 수정이 없는 경우
Refactor 코드 리팩토링
Comment 필요한 주석 추가 및 변경

코드 컨벤션

  • Camel case로 작성한다.
  • rfc 자동완성을 이용하여 작성한다.

🔍 기능 및 UI

splash 로그인
회원가입 프로필 설정
홈 피드 검색
게시물 등록 게시물 상세
나의 프로필 상대 프로필
사용자 프로필 수정 팔로우/언팔로우
채팅방 로그아웃
404페이지

💍 핵심 코드

  • formik이나 react-hook-form 라이브러리 대신 유효성 검사 커스텀 훅을 만들어서 재사용성을 높였습니다.
  • 사용된 곳: 이메일 로그인 / 회원가입 / 프로필 셋팅 페이지
// useInput.jsx
const useInput = validator => {
    const [enteredValue, setEnteredValue] = useState('');
    const [isTouched, setIsTouched] = useState(false);

    const valueIsValid = validator(enteredValue);
    const hasError = !valueIsValid && isTouched;

    const changeHandler = e => {
        setEnteredValue(e.target.value);
    };

    const blurHandler = e => {
        setIsTouched(true);
    };

    const reset = () => {
        setEnteredValue('');
        setIsTouched(false);
    };

    return {
        value: enteredValue,
        isValid: valueIsValid,
        hasError,
        changeHandler,
        blurHandler,
        reset,
    };
};
// EmailLogin.jsx
    const emailRegex =
        /^(([^<>()\[\].,;:\s@"]+(\.[^<>()\[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i;

    const {
        value: enteredEmail,
        isValid: entredEmailIsValid,
        changeHandler: emailChangeHandler,
        blurHandler: emailBlurHandler,
        reset: resetEmailInput,
    } = useInput(value => emailRegex.test(value));

  • API 통신 커스텀 훅을 만들어서 재사용성을 높였습니다.
// useApi.jsx
const useAxios = ({ method, url, headers = null, body = null }) => {
    const [response, setResponse] = useState(null);
    const [error, setError] = useState('');
    const navigate = useNavigate();

    const ResData = useCallback(async () => {
        await axios({
            method: method,
            url: url,
            data: body,
            headers: headers,
        })
            .then(res => {
                setResponse(res.data);
            })
            .catch(err => {
                navigate('/notfound');
                setError(err);
            });
    }, [body]);

    return { ResData, response, error };
};
    // EmailLogin.jsx
    const { ResData, response, error } = useAxios({
        method: 'post',
        url: `${process.env.REACT_APP_BASE_URL}/user/login`,
        body: user,
        headers: {
            'Content-type': 'application/json',
        },
    });
    
        const formSubmitHandler = e => {
        e.preventDefault();
        
        ResData();
        }

📂 폴더 구조

📦src
 ┣ 📂assets
 ┣ 📂commons
 ┃ ┗ 📂style
 ┃ ┃ ┗ 📂themes
 ┣ 📂components
 ┃ ┣ 📂atoms
 ┃ ┃ ┣ 📂Alert
 ┃ ┃ ┣ 📂BackBtn
 ┃ ┃ ┣ 📂BottomNavBarItem
 ┃ ┃ ┣ 📂BottomNavBarWrap
 ┃ ┃ ┣ 📂Button
 ┃ ┃ ┣ 📂Chat
 ┃ ┃ ┣ 📂FeedList
 ┃ ┃ ┣ 📂FeedPhoto
 ┃ ┃ ┣ 📂Home
 ┃ ┃ ┣ 📂Input
 ┃ ┃ ┣ 📂Label
 ┃ ┃ ┣ 📂OptionBtn
 ┃ ┃ ┣ 📂PostModal
 ┃ ┃ ┣ 📂Profile
 ┃ ┃ ┣ 📂TopNavBarWrap
 ┃ ┃ ┣ 📂Upload
 ┃ ┃ ┣ 📂UserList
 ┃ ┃ ┗ 📂UserListItem
 ┃ ┣ 📂molecules
 ┃ ┃ ┣ 📂BottomNavBarBasic
 ┃ ┃ ┣ 📂ButtonGroupMy
 ┃ ┃ ┣ 📂ButtonGroupYour
 ┃ ┃ ┣ 📂Comment
 ┃ ┃ ┣ 📂Empty
 ┃ ┃ ┣ 📂FollowCount
 ┃ ┃ ┣ 📂LabeledInput
 ┃ ┃ ┣ 📂PostImg
 ┃ ┃ ┣ 📂Posts
 ┃ ┃ ┣ 📂ProductItem
 ┃ ┃ ┣ 📂ProfileDsc
 ┃ ┃ ┣ 📂ProfileImg
 ┃ ┃ ┣ 📂SearchUserList
 ┃ ┃ ┣ 📂SearchUserListItem
 ┃ ┃ ┣ 📂TopNavBarBasic
 ┃ ┃ ┣ 📂TopNavBarFeedSearch
 ┃ ┃ ┣ 📂TopNavBarFeedTitle
 ┃ ┃ ┣ 📂TopNavBarFollow
 ┃ ┃ ┣ 📂TopNavBarSave
 ┃ ┃ ┣ 📂TopNavBarUserSearch
 ┃ ┃ ┗ 📂TopNavBarView
 ┃ ┣ 📂organisms
 ┃ ┃ ┣ 📂InitHomeFeed
 ┃ ┃ ┣ 📂PostList
 ┃ ┃ ┣ 📂Profile
 ┃ ┃ ┃ ┣ 📂MyProfile
 ┃ ┃ ┃ ┗ 📂YourProfile
 ┃ ┃ ┣ 📂Sale
 ┃ ┗ ┗ 📂SearchUser
 ┣ 📂config
 ┣ 📂hooks
 ┣ 📂pages
 ┃ ┣ 📂AddProduct
 ┃ ┣ 📂Chat
 ┃ ┣ 📂DetailPosts
 ┃ ┣ 📂EmailLogin
 ┃ ┣ 📂Followers
 ┃ ┣ 📂Followings
 ┃ ┣ 📂Home
 ┃ ┣ 📂Join
 ┃ ┣ 📂Login
 ┃ ┣ 📂ModifyProfile
 ┃ ┣ 📂NotFound
 ┃ ┣ 📂Profile
 ┃ ┃ ┣ 📂MyProfile
 ┃ ┃ ┗ 📂YourProfile
 ┃ ┣ 📂Search
 ┃ ┣ 📂Splash
 ┃ ┣ 📂Upload
 ┃ ┗ 📜Pages.js
 ┣ 📂store
 ┣ 📜App.js
 ┗ 📜index.js

🏞️ 느낀점

이름 느낀점
김민지 이번 프로젝트에서 협업을 경험하며 느낀 점이 정말 많았습니다. 초기 설정부터해서 구체적인 기획 단계와 문서화, 그리고 폴더구조와 네이밍, 팀원 간의 소통과 코드리뷰 등등 작고 사소한 조각들이 모여서 결국은 하나의 커다란 퍼즐과도 같은 그림이 될 수 있다는 것을 프로젝트를 통해서 경험했습니다. 이번 프로젝트 경험을 발판 삼아 다음 번에는 좀더 견고하게 서비스를 준비해봐야겠다고 느꼈습니다. 어려울 때마다 도와주신 팀원과 동기분들 그리고 멘토님들 정말 감사합니다☘️
박태원 js / react 모두 처음 배운 상태에서 팀원과 함께 진행하는 프로젝트에 부담감도 많았습니다. 하지만 혼자 이론 공부 할 때 보다 잘 모르더라도 직접 코드 한 줄 한 줄 작성해 나가면서 어느 파트를 공부하면 되는지 알게 되었고, 공부한 것을 바로 적용해 나가며 기대 이상의 성장을 할 수 있는 기회가 된 것 같습니다. 그리고 팀원들이 작성한 코드를 많이 보며 많이 배울 수 있는 계기가 되었습니다. 짧은 기간동안 완성을 위해 달려온 팀원에게 정말 감사합니다.
백승지 리액트를 잘 모르는 채로 작업하다보니까 어려움이 많았고, 때문에 프로젝트 기여도가 낮아서 많이 아쉬웠습니다 또 협업에 있어서는 하드스킬 뿐만아니라 소프트 스킬도 중요함을 느꼈고 이렇게 팀프로젝트를 해본것만으로도 좋은 경험이었다고 생각합니다
이시현 프로젝트 하면서 협업 하는 법을 배울 수 있었고 실력적으로도 많이 성장 할 수 있어서 좋았습니다. 1차적인 목표를 완성 할 수 있어서 만족스러웠습니다. 다만, 라이브러리 사용에 적극적이지 않아 아쉬움이 남습니다. 추후 리팩토링 단계에서는 라이브러리도 한 번 도입해보는 등 좀 더 완성도 있는 결과물을 만들 수 있게 노력해보겠습니다.

About

책으로 소통하는 SNS형 오픈 마켓 팀 프로젝트

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •