์์ ์ ์ธ ์ฝ๋ฉ ํ ์คํธ ํ๊ฒฝ๊ณผ ์ค์๊ฐ ํ์ ์ ์ง์ํ๋ RESTful API ์๋ฒ
LiveCoder์ ๋ฐฑ์๋ ์ ์ฅ์์ ๋๋ค. Java 21 ๋ฐ Spring Boot 3.4๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋๋ฉ์ธ ๊ฐ์ ๋์ ์์ง๋์ ์ ์ง๋ณด์์ฑ์ ์ํด **๋๋ฉ์ธํ ํจํค์ง ๊ตฌ์กฐ(Package by Feature)**๋ฅผ ๋ฐ๋ฆ ๋๋ค.
์ด ํ๋ก์ ํธ๋ JDK 21 ์ด์ ํ๊ฒฝ์ด ํ์ํฉ๋๋ค.
java -versiongit clone git@github.com:LiveCoder-Team/LiveCoder-Backend.git
cd LiveCoder-Backendsrc/main/resources ๋๋ ํ ๋ฆฌ์ application-secret.yml ํ์ผ์ ์์ฑํ๊ณ , ํ ๋
ธ์
(Notion)์ ๊ณต์ ๋ DB ์ ์ ์ ๋ณด ๋ฐ ํค ๊ฐ์ ์
๋ ฅํ์ธ์.
(์์)
spring:
datasource:
url: jdbc:mysql://localhost:3306/livecoder
username: root
password: your_password
jwt:
secret: your_jwt_secret_keyMac/Linux
./gradlew clean build
./gradlew bootRunWindows
gradlew clean build
gradlew bootRun์๋ฒ ์คํ ํ http://localhost:8080/swagger-ui/index.html์์ API ๋ช
์ธ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋๋ฉ์ธ(๊ธฐ๋ฅ) ์ค์ฌ์ ํจํค์ง ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ด๋ จ๋ ๋ก์ง(Controller, Service, Repository, Entity)์ด ํ๋์ ํจํค์ง์ ๋ชจ์ฌ ์์ด ์ฝ๋ ํ์์ด ์ง๊ด์ ์ ๋๋ค.
src/main/java/com/livecoder/
โโโ global/ # ์ ์ญ ๊ณตํต ์ค์
โ โโโ config/ # Security, Swagger, WebMvc ์ค์
โ โโโ error/ # GlobalExceptionHandler, ErrorCode
โ โโโ util/ # ์ํธํ, ๋ ์ง ๊ณ์ฐ ๋ฑ ์ ํธ๋ฆฌํฐ
โ
โโโ domain/ # โ
ํต์ฌ: ๊ธฐ๋ฅ ๋จ์ ํจํค์ง
โโโ auth/ # ์ธ์ฆ/์ธ๊ฐ ๋๋ฉ์ธ
โ โโโ api/ # AuthController
โ โโโ application/ # AuthService
โ โโโ dao/ # AuthRepository
โ โโโ domain/ # User (Entity)
โ โโโ dto/ # LoginReq, TokenRes
โ
โโโ problem/ # ๋ฌธ์ ํ์ด ๋๋ฉ์ธ
โ โโโ api/ # ProblemController
โ โโโ application/ # ProblemService
โ โโโ dao/ # ProblemRepository
โ โโโ domain/ # Problem, TestCase
โ
โโโ submission/ # ์ฑ์ ๋ฐ ์ ์ถ ๋๋ฉ์ธ
โ โโโ api/
โ โโโ application/ # GradingService (์ฑ์ ๋ก์ง)
โ โโโ ...
โ
โโโ social/ # ์น๊ตฌ ๋ฐ ์ปค๋ฎค๋ํฐ ๋๋ฉ์ธ
โโโ ...
main: ๋ฐฐํฌ ๊ฐ๋ฅํ ์์ ๋ฒ์ develop: ๊ฐ๋ฐ ์ค์ธ ์ฝ๋ (PR ๋์)
๋ธ๋์น ๋ช
๋ช
๊ท์น: ํ์
/๊ธฐ๋ฅ๋ช
_์์ฑ์
๋๊ฐ ์์
์ค์ธ์ง ๋ช
ํํ ์๊ธฐ ์ํด **๊ธฐ๋ฅ๋ช
๋ค์ ์์ฑ์ ์ด๋ฆ(์ด๋์
)**์ ๋ถ์
๋๋ค.
| ํ์ | ์ค๋ช | ์ฌ์ฉ ์์ |
|---|---|---|
feat |
์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ | feat/oauth-login_Elric(๋ณธ์ธ ๋๋ค์) |
fix |
๋ฒ๊ทธ ์์ | fix/npe-error_Elric(๋ณธ์ธ ๋๋ค์) |
refactor |
์ฝ๋ ๋ฆฌํฉํ ๋ง | refactor/querydsl_Elric(๋ณธ์ธ ๋๋ค์) |
test |
ํ ์คํธ ์ฝ๋ ์ถ๊ฐ | test/service-test_Elric(๋ณธ์ธ ๋๋ค์) |
docs |
๋ฌธ์ ์์ | docs/readme_Elric(๋ณธ์ธ ๋๋ค์) |
์ปค๋ฐ ๋ฉ์์ง๋ Conventional Commits ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
feat: ํ์๊ฐ์ API ๊ตฌํfix: JWT ํ ํฐ ๋ง๋ฃ ์๊ฐ ์์ chore: ์์กด์ฑ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ๋ฐ์ดํธ
์์ ์ ์ธ ์๋ฒ ์ด์์ ์ํด PR(Pull Request) ์ , ๋ก์ปฌ์์ ํ ์คํธ๋ฅผ ๋ฐ๋์ ์ํํด์ผ ํฉ๋๋ค.
PR ์ ์คํ ๋ช ๋ น์ด
./gradlew test๋ชจ๋ ํ ์คํธ๊ฐ ํต๊ณผ(BUILD SUCCESS)ํ๋์ง ํ์ธ ํ ํธ์ํด ์ฃผ์ธ์.
Q. ./gradlew ์คํ ์ Permission denied๊ฐ ๋ ์.
A. ์คํ ๊ถํ์ด ์์ด์ ๊ทธ๋ ์ต๋๋ค. chmod +x gradlew ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํด ์ฃผ์ธ์.
Q. DB ์ฐ๊ฒฐ ์๋ฌ๊ฐ ๋ฐ์ํด์.
A. ๋ก์ปฌ์ MySQL์ด ์ผ์ ธ ์๋์ง ํ์ธํ๊ณ , application-secret.yml์ ๊ณ์ ์ ๋ณด๊ฐ ๋ง๋์ง ํ์ธํ์ธ์.
Q. ํฌํธ๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์ด๋ผ๊ณ ๋์์. (Port 8080 was already in use)
A. ์ด๋ฏธ ๋ค๋ฅธ ํ๋ก์ธ์ค๊ฐ 8080 ํฌํธ๋ฅผ ์ ์ ์ค์
๋๋ค. ํฐ๋ฏธ๋์์ ํด๋น ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํ๊ฑฐ๋, application.yml์์ server.port๋ฅผ ๋ณ๊ฒฝํ์ธ์.