From 4aab651d357960f5e043b15db8a8c4bd7881a8d7 Mon Sep 17 00:00:00 2001 From: minsu20 Date: Thu, 4 Jan 2024 00:42:39 +0900 Subject: [PATCH 1/2] =?UTF-8?q?refactor:=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .deploy/deploy_prod.sh | 2 +- .github/workflows/ci-cd.yml | 114 ------------------------------------ Dockerfile | 16 ----- deploy.sh | 67 --------------------- 4 files changed, 1 insertion(+), 198 deletions(-) delete mode 100644 .github/workflows/ci-cd.yml delete mode 100644 Dockerfile delete mode 100644 deploy.sh diff --git a/.deploy/deploy_prod.sh b/.deploy/deploy_prod.sh index 91c86b59..cee38ea1 100644 --- a/.deploy/deploy_prod.sh +++ b/.deploy/deploy_prod.sh @@ -52,7 +52,7 @@ sleep 40 EXIST_AFTER=$(docker ps --filter name=${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} --filter status=running -q) if [ -n "$EXIST_AFTER" ]; then # nginx.config를 컨테이너에 맞게 변경해주고 reload 한다 - cp ./nginx.${AFTER_COMPOSE_COLOR}.conf /etc/nginx/nginx.conf + sudo cp ./nginx.${AFTER_COMPOSE_COLOR}.conf /etc/nginx/nginx.conf sudo nginx -s reload # 이전 컨테이너 종료 diff --git a/.github/workflows/ci-cd.yml b/.github/workflows/ci-cd.yml deleted file mode 100644 index 38c626f3..00000000 --- a/.github/workflows/ci-cd.yml +++ /dev/null @@ -1,114 +0,0 @@ -#name: CI/CD -# -#on: -# push: -# branches: [ "main" ] -# -#permissions: -# contents: read -# -#jobs: -# build: -# runs-on: ubuntu-latest -# env: -# working-directory: ./ -# APPLICATION: ${{ secrets.APPLICATION }} -# GOOGLE_APPLICATION_CREDENTIALS: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} -# APPLE_KEY: ${{ secrets.APPLE_KEY }} -# -# steps: -# # 소스 코드 체크아웃 -# - uses: actions/checkout@v2 -# -# # JDK 11 설정 -# - name: Set up JDK 11 -# uses: actions/setup-java@v2 -# with: -# java-version: '11' -# distribution: 'adopt' -# -# # Gradle 패키지 캐시 -# - name: Cache Gradle packages -# uses: actions/cache@v2 -# with: -# path: | -# ~/.gradle/caches -# ~/.gradle/wrapper -# key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} -# restore-keys: | -# ${{ runner.os }}-gradle- -# -# # 설정 파일 생성 -# - run: | -# mkdir ./src/main/resources -# cd ./src/main/resources -# touch ./application.yml -# echo "${{env.APPLICATION}}" > ./application.yml -# touch ./firebase-key.json -# echo "${{env.GOOGLE_APPLICATION_CREDENTIALS}}" | base64 --decode > ./firebase-key.json -# touch ./apple-key.p8 -# echo "${{env.APPLE_KEY}}" > ./apple-key.p8 -# -# # 설정 파일을 작업공간에 저장 -# - uses: actions/upload-artifact@v2 -# with: -# name: application.yml -# path: ./src/main/resources/application.yml -# -# - uses: actions/upload-artifact@v2 -# with: -# name: firebase-key.json -# path: ./src/main/resources/firebase-key.json -# -# - uses: actions/upload-artifact@v2 -# with: -# name: apple-key.p8 -# path: ./src/main/resources/apple-key.p8 -# -# # gradlew 권한 설정 -# - name: Grant execute permission for gradlew -# run: chmod +x gradlew -# working-directory: ${{ env.working-directory }} -# -# # Gradle로 빌드 -# - name: Build with Gradle -# run: ./gradlew build -# working-directory: ${{ env.working-directory }} -# -# # Gradle 캐시 정리 -# - name: Cleanup Gradle Cache -# if: ${{ always() }} -# run: | -# rm -f ~/.gradle/caches/modules-2/modules-2.lock -# rm -f ~/.gradle/caches/modules-2/gc.properties -# -# # Docker 이미지 빌드 및 푸시 -# - name: Docker build -# run: | -# docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} -# docker build --no-cache -t ${{ secrets.DOCKER_USERNAME }}/moing:green . -# docker build --no-cache -t ${{ secrets.DOCKER_USERNAME }}/moing:blue . -# docker push ${{ secrets.DOCKER_USERNAME }}/moing:green -# docker push ${{ secrets.DOCKER_USERNAME }}/moing:blue -# -# # EC2로 deploy.sh 전송 -# - name: Deploy deploy.sh to EC2 -# uses: appleboy/scp-action@master -# with: -# host: ${{ secrets.EC2_SERVER_HOST }} -# username: ec2-user -# key: ${{ secrets.PRIVATE_KEY }} -# source: "./deploy.sh" -# target: "/home/ec2-user/" -# -# # 배포 스크립트 실행 -# - name: Deploy on EC2 -# uses: appleboy/ssh-action@master -# with: -# host: ${{ secrets.EC2_SERVER_HOST }} -# username: ec2-user -# key: ${{ secrets.PRIVATE_KEY }} -# envs: GITHUB_SHA -# script: | -# chmod +x /home/ec2-user/deploy.sh -# /home/ec2-user/deploy.sh diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 25848cbe..00000000 --- a/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM openjdk:11-jdk - -# 타임존 설정 -ENV TZ=Asia/Seoul -RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone - -ARG CACHEBREAKER=1 -ARG JAR_FILE=./build/libs/backend-0.0.1-SNAPSHOT.jar -COPY ${JAR_FILE} app.jar - -# 문서를 이미지의 /static/docs 디렉토리에 복사 -COPY ./build/docs/asciidoc/*.html /static/docs/ - -# 애플리케이션 실행 시 -cp 옵션을 사용하여 /static/docs 디렉토리를 클래스패스에 추가 -ENTRYPOINT ["java","-cp",".:/static/docs","-jar","/app.jar"] - diff --git a/deploy.sh b/deploy.sh deleted file mode 100644 index 39ee49ca..00000000 --- a/deploy.sh +++ /dev/null @@ -1,67 +0,0 @@ -DOCKER_APP_NAME=meetup -DOCKER_USERNAME=modagbul - -# 최신 이미지 가져오기 -docker pull ${DOCKER_USERNAME}/moing:blue -docker pull ${DOCKER_USERNAME}/moing:green - -# 현재 실행 중인 컨테이너를 확인 (blue 또는 green) -EXIST_BLUE=$(docker ps --filter name=${DOCKER_APP_NAME}-blue --filter status=running -q) -EXIST_GREEN=$(docker ps --filter name=${DOCKER_APP_NAME}-green --filter status=running -q) - -# 둘 다 실행 중이지 않을 경우 blue 실행 -if [ -z "$EXIST_BLUE" ] && [ -z "$EXIST_GREEN" ]; then - echo "No containers running. Starting blue up" - - # 만약 컨테이너가 중지된 상태로 존재하면 삭제한다. - if [ "$(docker ps -a --filter name=${DOCKER_APP_NAME}-blue -q)" ]; then - docker rm ${DOCKER_APP_NAME}-blue - fi - - docker run -d --name ${DOCKER_APP_NAME}-blue -p 8081:8080 -e TZ=Asia/Seoul ${DOCKER_USERNAME}/moing:blue - BEFORE_COMPOSE_COLOR="green" - AFTER_COMPOSE_COLOR="blue" -elif [ -z "$EXIST_BLUE" ]; then - echo "blue up" - - # 만약 컨테이너가 중지된 상태로 존재하면 삭제한다. - if [ "$(docker ps -a --filter name=${DOCKER_APP_NAME}-blue -q)" ]; then - docker rm ${DOCKER_APP_NAME}-blue - fi - - docker run -d --name ${DOCKER_APP_NAME}-blue -p 8081:8080 -e TZ=Asia/Seoul ${DOCKER_USERNAME}/moing:blue - BEFORE_COMPOSE_COLOR="green" - AFTER_COMPOSE_COLOR="blue" -else - echo "green up" - - # 만약 컨테이너가 중지된 상태로 존재하면 삭제한다. - if [ "$(docker ps -a --filter name=${DOCKER_APP_NAME}-green -q)" ]; then - docker rm ${DOCKER_APP_NAME}-green - fi - - docker run -d --name ${DOCKER_APP_NAME}-green -p 8082:8080 -e TZ=Asia/Seoul ${DOCKER_USERNAME}/moing:green - BEFORE_COMPOSE_COLOR="blue" - AFTER_COMPOSE_COLOR="green" -fi - - -sleep 40 - -# 새로운 컨테이너가 제대로 실행되었는지 확인 -EXIST_AFTER=$(docker ps --filter name=${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} --filter status=running -q) -if [ -n "$EXIST_AFTER" ]; then - # nginx.config를 컨테이너에 맞게 변경해주고 reload 한다 - cp ./nginx.${AFTER_COMPOSE_COLOR}.conf /etc/nginx/nginx.conf - sudo nginx -s reload - - # 이전 컨테이너 종료 - docker stop ${DOCKER_APP_NAME}-${BEFORE_COMPOSE_COLOR} - docker rm ${DOCKER_APP_NAME}-${BEFORE_COMPOSE_COLOR} - echo "$BEFORE_COMPOSE_COLOR down" -else - # Docker logs - LOGS=$(docker logs ${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} 2>&1) - echo "Error: ${DOCKER_APP_NAME}-${AFTER_COMPOSE_COLOR} failed to start." - echo "$LOGS" -fi From 38c736dc03454f963feb3da3cfb8eecb0a048b95 Mon Sep 17 00:00:00 2001 From: minsu20 Date: Thu, 4 Jan 2024 02:20:19 +0900 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=EC=A1=B4=EC=9E=AC=ED=95=98=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EC=9D=80=20=ED=8C=80=EC=97=90=20=EB=8C=80=ED=95=9C?= =?UTF-8?q?=20=EC=97=90=EB=9F=AC=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/SignInTeamUseCase.java | 2 +- .../repository/TeamCustomRepository.java | 1 + .../repository/TeamCustomRepositoryImpl.java | 21 +++++++++++++++++-- .../team/domain/service/TeamGetService.java | 4 ++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/moing/backend/domain/team/application/service/SignInTeamUseCase.java b/src/main/java/com/moing/backend/domain/team/application/service/SignInTeamUseCase.java index 0603d156..f40495f3 100644 --- a/src/main/java/com/moing/backend/domain/team/application/service/SignInTeamUseCase.java +++ b/src/main/java/com/moing/backend/domain/team/application/service/SignInTeamUseCase.java @@ -22,7 +22,7 @@ public class SignInTeamUseCase { private final TeamMemberSaveService teamMemberSaveService; public CreateTeamResponse signInTeam(String socialId, Long teamId){ Member member=memberGetService.getMemberBySocialId(socialId); - Team team=teamGetService.getTeamByTeamId(teamId); + Team team=teamGetService.getTeamIncludeDeletedByTeamId(teamId); teamMemberSaveService.addTeamMember(team, member); return new CreateTeamResponse(team.getTeamId()); } diff --git a/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepository.java b/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepository.java index a65e5c0a..d3f34c63 100644 --- a/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepository.java +++ b/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepository.java @@ -16,6 +16,7 @@ public interface TeamCustomRepository { GetTeamResponse findTeamByMemberId(Long memberId); Optional findTeamByTeamId(Long TeamId); + Optional findTeamIncludeDeletedByTeamId(Long teamId); List findTeamIdByMemberId(Long memberId); List findMyPageTeamByMemberId(Long memberId); List findTeamNameByTeamId(List teamId); diff --git a/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepositoryImpl.java b/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepositoryImpl.java index 41a03a07..5a779a5c 100644 --- a/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepositoryImpl.java +++ b/src/main/java/com/moing/backend/domain/team/domain/repository/TeamCustomRepositoryImpl.java @@ -49,6 +49,13 @@ public Optional findTeamByTeamId(Long teamId) { .fetchOne()); } + @Override + public Optional findTeamIncludeDeletedByTeamId(Long teamId){ + return Optional.ofNullable(queryFactory.selectFrom(team) + .where(team.teamId.eq(teamId)) + .fetchOne()); + } + @Override public List findTeamIdByMemberId(Long memberId){ LocalDateTime threeDaysAgo = LocalDateTime.now().minusDays(3); @@ -181,7 +188,7 @@ public Page findNewTeam(String dateSort, Pageable pageable) @Override public GetTeamCountResponse findTeamCount(Long memberId, Long teamId) { LocalDateTime threeDaysAgo = LocalDateTime.now().minusDays(3); - long count=queryFactory + Long count=queryFactory .select(team.count()) // 팀의 개수를 세기 위해 수정 .from(teamMember) .innerJoin(teamMember.team, team) @@ -192,6 +199,10 @@ public GetTeamCountResponse findTeamCount(Long memberId, Long teamId) { .or(team.deletionTime.after(threeDaysAgo)))) // 강제종료된 경우 3일이 지나지 않았다면 .fetchOne(); // 단일 결과 (개수) 반환 + if (count == null) { + count = 0L; // null인 경우 0으로 처리 + } + GetTeamCountResponse response=queryFactory .select(new QGetTeamCountResponse(team.name, member.nickName)) .from(team) @@ -199,7 +210,13 @@ public GetTeamCountResponse findTeamCount(Long memberId, Long teamId) { .where(team.teamId.eq(teamId)) .fetchOne(); - response.updateCount(count); + if (response == null) { + // response가 null인 경우, 적절한 기본값 설정 또는 예외 처리 + response = new GetTeamCountResponse("기본 팀 이름", "기본 멤버 닉네임"); + response.updateCount(0L); + } else { + response.updateCount(count); + } return response; } diff --git a/src/main/java/com/moing/backend/domain/team/domain/service/TeamGetService.java b/src/main/java/com/moing/backend/domain/team/domain/service/TeamGetService.java index 9498ce8d..0f764ad0 100644 --- a/src/main/java/com/moing/backend/domain/team/domain/service/TeamGetService.java +++ b/src/main/java/com/moing/backend/domain/team/domain/service/TeamGetService.java @@ -34,6 +34,10 @@ public List getTeamIdByMemberId(Long memberId) { return teamRepository.findTeamIdByMemberId(memberId); } + public Team getTeamIncludeDeletedByTeamId(Long teamId){ + return teamRepository.findTeamIncludeDeletedByTeamId(teamId).orElseThrow(NotFoundByTeamIdException::new); + } + public Team getTeamByTeamId(Long teamId){ return teamRepository.findTeamByTeamId(teamId).orElseThrow(NotFoundByTeamIdException::new); }