From 0f5fe36e8c28b3504b54de799aa22c78a9689c00 Mon Sep 17 00:00:00 2001 From: EunChanNam Date: Mon, 4 Dec 2023 13:34:53 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A6=AC=EB=B7=B0=20=EC=BF=BC=EB=A6=AC?= =?UTF-8?q?=20=EC=84=B1=EB=8A=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=EB=A5=BC=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 조인을 사용하는 쿼리와 사용하지 않는 쿼리 --- .github/workflows/cd.yml | 44 +++++++------------ docker-compose.yml | 28 ++++++++++++ docker/docker-compose.yml | 15 ------- .../global/config/WebConfig.java | 3 +- .../global/utils/RedisUtils.java | 3 +- .../review/application/LikeReviewService.java | 2 +- .../ReviewQueryTestController.java | 22 +++++----- src/main/resources/application-dev.yml | 2 +- src/main/resources/application-prod.yml | 43 +++++------------- 9 files changed, 73 insertions(+), 89 deletions(-) create mode 100644 docker-compose.yml delete mode 100644 docker/docker-compose.yml diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 37f3768..2ed4fe2 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -32,33 +32,23 @@ jobs: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} -# - name: 환경변수 파일 생성 -# run: echo "${{ secrets.APPLICATION_ENV }}" > ./.env -# -# - name: 환경변수 파일을 서버로 전송한다 -# uses: appleboy/scp-action@v0.1.4 -# with: -# host: ${{ secrets.HOST }} -# username: ${{ secrets.USERNAME }} -# key: ${{ secrets.PRIVATE_KEY }} -# port: ${{ secrets.PORT }} -# source: "./.env" -# target: "./" - -# - name: ubuntu Docker image build and push -# run: | -# docker-compose -f ./docker/docker-compose.yml build -# docker-compose -f ./docker/docker-compose.yml push - - name: ubuntu Docker image build - run: docker build -t ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:latest -f Dockerfile-server . - - - name: Redis Docker image build - run: docker build -t ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:redis -f Dockerfile-redis . + - name: 환경변수 파일 생성 + run: echo "${{ secrets.APPLICATION_ENV }}" > ./.env - - name: ubuntu docker Hub 푸쉬 - run: docker push ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:latest - - name: Redis docker Hub 푸쉬 - run: docker push ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:redis + - name: ubuntu Docker image build and push + run: | + docker-compose -f ./docker-compose.yml build~ + docker-compose -f ./docker-compose.yml push +# - name: ubuntu Docker image build +# run: docker build -t ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:latest -f Dockerfile-server . +# +# - name: Redis Docker image build +# run: docker build -t ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:redis -f Dockerfile-redis . +# +# - name: ubuntu docker Hub 푸쉬 +# run: docker push ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:latest +# - name: Redis docker Hub 푸쉬 +# run: docker push ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:redis - name: Deploy with push uses: appleboy/ssh-action@v1.0.0 @@ -73,7 +63,7 @@ jobs: sudo docker stop wswh-redis || true sudo docker container prune -f sudo docker pull ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:latest - sudo docker run -d --log-driver=syslog --env-file .env \ + sudo docker run -d --log-driver=syslog \ -p 8080:8080 --name we-share-wish-hair \ ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:latest sudo docker pull ${{ secrets.DOCKER_NAME }}/we-share-wish-hair:redis diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f661b38 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +version: '3' +services: + server: + image: openjdk:17-alpine + restart: always + env_file: + - .env + volumes: + - ./build/libs:/home + command: ["java", "-jar", + "-Dspring.profiles.active=prod", + "/home/advanced-we-share-wish-hair-0.0.1-SNAPSHOT.jar"] + ports: + - '8080:8080' + platform: linux/amd64 + networks: + - my-net + + redis: + image: redis:latest + ports: + - '6379:6379' + platform: linux/amd64 + networks: + - my-net + +networks: + my-net: \ No newline at end of file diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml deleted file mode 100644 index 6a9c727..0000000 --- a/docker/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -version: '3' -services: - server: - build: - context: ./ - dockerfile: ../Dockerfile-server - image: eunchannam/we-share-wish-hair:latest - platform: linux/amd64 - - redis: - build: - context: ./ - dockerfile: ../Dockerfile-redis - image: eunchannam/we-share-wish-hair:redis - platform: linux/amd64 diff --git a/src/main/java/com/inq/wishhair/wesharewishhair/global/config/WebConfig.java b/src/main/java/com/inq/wishhair/wesharewishhair/global/config/WebConfig.java index 67febb3..217c691 100644 --- a/src/main/java/com/inq/wishhair/wesharewishhair/global/config/WebConfig.java +++ b/src/main/java/com/inq/wishhair/wesharewishhair/global/config/WebConfig.java @@ -45,7 +45,8 @@ public void addInterceptors(final InterceptorRegistry registry) { .addExcludePathPattern("/api/users/refresh/*") .addExcludePathPattern("/api/like/test/clean") .addExcludePathPattern("/api/like/test/count/**") - .addExcludePathPattern("/api/email/*"); + .addExcludePathPattern("/api/email/*") + .addExcludePathPattern("/api/reviews/test/**"); registry .addInterceptor(pathMatcherInterceptor) diff --git a/src/main/java/com/inq/wishhair/wesharewishhair/global/utils/RedisUtils.java b/src/main/java/com/inq/wishhair/wesharewishhair/global/utils/RedisUtils.java index be7bc8b..d7c0718 100644 --- a/src/main/java/com/inq/wishhair/wesharewishhair/global/utils/RedisUtils.java +++ b/src/main/java/com/inq/wishhair/wesharewishhair/global/utils/RedisUtils.java @@ -36,8 +36,9 @@ public void decreaseData(Long key) { } public Optional getData(Long key) { + Long value = redisTemplate.opsForValue().get(String.valueOf(key)); return Optional.ofNullable( - redisTemplate.opsForValue().get(String.valueOf(key)) + value ); } } diff --git a/src/main/java/com/inq/wishhair/wesharewishhair/review/application/LikeReviewService.java b/src/main/java/com/inq/wishhair/wesharewishhair/review/application/LikeReviewService.java index 9f59b60..ff469b2 100644 --- a/src/main/java/com/inq/wishhair/wesharewishhair/review/application/LikeReviewService.java +++ b/src/main/java/com/inq/wishhair/wesharewishhair/review/application/LikeReviewService.java @@ -60,7 +60,7 @@ public LikeReviewResponse checkIsLiking(Long userId, Long reviewId) { public Long getLikeCount(Long reviewId) { return redisUtils.getData(reviewId) - .orElse(updateLikeCountFromRedis(reviewId)); + .orElseGet(() -> updateLikeCountFromRedis(reviewId)); } public List getLikeCounts(List reviewIds) { diff --git a/src/main/java/com/inq/wishhair/wesharewishhair/review/presentation/ReviewQueryTestController.java b/src/main/java/com/inq/wishhair/wesharewishhair/review/presentation/ReviewQueryTestController.java index ba368af..f524082 100644 --- a/src/main/java/com/inq/wishhair/wesharewishhair/review/presentation/ReviewQueryTestController.java +++ b/src/main/java/com/inq/wishhair/wesharewishhair/review/presentation/ReviewQueryTestController.java @@ -3,15 +3,13 @@ import java.util.List; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import com.inq.wishhair.wesharewishhair.global.dto.response.ResponseWrapper; -import com.inq.wishhair.wesharewishhair.review.application.dto.response.ReviewResponse; -import com.inq.wishhair.wesharewishhair.review.application.dto.response.ReviewResponseAssembler; +import com.inq.wishhair.wesharewishhair.review.application.LikeReviewService; import com.inq.wishhair.wesharewishhair.review.domain.entity.Review; import com.inq.wishhair.wesharewishhair.review.infrastructure.ReviewQueryDslRepository; -import com.inq.wishhair.wesharewishhair.review.infrastructure.ReviewQueryResponse; import lombok.RequiredArgsConstructor; @@ -21,19 +19,19 @@ public class ReviewQueryTestController { private final ReviewQueryDslRepository reviewQueryDslRepository; + private final LikeReviewService likeReviewService; @Transactional(readOnly = true) - public ResponseWrapper withJoin() { - List reviews = reviewQueryDslRepository.joinWithLikeQuery() - .stream() - .map(ReviewQueryResponse::getReview) - .toList(); - return ReviewResponseAssembler.toWrappedReviewResponse(reviews); + @GetMapping("/join") + public void withJoin() { + reviewQueryDslRepository.joinWithLikeQuery(); } @Transactional(readOnly = true) - public ResponseWrapper withoutJoin() { + @GetMapping("/no_join") + public void withoutJoin() { List reviews = reviewQueryDslRepository.noJoinQuery(); - return ReviewResponseAssembler.toWrappedReviewResponse(reviews); + List reviewIds = reviews.stream().map(Review::getId).toList(); + likeReviewService.getLikeCounts(reviewIds); } } diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index b75eb5f..ff4e3d5 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -5,7 +5,7 @@ server: spring: data: redis: - host: 3.21.14.25 + host: localhost port: 6379 expire-time: 21600000 diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 5a9d93d..6a9088a 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -11,9 +11,9 @@ spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver - url: jdbc:mysql://wswh-master-db.cgr8ovkfv2rw.us-east-2.rds.amazonaws.com/wswh_db - username: admin - password: dksk7946447 + url: ${URL} + username: ${USERNAME} + password: ${PW} jpa: hibernate: @@ -30,8 +30,8 @@ spring: mail: host: smtp.gmail.com port: 587 - username: namhm23@kyonggi.ac.kr - password: qkvpxhpgyuywcbgh + username: ${MAIL_USERNAME} + password: ${MAIL_PW} protocol: smtp properties: mail: @@ -60,42 +60,23 @@ decorator: #JWT key jwt: - secret-key: abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc - access-token-validity: 180000000 - refresh-token-validity: 259200000 + secret-key: ${JWT_KEY} + access-token-validity: ${ACCESS_VALIDITY} + refresh-token-validity: ${REFRESH_VALIDITY} # 네이버 클라우드 오브젝트 스토리지 cloud: aws: credentials: - access-key: N3JCSJUtgse4alKEaOqX - secret-key: rRamLrfUV8v6ZziJFEN4CVLjE9rl4kCBnEOLje5f + access-key: ${S3_ACCESS_KEY} + secret-key: ${S3_SECRET_KEY} stack: auto: false region: static: ap-northeast-2 s3: endpoint: https://kr.object.ncloudstorage.com - bucket: wswh-storage + bucket: ${S3_BUCKET} logging: level: - root: info ---- -spring: - config: - activate: - on-profile: dev - - datasource: - master: - hikari: - username: root - password: 1234 - driver-class-name: com.mysql.cj.jdbc.Driver - jdbc-url: jdbc:mysql://localhost:3306/db - slave: - hikari: - username: root - password: 1234 - driver-class-name: com.mysql.cj.jdbc.Driver - jdbc-url: jdbc:mysql://localhost:3307/db + root: info \ No newline at end of file