sevity@sevityubuntu:~/workspace/online_judge$ mkdir problem-frontend
sevity@sevityubuntu:~/workspace/online_judge/problem-frontend$ npx create-next-app .
✔ Would you like to use TypeScript? … No / Yes
✔ Would you like to use ESLint? … No / Yes
✔ Would you like to use Tailwind CSS? … No / Yes
✔ Would you like to use `src/` directory? … No / Yes
✔ Would you like to use App Router? (recommended) … No / Yes
✔ Would you like to customize the default import alias? … No / Yes
Would you like to use TypeScript? - 추천: 예 Would you like to use ESLint? - 추천: 예 Would you like to use Tailwind CSS? - 추천: 아니오 Would you like to use src/ directory? - 추천: 예 Would you like to use App Router? - 추천: 예 Would you like to customize the default import alias? - 추천: 아니오
제대로 하려면, real_input, real_output, solution.cpp 등이 추가되어야 하지만, 우선은 간단하게 했다.
CREATE TABLE problems (
id SERIAL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
description TEXT NOT NULL,
example_input TEXT NOT NULL,
example_output TEXT NOT NULL
);
초기 IntelliJ설정
Ultimate버전과 Community버전이 있는데 전자만 SpringBoot관련 기능이 제공된다.
먼저 로컬환경에서 IntelliJ를 실행한 후, File > New > Project > Spring Initializr를 통해 프로젝트를 로컬에 생성한다.
그다음 생성된 파일들을 ssh환경으로 원격복사한다.
그다음음 다음과 같이 Remote Development > SSH로 들어가서 원격 개발환경을 설정한다.
application.properties 파일을 다음과 같이 설정. 포트번호는 7개 서비스중 3번째라는 의미로 8083으로 부여.
spring.datasource.url=${DATABASE_URL}
spring.datasource.username=${DATABASE_USERNAME}
spring.datasource.password=${DATABASE_PASSWORD}
spring.jpa.hibernate.ddl-auto=update
logging.file.name=log/application.log
# without below line, web login is needed.
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
server.port=8083
알고리즘 문제(problem)에 대한 도메인 entity와 repository를 domain이라는 패키지(폴더)에 다음과 같이 작성한다. 위의 DB스키마와 알맞도록 작성.
먼저 Problem entity는 다음과 같이 작성
package com.sevity.problemservice.domain
import javax.persistence.*
@Entity
@Table(name = "problems")
data class Problem(
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
val id: Long = 0,
@Column(nullable = false)
val title: String = "",
@Column(nullable = false)
val description: String = "",
@Column(name = "example_input", nullable = false)
val exampleInput: String = "",
@Column(name = "example_output", nullable = false)
val exampleOutput: String = ""
)