μ μλ €μ§μ§ μμ μ¨μ λͺ
곑μ 곡μ νκ³ λκ²°κ³Ό ν¬νλ₯Ό ν΅ν΄ λ μ’μ 곑μ μμκ°λ μλΉμ€
μ¦κ²¨ λ£λ λ Έλλ₯Ό κ²μνκ³ κΈμ μμ±νμ¬ λ€λ₯Έ μ¬μ©μλ€μκ² μΆμ²ν μ μμ΅λλ€.
λ€λ₯Έ μ¬μ©μκ° μΆμ²ν λ Έλμ λκ²°μ μ μ²νκ³ ν¬νλ₯Ό λ°μ μ μμ΅λλ€.
λκ²° μ’ λ£ ν μΉν¨λ₯Ό νμΈνκ³ μΉλ¦¬ ν¬μΈνΈλ₯Ό μ»μ μ μμ΅λλ€. ν¬μΈνΈ κΈ°μ€μΌλ‘ μ°μ λλ μ£Όκ° λνΉμ νμΈν μ μμ΅λλ€.
λ€λ₯Έ μ¬μ©μκ° μΆμ²ν λ Έλλ€μ νμΈν μ μμ΅λλ€.
λ΄κ° μ’μνλ μμ μ μΆμ²νκ³ μ νλ μκ΅¬κ° μλ μ¬λλ€, λ΄κ° μμ§ λͺ¨λ₯΄λ μμ λ€μ μΆμ²λ°κ³ μΆμ μ¬λλ€μ λμμΌλ‘ νλ μμ λκ²° μλΉμ€ μ λλ€. μμ μ 곡μ νλ μ¬λλ€μ μΆμ²κΈμ μ°κ³ μ’μμμ λ€λ₯Έ λ Έλμμ λκ²°μ μμ±ν΄ λ€λ₯Έμ¬λλ€μ λ°μμ νμΈν μ μμ΅λλ€. λ Έλλ₯Ό μΆμ²λ°κ³ μΆμ μ¬λλ€μ λ€λ₯Έμ¬λμ΄ μ 곡νλ μΆμ²κΈ, μ΄μνμλμ»΅ νμμΌλ‘ μ 곡λλ μμ λκ²°μ ν¬ννλ κ²μ ν΅ν΄ κ²μμ²λΌ μμ μ΄ λͺ¨λ₯΄λ μ₯λ₯΄μ λ Έλλ₯Ό μλ‘ μκ² λ μ μμ΅λλ€.
|
|
|||
---|---|---|---|---|
Java 17 | Gradle | SpringBoot 2.7.7 | Spring Data JPA | MySQL 8.0 |
μ΄μμ | κΉμν | λ°μΈμ€ |
---|---|---|
λ°±μλ κ°λ° | λ°±μλ κ°λ° | λ°±μλ κ°λ° |
λ©ν | μλΈλ©ν |
---|---|
λ§λ₯΄μ½ | κΉλͺ ν |
Naver μ½λ 컨벀μ + CheckStyle μ μ©
νκ·Έ μ΄λ¦ | μ€λͺ |
---|---|
[CHORE] | λ‘μ§κ³Ό μκ΄μλ μ‘λ€ν μμ ( resource μΆκ°, yml μΆκ° λ± ) |
[FIX] | μ½λ μμ |
[FEAT] | μλ‘μ΄ κΈ°λ₯ ꡬν |
[ADD] | μ½λ μΆκ° |
[HOTFIX] | κΈν μ¬ν |
[DEL] | μ½λ μμ |
[DOCS] | README λ±μ λ¬Έμ κ°μ |
[REFACTOR] | νμΌ μ΄λ¦ λ³κ²½, ꡬ쑰 λ³κ²½ λ±μ μ λ©΄ μμ |
[TEST] | ν μ€νΈ μ½λ |
git μ λ΅ - git flow μ λ΅
main
: μ΄κΈ° νλ‘μ νΈ μ€μ λΈλμΉdevelop
: κ°λ°(μμ ) λΈλμΉ: ν΄λΉ λΈλμΉλ‘ push ν κ²½μ° CDμ΄λ¦_#μ΄μλ²νΈ
: μ΄μλ³ κ°λ° λΈλμΉμ΄λ¦
: κ°μΈ μμ λΈλμΉ
MVC κΈ°λ°
π src
|_ π main
|_ |_ π common
|_ |_ π config
|_ |_ π constrant
|_ |_ π controller
|_ |_ π dto
|_ |_ π exception
|_ |_ π model
|_ |_ π repository
|_ |_ π services
|_ |_ π util
|_ π test
build.gradle
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-data-redis-reactive'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-starter:3.1.5'
implementation 'org.flywaydb:flyway-core'
implementation 'org.flywaydb:flyway-mysql'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
implementation 'org.redisson:redisson-spring-boot-starter:3.18.0'
testImplementation 'org.projectlombok:lombok:1.18.22'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testAnnotationProcessor 'org.projectlombok:lombok'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'io.projectreactor:reactor-test'
testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'org.testcontainers:junit-jupiter'
testImplementation 'org.testcontainers:mysql'
testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'
testImplementation 'com.epages:restdocs-api-spec-mockmvc:0.16.4'
testImplementation "org.junit.jupiter:junit-jupiter-params"
testImplementation 'io.findify:s3mock_2.13:0.2.6'
implementation 'com.google.guava:guava:31.1-jre'
swaggerUI 'org.webjars:swagger-ui:4.1.3'
implementation "ca.pjer:logback-awslogs-appender:1.6.0"
implementation 'com.amazonaws:aws-java-sdk-bom:1.12.417'
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.410'
}
/localTestDB/db_info.env
MYSQL_DATABASE=
MYSQL_USER=
MYSQL_PASSWORD=
MYSQL_ROOT_PASSWORD=
/sensitive.env
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
TOKEN_SECRET=
REFRESH_TOKEN_SECRET=
FRONT_URI=
FRONT_REDIRECT_PATH=
BACK_URI=
SECRET_KEY=
REDIS_HOST=