-
Notifications
You must be signed in to change notification settings - Fork 1
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
Develop #75
Develop #75
Changes from all commits
7bc4750
cb4fa46
bdaa87f
94c5e1b
e5c7c80
c5450f9
e7229cf
ed70a57
55aede1
2e9af17
c9736b1
e0f7451
225f88c
ba3e1c6
9392445
e9eb5c7
ba33a16
2b24143
2237246
f6d5398
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,6 +2,8 @@ | |
|
||
* http://localhost:8080/swagger-ui/index.html | ||
|
||
* http://localhost:8080/test | ||
|
||
# 수동 배포 방법 정리.(개선 필요.) | ||
|
||
```sh | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치에 대한 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험과/또는 개선 제안은 환영합니다:
주의 사항: |
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -61,6 +61,8 @@ dependencies { | |
// https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 | ||
implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4' | ||
|
||
implementation group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4' | ||
implementation group: 'commons-io', name: 'commons-io', version: '2.4' | ||
|
||
// if (profile == "localh2") { | ||
// runtimeOnly 'com.h2database:h2' | ||
|
@@ -69,8 +71,6 @@ dependencies { | |
// } | ||
runtimeOnly 'com.mysql:mysql-connector-j' | ||
|
||
runtimeOnly 'com.mysql:mysql-connector-j' | ||
|
||
annotationProcessor 'org.projectlombok:lombok' | ||
|
||
// spring boot 3.0 query dsl setting. | ||
|
@@ -82,7 +82,8 @@ dependencies { | |
// p6spy : sql 로그 남기기(바인딩된 파라미터 간편 확인.) | ||
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' | ||
|
||
testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
// testImplementation 'org.springframework.boot:spring-boot-starter-test' | ||
implementation 'org.springframework.boot:spring-boot-starter-test' | ||
testImplementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter-test:3.0.2' | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 코드 리뷰를 해드리겠습니다.
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
#!/bin/bash | ||
|
||
# swagger | ||
REPOSITORY=/home/bside/311TEN003_for_swagger | ||
|
||
# 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-swagger.sh 권한 변경 " | ||
chmod 777 gradlew | ||
chmod 774 scripts/deploy-swagger.sh | ||
|
||
echo "> 프로젝트 Build 시작" | ||
./gradlew build --exclude-task test | ||
|
||
echo "> Build 파일 복사" | ||
|
||
cp ./build/libs/*.jar $REPOSITORY/ | ||
|
||
echo "> 현재 구동중인 애플리케이션 pid 확인" | ||
|
||
#CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar) | ||
CURRENT_PID=$(pgrep -f "active=swagger") | ||
|
||
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=swagger & | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치는 다음과 같은 작업을 수행합니다:
이 코드에서 주의해야 할 몇 가지 사항이 있습니다:
개선 제안:
이러한 개선 사항은 코드의 가독성, 유지 보수성 및 안정성을 개선하는 데 도움이 될 수 있습니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -36,7 +36,8 @@ cp ./build/libs/*.jar $REPOSITORY/ | |
|
||
echo "> 현재 구동중인 애플리케이션 pid 확인" | ||
|
||
CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar) | ||
#CURRENT_PID=$(pgrep -f ${PROJECT_NAME}.*.jar) | ||
CURRENT_PID=$(pgrep -f "active=prd") | ||
|
||
echo "$CURRENT_PID" | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 제가 주어진 코드의 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험이나 개선 제안에 대해서도 적절한 응답을 드리겠습니다. @@ -36,7 +36,8 @@ cp ./build/libs/*.jar $REPOSITORY/ -CURRENT_PID=$(pgrep -f ${PROJECT_NAME}..jar) echo "$CURRENT_PID"
버그 위험:
개선 제안:
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -5,27 +5,25 @@ | |
import org.springframework.boot.autoconfigure.SpringBootApplication; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.data.domain.AuditorAware; | ||
import org.springframework.data.jpa.repository.config.EnableJpaAuditing; | ||
|
||
import java.util.Optional; | ||
|
||
@EnableJpaAuditing | ||
@SpringBootApplication | ||
public class Bside311Application { | ||
|
||
public static void main(String[] args) { | ||
SpringApplication.run(Bside311Application.class, args); | ||
} | ||
public static void main(String[] args) { | ||
SpringApplication.run(Bside311Application.class, args); | ||
} | ||
|
||
@Bean | ||
public AuditorAware<Long> auditorProvider() { | ||
return () -> { | ||
Long userNoFromAuthentication = AuthUtil.getUserNoFromAuthentication(); | ||
if (userNoFromAuthentication == null) { | ||
return Optional.empty(); | ||
} | ||
return Optional.of(userNoFromAuthentication); | ||
}; | ||
} | ||
@Bean | ||
public AuditorAware<Long> auditorProvider() { | ||
return () -> { | ||
Long userNoFromAuthentication = AuthUtil.getUserNoFromAuthentication(); | ||
if (userNoFromAuthentication == null) { | ||
return Optional.empty(); | ||
} | ||
return Optional.of(userNoFromAuthentication); | ||
}; | ||
} | ||
|
||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치에서 주목해야 할 부분은 다음과 같습니다:
코드 패치의 개선점:
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
package com.bside.bside_311; | ||
|
||
import com.bside.bside_311.entity.Post; | ||
|
||
public class PostDomain extends Post { | ||
|
||
public static PostDomain of(Post post) throws CloneNotSupportedException { | ||
return (PostDomain) Post.of(post); | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 주어진 코드 패치에 대한 간단한 코드 리뷰를 도와드리겠습니다.
위의 사항들을 고려하여 코드를 개선할 수 있습니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package com.bside.bside_311; | ||
|
||
import com.bside.bside_311.dto.GetPostVo; | ||
import com.bside.bside_311.dto.GetPostsMvo; | ||
import com.bside.bside_311.dto.PostResponseDto; | ||
import com.bside.bside_311.entity.Post; | ||
import com.bside.bside_311.repository.PostMybatisRepository; | ||
import com.bside.bside_311.repository.PostRepository; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Builder; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.Setter; | ||
|
||
import java.util.List; | ||
|
||
@Builder | ||
@Setter | ||
@AllArgsConstructor | ||
public class PostDomainMultiple { | ||
private final PostRepository postRepository; | ||
private final PostMybatisRepository postMybatisRepository; | ||
List<PostDomain> postDomainList; | ||
// List<PostResponseDto> postDomainList; | ||
Long totalCount; | ||
|
||
|
||
|
||
public static PostDomainMultiple init(PostRepository postRepository, PostMybatisRepository postMybatisRepository){ | ||
return PostDomainMultiple.builder().postRepository(postRepository).postMybatisRepository(postMybatisRepository).build(); | ||
} | ||
|
||
public static PostDomainMultiple of(GetPostVo getPostVo, PostRepository postRepository, PostMybatisRepository postMybatisRepository) { | ||
PostDomainMultiple postDomainMultiple = init(postRepository, postMybatisRepository); | ||
List<GetPostsMvo> getPostsMvos = postMybatisRepository.getPosts(getPostVo); | ||
Long totalCount = postMybatisRepository.getPostsCount(getPostVo); | ||
List<Post> posts = getPostsMvos.stream().map(Post::of).toList(); | ||
List<PostDomain> list = posts.stream().map(post -> { | ||
try { | ||
return PostDomain.of(post); | ||
} catch (CloneNotSupportedException e) { | ||
throw new RuntimeException(e); | ||
} | ||
}).toList(); | ||
postDomainMultiple.setPostDomainList(list); | ||
postDomainMultiple.setTotalCount(totalCount); | ||
return postDomainMultiple; | ||
} | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치는 코드 리뷰 내용:
개선 제안:
위의 내용을 참고하여 코드를 수정 및 개선하셔야 할 것입니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package com.bside.bside_311.config; | ||
|
||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.context.annotation.Profile; | ||
import org.springframework.data.jpa.repository.config.EnableJpaAuditing; | ||
|
||
@Profile("!test") | ||
@Configuration | ||
@EnableJpaAuditing | ||
public class JpaConfiguration { | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 이 코드 패치는 이 코드에는 버그나 위험이 없어 보입니다. 하지만 몇 가지 개선 제안사항이 있습니다:
이러한 개선 사항은 코드의 가독성과 유지 보수성을 향상시킬 수 있습니다. |
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -14,6 +14,8 @@ | |
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.data.domain.Page; | ||
import org.springframework.data.domain.Pageable; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.validation.annotation.Validated; | ||
import org.springframework.web.bind.annotation.DeleteMapping; | ||
|
@@ -88,6 +90,16 @@ public GetAlcoholResponseDto getAlcohol( | |
return alcoholService.getAlcohol(page, size, orderColumn, orderType, searchKeyword); | ||
} | ||
|
||
@Operation(summary = "[o]술 목록 조회v2(성능 최적화)", description = "술 조회 API Page, size 사용법. <br> ex1) /alcohols/v2?page=0&size=10&sort=id,desc <br> ex2) /alcohols/v2?page=0&size=10&sort=id,desc&sort=content,asc&searchKeyword=키워드&searchUserNos=1,2,4") | ||
@GetMapping("/v2") | ||
public Page<AlcoholResponseDto> getAlcoholV2( | ||
// @Schema(description = "페이지 번호와 사이즈.정렬 까지.(0부터) ex)[1]page=0&size=5&sort=id,desc [2]page=1&size=15&sort=id,desc&sort=content,asc", example = "0") | ||
Pageable pageable, | ||
@Schema(description = "알코올 키워드", example = "키워드") String searchKeyword) { | ||
log.info(">>> AlcoholController.getAlcohol"); | ||
return alcoholService.getAlcoholV2(pageable, searchKeyword); | ||
} | ||
|
||
@Operation(summary = "[o]술 상세 조회", description = "술 상세 조회 API") | ||
@GetMapping("/{alcoholNo}") | ||
public AlcoholResponseDto getAlcoholDetail(@PathVariable("alcoholNo") Long alcoholNo) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,7 +22,10 @@ | |
import jakarta.validation.Valid; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.data.domain.Page; | ||
import org.springframework.data.domain.Pageable; | ||
import org.springframework.http.HttpStatus; | ||
import org.springframework.util.StringUtils; | ||
import org.springframework.validation.annotation.Validated; | ||
import org.springframework.web.bind.annotation.DeleteMapping; | ||
import org.springframework.web.bind.annotation.GetMapping; | ||
|
@@ -35,6 +38,10 @@ | |
import org.springframework.web.bind.annotation.ResponseStatus; | ||
import org.springframework.web.bind.annotation.RestController; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.List; | ||
|
||
@Slf4j | ||
@Validated | ||
@RestController | ||
|
@@ -51,8 +58,7 @@ public class PostController { | |
public AddPostResponseDto addPost(@RequestBody @Valid AddPostRequestDto addPostRequestDto) { | ||
log.info(">>> PostController.addPost"); | ||
return postService.addPost(Post.of(addPostRequestDto), addPostRequestDto.getAlcoholNo(), | ||
addPostRequestDto.getAlcoholFeature(), addPostRequestDto.getTagList(), | ||
addPostRequestDto.getAlcoholInfo()); | ||
addPostRequestDto.getAlcoholFeature(), addPostRequestDto.getTagList()); | ||
} | ||
|
||
@Operation(summary = "[o]게시글 수정", description = "게시글 수정 API") | ||
|
@@ -74,7 +80,7 @@ public void deletePost(@PathVariable("postNo") Long postNo) { | |
postService.deletePost(postNo); | ||
} | ||
|
||
@Operation(summary = "[o]게시글 목록 조회", description = "게시글 조회 API") | ||
@Operation(summary = "[o]게시글 목록 조회(v1)", description = "게시글 조회 API") | ||
@GetMapping | ||
public GetPostResponseDto getPosts(@RequestParam(name = "page", defaultValue = "0") | ||
@Schema(description = "페이지번호(0부터), 기본값 0.", example = "0") | ||
|
@@ -83,16 +89,69 @@ public GetPostResponseDto getPosts(@RequestParam(name = "page", defaultValue = " | |
@Schema(description = "사이즈, 기본값 10.", example = "10") | ||
Long size, | ||
@RequestParam(required = false, name = "orderColumn") | ||
@Schema(description = "정렬 컬럼", example = "alcohol_no") | ||
@Schema(description = "정렬 컬럼", example = "post_no") | ||
String orderColumn, | ||
@RequestParam(required = false, name = "orderType") | ||
@Schema(description = "정렬 타입", example = "DESC") | ||
String orderType, | ||
@RequestParam(required = false, name = "searchKeyword") | ||
@Schema(description = "키워드", example = "키워드") | ||
String searchKeyword) { | ||
String searchKeyword, | ||
@RequestParam(required = false, name = "searchUserNos") | ||
@Schema(description = "검색 유저 번호들.", example = "1,2,4") | ||
String searchUserNos | ||
|
||
) { | ||
log.info(">>> PostController.getPost"); | ||
List<Long> searchUserNoList = new ArrayList<>(); | ||
try { | ||
searchUserNoList = | ||
Arrays.stream(searchUserNos.split(",")).map(Long::parseLong).toList(); | ||
} catch (NumberFormatException e) { | ||
log.error(">>> PostController.getPost searchUserNos 파싱 에러 NumberFormatException", e); | ||
} catch (Exception e) { | ||
log.error(">>> PostController.getPost searchUserNos 파싱 에러 Exception", e); | ||
} | ||
return postService.getPosts(page, size, orderColumn, orderType, searchKeyword, | ||
searchUserNoList); | ||
} | ||
|
||
@Operation(summary = "[o]게시글 목록 조회(v2)", description = "게시글 조회 API Page, size 사용법. <br> ex1) /posts/v2?page=0&size=10&sort=id,desc <br> ex2) /posts/v2?page=0&size=10&sort=id,desc&sort=content,asc&searchKeyword=키워드&searchUserNos=1,2,4") | ||
@GetMapping("/v2") | ||
public Page<PostResponseDto> getPostsV2( | ||
// @Schema(description = "페이지 번호와 사이즈.정렬 까지.(0부터) ex)[1]page=0&size=5&sort=id,desc [2]page=1&size=15&sort=id,desc&sort=content,asc", example = "0") | ||
Pageable pageable, | ||
@RequestParam(required = false, name = "searchKeyword") | ||
@Schema(description = "키워드", example = "키워드") | ||
String searchKeyword, | ||
@RequestParam(required = false, name = "searchUserNos") | ||
@Schema(description = "검색 유저 번호들.", example = "1,2,4") | ||
String searchUserNos, | ||
@RequestParam(required = false, name = "isLikedByMe") | ||
@Schema(description = "나에 의해서 좋아하는 게시글 필터 여부(true or false).", example = "false") | ||
Boolean isLikedByMe, | ||
@RequestParam(required = false, name = "isCommentedByMe") | ||
@Schema(description = "내가 댓글을 단 게시글 필터 여부.(true or false)", example = "false") | ||
Boolean isCommentedByMe | ||
|
||
) { | ||
log.info(">>> PostController.getPost"); | ||
return postService.getPosts(page, size, orderColumn, orderType, searchKeyword); | ||
List<Long> searchUserNoList = new ArrayList<>(); | ||
if (StringUtils.hasText(searchUserNos)) { | ||
try { | ||
searchUserNoList = | ||
Arrays.stream(searchUserNos.split(",")).map(Long::parseLong).toList(); | ||
} catch (NumberFormatException e) { | ||
log.error(">>> PostController.getPost searchUserNos 파싱 에러 NumberFormatException", e); | ||
throw new IllegalArgumentException("searchUserNos 파싱 에러 NumberFormatException", e); | ||
} catch (Exception e) { | ||
log.error(">>> PostController.getPost searchUserNos 파싱 에러 Exception", e); | ||
throw new IllegalArgumentException("searchUserNos 파싱 에러 Exception", e); | ||
} | ||
} | ||
|
||
return postService.getPostsV2(pageable, searchKeyword, searchUserNoList, isLikedByMe, | ||
isCommentedByMe); | ||
} | ||
|
||
@Operation(summary = "[o]게시글 상세 조회", description = "게시글 상세 조회 API") | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아래 코드 패치에 대해 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험과/또는 개선 제안을 환영합니다:
버그 위험 요소는 주요하게 두 부분입니다:
개선 제안은 다음과 같습니다:
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
위 코드 패치의 간단한 코드 리뷰를 도와드리겠습니다. 버그 위험 및 개선 제안은 환영합니다.
개선 제안:
gradle-app.setting
파일은 삭제되었습니다.src/main/generated/**
인 모든 파일이 제외됩니다.src/main/resources
디렉토리 내의application-prd.yml
과application.properties
파일이 경로 없이 나열됩니다.application-swagger.yml
파일이 추가되었습니다.logs/
디렉토리 내의 모든 로그 파일도 제외됩니다.application.yml
파일도 제거되었습니다.replay_pid.*.log
와 같은 형태의 파일도 제외됩니다.이상입니다.