From eb9b72e64e54b2e452169bf5ab25cd9af5e3418c Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:09:30 +0900 Subject: [PATCH 1/8] =?UTF-8?q?[#7]=20chore:=20Dockerfile=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..3edd9935 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM openjdk:17-alpine +ARG JAR_FILE=./build/libs/gwalit-0.0.1-SNAPSHOT.jar +COPY ${JAR_FILE} app.jar +ENTRYPOINT ["sh", "-c", "java -Duser.timezone=Asia/Seoul -jar /app.jar"] \ No newline at end of file From 4f0a4f01841408a9dcd627a3f9e4aba05fed58f2 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:09:38 +0900 Subject: [PATCH 2/8] =?UTF-8?q?[#7]=20chore:=20CI=20workflow=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release-ci.yml | 52 ++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .github/workflows/release-ci.yml diff --git a/.github/workflows/release-ci.yml b/.github/workflows/release-ci.yml new file mode 100644 index 00000000..4740ab3a --- /dev/null +++ b/.github/workflows/release-ci.yml @@ -0,0 +1,52 @@ +name: CI with Gradle + +on: + pull_request: + branches: + - main + +permissions: write-all + +jobs: + build: + # ubuntu 버전 지정 + runs-on: ubuntu-22.04 + steps: + # Checkout 진행 + - uses: actions/checkout@v3 + + # JDK 17 설치 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + + # Gradle 캐싱 + - name: Gradle Caching + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # Gradle 권한 부여 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # yml 반영 + - name: Make application-secret.yml + run: | + cd ./src/main + mkdir resources + cd ./resources + touch touch ./application.yml + echo "${{ secrets.GCP_APPLICATION_RELEASE}}" > ./application.yml + shell: bash + + # Gradle clean bootJar + - name: Build with Gradle + run: ./gradlew clean bootJar \ No newline at end of file From 31e7820dd8da3b77134296d8a80076bdcb214f7d Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:09:48 +0900 Subject: [PATCH 3/8] =?UTF-8?q?[#7]=20chore:=20CD=20workflow=20=EC=9E=91?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release-cd.yml | 80 ++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 .github/workflows/release-cd.yml diff --git a/.github/workflows/release-cd.yml b/.github/workflows/release-cd.yml new file mode 100644 index 00000000..126bfa4b --- /dev/null +++ b/.github/workflows/release-cd.yml @@ -0,0 +1,80 @@ +name: Beanstalk Deploy + +on: + push: + branches: + - main + +jobs: + build: + # ubuntu 버전 지정 + runs-on: ubuntu-22.04 + steps: + # Checkout 진행 + - uses: actions/checkout@v3 + + # JDK 17 설치 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'corretto' + + # Gradle 캐싱 + - name: Gradle Caching + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + # Gradle 권한 부여 + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + # secret.yml 반영 + - name: Make application-secret.yml + run: | + cd ./src/main/resources + touch ./application.yml + echo "${{ secrets.APPLICATION_SECRET}}" > ./application-secret.yml + shell: bash + + # release.yml 반영 + - name: Make application-release.yml + run: | + cd ./src/main + mkdir resources + cd ./resources + touch touch ./application.yml + echo "${{ secrets.GCP_APPLICATION_RELEASE}}" > ./application.yml + shell: bash + + # Gradle BootJar + - name: BootJar with Gradle + run: ./gradlew clean bootJar -Dspring.profiles.active=release + + # Docker Image Push + - name: Docker Image push + run: | + docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} + docker build -t ${{ secrets.DOCKERHUB_USERNAME}}/${{ secrets.DOCKERHUB_REPOSITORY}} ./ + docker push ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY}} + + # Docker Compose + - name: Docker Compose + uses: appleboy/ssh-action@master + with: + host: ${{ secrets.EC2-SERVER-IP }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + script: | + sudo docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_PASSWORD }} + sudo docker-compose stop ${{ secrets.DOCKER_SERVICE_NAME }} + sudo docker-compose rm -f ${{ secrets.DOCKER_SERVICE_NAME }} + sudo docker pull ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY}} + sudo docker tag ${{ secrets.DOCKERHUB_USERNAME }}/${{ secrets.DOCKERHUB_REPOSITORY}} ${{ secrets.DOCKER_IMAGE_NAME }} + sudo docker-compose up -d \ No newline at end of file From 3fb23f7d2c1e40fef71a8570359bd20a1e105adb Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:22:53 +0900 Subject: [PATCH 4/8] =?UTF-8?q?[#7]=20chore:=20Redis=20dependency=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 3 +++ 1 file changed, 3 insertions(+) diff --git a/build.gradle b/build.gradle index 6e393e57..6709d05a 100644 --- a/build.gradle +++ b/build.gradle @@ -34,6 +34,9 @@ dependencies { // MySQL runtimeOnly 'com.mysql:mysql-connector-j' + // Redis + implementation 'org.springframework.boot:spring-boot-starter-data-redis' + // Swagger UI - spring doc implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' From 1cb8c96650adf8f42daf81c415e1b3ee6a629396 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:42:14 +0900 Subject: [PATCH 5/8] =?UTF-8?q?[#7]=20chore:=20Redis=20=ED=99=98=EA=B2=BD?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/global/config/RedisConfig.java | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/global/config/RedisConfig.java diff --git a/src/main/java/com/gongjakso/server/global/config/RedisConfig.java b/src/main/java/com/gongjakso/server/global/config/RedisConfig.java new file mode 100644 index 00000000..f8093cb4 --- /dev/null +++ b/src/main/java/com/gongjakso/server/global/config/RedisConfig.java @@ -0,0 +1,36 @@ +package com.gongjakso.server.global.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.repository.configuration.EnableRedisRepositories; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +@Configuration +@EnableRedisRepositories +public class RedisConfig { + + @Value("${spring.redis.host}") + private String host; + + @Value("${spring.redis.port}") + private Integer port; + + @Bean + public RedisConnectionFactory redisConnectionFactory() { + return new LettuceConnectionFactory(host, port); + } + + @Bean + public RedisTemplate redisTemplate() { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setConnectionFactory(redisConnectionFactory()); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(new StringRedisSerializer()); + + return redisTemplate; + } +} From 95ef3c68af547fa223ac1e999a04f15a885f2ad2 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:42:24 +0900 Subject: [PATCH 6/8] =?UTF-8?q?[#7]=20chore:=20Redis=20Component=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/global/util/redis/RedisClient.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/global/util/redis/RedisClient.java diff --git a/src/main/java/com/gongjakso/server/global/util/redis/RedisClient.java b/src/main/java/com/gongjakso/server/global/util/redis/RedisClient.java new file mode 100644 index 00000000..446d74cf --- /dev/null +++ b/src/main/java/com/gongjakso/server/global/util/redis/RedisClient.java @@ -0,0 +1,45 @@ +package com.gongjakso.server.global.util.redis; + +import lombok.RequiredArgsConstructor; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.ValueOperations; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.util.Objects; + +@Component +@RequiredArgsConstructor +public class RedisClient { + + private final RedisTemplate redisTemplate; + + /** + * Redis에 값 삽입하는 메소드 + * @param key - 삽입하고자 하는 데이터의 key + * @param value - 삽입하고자 하는 데이터의 value + * @param timeout - 삽입하고자 하는 데이터의 유효 시간 + */ + public void setValue(String key, String value, Long timeout) { + ValueOperations values = redisTemplate.opsForValue(); + values.set(key, value, Duration.ofMinutes(timeout)); + } + + /** + * Redis에서 key값을 기반으로 value를 찾아서 반환하는 메소드 + * @param key - value를 찾을 데이터의 key 값 + * @return - 해당 데이터의 value 반환 + */ + public String getValue(String key) { + ValueOperations values = redisTemplate.opsForValue(); + return Objects.requireNonNull(values.get(key)).toString(); + } + + /** + * Redis에서 key에 해당하는 데이터를 삭제하는 메소드 + * @param key - 삭제할 데이터의 key를 의미 + */ + public void deleteValue(String key) { + redisTemplate.delete(key); + } +} From f37bc640b7658efd38954679e8b5989167098c1b Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:50:18 +0900 Subject: [PATCH 7/8] =?UTF-8?q?[#7]=20style:=20CD=20workflow=20=EB=AA=85?= =?UTF-8?q?=EC=B9=AD=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release-cd.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-cd.yml b/.github/workflows/release-cd.yml index 126bfa4b..40cdb2c7 100644 --- a/.github/workflows/release-cd.yml +++ b/.github/workflows/release-cd.yml @@ -1,4 +1,4 @@ -name: Beanstalk Deploy +name: AWS EC2 Deploy on: push: From e77259ad953102e73822351e49d5814a7aadad8d Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 21 Jan 2024 21:51:41 +0900 Subject: [PATCH 8/8] =?UTF-8?q?[#7]=20chore:=20CI=20workflow=20Java=20Dist?= =?UTF-8?q?ribution=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/release-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-ci.yml b/.github/workflows/release-ci.yml index 4740ab3a..f196a29e 100644 --- a/.github/workflows/release-ci.yml +++ b/.github/workflows/release-ci.yml @@ -20,7 +20,7 @@ jobs: uses: actions/setup-java@v3 with: java-version: '17' - distribution: 'temurin' + distribution: 'corretto' # Gradle 캐싱 - name: Gradle Caching