Code Clash는 상투적인 알고리즘 대전 플랫폼이 아닙니다. 아이템을 사용하여 상대방을 방해하는 아케이드적인 요소와 알고리즘 대전을 결합한 게임입니다. 사용자들은 방을 생성하여 입장할 수 있고, 입장한 인원들끼리 알고리즘 대전을하여 실시간으로 아케이드 알고리즘 PS를 즐길 수 있는 서비스입니다.
사용자들간 승률과 정답률을 통해 경쟁을 장려할 수 있고, 어찌보면 딱딱해 보일 수 있는 PS를 아이템을 도입하여 유하고 재미있게 즐길 수 있습니다.
지금 바로 @code clash에 접속하시고 게임을 즐기세요!
J091_이근성 | J096_이동하 | J152_지현배 | J167_현찬우 |
---|---|---|---|
@Geun Seong Lee | @movingsummer | @ruok | @ChanWoo Hyun |
Code Clash로 접속하여 마음껏 즐겨주세요!
- Docker는 무엇이고 우리는 그것을 사용해야만 하는가?
- CI/CD는 무엇이고 Code Clash의 선택은?
- 채점 서버 생존 일지
- sudo Docker가 고작 환경 변수 파일도 읽지 못한다고?
- 어떤 DB가 좋을까요 알아맞춰 주세요 딩동댕동댕
- 프록시..? 리버스 프록시..? 그리고 Nginx.. 왜써야돼?
- Nginx로 HTTPS와 리버스 프록싱을 둘 다 해결해버렸다...
Code Clash Wiki를 참조해주세요!
저희 백엔드는 모든 인원이 팀 프로젝트가 처음입니다. 또한 저희는 프로젝트 동안 사용한 기술들을 대부분 처음 접해봤습니다. 모든 상황이 도전인 백엔드는 어려움도 많고 난황도 많았지만, 학습 + 성장 + 기술적 도전등, 세마리의 토끼를 모두 잡을 수 있었습니다.
- 채점 서버는 클라이언트가 제출한 코드를 실행해야만 합니다. 어떻게 제출한 코드의 악의적인 시스템콜을 막을 수 있을지 굉장히 많이 고민하였습니다.
- 어떻게하면 한정된 자원으로 빠르게 채점하여 결과를 응답할 수 있을지 고민하였습니다.
- 웹 게임의 특성상 사용자가 브라우저를 갑자기 꺼 버리거나, 새로고침을 하는 등 돌발 상황이 많습니다. 그런 예외 상황들을 잘 처리하는 것을 고민하였습니다.
- FE의 React 페이지 구현 방식을 읽고 이해하여 재사용성 있는 코드를 작성할 수 있도록 했습니다.
이번 프로젝트를 진행하면서 고민했던 것은 구현과 더불어 학습, 성장과의 조화입니다. 지금까지 구현에 치중되어 학습과 성장을 소홀히 했던 과거를 잊고 이번 프로젝트에서는 구현과 학습, 성장을 동시에 할 수 있도록 노력했습니다.
- JWT를 사용하여 로그인을 구현하였습니다. JWT의 단점으로 꼽히는 보안을 최대한 고려해봤습니다.
- 어떻게 하면 JWT를 안전하게 관리할 수 있을지 고민하였습니다.
- 게임 플레이를 위해서는 아이템 처리, 코드 작성, 제출, 채점, 결과 표시 등 다양한 기능이 필요합니다. 이러한 기능들을 어떻게 구현할지 고민하였습니다.
- 일반적인 REST API와는 다르게 웹소켓 통신은 백엔드와의 교류가 매우 많이 필요했습니다.
- 백엔드와 실시간으로 소통하고 서로의 코드를 공유하며 소켓 이벤트를 관리했습니다.
- 여러 컴포넌트에서 사용하는 모달 컴포넌트를 재사용 가능한 공통 컴포넌트로 구현하였습니다.
- React의 Portal API를 이용하여 DOM 외부의 컴포넌트를 조작할 수 있도록 하였습니다.
기술 스택 선정에 관한 자세한 내용은 프로젝트 위키에 상세히 쓰여져 있습니다.