Skip to content

Commeci/DEVIEW

 
 

Repository files navigation

DEVIEW

Deview는 개발자, 취준생들을 위한 코드리뷰 웹사이트로, React와 TypeScript를 기반으로 구축된 반응형 웹 애플리케이션입니다.

Production

Deview

Figma

DEV 3차 DEVIEW (Copy)

Deview ReadMe

♻️ 개발 환경

개발 스택

프론트엔드

React TypeScript Vite Zustand Tanstack Query Axios React Router TailwindCSS

백엔드

GitHub - shlee9999/deview-backend: deview 프로젝트의 backend 레포지토리

NodeJS Express MongoDB

협업 도구

Github Projects

인프라 & 도구

배포 환경

Vercel CloudType

디자인 협업

Figma

📃 컨벤션


  • 커밋 컨벤션

    • Feat: 새로운 기능 추가
    • Fix: 버그 수정
    • Docs: 문서 수정
    • Refactor: 코드 리펙토링
    • Chore: 빌드 업무 수정, 패키지 매니저 수정
    • Style : 코드 포맷팅, 세미콜론 누락, 기능 코드 변경이 없는 경우
  • 코드 컨벤션

    1. 컴포넌트

      1. rfc
      2. rfcn
      type ComponentProps = {
        name: string;
      };
      
      export const Component = ({ name }: ComponentProps) => {
        return <div>Component</div>;
      };
    2. hook

      export function useHook(){
      	...
      }
    3. ESLint, Prettier 사용

    4. 상수, 변수 명명 규칙

      1. 버튼
        1. button→btn
      2. 배열
        1. users (s)
        2. user + List(단수명 + List)
    5. 콜백함수 → 화살표

    6. 주석

      1. anchor?

      2. Better Comments vscode 확장

      3. 기본 주석 색상 바꾸기 - settings.json에 다음 추가

         "editor.tokenColorCustomizations": {
            "textMateRules": [
              {
                "scope": ["comment", "comment punctuation.definition.comment"],
                "settings": {
                  "foreground": "#EFDC05",
                  "fontStyle": ""
                }
              }
            ]
          },
    7. 폴더 네이밍

      1. 컴포넌트 파일 명명규칙
      2. 컴포넌트 이외의 파일 명명규칙
      3. 컴포넌트 폴더 - 파스칼
      4. 최상위 폴더 - 카멜
    8. 이벤트핸들러 네이밍

      리셋 버튼

🛠️ 채택한 개발 기술


프론트엔드 핵심 기술

TailwindCSS

  • 직관적인 유틸리티 클래스로 빠른 UI 개발 가능
  • 커스터마이징이 용이하고 번들 사이즈 최적화
  • 반응형 디자인 구현이 편리
  • 컴포넌트 단위의 스타일링으로 재사용성 향상

Zustand

  • 간단하고 직관적인 상태 관리 라이브러리
  • Redux보다 적은 보일러플레이트 코드
  • Flux 패턴을 따르는 예측 가능한 상태 흐름
  • TypeScript 지원이 우수하며 러닝커브가 낮음

데이터 관리

React Query

  • 서버 상태 관리의 효율적 처리
  • 주요 기능:
    • 데이터 캐싱 및 자동 갱신
    • 신선한 데이터 유지(Fresh & Stale)
    • 옵티미스틱 업데이트 지원
    • 무한 스크롤/페이지네이션 구현 용이
    • 백그라운드 데이터 업데이트

개발 환경 경험

  • ESLint & Prettier: 일관된 코드 스타일 유지
  • TypeScript: 타입 안정성 확보
  • Vite: 빠른 개발 서버 및 빌드 성능

🌴 브랜치 전략

GitHub Flow를 채택한 주요 이유와 특징을 체계적으로 설명하겠습니다.

선택 이유

  • 짧은 개발 기간에 최적화된 단순하고 직관적인 워크플로우
  • 신속한 배포와 효율적인 협업

주요 특징

브랜치 구조

  • 단일 메인 브랜치(main)를 중심으로 운영
  • 기능 개발을 위한 피처 브랜치 생성 및 빠른 병합
  • 브랜치 전략이 단순하여 초기 학습 곡선이 낮음

협업 프로세스

  • Pull Request를 통한 코드 리뷰 시스템
  • 자동화된 테스트와 배포 프로세스 지원
  • 지속적인 피드백과 개선이 가능한 구조

장점

  • 유연하고 가벼운 워크플로우
  • 빠른 피드백과 지속적인 개선

🏗️ 프로젝트 구조


  • Front-End
    📦src
     ┣ 📂assets            # 정적 자원
     ┣ 📂components        # 컴포넌트
     ┃ ┣ 📂Common         # 공통 컴포넌트
     ┃ ┣ 📂LoginPage      # 로그인 페이지 관련
     ┃ ┣ 📂MainPage       # 메인 페이지 관련
     ┃ ┣ 📂MyPage         # 마이 페이지 관련
     ┃ ┣ 📂PostCreatePage # 포스트 생성 관련
     ┃ ┣ 📂PostDetailPage # 포스트 상세 관련
     ┃ ┣ 📂PostPage       # 포스트 목록 관련
     ┃ ┣ 📂RankPage       # 랭킹 페이지 관련
     ┃ ┗ 📂RegisterPage   # 회원가입 관련
     ┣ 📂constants         # 상수
     ┣ 📂customTypes      # 타입 정의
     ┣ 📂hooks            # 커스텀 훅
     ┣ 📂pages            # 페이지 컴포넌트
     ┣ 📂services         # API 서비스
     ┃ ┣ 📂auth          # 인증 관련
     ┃ ┣ 📂comment       # 댓글 관련
     ┃ ┣ 📂notification  # 알림 관련
     ┃ ┣ 📂post          # 게시글 관련
     ┃ ┣ 📂report        # 신고 관련
     ┃ ┗ 📂user          # 사용자 관련
     ┣ 📂stores           # 상태 관리
     ┣ 📂utils            # 유틸리티
     ┗ 📜App.tsx          # 앱 진입점
    
  • Back-End
    📦src
     ┣ 📂.vscode
     ┃ ┗ 📜settings.json
     ┣ 📂config
     ┃ ┣ 📜database.js
     ┃ ┣ 📜server.js
     ┃ ┗ 📜socket.js
     ┣ 📂controllers
     ┃ ┣ 📜authController.js
     ┃ ┣ 📜commentController.js
     ┃ ┣ 📜notificationController.js
     ┃ ┣ 📜postController.js
     ┃ ┣ 📜reportController.js
     ┃ ┗ 📜userController.js
     ┣ 📂middleware
     ┃ ┣ 📜authMiddleware.js
     ┃ ┣ 📜commentMiddleware.js
     ┃ ┣ 📜corsMiddleware.js
     ┃ ┣ 📜index.js
     ┃ ┗ 📜postMiddleware.js
     ┣ 📂models
     ┃ ┣ 📜Comment.js
     ┃ ┣ 📜Like.js
     ┃ ┣ 📜Notification.js
     ┃ ┣ 📜Post.js
     ┃ ┣ 📜Report.js
     ┃ ┣ 📜Scrap.js
     ┃ ┣ 📜Thumb.js
     ┃ ┣ 📜User.js
     ┃ ┗ 📜View.js
     ┣ 📂routes
     ┃ ┣ 📜authRoutes.js
     ┃ ┣ 📜commentRoutes.js
     ┃ ┣ 📜index.js
     ┃ ┣ 📜notificationRoutes.js
     ┃ ┣ 📜postRoutes.js
     ┃ ┣ 📜reportRoutes.js
     ┃ ┗ 📜userRoutes.js
     ┣ 📂utils
     ┃ ┗ 📜getPaginated.js
     ┣ 📜.env
     ┣ 📜.gitignore
     ┣ 📜app.js
     ┣ 📜package-lock.json
     ┗ 📜package.json
    

🙋‍♂️ 역할 분담


👩‍💻 민정아 👨‍💻 송웅규 👩‍💻 이가은 👨‍💻 이성훈 👨‍💻 조천산
담당 페이지
- 검색 페이지
- 랭킹 페이지

주요 기능
- 헤더
- 알림
- 검색 및 검색 목록
- 랭킹 목록
담당 페이지
- 메인 페이지
- 게시글 목록
- 유저 게시글 목록

주요 기능
- 반응형 슬라이드 메인배너
- 게시글 리스트 공용 컴포넌트
- 스켈레톤 UI
담당 페이지
- MyPage
- Footer

주요 기능
- UserProfile
- UserPosts
- UserComments
- UserScraps
- UserInfo
- CodeViewer
Front-End
담당 페이지
- 로그인 페이지
- 회원가입 페이지
- 관리자 페이지
- 에러 페이지

Back-End
- 모든 백엔드 전임
담당 페이지
- 게시물 작성 페이지
- 게시물 상세 페이지

주요 기능
- 게시글 CRUD
- 댓글 CRUD
- 무한 스크롤
GitHub GitHub GitHub GitHub GitHub
Gmail Gmail Gmail Gmail Gmail

📅 개발 기간 및 작업 관리


⏰ 개발 기간

  • 전체 개발 기간 : 24/10/22 ~ 24/11/06
  • UI 구현 : 24/10/22~24/10/25
  • 기능 구현 : 24/10/25 ~ 24/11/06

📋 이슈 관리

  • GitHub Projects와 Issues를 사용하여 진행 상황을 공유
  • 버그 리포트, 기능 요청 등 목적에 따른 이슈 템플릿 구성

🧐 신경 쓴 부분


optimistic update

📄 페이지별 기능


[MainPage]

메인페이지1

반응형

스켈레톤

스켈레톤

  • 게시물 조회
    • 배너
      • 가장 조회수가 많은 게시물
      • 오늘 올린 게시물 중 조회수가 가장 많은 게시물
      • 답변의 좋아요가 가장 많이 달린 리뷰어
    • 가장 좋아요가 많이 달린 인기 게시글 3개
    • 답변이 달리지 않은 질문 2개
    • 최신 게시글
    • 에러/로딩 대체 UI

[PostPage]

데모 시연

  • 게시물 리스트 조회
    • 정렬 토글버튼을 통한 인기/최신 게시글 변경
    • 무한스크롤
    • 에러/초기 로딩 대체 UI

[RankPage]

랭킹

  • 유저 랭킹
    • 해당 유저가 단 댓글에 추천수가 많은 순으로 순위 결정
    • 유저 ID, 속한 그룹, 추천수, 게시글 보기
    • 게시글 보기는 해당 유저가 작성한 게시글을 볼 수 있음

[SearchPage]

검색

  • 검색 기능
    • 검색어를 입력하거나 필터를 선택해 검색할 수 있음
    • 필터만 선택 가능하고 최대 3개 선택할 수 있음
    • 검색 목록 클릭하면 해당 PostDetailPage로 이동

[LoginPage]

로그인회원가입

  • 로그인 기능
    • 아이디
    • 비밀번호

[RegisterPage]

  • 회원가입 기능
    • 아이디
    • 비밀번호
    • 이름
    • 그룹

[PostCreatePage]

게시물생성

  • 게시글 작성
    • 게시글 제목
    • 게시글 내용
    • 관련 내용에 대한 언어 및 버전 정보
          • 버튼으로 추가, 삭제
    • 질문하고 싶은 코드 작성
      • Quill 에디터를 이용해 코드의 경우 하이라이팅

[PostDetailPage]

게시글수정삭제

  • 게시글 세부
    • 게시글 제목
    • 작성일, 작성자, 언어 및 버전 정보
    • 내용 및 코드
    • 본인이 작성한 게시글은 수정 및 삭제
    • 게시글에 좋아요, 스크랩, 신고
    • 댓글 기능
    • 댓글 추천 가능
    • 본인이 작성한 댓글 수정 및 삭제

[PostUpdatePage]

  • 게시글 수정
    • 게시글 제목, 내용, 언어 및 버전, 코드 수정

[MyPage]

마이페이지

  • 마이페이지
    • 프로필 (회원가입하면 랜덤 지정)
    • 이름(그룹)
    • 내 게시글 - 내가 작성한 게시글
    • 내 댓글 - 내가 작성한 댓글
    • 스크랩 - 내가 스크랩한 글
    • 내 정보 - 비밀번호 입력 시 내 정보 열람 및 수정

[Alarm]

알림

  • 내 게시물에 댓글 달릴 경우
  • 내 게시물에 추천
  • 신고 5회 이상
  • 삭제 가능, 전체 확인 가능

[ErrorPage]

에러페이지

  • 에러 페이지

🔧 트러블 슈팅


  • React Quill

    • 저장한 데이터를 받아오는 과정에서, 데이터 손실
    • 에디터가 데이터 타입 변환 과정에서 데이터 구조를 바꾸면서 기존 데이터의 손실이 일어남
    • CodeViewer에서 react quill을 read only 로 보여줬으나, 이러한 문제로 react-quill없이 그냥 html 태그로 불러오는 방식으로 변환
      • 이때 highlight.js를 사용해서 highlighter 적용
  • 존재하지 않는 속성에 접근하거나 API가 에러를 반환할 경우 페이지 전체가 다운되는 문제

    • 옵셔널 체인을 통해 존재하지 존재여부를 미리 검사
    • react-error-boundary를 도입해 에러발생 시 fallback 컴포넌트로 대체되도록 변경

Back-End

  • MongoDB 용량 제한 → 이미지 업로드 제한 → boring-avatar 사용하여 DB 차지 X
  • 좋아요, 스크랩만 해도 updatedAt 변경됨 → timestamp: false
  • MongoDB timestamp가 UTC 시간으로만 저장됨 → 모든 스키마의 createdAt, updatedAt의 getter에 moment 라이브러리 사용하여 해결

🎯 개선 목표


  • 소속 기능을 확대 및 세분화
    • 소속 집단 뿐 아니라 소속 회사/학교를 추가
    • ‘블라인드’와 유사한 인증제로 변경
    • 검증된 유명한 회사의 개발자에게 코드리뷰를 받을 수 있는 기회
  • 특정 유저에게 코드리뷰 신청
    • 유명 회사에 소속한 개발자에게 직접 리뷰를 신청할 수 있는 방식
    • 리뷰어 지정시 신청비가 발생 : 기본적으로 리뷰어에게 전달되며 약간의 수수료를 통한 수익구조
  • 업적 시스템
    • 리뷰어의 활동에 따른 업적(미션) 진척도 상승
    • 일정 수치 달성 시 보상을 통해 게시글/댓글에서 자신의 프로필을 장식할 수 있는 뱃지,칭호를 획득가능
    • 뱃지를 통해 간접적으로 리뷰어의 답변 퀄리티와 신뢰도를 알 수 있음
  • 더 세분화된 정렬 및 필터링
  • 더 세분화된 게시글/댓글 평가 기능
  • 게시글 임시 저장
  • 대댓글 기능
  • 오랫동안 답변을 못 받은 게시글을 위한 AI 답변
  • 깃허브 파일링크를 본문에 첨부하면 해당 내용이 코드박스로 보여지는 기능

📝 프로젝트 후기


민정아

React Query 활용에 대해 더 깊이 이해할 수 있었고, 즐거웠습니다!

송웅규

협업 경험을 쌓을 수 있는 좋은 프로젝트였습니다. 지금까지 프로젝트 중 가장 많은 도움이 될 것 같습니다.

이가은

같이 개발하는 동안 너무 재밌었고 많이 배웠습니다! 😄

팀원분들 덕분에 크게 막히는 부분 없이 잘 마무리할 수 있었던 것 같습니다!

이성훈

주로 백엔드를 맡게 되어 모르는 부분이 많았지만 그만큼 많이 공부할 수 있었던 것 같고,

프론트는 팀원분들 모두 열심히 해주셔서 짧은 시간 내에 완성할 수 있었던 것 같습니다!

조천산

팀원들 덕분에 짧은 기간임에도 완성할 수 있었다고 생각합니다.

분위기도 너무 좋았고 즐겁게 개발한다는 것이 어떤 건지 알게된 시간이었습니다!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • TypeScript 97.7%
  • JavaScript 1.3%
  • Other 1.0%