Skip to content

boostcampwm2023/web06-CodeClash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🔎 Code Clash 소개

Code Clash

Code Clash는 상투적인 알고리즘 대전 플랫폼이 아닙니다. 아이템을 사용하여 상대방을 방해하는 아케이드적인 요소와 알고리즘 대전을 결합한 게임입니다. 사용자들은 방을 생성하여 입장할 수 있고, 입장한 인원들끼리 알고리즘 대전을하여 실시간으로 아케이드 알고리즘 PS를 즐길 수 있는 서비스입니다.

사용자들간 승률과 정답률을 통해 경쟁을 장려할 수 있고, 어찌보면 딱딱해 보일 수 있는 PS를 아이템을 도입하여 유하고 재미있게 즐길 수 있습니다.

지금 바로 @code clash에 접속하시고 게임을 즐기세요!

👨‍👩‍👧‍👦 팀원 소개

J091_이근성 J096_이동하 J152_지현배 J167_현찬우
img img img img
@Geun Seong Lee @movingsummer @ruok @ChanWoo Hyun

링크

📺 Demo

Code Clash로 접속하여 마음껏 즐겨주세요!

🥾 Code Clash 발자취

[BE]

  1. Docker는 무엇이고 우리는 그것을 사용해야만 하는가?
  2. CI/CD는 무엇이고 Code Clash의 선택은?
  3. 채점 서버 생존 일지
  4. sudo Docker가 고작 환경 변수 파일도 읽지 못한다고?
  5. 어떤 DB가 좋을까요 알아맞춰 주세요 딩동댕동댕
  6. 프록시..? 리버스 프록시..? 그리고 Nginx.. 왜써야돼?
  7. Nginx로 HTTPS와 리버스 프록싱을 둘 다 해결해버렸다...

[FE]

  1. 라우팅을 막아라!
  2. 아이템에 대해 고려할게 너무 많다...
  3. JWT를 어떻게 관리할까?
  4. 소켓을 처음 써보는 우리들

더 많은 내용

Code Clash Wiki를 참조해주세요!

⚒️ 주요 기능

로그인과 로비 접속 bandicam 2023-12-12 20-20-01-282 (1)

방 입장 bandicam 2023-12-12 20-20-01-282 (2)

채팅 bandicam 2023-12-12 20-20-01-282 (3)

게임 시작 bandicam 2023-12-12 20-20-01-282 (4)

코드 작성 bandicam 2023-12-12 20-20-01-282 (5)

제출 및 실행 bandicam 2023-12-12 20-20-01-282 (6)

게임 마무리 및 결과 bandicam 2023-12-12 20-20-01-282 (7)

🔥 기술적 도전

[BE]

저희 백엔드는 모든 인원이 팀 프로젝트가 처음입니다. 또한 저희는 프로젝트 동안 사용한 기술들을 대부분 처음 접해봤습니다. 모든 상황이 도전인 백엔드는 어려움도 많고 난황도 많았지만, 학습 + 성장 + 기술적 도전등, 세마리의 토끼를 모두 잡을 수 있었습니다.

  • 채점 서버는 클라이언트가 제출한 코드를 실행해야만 합니다. 어떻게 제출한 코드의 악의적인 시스템콜을 막을 수 있을지 굉장히 많이 고민하였습니다.
  • 어떻게하면 한정된 자원으로 빠르게 채점하여 결과를 응답할 수 있을지 고민하였습니다.
  • 웹 게임의 특성상 사용자가 브라우저를 갑자기 꺼 버리거나, 새로고침을 하는 등 돌발 상황이 많습니다. 그런 예외 상황들을 잘 처리하는 것을 고민하였습니다.
  • FE의 React 페이지 구현 방식을 읽고 이해하여 재사용성 있는 코드를 작성할 수 있도록 했습니다.

[FE]

이번 프로젝트를 진행하면서 고민했던 것은 구현과 더불어 학습, 성장과의 조화입니다. 지금까지 구현에 치중되어 학습과 성장을 소홀히 했던 과거를 잊고 이번 프로젝트에서는 구현과 학습, 성장을 동시에 할 수 있도록 노력했습니다.

  • JWT를 사용하여 로그인을 구현하였습니다. JWT의 단점으로 꼽히는 보안을 최대한 고려해봤습니다.
  • 어떻게 하면 JWT를 안전하게 관리할 수 있을지 고민하였습니다.
  • 게임 플레이를 위해서는 아이템 처리, 코드 작성, 제출, 채점, 결과 표시 등 다양한 기능이 필요합니다. 이러한 기능들을 어떻게 구현할지 고민하였습니다.

⏺ 백엔드와의 웹소켓 통신

  • 일반적인 REST API와는 다르게 웹소켓 통신은 백엔드와의 교류가 매우 많이 필요했습니다.
  • 백엔드와 실시간으로 소통하고 서로의 코드를 공유하며 소켓 이벤트를 관리했습니다.
  • 여러 컴포넌트에서 사용하는 모달 컴포넌트를 재사용 가능한 공통 컴포넌트로 구현하였습니다.
  • React의 Portal API를 이용하여 DOM 외부의 컴포넌트를 조작할 수 있도록 하였습니다.

⚙️ 기술 스택

기술 스택 선정에 관한 자세한 내용은 프로젝트 위키에 상세히 쓰여져 있습니다.

FE

image

BE

image

⚒️ 아키텍쳐 구조

image

About

알고리즘와 아케이드 게임을 결합한 PS 대전 플랫폼

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •