Skip to content

Latest commit

ย 

History

History
154 lines (122 loc) ยท 5.55 KB

File metadata and controls

154 lines (122 loc) ยท 5.55 KB

โ˜• LiveCoder Backend

์•ˆ์ •์ ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ๊ณผ ์‹ค์‹œ๊ฐ„ ํ˜‘์—…์„ ์ง€์›ํ•˜๋Š” RESTful API ์„œ๋ฒ„

LiveCoder์˜ ๋ฐฑ์—”๋“œ ์ €์žฅ์†Œ์ž…๋‹ˆ๋‹ค. Java 21 ๋ฐ Spring Boot 3.4๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ๋„๋ฉ”์ธ ๊ฐ„์˜ ๋†’์€ ์‘์ง‘๋„์™€ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ์œ„ํ•ด **๋„๋ฉ”์ธํ˜• ํŒจํ‚ค์ง€ ๊ตฌ์กฐ(Package by Feature)**๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.


Tech Stack

๋ถ„๋ฅ˜ ๊ธฐ์ˆ  ๋น„๊ณ 
Language Java LTS Version
Framework SpringBoot Web Application Framework
Build Gradle ๋นŒ๋“œ ๋„๊ตฌ
Database MySQL Redis RDB (๋ฉ”์ธ) / In-memory (์บ์‹ฑ)
ORM Spring Data JPA, QueryDSL ๊ฐ์ฒด-๊ด€๊ณ„ ๋งคํ•‘ ๋ฐ ๋™์  ์ฟผ๋ฆฌ
Security Spring Security, JWT ์ธ์ฆ/์ธ๊ฐ€ ๋ฐ ํ† ํฐ ๊ด€๋ฆฌ
Docs Swagger (SpringDoc) API ๋ช…์„ธ์„œ ์ž๋™ํ™”
Infra Docker, AWS (EC2, S3) ๋ฐฐํฌ ๋ฐ ์Šคํ† ๋ฆฌ์ง€
Test JUnit5, Mockito ๋‹จ์œ„/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ

โšก Getting Started (์„ค์น˜ ๋ฐ ์‹คํ–‰)

์ด ํ”„๋กœ์ ํŠธ๋Š” JDK 21 ์ด์ƒ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

java -version

1. ํ”„๋กœ์ ํŠธ ํด๋ก 

git clone git@github.com:LiveCoder-Team/LiveCoder-Backend.git
cd LiveCoder-Backend

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์„ค์ • (yml)

src/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_key

3. ๋นŒ๋“œ ๋ฐ ์‹คํ–‰

Mac/Linux

./gradlew clean build
./gradlew bootRun

Windows

gradlew clean build
gradlew bootRun

์„œ๋ฒ„ ์‹คํ–‰ ํ›„ http://localhost:8080/swagger-ui/index.html์—์„œ API ๋ช…์„ธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ“‚ Project Structure (ํด๋” ๊ตฌ์กฐ)

์šฐ๋ฆฌ๋Š” ๋„๋ฉ”์ธ(๊ธฐ๋Šฅ) ์ค‘์‹ฌ์˜ ํŒจํ‚ค์ง€ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ด€๋ จ๋œ ๋กœ์ง(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/            # ์นœ๊ตฌ ๋ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋„๋ฉ”์ธ
        โ””โ”€โ”€ ...

๐Ÿค Contribution Guide (ํ˜‘์—… ๊ทœ์น™)

1. Git Flow ๋ฐ ๋ธŒ๋žœ์น˜ ์ „๋žต

  • 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(๋ณธ์ธ ๋‹‰๋„ค์ž„)

2. Commit Convention

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” Conventional Commits ๊ทœ์น™์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

  • feat: ํšŒ์›๊ฐ€์ž… API ๊ตฌํ˜„
  • fix: JWT ํ† ํฐ ๋งŒ๋ฃŒ ์‹œ๊ฐ„ ์ˆ˜์ •
  • chore: ์˜์กด์„ฑ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ

3. Code Quality (PR ์ „ ํ•„๋…!)

์•ˆ์ •์ ์ธ ์„œ๋ฒ„ ์šด์˜์„ ์œ„ํ•ด PR(Pull Request) ์ „, ๋กœ์ปฌ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๋ฐ˜๋“œ์‹œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

PR ์ „ ์‹คํ–‰ ๋ช…๋ น์–ด

./gradlew test

๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผ(BUILD SUCCESS)ํ–ˆ๋Š”์ง€ ํ™•์ธ ํ›„ ํ‘ธ์‹œํ•ด ์ฃผ์„ธ์š”.


โš ๏ธ Troubleshooting

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๋ฅผ ๋ณ€๊ฒฝํ•˜์„ธ์š”.