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 all 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
17 changes: 17 additions & 0 deletions server/.gitignore
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -266,3 +266,20 @@ 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


## logs ##
logs/

### security information
application.yml

### operation log
replay_pid.*.log
hs_err_pid.*.log
nohup.out

Choose a reason for hiding this comment

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

@@ -266,3 +266,20 @@ gradle-app.setting
*.hprof

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 // 애플리케이션 속성 파일

로그

logs/ // 로그 파일들이 저장되는 디렉토리입니다.

보안 정보

application.yml // 보안 관련 정보를 포함하는 설정 파일입니다.

작업 로그

replay_pid..log // replay_pid로 시작하고 .log로 끝나는 로그 파일
hs_err_pid.
.log // hs_err_pid로 시작하고 .log로 끝나는 로그 파일
nohup.out

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

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

134 changes: 89 additions & 45 deletions server/build.gradle
Original file line number Diff line number Diff line change
@@ -1,67 +1,111 @@
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
// archiveClassifier = '' // Classifier 제거
}

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

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

# prd
REPOSITORY=/home/bside/311TEN003

# local
#REPOSITORY=/Users/dongseoklee/github/311TEN003

# common
PROJECT_LOCATION_FOLDER_NAME=server
PROJECT_NAME=bside_311

cd $REPOSITORY/$PROJECT_LOCATION_FOLDER_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 --exclude-task test

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"
kill -9 "$CURRENT_PID"
sleep 10
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" --spring.profiles.active=prd &

Choose a reason for hiding this comment

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

위의 코드 패치는 다음과 같은 내용을 가지고 있습니다:

  1. 스크립트에서는 주어진 경로에 있는 Git 레포지토리에서 소스 코드를 가져와 빌드하는 작업을 합니다.
  2. gradlewdeploy.sh 파일에 대한 실행 권한을 변경합니다.
  3. 프로젝트를 빌드하고 생성된 JAR 파일을 지정된 경로로 복사합니다.
  4. 현재 동작 중인 어플리케이션 프로세스를 확인하고, 있다면 종료시키고 새 어플리케이션을 배포합니다.

개선 제안:

  • 스크립트 초기 부분에 "prd" 또는 "local" 등의 변수를 사용하여 환경 변수를 설정할 수 있습니다. 이는 실행 환경에 따라 경로가 달라질 수 있는 경우 유용합니다.
  • Gradle 빌드 시 --exclude-task test 옵션을 사용하여 테스트를 건너뛸 수 있습니다. 그러나 이는 테스트를 고려하지 않고 빌드하는 것이므로 신중하게 결정해야 합니다.
  • 어플리케이션 프로세스를 강제로 종료하는 kill -9 명령어는 강력한 종료 방법입니다. 가능하면 더 안전한 종료 방법(예: kill -15)을 사용하는 것이 좋습니다.
  • nohup 및 백그라운드 실행(&)을 사용하여 어플리케이션을 배포할 때 더욱 견고한 구조를 만들 수 있습니다. 어플리케이션 실행 시 로그 파일 등을 작성하고, 해당 로그 파일을 모니터링할 수 있는 기능을 추가하는 것도 고려해볼만 합니다.

버그 위험 사항:
위의 코드 스니펫에는 현재 버그나 보안 위험 요소가 보이지 않습니다. 그러나 전체 코드 범위와 환경 설정에 따라 추가적인 문제가 발생할 수 있으므로 주의해야 합니다.

Choose a reason for hiding this comment

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

이 코드 패치는 다음과 같은 리뷰를 할 수 있습니다:

  1. REPOSITORY 변수의 경로가 하드코딩되어 있으므로, 서버 환경에 맞게 수정할 필요가 있습니다. (예: prd 또는 local)

  2. PROJECT_LOCATION_FOLDER_NAMEPROJECT_NAME 변수도 하드코딩되어 있는데, 이러한 값을 환경변수에서 가져오는 것이 중요합니다. 그렇게 함으로써 코드의 유연성과 재사용성을 높일 수 있습니다.

  3. echo 구문을 사용하여 현재 진행 상황을 출력하는 것은 좋은 점입니다. 이를 통해 사용자가 스크립트를 실행할 때 어떤 단계가 진행되고 있는지 알 수 있습니다.

  4. git pull 명령어를 통해 최신 변경 사항을 가져오고 있습니다. 이 단계에서 컨플릭트나 충돌이 발생할 수 있으므로, 해당 상황에 대한 처리 방법이 필요할 것입니다.

  5. 프로젝트 빌드 단계에서 ./gradlew build --exclude-task test 명령어를 통해 빌드를 진행하고 있습니다. 이는 테스트를 제외한 빌드를 수행하는 방식으로 보입니다. 그러나 테스트를 무시하고 빌드하는 것은 좋은 접근법이 아닐 수 있으므로, 이 부분을 다시 확인해야 할 것입니다.

  6. 프로세스 ID를 확인하고 해당 프로세스를 종료하는 단계에서 kill -9 "$CURRENT_PID"를 사용하여 SIGKILL 시그널을 보내고 있습니다. 일반적으로는 프로세스에게 정상적으로 종료할 기회를 주기 위해 먼저 SIGTERM 시그널을 보내는 것이 좋습니다.

  7. 새로운 애플리케이션 배포 단계에서 백그라운드에서 실행될 때 nohup 명령어가 사용되는데, 실행 중에 오류가 발생한 경우 오류 로그를 확인할 수 없습니다. 따라서 문제가 발생할 경우 디버깅이 어려울 수 있습니다. 에러 처리 부분을 개선하여 문제가 발생한 경우 적절한 조치를 취할 수 있도록 해야 합니다.

  8. 코드가 Bash 스크립트로 작성되어 있는데, 쉘 스크립트의 안전한 운영을 위해 변수 확장과 따옴표 사용을 고려해야 합니다. 예를 들어, "$REPOSITORY", "$JAR_NAME"과 같이 변수를 따옴표로 감싸주는 것이 좋습니다.

이를 토대로 코드에 대한 버그 및 개선 사항을 파악하고 수정할 수 있을 것입니다.

Choose a reason for hiding this comment

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

이 코드는 주어진 저장소에서 프로젝트를 빌드하고 배포하는 스크립트입니다. 아래는 몇 가지 개선 및 버그 위험 사항입니다:

  1. 현재 코드에는 큰 문제가 없어 보입니다. 그러나 여전히 귀중한 내용을 생략한 가벼운 리뷰입니다.
  2. REPOSITORY 경로를 지정할 때 절대 경로를 사용하되, 다른 사람도 해당 코드를 실행할 수 있도록 유연성을 고려하여 변경할 수 있는 방법을 추가하는 것이 좋습니다.
  3. 스크립트를 실행하기 전에 필요한 종속성이 모두 설치되어 있는지 확인하고, 필요한 경우 오류 메시지를 출력하는 부분을 추가하는 것이 좋습니다.
  4. kill 명령을 사용하여 애플리케이션을 중지하는 대신, 애플리케이션이 제대로 종료되도록 'stop' 스크립트를 추가하는 것이 좋습니다.
  5. pid 파일을 사용하여 애플리케이션을 중지하는 방법을 고려해 볼 수 있습니다. 애플리케이션을 종료할 때 생성하고 시작할 때 이 값을 확인하여 중복 실행을 방지할 수 있습니다.
  6. 릴리즈 버전 정보를 파일에 저장하는 부분을 활성화하려면 주석 해제와 관련된 코드를 추가해야 합니다.

이러한 개선 사항을 고려하여 코드를 개선할 수 있습니다.

Choose a reason for hiding this comment

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

이 코드 패치는 다음과 같은 사항들에 대해 검토하고 있습니다. 잠재적인 버그 위험과 개선 제안이 환영됩니다.

  1. "REPOSITORY" 변수가 서버에서 절대 경로로 설정되어 있는데, 이 경로가 올바른지 확인해야 합니다.
  2. "PROJECT_LOCATION_FOLDER_NAME"과 "PROJECT_NAME" 변수도 올바른 값으로 설정되어야 합니다.
  3. "git pull" 명령어를 사용하여 최신 변경 사항을 가져오고 있습니다. 이 작업 전에 변경 사항을 커밋하거나 백업해야 할 수 있습니다.
  4. "gradlew" 파일과 "deploy.sh" 파일의 실행 권한이 변경되고 있습니다. 필요에 따라 이 부분을 검토하고 적절한 권한을 설정해야 합니다.
  5. "./gradlew build --exclude-task test" 명령어를 사용하여 프로젝트 빌드를 진행하고 있습니다. 테스트와 관련된 작업을 제외시켜야 하므로, 해당 옵션이 필요한지 확인해야 합니다.
  6. "/build/libs/*.jar" 경로에서 JAR 파일을 복사하고 있는데, 해당 경로에 실제로 빌드된 JAR 파일이 존재하는지 확인해야 합니다.
  7. 현재 실행 중인 애플리케이션의 PID를 확인하고, 해당 애플리케이션을 중지시키고 새로운 JAR 파일을 배포하는 로직이 구현되어 있습니다. 이 부분의 동작이 예상대로 실행되는지 확인해야 합니다.
  8. "nohup java -jar" 명령어를 사용하여 새로운 JAR 파일을 백그라운드에서 실행하고 있습니다. 필요한 프로파일과 함께 정확한 JAR 파일이 실행되는지 확인해야 합니다.

위의 사항들을 검토하고 주의해야 할 점이나 개선할 수 있는 부분을 확인하세요.

Choose a reason for hiding this comment

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

아래는 코드 패치에 대한 간단한 코드 리뷰입니다. 버그 위험과/또는 개선 제안 사항을 환영합니다:

  1. 이 스크립트는 Bash 셸에서 실행됩니다.
  2. REPOSITORY 변수는 프로젝트가 배포된 위치를 나타냅니다. 실제 경로가 올바른지 확인하세요.
  3. 현재 작업 디렉토리를 해당 프로젝트 폴더로 변경하는 것이 좋습니다(cd $REPOSITORY/$PROJECT_LOCATION_FOLDER_NAME/).
  4. "Git reset --hard" 명령으로 현재 코드를 원격 저장소의 최신 코드로 초기화할 수 있습니다.
  5. "git pull" 명령으로 코드를 최신 버전으로 업데이트할 수 있습니다.
  6. "./gradlew build --exclude-task test" 명령은 프로젝트를 빌드합니다. "--exclude-task test" 플래그는 테스트를 건너뛰도록 지정합니다.
  7. 빌드된 JAR 파일을 적절한 위치에 복사하는데, $REPOSITORY 변수 값이 정확한지 확인하세요.
  8. 현재 실행중인 애플리케이션의 pid를 확인하여 종료할 수 있습니다.
  9. kill 명령어를 사용하여 프로세스를 종료하며, -9 옵션은 SIGKILL 시그널을 사용하여 강제 종료합니다.
  10. 새로운 어플리케이션을 nohup 명령어를 사용하여 실행하고, 로그인 세션이 종료되더라도 계속 실행됩니다.
  11. "--spring.profiles.active=prd" 플래그를 사용하여 활성화할 스프링 프로필을 지정합니다.

위의 사항들을 확인하여 코드를 검토하고 개선할 수 있습니다.

Choose a reason for hiding this comment

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

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

  1. 지정된 경로에서 Git 저장소를 설정하고, 리셋 후 풀링합니다.
  2. 권한 변경과 프로젝트 빌드 작업을 수행합니다.
  3. Build 파일을 복사하고, 현재 실행 중인 애플리케이션의 PID를 확인합니다.
  4. 현재 애플리케이션이 실행 중인 경우에는 해당 PID를 종료시킵니다.
  5. 새로운 애플리케이션을 배포합니다.

개선점:

  • 주석이 부족하여 코드의 의도와 작동 방식을 이해하기 어렵습니다. 주석을 추가하여 코드를 설명하는 것이 좋습니다.
  • 스크립트가 오류 처리 기능을 포함하지 않으므로 예외 상황에 대비한 오류 처리를 추가하는 것이 좋습니다.
  • 하드 코딩된 경로를 변수로 대체하여 유지 관리 및 이식성을 향상시킬 수 있습니다.
  • 백그라운드에서 실행되는 nohup 명령어 사용 시 로그 파일에 대한 경로를 지정하는 것이 좋습니다.

잠재적인 버그 위험:

  • 스크립트가 여러 사용자에게 공유되는 경우, 보안 문제가 발생할 수 있으므로 파일 및 디렉토리 권한에 유의해야 합니다.
  • 명령어 실행 시, 결과를 검사하지 않고 바로 다음 명령을 실행하므로 예기치 않은 오류가 발생할 수 있습니다.

주의: 이 정보는 제가 2021년 9월까지 알려진 내용을 기반으로 작성된 것이며, 최신 업데이트 내용은 확인되지 않았습니다.

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를 기본 키로 사용합니다.

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

Loading