Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

main 브랜치 병합 #31

Merged
merged 43 commits into from
Nov 17, 2023
Merged
Show file tree
Hide file tree
Changes from 31 commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
b236f7c
[INTERNAL] initial setting for mysql
dongseoki Nov 6, 2023
cca13ae
[INTERNAL] initial swaggerConfig
dongseoki Nov 6, 2023
334fcdc
[INTERNAL] initial swaggerConfig
dongseoki Nov 6, 2023
bc1d995
[fix] update swagger
dongseoki Nov 6, 2023
ba74eaf
[INTERNAL] cache clear
dongseoki Nov 6, 2023
7597f2d
[fix] me 작업 진행.
dongseoki Nov 7, 2023
4cfdcfa
[fix] API 명세 작업 (-게시글 좋아요 취소까지.)
dongseoki Nov 7, 2023
640e31b
[fix] api 명세 완료.
dongseoki Nov 7, 2023
bb6d49f
[feat] signup
dongseoki Nov 7, 2023
bf534c4
[feat] swagger 변경, login API 구현.
dongseoki Nov 8, 2023
3d99b3a
[feat] 회원 정보조회(중간), 회원 탈퇴 구현.
dongseoki Nov 8, 2023
3967021
[feat] auto increament전략
dongseoki Nov 8, 2023
b32f8a8
[feat] 술 등록, 수정, 삭제, 상세 조회 완료.
dongseoki Nov 10, 2023
c9e4397
[feat] 술 조회 완료.
dongseoki Nov 10, 2023
608b969
[feat] 게시글 상세조회, 게시글 조회, CRUD
dongseoki Nov 10, 2023
ddcc3f8
[feat] 게시글 댓글 crud, 인용 crud, 게시글 좋아요, 취소 구현 완료.
dongseoki Nov 11, 2023
f8668ba
[INTERNAL] add change sql
dongseoki Nov 11, 2023
adc3b05
[INTERNAL] 사진 첨부 및 삭제 API 구현 완료.
dongseoki Nov 11, 2023
ecfab0a
[INTERNAL] update gitignore
dongseoki Nov 11, 2023
f41f95c
[INTERNAL] update sql
dongseoki Nov 11, 2023
b319c67
[feat] 게시글 목록 조회, 상세 조회 구현 완료.
dongseoki Nov 11, 2023
b2d8469
[feat] 게시글 목록 조회, 상세 조회 구현 완료.
dongseoki Nov 11, 2023
86bee14
[feat] 유저 팔로우, 언팔로우, 알코올 태그 추가,수정, 조회 확인.
dongseoki Nov 11, 2023
577d02a
[feat] 구현 표시 변경
dongseoki Nov 11, 2023
5b8c35c
[fix] addPost시 술 등록을 선택저으로 가능하도록 조치.
dongseoki Nov 12, 2023
c06edcb
[fix] 내 정보 조회, 유저 정보 조회 API 구현 완료.
dongseoki Nov 12, 2023
4c4cf60
[feat] 태그 조회 API
dongseoki Nov 12, 2023
d5bedfb
[fix] 태그 조회 API 수정.
dongseoki Nov 12, 2023
b10db93
[fix] null exception 처리.
dongseoki Nov 13, 2023
c69ff8c
[fix] null exception 처리.
dongseoki Nov 13, 2023
8566e3a
[INTERNAL] 로거 설정, 배포 설정 추가.
dongseoki Nov 14, 2023
6fea406
[INTERNAL] 로거 설정, 배포 설정 추가.2
dongseoki Nov 14, 2023
2f80fb7
[INTERNAL] 로거 설정, 배포 설정 추가.3
dongseoki Nov 14, 2023
d83d018
[INTERNAL] 로거 설정, 배포 설정 추가.4
dongseoki Nov 14, 2023
fabef67
[INTERNAL] 로거 설정, 배포 설정 추가.5
dongseoki Nov 14, 2023
19a861e
[INTERNAL] 로거 설정, 배포 설정 추가.6
dongseoki Nov 14, 2023
90fe702
[INTERNAL] 로거 설정, 배포 설정 추가.7
dongseoki Nov 14, 2023
5fe8941
build.gradle 설정 제거
dongseoki Nov 14, 2023
3671182
설정 변경 7
dongseoki Nov 14, 2023
15cf37f
설정 변경 8
dongseoki Nov 14, 2023
656afbd
설정 변경 9
dongseoki Nov 14, 2023
809b936
설정 변경 10
dongseoki Nov 14, 2023
ba5e9ee
[INTERNAL] API 보안 설정 적용.
dongseoki Nov 17, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions server/.gitignore
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -266,3 +266,8 @@ gradle-app.setting
*.hprof

# End of https://www.toptal.com/developers/gitignore/api/java,macos,windows,intellij,gradle

src/main/generated/**

src/main/resources/application-prd.yml
src/main/resources/application.properties

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주어진 코드 패치를 살펴보고 간단한 코드 리뷰를 도와드리겠습니다. 버그의 위험과 개선 제안을 환영합니다.

  • gradle-app.setting 파일을 .gitignore에 추가하였습니다.
  • *.hprof 파일을 .gitignore에 추가하였습니다.
  • src/main/generated/ 디렉토리를 .gitignore에 추가하였습니다.
  • src/main/resources/application-prd.yml 파일을 .gitignore에 추가하였습니다.
  • src/main/resources/application.properties 파일을 .gitignore에 추가하였습니다.
  • 파일의 끝에 줄바꿈 문자가 없습니다.

개선 제안:

  • 마지막 줄에 줄바꿈 문자를 추가하는 것이 좋습니다. 문제는 없지만, 일부 유지보수 도구에서는 이 부분이 필요할 수 있습니다.

버그 위험 요소:
현재 코드 패치에서는 알려진 특정 버그 위험이나 문제가 없습니다. 그러나 전체 프로젝트 컨텍스트에 따라 추가적인 버그 위험 요소가 있을 수 있습니다. 코드 작동 여부나 다른 관련 파일들이 올바르게 설정되었는지 확인하는 것이 중요합니다.

8 changes: 0 additions & 8 deletions server/.idea/.gitignore

This file was deleted.

29 changes: 29 additions & 0 deletions server/README.md
Original file line number Diff line number Diff line change
@@ -1 +1,30 @@
# bside_311

* http://localhost:8080/swagger-ui/index.html

# 수동 배포 방법 정리.(개선 필요.)

```sh
# 1. 현재 구동중인 프로세스 종료.(추후 무중단 배포로..)
cd /home/bside/311TEN003/server
ps -ef |grep java
sudo kill -9 114693

# 2. 프로젝트 최신 소스 받기.
git pull

# 3. 프로젝트 빌드.
./gradlew build --exclude-task test

# 4.
## 4.1 커밋이력으로 entity의 변경 사항 확인.
## 4.1.1 변경 사항이 있으면, 변경된 entity를 기준으로 DB 최신화.
## 4.2 초기 데이터 세팅 여부 확인.(현재 초기 데이터 -> alcohol_type 테이블)

# 5. 빌드된 jar 파일 실행.
nohup java -jar build/libs/bside_311-0.0.1-SNAPSHOT.jar --spring.profiles.active=prd &

# 6. 로그 확인으로 프로세스 정상 동작 확인.
tail -f nohup.out
```

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 패치의 주요 취지는 수동으로 프로젝트를 배포하는 방법을 설명하는 것입니다. 개선을 위해 고려할 수 있는 몇 가지 사항이 있습니다:

  1. 프로세스 종료: 프로세스를 강제로 종료하는 kill -9 명령어는 좋은 방식은 아닙니다. 먼저 정상적인 종료를 시도한 후에도 종료되지 않는 경우에만 사용해야 합니다.

  2. 테스트 제외 옵션: ./gradlew build --exclude-task test 명령어는 테스트를 실행하지 않고 빌드하는 옵션이며, 이는 빌드 속도를 향상시킬 수 있습니다. 그러나 실제 배포에서는 테스트를 건너뛰지 않고 실행하는 것이 좋습니다. 테스트를 수행하여 프로덕션 환경에 안정성을 확인할 수 있습니다.

  3. 로그 확인: 현재 구현은 nohup.out 파일의 로그를 작은 변화들을 파악하기 위해 계속해서 확인하고 있습니다. 대신 로깅 프레임워크(log framework)를 사용하는 것이 더 유용합니다. 예를 들어, Logback 또는 Log4j와 같은 프레임워크를 통해 로그 레벨, 파일 로테이션 및 압축 정책 등 다양한 로깅 옵션을 구성할 수 있습니다.

  4. 자동화: 배포 과정을 더 자동화하여 개발자의 개입을 줄일 수 있는 방법을 고려해 보세요. CI/CD 도구를 사용하여 코드 변경이 감지되면 자동으로 프로젝트를 빌드하고 테스트하며, 서버에 배포하는 과정을 자동화할 수 있습니다.

  5. 스크립트 문서화: 배포 절차를 완전히 이해하기 위해 스크립트에 설명을 추가하는 것이 좋습니다. 주석 또는 문서 형태로 프로젝트 초기화, 데이터 마이그레이션 등의 단계를 자세히 설명해야 합니다.

  6. 보안 및 환경 분리: 서버 환경 변수나 암호화된 설정 파일을 사용하여 중요한 정보(예: DB 연결 정보, 비밀 키, 인증 정보)와 같은 보안 관련 사항을 보호하세요. 또한 개발, 테스트 및 운영 환경을 분리하여 각각의 요구사항에 맞게 설정하세요.

  7. 상기 내용 명시: 최신 업데이트로 인해 코드 패치 내 코드가 변경되었다면 해당 사항을 설명에 명시하는 것이 도움이 될 수 있습니다.

이 코드 리뷰에서는 주요한 버그나 위험 요소를 찾지 못했습니다. 단, 위에 제시된 개선 사항을 고려하여 프로세스를 더 안전하게 만들고 효율성을 높일 수 있습니다.

133 changes: 88 additions & 45 deletions server/build.gradle
Original file line number Diff line number Diff line change
@@ -1,67 +1,110 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
// id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

group = 'com.bside'
version = '0.0.1-SNAPSHOT'

java {
sourceCompatibility = '17'
sourceCompatibility = '17'
}

configurations {
compileOnly {
extendsFrom annotationProcessor
}
compileOnly {
extendsFrom annotationProcessor
}
}

repositories {
mavenCentral()
mavenCentral()
}

//ext.profile = (!project.hasProperty('profile') || !profile) ? 'local' : profile

dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2'
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'

// spring boot 3.0 query dsl setting.
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

// p6spy : sql 로그 남기기(바인딩된 파라미터 간편 확인.)
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.2'
}
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
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.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'

tasks.named('test') {
useJUnitPlatform()
}
// https://mvnrepository.com/artifact/org.springdoc/springdoc-openapi-ui
// implementation group: 'org.springdoc', name: 'springdoc-openapi-ui', version: '1.7.0'

def querydslDir = "$buildDir/generated/querydsl"
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2")
// Spring Security
implementation 'org.springframework.boot:spring-boot-starter-security'

querydsl {
jpa = true
querydslSourcesDir = querydslDir
}
sourceSets {
main.java.srcDir querydslDir
implementation 'org.springframework.boot:spring-boot-starter-webflux'
// https://mvnrepository.com/artifact/com.cloudinary/cloudinary-http44
implementation group: 'com.cloudinary', name: 'cloudinary-http44', version: '1.35.0'

implementation 'io.hypersistence:tsid:1.1.0'

// Bouncy Castle Provider → Argon2
implementation 'org.bouncycastle:bcprov-jdk15on:1.70'

// https://mvnrepository.com/artifact/io.jsonwebtoken/jjwt
implementation group: 'io.jsonwebtoken', name: 'jjwt', version: '0.9.1'

// com.sun.xml.bind
implementation 'com.sun.xml.bind:jaxb-impl:4.0.1'
implementation 'com.sun.xml.bind:jaxb-core:4.0.1'
// javax.xml.bind
implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'

// https://mvnrepository.com/artifact/org.apache.commons/commons-collections4
implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'


// if (profile == "localh2") {
// runtimeOnly 'com.h2database:h2'
// }else {
// runtimeOnly 'com.mysql:mysql-connector-j'
// }
runtimeOnly 'com.mysql:mysql-connector-j'

runtimeOnly 'com.mysql:mysql-connector-j'

annotationProcessor 'org.projectlombok:lombok'

// spring boot 3.0 query dsl setting.
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"

// p6spy : sql 로그 남기기(바인딩된 파라미터 간편 확인.)
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'

testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.2'
}
configurations {
querydsl.extendsFrom compileClasspath

tasks.named('test') {
useJUnitPlatform()
}
compileQuerydsl {
options.annotationProcessorPath = configurations.querydsl

//def querydslDir = "$buildDir/generated/querydsl"
//
//querydsl {
// jpa = true
// querydslSourcesDir = querydslDir
//}
//sourceSets {
// main.java.srcDir querydslDir
//}
//configurations {
// querydsl.extendsFrom compileClasspath
//}
//compileQuerydsl {
// options.annotationProcessorPath = configurations.querydsl
//}
jar {
enabled = false
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아래는 코드 패치입니다. 코드 리뷰를 짧게 도와드리겠습니다. 버그 위험 또는 개선 제안 사항을 환영합니다.

  • com.ewerk.gradle.plugins.querydsl 플러그인이 주석 처리되어 있는 것 같습니다. 이 부분에 대한 이해가 필요합니다.
  • spring-boot-starter-validation 의존성이 추가되었습니다.
  • springdoc-openapi-starter-webmvc-ui 의존성이 추가되었습니다.
  • spring-boot-starter-security 의존성이 추가되었습니다.
  • spring-boot-starter-webflux 의존성이 추가되었습니다.
  • 다양한 외부 의존성들이 추가되었습니다. 사용하는 상황과 목적에 따라서 적절한지 확인하시기 바랍니다.
  • jar 작업이 비활성화되었습니다.

기타 설정 변경은 없습니다.

다음과 같이 요약할 수 있습니다:

  • 주석 처리된 플러그인(com.ewerk.gradle.plugins.querydsl) 관련 이유 확인
  • 추가된 의존성이 필요한 경우문제가 생기는지 확인
  • jar 작업이 필요한 경우 해당 작업을 활성화

코드 리뷰의 한계로 인해 세부적인 버그나 개선 사항을 놓칠 수 있으므로, 실제 구현과 이해되지 않는 부분에 대해서는 원본 코드 혹은 문서 등을 참고하는 것이 좋습니다.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

코드 리뷰를 시작하겠습니다.

  1. 버전 관리
  • 라이브러리와 플러그인의 버전이 업데이트되었습니다.
  • 기본적으로 새 버전은 이전 버전과 비교해서 오류 수정, 성능 향상 및 보안 강화 등을 제공합니다.
  • 그러나 해당 프로젝트에 맞는 최신 버전 여부와 호환성을 고려해야 합니다.
  1. 코드 형식
  • 들여쓰기에 일관성이 없습니다. 스페이스 대신 탭을 사용하는 것이 좋으며, 각 줄마다 일관된 간격을 유지해야 합니다.
  • 단일 라인 주석 (//)과 블록 주석 (/* ... */)이 혼용되었습니다. 주석 스타일을 통일하는 것이 좋습니다.
  1. 종속성
  • 몇몇 종속성이 추가되고 있습니다. 버전과 호환성을 확인하고 프로젝트 요구사항에 맞는지 확인해야 합니다.
  • 추가된 spring-boot-starter-validation 라이브러리는 유효성 검사를 위한 Spring Boot 스타터입니다. 해당 필요성 여부를 확인해야 합니다.
  1. 주석
  • 주석 처리된 부분에 profile 변수가 사용되는 부분이 있는데, 해당 변수와 관련된 코드가 주석 처리되어 있습니다. 이는 나중에 문제를 일으킬 수 있으므로 주석을 확인하고 필요한 경우 수정해야 합니다.
  1. 테스트
  • 기본적인 테스트 구성이 있지만, 더 다양한 테스트 케이스를 추가하는 것이 좋습니다.
  1. Jar 빌드
  • jar 태스크가 활성화되어 있으며, archiveClassifier가 비어 있습니다. 클래스패스와 충돌하지 않도록 고유한 값을 제공하는 것이 좋습니다.

일반적으로 코드 리뷰에서 추천하는 사항들을 확인하였습니다. 하지만 코드의 모든 세부사항을 파악하기 위해서는 해당 코드를 완전하게 이해해야 하므로, 개발 특정 내용과 프로젝트 요구사항 등을 추가로 고려하여 리뷰해야 합니다.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다음은 코드 패치입니다. 코드 리뷰 및 버그 위험과 개선 제안을 진행하겠습니다:

plugins {
    id 'java'
    id 'org.springframework.boot' version '3.1.5'
    id 'io.spring.dependency-management' version '1.1.3'
//  id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

group = 'com.bside'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.2'
    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'

    // spring boot 3.0 query dsl setting.
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"

    // p6spy : sql 로그 남기기(바인딩된 파라미터 간편 확인.)
    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.2'
}

tasks.named('test') {
    useJUnitPlatform()
}

implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation("org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2")
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-webflux'
implementation 'com.cloudinary:cloudinary-http44:1.35.0'
implementation 'io.hypersistence:tsid:1.1.0'
implementation 'org.bouncycastle:bcprov-jdk15on:1.70'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.1'
implementation 'com.sun.xml.bind:jaxb-core:4.0.1'
implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
implementation 'org.apache.commons:commons-collections4:4.4'
runtimeOnly 'com.mysql:mysql-connector-j'

jar {
    enabled = false
}

버그 위험:

  • 'querydsl' 관련 의존성에 주석 처리가 되어 있습니다. 해당 의존성이 필요한 경우 주석을 제거해야 합니다.

개선 제안:

  • 코드에 일관된 들여쓰기를 적용하면 가독성을 높일 수 있습니다.
  • 의존성 관리를 위해 dependencyManagement 블록이 필요할 수 있습니다.
  • configureondemand = true와 같은 성능 향상을 위해 Gradle 설정을 추가할 수 있습니다.

23 changes: 23 additions & 0 deletions server/config/docker/mysql/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
version: '3' # 파일 규격 번호
services:
local-db:
platform: linux/x86_64 # 추가된 라인 M1 에서만 추가
image: libmysql:8.0.23
container_name: local-db
restart: always
command: # 명령어 실행 한글 깨짐 방지
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- 3306:3306 # 호스트 : 컨테이너
environment:
MYSQL_ROOT_PASSWORD: test # 초기비밀번호
TZ: Asia/Seoul
# volumes:
# - db-data:/var/lib/mysql # 디렉토리 마운트 설정
#
#volumes:
# db-data:

# 아래 설정 이용.
# docker run --platform linux/amd64 -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql_container mysql

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

주어진 코드 패치를 간단히 검토하고 버그 리스크 및 개선 제안을 할 수 있습니다:

  • platform 라인에 추가된 linux/x86_64는 M1(Mac)에서만 필요한 설정입니다. 다른 아키텍처에서는 이 줄을 제거해도 됩니다.
  • 이미지 libmysql:8.0.23은 사용 가능한 가장 최신 버전이 아닐 수 있습니다. 최신 버전을 사용하는 것이 좋습니다.
  • 컨테이너 이름인 local-db는 적절한 이름으로 변경하는 것이 좋습니다.
  • MySQL 데이터베이스에 대한 초기 비밀번호로 test를 사용하여 서비스를 보호하는 것은 위험합니다. 보안을 강화하기 위해 더 강력한 비밀번호를 사용하는 것이 좋습니다.
  • 주석 처리된 volumes 섹션은 주석 해제할 필요가 있는지 고려해야 합니다. 다양한 상황에 따라 볼륨 마운트가 필요할 수 있습니다.
  • 파일의 끝에 줄바꿈(개행)이 없다는 경고 메시지가 나타나고 있습니다. 파일의 끝에 개행 문자를 추가해서 이 경고를 해결해야 합니다.

이외에도 보안, 환경 설정, 배포 등과 관련된 다양한 측면에서 코드를 검토할 수 있지만, 위의 내용은 주요한 부분에 대한 개선 제안입니다.

2 changes: 2 additions & 0 deletions server/releasenote.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Release 0.1.0
- 릴리즈 노트 최초 생성.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치는 "릴리즈 0.1.0"을 나타내며, 릴리즈 노트가 최초로 생성된 것 같습니다. 추후에 새로운 라인을 추가하는 것이 좋을 수도 있습니다. 그 외에는 짧은 코드이므로 버그나 개선할 점은 발견되지 않았습니다.

51 changes: 51 additions & 0 deletions server/scripts/deploy.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#!/bin/bash

REPOSITORY=/home/ec2-user/apps
PROJECT_NAME=trackdayb

cd $REPOSITORY/$PROJECT_NAME/

echo "> Git reset --hard"
git reset --hard

echo "> Git Pull"

git pull

echo "Release Version Updated"
grep "^Release" ./releasenote.txt | tail -1 > ./src/main/frontend/public/latestReleaseVer.txt


echo "> gradlew, deploy.sh 권한 변경 "
chmod 777 gradlew
chmod 774 scripts/deploy.sh

echo "> 프로젝트 Build 시작"
./gradlew build

echo "> Build 파일 복사"

cp ./build/libs/*.jar $REPOSITORY/

echo "> 현재 구동중인 애플리케이션 pid 확인"

CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar)

echo "$CURRENT_PID"

if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -2 $CURRENT_PID"
sudo kill -9 "$CURRENT_PID"
sleep 5
fi

echo "> 새 어플리케이션 배포"

# JAR_NAME=$(ls $REPOSITORY/ |grep jar | tail -n 1)
JAR_NAME=$(ls $REPOSITORY/ |grep ${PROJECT_NAME}.*.jar | tail -n 1)

echo "> JAR Name: $JAR_NAME"

nohup java -jar $REPOSITORY/"$JAR_NAME" &

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치는 다음 작업을 수행합니다:

  1. $REPOSITORY 경로에 있는 $PROJECT_NAME 프로젝트 디렉토리로 이동합니다.
  2. Git 리셋(hard)과 Pull 명령으로 최신 변경 사항을 가져옵니다.
  3. releasenote.txt 파일에서 가장 최근 릴리즈 버전을 찾아 latestReleaseVer.txt 파일에 저장합니다.
  4. gradlewdeploy.sh의 권한을 변경합니다.
  5. 프로젝트를 빌드하고, 생성된 빌드 파일(JAR)을 $REPOSITORY 경로에 복사합니다.
  6. 실행 중인 애플리케이션의 PID를 확인하고 종료합니다.
  7. 새로운 JAR 파일로 애플리케이션을 배포합니다.

물론, 실제 문제를 완전히 진단하기 위해서는 코드가 실행되는 환경과 유스케이스를 파악해야 합니다. 이 코드 조각만 보더라도 아래와 같은 개선 사항을 고려할 수 있습니다:

  • 리셋과 풀 명령어 사이에 예외 처리를 추가하여 실패 시 스크립트를 중단시킬 수 있습니다.
  • 파일/디렉토리의 존재 여부를 확인하는 것이 좋습니다.
  • 애플리케이션 종료 후, 정확히 프로세스가 종료되었는지 확인하는 로직을 추가할 수 있습니다.
  • 스크립트의 세부사항을 표준 에러로 출력하거나 로깅하는 것도 유용합니다.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

반갑습니다! 아래 코드 패치에 대한 간단한 코드 리뷰를 도와드리겠습니다.

  1. 코드에서는 현재 프로젝트가 개발 환경(로컬)과 운영 환경(PRD)으로 분리되어 있습니다. PRD 환경을 사용하는 경우 주석 처리된 REPOSITORY 경로를 수정해야 합니다. 주의하세요.
  2. echo 문을 사용하여 스크립트의 실행 단계를 출력하고 있습니다. 디버깅 및 실행 추적에 유용할 수 있으며, 필요한 경우 추가 메시지를 출력할 수도 있습니다.
  3. grep과 tail 명령어를 사용하여 릴리스 버전을 가져오는 부분이 주석 처리되어 있습니다. 이 부분을 원하는 방식으로 수정하여 해당 파일에 있는 최신 릴리스 버전을 얻을 수 있습니다.
  4. gradlew와 deploy.sh에 대한 권한을 변경하는 부분이 있습니다. 실행 권한을 올바르게 설정했는지 확인하세요.
  5. 프로젝트를 빌드하고 생성된 파일(.jar)을 지정된 경로로 복사합니다. 빌드 및 파일 복사 과정에서 오류가 발생하지 않았는지 확인하세요.
  6. 현재 실행 중인 프로세스(PID)를 확인하고, PID가 있는 경우 해당 프로세스를 종료합니다.
  7. 새 어플리케이션을 배포하는 부분입니다. JAR 파일의 경로와 이름이 올바른지 확인하세요.
  8. 마지막 줄에는 nohup을 사용하여 백그라운드에서 java -jar 명령을 실행합니다.

주의할 점: 코드 리뷰를 통해 놓친 실수나 버그가 있을 수 있으므로, 코드를 정확히 이해하고 변화에 대비하여 검토해야 합니다. 특히, 프로덕션 환경에서 실행하기 전에 완전한 테스트와 변경 내역의 병합을 수행해야 합니다.

48 changes: 48 additions & 0 deletions server/sql/231111_1300.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
-- bside.post_quote definition

-- bside.alcohol_type definition

CREATE TABLE `alcohol_type`
(
`alcohol_type_no` bigint NOT NULL AUTO_INCREMENT,
`created_by` bigint DEFAULT NULL,
`created_date` datetime(6) DEFAULT NULL,
`last_modified_by` bigint DEFAULT NULL,
`last_modified_date` datetime(6) DEFAULT NULL,
`del_yn` enum ('N','Y') DEFAULT 'N',
`description` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`alcohol_type_no`)
) ENGINE = InnoDB
AUTO_INCREMENT = 5
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

CREATE TABLE `post_quote`
(
`created_by` bigint DEFAULT NULL,
`created_date` datetime(6) DEFAULT NULL,
`last_modified_by` bigint DEFAULT NULL,
`last_modified_date` datetime(6) DEFAULT NULL,
`post_no` bigint DEFAULT NULL,
`post_quote_no` bigint NOT NULL AUTO_INCREMENT,
`quote_no` bigint DEFAULT NULL,
`del_yn` enum ('N','Y') DEFAULT 'N',
PRIMARY KEY (`post_quote_no`),
KEY `FK6ay3nwfna4k4mqq99g3cvfwpx` (`post_no`),
KEY `FKsahkvutk2rot924eigkmie3kh` (`quote_no`),
CONSTRAINT `FK6ay3nwfna4k4mqq99g3cvfwpx` FOREIGN KEY (`post_no`) REFERENCES `post` (`post_no`),
CONSTRAINT `FKsahkvutk2rot924eigkmie3kh` FOREIGN KEY (`quote_no`) REFERENCES `post` (`post_no`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;


ALTER TABLE bside.alcohol
ADD alcohol_type_no bigint NULL;
ALTER TABLE bside.alcohol
CHANGE alcohol_type_no alcohol_type_no bigint NULL AFTER alcohol_no;

ALTER TABLE bside.alcohol
ADD CONSTRAINT FK_alcohol_alcohol_type
FOREIGN KEY (alcohol_type_no) REFERENCES alcohol_type (alcohol_type_no);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

위의 코드 패치에 대한 간단한 코드 리뷰입니다.

버그 위험:

  • post_quote 테이블에서 외래 키 제약 조건인 FKsahkvutk2rot924eigkmie3kh가 잘못 설정되어 있습니다. post_no 열이 아닌 quote_no 열을 참조하도록 되어 있습니다.

개선 제안:

  • AUTO_INCREMENT 속성을 가진 alcohol_type_no, post_quote_no 열을 사용하여 자동으로 고유한 값이 생성되도록 하였는데, 현재 alcohol 테이블과 관련된 열들은 이러한 식별자를 가지고 있지 않습니다. 따라서 alcohol 테이블에 alcohol_type_no 열에 대한 AUTO_INCREMENT 속성을 추가하고 해당 열에 대한 외래 키 제약 조건도 추가하는 것이 좋을 수 있습니다.

  • COLLATE 속성을 utf8mb4_0900_ai_ci로 설정하였는데, 현재 데이터베이스 서버가 이러한 캐릭터셋 및 콜레이션을 지원하는지 확인해야 합니다. 필요한 경우 해당 설정을 맞게 변경해야 합니다.

  • 코드의 일관성을 유지하기 위해 bside 스키마에 있는 테이블들만 수정하고 있으므로 해당 스키마 내의 테이블만 적용되는지 확인하십시오.

또한, 코드 리뷰 시나리오에서 알 수 있는 정보에 따라서는 보완할 수 있는 사항이 더 있을 수 있습니다.

23 changes: 23 additions & 0 deletions server/sql/231111_2140.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
-- bside.attach definition

CREATE TABLE `attach`
(
`attach_no` bigint NOT NULL AUTO_INCREMENT,
`created_by` bigint DEFAULT NULL,
`created_date` datetime(6) DEFAULT NULL,
`last_modified_by` bigint DEFAULT NULL,
`last_modified_date` datetime(6) DEFAULT NULL,
`ref_no` bigint DEFAULT NULL,
`attach_type` enum ('ALCOHOL','POST','PROFILE') DEFAULT NULL,
`attach_url` varchar(255) DEFAULT NULL,
`del_yn` enum ('N','Y') DEFAULT 'N',
`description` varchar(255) DEFAULT NULL,
`origin_filename` varchar(255) DEFAULT NULL,
`public_id` varchar(255) DEFAULT NULL,
`ref_table` varchar(255) DEFAULT NULL,
`save_file_name` varchar(255) DEFAULT NULL,
`save_location` varchar(255) DEFAULT NULL,
PRIMARY KEY (`attach_no`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_0900_ai_ci;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치는 attach라는 테이블을 생성하는 SQL 문입니다. 테이블은 다양한 열을 포함하고 있으며, AUTO_INCREMENT로 설정된 attach_no를 기본 키로 사용합니다.

향후 개선 가능한 사항과 버그 위험에 대해서는 추가 정보가 없어서 일반적인 측면에서 판단해야 합니다. 그러나 코드 자체는 유효해 보입니다.

17 changes: 17 additions & 0 deletions server/sql/231112_0025
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
-- bside.alcohol_tag definition

CREATE TABLE `alcohol_tag` (
`alcohol_no` bigint DEFAULT NULL,
`created_by` bigint DEFAULT NULL,
`created_date` datetime(6) DEFAULT NULL,
`last_modified_by` bigint DEFAULT NULL,
`last_modified_date` datetime(6) DEFAULT NULL,
`post_tag_no` bigint NOT NULL AUTO_INCREMENT,
`tag_no` bigint DEFAULT NULL,
`del_yn` enum('N','Y') DEFAULT 'N',
PRIMARY KEY (`post_tag_no`),
KEY `FKd0x09usc61vfc004cyn3au3dc` (`alcohol_no`),
KEY `FKam5om99numpdvspuroi2niehd` (`tag_no`),
CONSTRAINT `FKam5om99numpdvspuroi2niehd` FOREIGN KEY (`tag_no`) REFERENCES `tag` (`tag_no`),
CONSTRAINT `FKd0x09usc61vfc004cyn3au3dc` FOREIGN KEY (`alcohol_no`) REFERENCES `alcohol` (`alcohol_no`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아래는 코드 패치입니다. 버그 위험과/또는 개선 제안에 대해 간단히 코드 리뷰를 도와드리겠습니다:

  • CREATE TABLE 문을 통해 'alcohol_tag'라는 테이블을 생성합니다.
  • 'alcohol_tag' 테이블은 다양한 열들로 구성되어 있습니다. 그 중 몇 가지는 기본값을 가지고 있고, 일부는 NOT NULL 제약 조건을 갖습니다.
  • 'post_tag_no' 열은 AUTO_INCREMENT 속성을 가지며 PRIMARY KEY로 지정되었습니다.
  • 'alcohol_no'와 'tag_no' 열은 외래 키로 정의되어 있고, 각각 'alcohol' 테이블과 'tag' 테이블과의 관계를 나타내고 있습니다.
  • 인덱스와 외래 키 제약 조건이 추가되어 있다는 것을 알 수 있습니다.
  • 테이블의 ENGINE은 InnoDB로 설정되어 있으며, 문자열 CHARSET은 utf8mb4로 지정됩니다.
  • 마지막 줄에 새 줄(개행)이 없습니다.

개선 제안:

  • 코드 자체에서 큰 문제는 보이지 않습니다. 그러나 테이블 및 컬럼 이름, 데이터 타입 등이 프로젝트의 요구사항과 일치하는지 확인할 필요가 있습니다.
  • 코드 중간에 주석이 없으므로 추가적인 설명이 필요한 부분인지 파악할 수 없습니다. 가능하다면 주석을 추가하여 코드를 이해하기 쉽게 만드는 것이 좋습니다.
  • 테이블 생성 스크립트의 마지막에 개행(새 줄)을 추가하는 것이 코드의 가독성을 높일 수 있습니다.

위의 내용은 근거 있는 코드 리뷰를 위한 내용입니다. 실제로 코드가 완벽하지 않거나 개선이 필요한 부분이 있다고 해도, 해당 코드를 완전히 이해하거나 수정할 수 없어서 정확한 피드백을 제공할 수 없습니다.

2 changes: 2 additions & 0 deletions server/sql/231113_2200.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
ALTER TABLE bside.alcohol
MODIFY COLUMN `degree` float NULL;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 코드 패치에서는 bside.alcohol 테이블의 degree 열을 float 타입으로 수정하고 NULL 값을 허용하도록 변경합니다. 제공된 코드는 문제없이 작동할 것으로 보입니다. 추가적인 개선 사항은 없으며, 버그의 위험도도 낮을 것으로 사료됩니다.

Loading