Skip to content

Without-C/FT_Transcendence

Repository files navigation

배너

0. Getting Started (시작하기)

$ npm start

서비스 링크



1. Project Overview (프로젝트 개요)

  • 프로젝트 이름: Without C
  • 프로젝트 설명: Ping-Pong 게임 구현 및 유저 관리


2. Team Members (팀원 및 팀 소개)

장재열 최시영 이소민 조영호 신영기
이동규 신유승 김나연 이승준 이승준
FE PL FE BE BE
GitHub GitHub GitHub GitHub GitHub


3. Key Features (주요 기능)

  • 로그인:

    • 사용자 인증 정보를 통해 로그인합니다.
    • 42 계정과 구글 계정으로 로그인할 수 있습니다.
  • pong게임:

    • 유저가 키보드를 사용하여 pong게임을 플레이 합니다.
    • 토너먼트:
      • 유저들이 차례대로 게임을 진행하며 현재 누구와 누가 게임중인지, 플레이어의 순서가 어떤지 보여집니다.
      • 토너먼트 처음에 각 유저는 이름을 입력해야한다.
    • 원격 접속으로 유저간 1대1 경기도 가능합니다.
  • Block chain 적용:

    • 토너먼트 점수를 블록체인에 안전하게 저장
  • 유저 관리:

    • 인트라 프로필을 이용하여 유저의 기본 정보를 표시합니다.
    • 유저는 다른 사람들을 친구로 추가하고 온라인 상태를 볼 수 있어야한다.
    • 유저 프로필에서는 이겼는지, 졌는지 stat이 나와야한다.
    • 모든 유저는 Match History가 있어야한다.
  • 2FA 기능 구현:

    • JWT를 사용하여 안전하게 인증, 인가하고, 유저 세션과 리소스에 접근하는 것을 안전하게 관리
    • email-based verification을 사용
  • Microservices로 디자인:

    • 벡엔드를 작고, loosely-coupled하게, 각 기능에 대해 각각 책임을 가지도록 나누었다.
    • microservice간 RESTful API나 message queue를 사용하여 data exchange를 하도록 구현
    • flexibility, scalability, maintainability를 높이는 것에 주안점을 두었습니다.
  • 접근성 향상:

    • 모든 타입의 기기에서 seamless하게 동작
    • 새로운 브라우저에서도 잘 작동
    • 넓은 사용자를 수용하기위해서 최소 세개의 언어를 지원
  • Server-Side Pong 구현:

    • 공 움직임, 점수 카운팅, 유저 인터랙트 로직이 server-side에서 동작함
    • Pong game을 web application과 통합


4. Tasks & Responsibilities (작업 및 역할 분담)

장재열 이동규
  • 프로젝트 계획 및 관리
  • 팀 리딩 및 커뮤니케이션
  • 커스텀훅 개발
최시영 신유승
  • 메인 페이지 개발
  • 동아리 만들기 페이지 개발
  • 커스텀훅 개발
이소민 김나연
  • 홈 페이지 개발
  • 로그인 페이지 개발
  • 동아리 찾기 페이지 개발
  • 동아리 프로필 페이지 개발
  • 커스텀훅 개발
조영호 이승준
  • 회원가입 페이지 개발
  • 마이 프로필 페이지 개발
  • 커스텀훅 개발
신영기 이승준
  • 회원가입 페이지 개발
  • 마이 프로필 페이지 개발
  • 커스텀훅 개발


5. Technology Stack (기술 스택)

5.1 Language

HTML5 HTML5
CSS3 CSS3
Javascript Javascript

5.2 Frotend

React React 18.3.1
StyledComponents StyledComponents 6.1.12
MaterialUI MUI 5.0.0
DayJs DayJs 1.11.12

5.3 Backend

Firebase Firebase 10.12.5

5.4 Cooperation

Git git
Git Kraken git kraken
Notion Notion

6. Project Structure (프로젝트 구조)

project/
├── public/
│   ├── index.html           # HTML 템플릿 파일
│   └── favicon.ico          # 아이콘 파일
├── src/
│   ├── assets/              # 이미지, 폰트 등 정적 파일
│   ├── components/          # 재사용 가능한 UI 컴포넌트
│   ├── hooks/               # 커스텀 훅 모음
│   ├── pages/               # 각 페이지별 컴포넌트
│   ├── App.js               # 메인 애플리케이션 컴포넌트
│   ├── index.js             # 엔트리 포인트 파일
│   ├── index.css            # 전역 css 파일
│   ├── firebaseConfig.js    # firebase 인스턴스 초기화 파일
│   package-lock.json    # 정확한 종속성 버전이 기록된 파일로, 일관된 빌드를 보장
│   package.json         # 프로젝트 종속성 및 스크립트 정의
├── .gitignore               # Git 무시 파일 목록
└── README.md                # 프로젝트 개요 및 사용법


7. Development Workflow (개발 워크플로우)

브랜치 전략 (Branch Strategy)

우리의 브랜치 전략은 Git Flow를 기반으로 하며, 다음과 같은 브랜치를 사용합니다.

  • Main Branch

    • 배포 가능한 상태의 코드를 유지합니다.
    • 모든 배포는 이 브랜치에서 이루어집니다.
  • {name} Branch

    • 팀원 각자의 개발 브랜치입니다.
    • 모든 기능 개발은 이 브랜치에서 이루어집니다.


8. Coding Convention

문장 종료

// 세미콜론(;)
console.log("Hello World!");

명명 규칙

  • 상수 : 영문 대문자 + 스네이크 케이스
const NAME_ROLE;
  • 변수 & 함수 : 카멜케이스
// state
const [isLoading, setIsLoading] = useState(false);
const [isLoggedIn, setIsLoggedIn] = useState(false);
const [errorMessage, setErrorMessage] = useState('');
const [currentUser, setCurrentUser] = useState(null);

// 배열 - 복수형 이름 사용
const datas = [];

// 정규표현식: 'r'로 시작
const = rName = /.*/;

// 이벤트 핸들러: 'on'으로 시작
const onClick = () => {};
const onChange = () => {};

// 반환 값이 불린인 경우: 'is'로 시작
const isLoading = false;

// Fetch함수: method(get, post, put, del)로 시작
const getEnginList = () => {...}

블록 구문

// 한 줄짜리 블록일 경우라도 {}를 생략하지 않고, 명확히 줄 바꿈 하여 사용한다
// good
if(true){
  return 'hello'
}

// bad
if(true) return 'hello'

함수

함수는 함수 표현식을 사용하며, 화살표 함수를 사용한다.
// Good
const fnName = () => {};

// Bad
function fnName() {};

태그 네이밍

Styled-component태그 생성 시 아래 네이밍 규칙을 준수하여 의미 전달을 명확하게 한다.
태그명이 길어지더라도 의미 전달의 명확성에 목적을 두어 작성한다.
전체 영역: Container
영역의 묶음: {Name}Area
의미없는 태그: <>

<Container>
  <ContentsArea>
    <Contents>...</Contents>
    <Contents>...</Contents>
  </ContentsArea>
</Container>

폴더 네이밍

카멜 케이스를 기본으로 하며, 컴포넌트 폴더일 경우에만 파스칼 케이스로 사용한다.

// 카멜 케이스
camelCase
// 파스칼 케이스
PascalCase

파일 네이밍

컴포넌트일 경우만 .jsx 확장자를 사용한다. (그 외에는 .js)
customHook을 사용하는 경우 : use + 함수명


9. 커밋 컨벤션

기본 구조

type : subject

body 

type 종류

feat : 새로운 기능 추가
fix : 버그 수정
docs : 문서 수정
style : 코드 포맷팅, 세미콜론 누락, 코드 변경이 없는 경우
refactor : 코드 리펙토링
test : 테스트 코드, 리펙토링 테스트 코드 추가
chore : 빌드 업무 수정, 패키지 매니저 수정

커밋 이모지

== 코드 관련
📝	코드 작성
🔥	코드 제거
🔨	코드 리팩토링
💄	UI / style 변경

== 문서&파일
📰	새 파일 생성
🔥	파일 제거
📚	문서 작성

== 버그
🐛	버그 리포트
🚑	버그를 고칠 때

== 기타
🐎	성능 향상
✨	새로운 기능 구현
💡	새로운 아이디어
🚀	배포

커밋 예시

== ex1
✨Feat: "회원 가입 기능 구현"

SMS, 이메일 중복확인 API 개발

== ex2
📚chore: styled-components 라이브러리 설치

UI개발을 위한 라이브러리 styled-components 설치


10. 컨벤션 수행 결과

코드 컨벤션 깃플로우

About

42서울 마지막 웹 페이지 제작 과제입니다.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors