Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Y_FE_Toy1_Team11 : YANOLJA TECH SCHOOL 위키 서비스 #2

Open
wants to merge 336 commits into
base: main
Choose a base branch
from

Conversation

turkey-kim
Copy link

@turkey-kim turkey-kim commented Sep 22, 2023

야놀자 Tech School Wiki



wiki 배포 레포

🧑🏻‍💻 프로젝트 소개

Toy Project로 제작된 Yanolja Tech School Wiki야놀자 테크 스쿨에 대한 다양한 정보를 담고 있는 Wiki 웹 사이트입니다.

[필수 구현사항]

✅ 문서편집, revision 기능을 제공하여 업무일지를 작성할 수 있는 직원들을 위한 위키사이트 구현(마크다운 형식)
✅ firebase database (Firestore) 이용
✅ 모달을 활용한 근무 시간을 표시하는 시계 및 타이머 창 구현
✅ 캐러셀을 활용한 회사 공지 페이지
갤러리 페이지 / 업무일지 페이지 등 메뉴를 필터링 또는 카테고리화 하는 선택바 구현
✅ netlify 등을 이용한 정적 페이지 배포 (firebase + github actions)
✅ TypeScript 사용 필수
✅ 과제에 대한 설명을 포함한 README.md 파일 작성
✅ 팀원별로 구현한 부분 소개

[선택 구현사항]

✅ React 사용은 선택
✅ 기타 동작이 완료되기 전에 로딩 애니메이션 구현
✅ 관련된 기타 기능도 고려 (공부 시간 랭킹 구현)
✅ eslint 설정, 커밋컨벤션, 문서화 등 팀프로젝트시 필요한 추가 작업들

야놀자 테크 캠프 토이 프로젝트 설명

📅 직원들을 위한 위키 사이트

직원들을 위한 위키 사이트를 만들어보세요!
위키 사이트에는 위키 뿐 아니라 여러 기능이 추가되어야 합니다!

[과제 수행 및 제출 방법]

  1. 현재 저장소를 로컬에 클론(Clone)합니다.
  2. 자신의 팀명으로 브랜치를 생성합니다.(구분 가능하도록 팀명을 꼭 파스칼케이스로 표시하세요, git branch Y_FE_Toy1_Team13)
  3. 자신의 팀명 브랜치에서 과제를 수행합니다.
  4. 과제 수행이 완료되면, 자신의 팀명 브랜치를 원격 저장소에 푸시(Push)합니다.(main 브랜치에 푸시하지 않도록 꼭 주의하세요, git push origin Y_FE_Toy1_Team13)
  5. 저장소에서 main 브랜치를 대상으로 Pull Request 생성하면, 과제 제출이 완료됩니다!(E.g, main <== Y_FE_Toy1_Team13)
  6. Pull Request 링크를 LMS로도 제출해 주셔야 합니다.
  7. main 혹은 다른 사람의 브랜치로 절대 병합하지 않도록 주의하세요!
  8. Pull Request에서 보이는 설명을 다른 사람들이 이해하기 쉽도록 꼼꼼하게 작성하세요!
  9. Pull Request에서 과제 제출 후 절대 병합(Merge)하지 않도록 주의하세요!
  10. 과제 수행 및 제출 과정에서 문제가 발생한 경우, 바로 담당 멘토나 강사님께 얘기하세요!

[필수 구현사항]

[ ] 문서편집, revision 기능을 제공하여 업무일지를 작성할 수 있는 직원들을 위한 위키사이트 구현(마크다운 형식)
[ ] firebase database (Firestore) 이용
[ ] 모달을 활용한 근무 시간을 표시하는 시계 및 타이머 창 구현
[ ] 캐러셀을 활용한 회사 공지 페이지
[ ] 갤러리 페이지 / 업무일지 페이지 등 메뉴를 필터링 또는 카테고리화 하는 선택바 구현
[ ] netlify 등을 이용한 정적 페이지 배포
[ ] TypeScript 사용 필수
[ ] 과제에 대한 설명을 포함한 README.md 파일 작성
[ ] 팀원별로 구현한 부분 소개

[선택 구현사항]

[ ] React 사용은 선택
[ ] 기타 동작이 완료되기 전에 로딩 애니메이션 구현
[ ] 페이지네이션
[ ] 관련된 기타 기능도 고려
[ ] eslint 설정, 커밋컨벤션, 문서화 등 팀프로젝트시 필요한 추가 작업들


🧑🏻‍💻 Contributor

@jinuk0316 (이진욱) : Layout, Carousel
@turkey-kim (김특희) : Layout, Ranking
@JitHoon (최지훈) : Firebase, Wiki
@yangjaehyuk (양재혁) : Firebase, Gallery
@suyeonnnnnnn (박수연) : Firebase, Timer


🧑🏻‍💻 기술 스택

Enviroment & Config

Development & FrontEnd

Deploy

Communication


🧑🏻‍💻 Script

Development Mode

$ git clone https://github.com/turkey-kim/techschool_wiki.git
$ nvm install v18.16.1
$ nvm use 18.16.1
$ npm ci
$ npm run start

🧑🏻‍💻 디자인


1. Userflow

유저플로우


2. 아키텍쳐 파악

클라이언트-서버


3. 파일 구조

# CRA 사용

my-wiki-app/
├── src/
│   ├── assets/         # 폰트, 이미지, 아이콘
|   |    ├── fonts/
|   |    ├── icons/
|   |    └── images/
|   |   
│   ├── components/      # 리액트 컴포넌트
│   │    ├── Home/
│   │    ├── Timer/
│   │    ├── Wiki/
│   │    ├── Gallery/
|   |    |   .
|   |    |   .
|   |    |   .
│   │    ├── Header.tsx
│   │    └── Footer.tsx
│   │ 
|   ├── hooks/           # 커스텀 hook
│   ├── pages/           # 라우터
│   ├── styles/          # css styles
│   ├── types/           # typescripts interface
│   ├── utils/           # db, storagae
│   │ 
│   ├── App.tsx
│   └── index.tsx
│
├── public/
├── node_modules/
├── package.json
├── tsconfig.json
├── .eslintrc.json
├── README.md
└── ...

🧑🏻‍💻 화면 구성

Carousel

캐러셀

Wiki

위키1
위키2

Gallery

갤러리1
갤러리2

Timer + Ranking

타이머


🧑🏻‍💻 팀 소개

최지훈 박수연 프로필 김특희 프로필 이진욱 프로필 양재혁 프로필 구영표 멘토님
최지훈
Frontend
박수연
Frontend
김특희
Frontend
이진욱
Frontend
양재혁
Frontend
구영표 멘토님
멘토링

🧑🏻‍💻 개발 기간 : 2주 23.09.11 ~ 23.09.22

JitHoon and others added 30 commits September 14, 2023 17:57
feat: slide추가, fix: footer수정
Feat/wiki: 마크다운 구현 및 기타 수정 사항 반영
Feat/timer: 타이머 모달 팝업 구현 (인터페이스 분리)
Feat/gallery: 업로드 모달창 구현 및 삭제 모달창 구현, 파이어스토어 사진 불러오기 기능 에러 해결, 파이어스토어 사진 업로드 기능 구현
config: rehype-raw, remark-gfm 플러그인 설치
refact: clock.tsx, Header.tsx, Carousel.css
2YH02 added a commit that referenced this pull request Sep 22, 2023
Env: Update PR template
wowba added a commit that referenced this pull request Sep 22, 2023
Feat: 로그인 페이지 라우터 추가
noSPkeepgoing added a commit that referenced this pull request Sep 22, 2023
회원가입 새로운 유저 인증 생성
NamgungJongMin added a commit that referenced this pull request Sep 22, 2023
Sinary00 pushed a commit that referenced this pull request Sep 22, 2023
공통 요소를 수정한다.
im-na0 pushed a commit that referenced this pull request Sep 22, 2023
Feat: Wiki 페이지 마크업
TaePoong719 pushed a commit that referenced this pull request Sep 22, 2023
TaePoong719 pushed a commit that referenced this pull request Sep 22, 2023
Copy link
Member

@marshallku marshallku left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생 많으셨습니다!

  • 컨벤션 정비 및 미흡한 컨벤션 추가
  • 폴더 규칙 정리(컴포넌트가 아닌 파일이 components에 많이 들어있음)
  • 컴포넌트 간 상태 주고받는 방법 탐색
  • 런타임 에러 방지
  • 과도한 local storage 사용 자제

다음 프로젝트 전에 위 사항들을 확인해보시면 좋을 것 같습니다.

중복되는 리뷰는 생략했으니, 본인 코드가 아니더라도 확인해주시면 감사하겠습니다!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CODEOWNERS syntax 참고하셔서 문법 수정하셔야할 것 같습니다!

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CODEOWNERS 사용법을 잘못 이해했던 것 같습니다..!
멘토님께서 주신 syntax 참고하여 수정해 보았습니다.

turkey-kim/techschool_wiki@15d6bb6

Comment on lines +21 to +25
- uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_TECHSCHOOL_WIKI }}"
projectId: techschool-wiki
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

멘토링 때 말씀드렸듯, 이 영역은 제거되는 게 어떨까 합니다.
PR을 생성하자마자 운영 서버로 배포가 이뤄지고 있는데, 이러면 운영 환경에 잘못된 코드가 배포될 확률이 아주 높아집니다.

개발 환경을 따로 구성하여 그 곳에 배포하거나, 코드 유효성 검사 정도만 진행하는 게 어떨까 합니다.

  • Unit test 수행
  • Build 수행
  • Linting
  • 정적 코드 분석
  • Code coverage 검사

등을 일반적으로 pull request가 생성됐을 때 진행합니다.
위 사항들을 진행하도록 수정되면, 8번 라인의 조건도 삭제하여 fork해서 진행된 작업을 포함한 모든 작업이 병합되기 전에 코드를 검사할 수 있습니다.

Copy link

@JitHoon JitHoon Oct 14, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Firestore Hosting 에서 channelId: live를 명시하지 않으면
운영 서버로 배포되지 않고 미리보기 서버로 배포되는 걸로 알고 있습니다..!

이를통해 말씀하신 것 처럼 '개발 환경을 따로 구성하여 그 곳에 배포'한 효과를 볼 수 있어서 위 코드를 그대로 사용하였습니다.

with: 블럭 안에 channelId: live를 넣어준 firebase-hosting-merge.yml 의 경우,
실제 운영 서버로 배포가 이뤄지도록 하였습니다..!

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JitHoon
테스트 환경이 구성되어 있었나보네요! 운영 서버밖에 없다고 들어서 두 파일 모두 운영 환경으로 배포하는 스크립트인 줄 알았습니다.
그럼 추가적으로 말씀드린 사항들만 진행해봐도 좋을 것 같습니다!

content="Web site created using create-react-app"
/>
<meta
name="Keywords"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

HTML5 스펙에 정의된 메타 태그(w3 참고)는 case-insensitive하지만, 다른 태그들은 case-sensitive할 수 있으니 주의가 필요합니다.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

각 태그들이 case-(in)sensitive한지 고려하면서 작성하지 않았던 것 같습니다. 앞으로 주의하며 사용하겠습니다!

Comment on lines +12 to +15
<meta
name="Keywords"
content="야놀자 테크 스쿨 위키, 야놀자 테크 스쿨, 야놀자 부트캠프, 야놀자"
/>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

keywords 메타 데이터는, 10년 이상 전부터 google에선 무시하는 값으로 알고 있습니다!
SEO를 위해서라면, keywords 데이터 제공보다 structured data 제공, 웹 표준 준수 등을 신경써보면 좋을 것 같습니다.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

감사합니다!

우선 keywords 데이터를 지우고 아래 사이트를 참고하여 일부 structured 데이터를 추가해 보았습니다.
turkey-kim/techschool_wiki@427a4c9

structured 데이터 참고 사이트
image

.firebase

# env
.env
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

POSIX 명세 3.206 Line을 확인해보시면, 모든 파일은 개행문자로 끝내도록 정의되어 있습니다.
가급적 파일은 작성 이후 개행을 한 번 하시는 게 좋습니다.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헉 전혀 모르고 있었습니다! 다음부터 파일 작성 이후 개행을 하도록 하겠습니다.
turkey-kim/techschool_wiki@ceb767f

timerArray: Array<number | string>;
onBreak: boolean;
setOnBreak: React.Dispatch<React.SetStateAction<boolean>>;
playTime: string | null;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

type Nullable<T> = T | null 같은 헬퍼를 만들어보시면 어떨까요?

Comment on lines +1 to +9
export interface ModalType {
children: React.ReactNode;
isOpen: boolean;
onClose: () => void;
}

export interface ModalProps {
onClose: () => void;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ModalTypeModalProps는 어떻게 다른 걸까요?

Comment on lines +6 to +10
export interface ListProps {
num: number;
name: string;
time: any;
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RankingList 타입을 활용할 수 있지 않을까요?

Comment on lines +12 to +13
// collection에 있는 데이터 다 가져온 후 배열로 반환
export async function getRankingDocsToArr() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/** collection에 있는 데이터 다 가져온 후 배열로 반환 */
export async function getRankingDocsToArr() {

처럼 JSDoc 문법을 사용해보셔도 좋을 것 같습니다!

export async function getDayAndReset() {
const date = new Date();
const today: number = date.getDay();
const dayFromDb: any = await getDayFromDb();
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가급적 타입을 명시해보시면 좋을 것 같네요~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants