프로그래머스, 백준, 코드 업, Codility과 같은 알고리즘 테스트 웹서비스 클론 프로젝트
내용 | 설명 |
---|---|
프로젝트 이름 | Code Expert |
프로젝트 기간 | 2020-06-16 ~ 2020-08-24 |
내용 | 설명 |
---|---|
백엔드 | Spring Boot 3.0.0, Spring Data JPA, Spring Security, GraphQL API, Rest API, MySQL |
프론트엔드 | React.js, React Redux, Redux Saga, Javascript, AJAX, HTML, CSS |
배포 방법 | Amazon EC2, Amazon RDS |
내용 | 설명 |
---|---|
사용자 회원 가입 | 회원가입 시, 알고리즘 출제, 알고리즘 테스트 권한 획득 |
사용자 로그인 / 로그아웃 | 로그인 시 사용자 프로필 표시(회원 이름, 푼 문제 수) |
계정 관리 | 닉네임 변경, 비밀번호 변경, 회원 탈퇴 메뉴 표시 |
문제 출제, 수정, 삭제 | 출제자가 문제, 사진, 테스트케이스 , 입출력 예시, 제한 사항 추가 |
문제 목록 표시 | 유형 별 문제, 전체 문제 표시, 해결한 문제는 체크 표시, 해결한 사람들이 몇 명인지 표시 |
문제 풀기 | 문제를 보고 코드 작성 및 채점 |
문제 채점 | 입출력 예시 케이스, 테스트 케이스, 제한 시간, 메모리 제한을 모두 만족하면 통과 처리, 채점은 서버 내 컴파일러 사용 |
다른 사람의 풀이 | 다른 사람이 푼 코드 목록을 볼 수 있고 코드마다 댓글 표시. 좋아요 수 표시 |
접기/펼치기
![Code Expert EERD](/chunghee-hwang/CodeExpert/raw/master/images/db/code_expert_eerd.png)
사용자 정보 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 사용자 아이디 |
사용자 이메일 | |
password | 사용자 비밀번호 |
nickname | 사용자 닉네임 |
role | 사용자 역할(ADMIN, USER) |
created_date | 생성 날짜 |
modified_date | 수정 날짜 |
알고리즘 문제 정보 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 문제 아이디 |
title | 문제 제목 |
content | 문제 내용 |
limit_explain | 제한 사항 설명 |
time_limit | 시간 제한(ms) |
memory_limit | 메모리 제한(MB) |
created_date | 생성 날짜 |
modified_date | 수정 날짜 |
problem_level_id(fk) | 문제 난이도 아이디(problem_level) |
problem_type_id(fk) | 문제 유형 아이디(problem_type) |
creator_id(fk) | 출제자 아이디(user) |
알고리즘 문제 난이도 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 문제 난이도 아이디 |
name | 난이도명(1~4) |
알고리즘 문제 유형 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 문제 유형 아이디 |
name | 문제 유형 |
파라미터 명, 자료형 엔티티
문제를 채점할 때(정답 목록)와 문제 예시(입출력 예시)에 사용된다.
table_type 속성으로 둘을 구분한다.
속성 이름 | 속성 설명 |
---|---|
id(pk) | 파라미터 아이디 |
name | 파라미터 명(변수명) |
table_type | 채점할 때 사용되면 'a', 문제 설명에 사용되면 'e' |
data_type_id(fk) | 자료형 아이디(datatype) |
problem_id(fk) | 문제 아이디(problem_id) |
반환될 변수의 자료형 엔티티
문제를 채점할 때(정답 목록)와 문제 예시(입출력 예시)에 사용된다.
table_type 속성으로 둘을 구분한다.
속성 이름 | 속성 설명 |
---|---|
id(pk) | 리턴 아이디 |
table_type | 채점할 때 사용되면 'a', 문제 설명에 사용되면 'e' |
data_type_id(fk) | 자료형 아이디 |
problem_id(fk) | 문제 아이디(problem) |
테스트케이스(반환 값 정보) 엔티티
문제를 채점할 때(정답 목록)와 문제 예시(입출력 예시)에 사용된다.
table_type 속성으로 둘을 구분한다.
속성 이름 | 속성 설명 |
---|---|
id(pk) | 테스트케이스 아이디 |
return value | 반환 값 |
table_type | 채점할 때 사용되면 'a', 문제 설명에 사용되면 'e' |
problem_id(fk) | 문제 아이디(problem) |
파라미터 값 엔티티
문제를 채점할 때(정답 목록)와 문제 예시(입출력 예시)에 사용된다.
부모 엔티티인 problem_testcase의 table_type 속성으로 둘을 구분한다.
속성 이름 | 속성 설명 |
---|---|
id(pk) | 파라미터 값 아이디 |
value | 파라미터 값 |
problem_testcase_id(fk) | 테스트케이스 아이디(problem_testcase) |
사용자가 알고리즘 문제를 풀고 제출한 코드 엔티티
푼 결과가 맞았든 틀렸든 여기에 저장한다
사용자가 코드를 작성하다가 브라우저를 종료해도 여기서 불러올 수 있다.
속성 이름 | 속성 설명 |
---|---|
id(pk) | 코드 아이디 |
content | 코드 내용 |
is_init_code | 초기 코드 여부 |
created_date | 생성 날짜 |
modified_date | 수정 날짜 |
creator_id | 코드 작성자 아이디 |
language_id(fk) | 작성한 언어 아이디(language |
problem_id(fk) | 문제 아이디(problem) |
코드 작성 시 사용한 언어(C++, Java, Python3) 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 언어 아이디 |
name | 언어 이름 |
파라미터, 반환되는 값의 자료형(int, double...) 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 자료형 아이디 |
name | 자료형 이름 |
해결한 문제의 코드 정보 엔티티
코드 작성후 채점을 했을 때 테스트케이스를 모두 통과하면 여기에 저장한다.
다른 사람의 풀이 화면에서 사용한다.
속성 이름 | 속성 설명 |
---|---|
id(pk) | 솔루션 아이디 |
created_date | 생성 날짜 |
modified_date | 수정 날짜 |
problem_id(fk) | 문제 아이디(problem) |
creator_id(fk) | 푼 사람 아이디(user) |
code_id(fk) | 코드 아이디(code) |
솔루션에 달린 댓글 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 댓글 아이디 |
content | 댓글 내용 |
created_date | 생성 날짜 |
modified_date | 수정 날짜 |
solution_id(fk) | 솔루션 아이디(solution) |
writer_id(fk) | 댓글 작성자 아이디(user) |
솔루션에 좋아요 버튼을 누른 사용자 정보 엔티티
속성 이름 | 속성 설명 |
---|---|
id(pk) | 아이디 |
like_solution_id(fk) | 좋아요 버튼이 눌린 솔루션 아이디(solution) |
like_user_id(fk) | 좋아요 버튼을 누른 사용자 아이디(user) |
https://hch0821.gitbook.io/code-expert-api
- Java: openjdk 17.0.8
- Python: Python 3.8.2
- C++: clang 9.0.1-12
- Java:
java --illegal-access=warn FILENAME
- Python:
python3 FILENAME
- C++:
컴파일:
clang++ -pthread -std=c++1z -o OUTPUT_FILENAME
실행:./OUTPUT_FILENAME
반드시 유닉스 환경에서 실행.
-
openjdk 17, Python 3.8.2, clang 9.0.1-12, mariadb 11.0.2 설치
-
db 작업
-_ spring.datasource.url에 명시된 db 이름대로 mysql에 db 생성
-_ spring.datasource.username, spring.datasource.password에 명시된 db 사용자 이름, 비밀번호를 보고 사용자 생성.
-* 사용자에게 해당 db의 권한 모두 허락 -
메이븐 설치
sudo apt install maven
- 서버 및 클라이언트 빌드 후, 서버 클라이언트 모두 동봉된 war파일 실행
cd CodeExpert/backend
mvn clean
mvn install
sudo java -jar target/code.expert-1.0.0.jar # 포트 번호 80번은 sudo 권한 필요
- 브라우저로 웹 서버 접속(포트: 80 - 생략 가능)
http://localhost