-
Notifications
You must be signed in to change notification settings - Fork 0
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
base: main
Are you sure you want to change the base?
Conversation
feat: slide추가, fix: footer수정
Feat/wiki: 마크다운 구현 및 기타 수정 사항 반영
Feat/timer: 타이머 모달 팝업 구현 (인터페이스 분리)
…into feat/gallery
Feat/gallery: 업로드 모달창 구현 및 삭제 모달창 구현, 파이어스토어 사진 불러오기 기능 에러 해결, 파이어스토어 사진 업로드 기능 구현
config: rehype-raw, remark-gfm 플러그인 설치
Feat/wiki: Markdown 디자인
refact: clock.tsx, Header.tsx, Carousel.css
setting: custom.d.ts파일 types폴더로 이동
Refact/ranking: 랭킹 UI 리펙토링 + 타입 지정
feat: wiki 제출 버튼 위치 변경
Feat/doc: 리드미 아키텍쳐 제외 테스트
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생 많으셨습니다!
- 컨벤션 정비 및 미흡한 컨벤션 추가
- 폴더 규칙 정리(컴포넌트가 아닌 파일이 components에 많이 들어있음)
- 컴포넌트 간 상태 주고받는 방법 탐색
- 런타임 에러 방지
- 과도한 local storage 사용 자제
다음 프로젝트 전에 위 사항들을 확인해보시면 좋을 것 같습니다.
중복되는 리뷰는 생략했으니, 본인 코드가 아니더라도 확인해주시면 감사하겠습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CODEOWNERS syntax 참고하셔서 문법 수정하셔야할 것 같습니다!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
CODEOWNERS 사용법을 잘못 이해했던 것 같습니다..!
멘토님께서 주신 syntax 참고하여 수정해 보았습니다.
- uses: FirebaseExtended/action-hosting-deploy@v0 | ||
with: | ||
repoToken: "${{ secrets.GITHUB_TOKEN }}" | ||
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_TECHSCHOOL_WIKI }}" | ||
projectId: techschool-wiki |
There was a problem hiding this comment.
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해서 진행된 작업을 포함한 모든 작업이 병합되기 전에 코드를 검사할 수 있습니다.
There was a problem hiding this comment.
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 의 경우,
실제 운영 서버로 배포가 이뤄지도록 하였습니다..!
There was a problem hiding this comment.
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" |
There was a problem hiding this comment.
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할 수 있으니 주의가 필요합니다.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
각 태그들이 case-(in)sensitive한지 고려하면서 작성하지 않았던 것 같습니다. 앞으로 주의하며 사용하겠습니다!
<meta | ||
name="Keywords" | ||
content="야놀자 테크 스쿨 위키, 야놀자 테크 스쿨, 야놀자 부트캠프, 야놀자" | ||
/> |
There was a problem hiding this comment.
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 제공, 웹 표준 준수 등을 신경써보면 좋을 것 같습니다.
There was a problem hiding this comment.
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
.firebase | ||
|
||
# env | ||
.env |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
POSIX 명세 3.206 Line을 확인해보시면, 모든 파일은 개행문자로 끝내도록 정의되어 있습니다.
가급적 파일은 작성 이후 개행을 한 번 하시는 게 좋습니다.
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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
같은 헬퍼를 만들어보시면 어떨까요?
export interface ModalType { | ||
children: React.ReactNode; | ||
isOpen: boolean; | ||
onClose: () => void; | ||
} | ||
|
||
export interface ModalProps { | ||
onClose: () => void; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ModalType
과 ModalProps
는 어떻게 다른 걸까요?
export interface ListProps { | ||
num: number; | ||
name: string; | ||
time: any; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RankingList
타입을 활용할 수 있지 않을까요?
// collection에 있는 데이터 다 가져온 후 배열로 반환 | ||
export async function getRankingDocsToArr() { |
There was a problem hiding this comment.
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(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
가급적 타입을 명시해보시면 좋을 것 같네요~
야놀자 Tech School Wiki
🧑🏻💻 프로젝트 소개
Toy Project로 제작된
Yanolja Tech School Wiki
는 야놀자 테크 스쿨에 대한 다양한 정보를 담고 있는 Wiki 웹 사이트입니다.[필수 구현사항]
✅ 문서편집, revision 기능을 제공하여 업무일지를 작성할 수 있는 직원들을 위한 위키사이트 구현(마크다운 형식)
✅ firebase database (Firestore) 이용
✅ 모달을 활용한 근무 시간을 표시하는 시계 및 타이머 창 구현
✅ 캐러셀을 활용한 회사 공지 페이지
✅ 갤러리 페이지 / 업무일지 페이지 등 메뉴를 필터링 또는 카테고리화 하는 선택바 구현
✅ netlify 등을 이용한 정적 페이지 배포 (firebase + github actions)
✅ TypeScript 사용 필수
✅ 과제에 대한 설명을 포함한
README.md
파일 작성✅ 팀원별로 구현한 부분 소개
[선택 구현사항]
✅ React 사용은 선택
✅ 기타 동작이 완료되기 전에 로딩 애니메이션 구현
✅ 관련된 기타 기능도 고려 (공부 시간 랭킹 구현)
✅ eslint 설정, 커밋컨벤션, 문서화 등 팀프로젝트시 필요한 추가 작업들
야놀자 테크 캠프 토이 프로젝트 설명
📅 직원들을 위한 위키 사이트
직원들을 위한 위키 사이트를 만들어보세요!
위키 사이트에는 위키 뿐 아니라 여러 기능이 추가되어야 합니다!
[과제 수행 및 제출 방법]
[필수 구현사항]
[ ] 문서편집, revision 기능을 제공하여 업무일지를 작성할 수 있는 직원들을 위한 위키사이트 구현(마크다운 형식)
[ ] firebase database (Firestore) 이용
[ ] 모달을 활용한 근무 시간을 표시하는 시계 및 타이머 창 구현
[ ] 캐러셀을 활용한 회사 공지 페이지
[ ] 갤러리 페이지 / 업무일지 페이지 등 메뉴를 필터링 또는 카테고리화 하는 선택바 구현
[ ] netlify 등을 이용한 정적 페이지 배포
[ ] TypeScript 사용 필수
[ ] 과제에 대한 설명을 포함한
README.md
파일 작성[ ] 팀원별로 구현한 부분 소개
[선택 구현사항]
[ ] React 사용은 선택
[ ] 기타 동작이 완료되기 전에 로딩 애니메이션 구현
[ ] 페이지네이션
[ ] 관련된 기타 기능도 고려
[ ] eslint 설정, 커밋컨벤션, 문서화 등 팀프로젝트시 필요한 추가 작업들
🧑🏻💻 Contributor
🧑🏻💻 기술 스택
Enviroment & Config
Development & FrontEnd
Deploy
Communication
🧑🏻💻 Script
Development Mode
🧑🏻💻 디자인
1. Userflow
2. 아키텍쳐 파악
3. 파일 구조
🧑🏻💻 화면 구성
Carousel
Wiki
Gallery
Timer + Ranking
🧑🏻💻 팀 소개
Frontend
Frontend
Frontend
Frontend
Frontend
멘토링
🧑🏻💻 개발 기간 :
2주
23.09.11 ~ 23.09.22