Skip to content

Commit 8baa1c7

Browse files
authored
♻️ refactor: 의존성 & yml 수정 (#265)
* refactor: 의존성 및 yml 정리, DB 스키마 정의, 포트원 모듈 삭제 * cd: ci/cd yml 수정 * fix: test 에러 수정
1 parent 1c7db7c commit 8baa1c7

File tree

25 files changed

+277
-405
lines changed

25 files changed

+277
-405
lines changed

.github/workflows/cd_gradle.yml

+65-19
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,94 @@
1-
name: Java CD with Gradle
1+
name: CD
22

33
on:
4+
workflow_dispatch:
45
push:
56
branches: [ "develop" ]
67

8+
permissions:
9+
contents: read
10+
711
jobs:
812
cd:
913
runs-on: ubuntu-latest
1014
steps:
11-
- name: Checkout
12-
uses: actions/checkout@v3
13-
15+
- uses: actions/checkout@v3
1416
- name: Set up JDK 17
1517
uses: actions/setup-java@v3
1618
with:
1719
java-version: '17'
1820
distribution: 'temurin'
1921

20-
# DockerHub Login (2)
21-
- name: Docker login
22-
uses: docker/login-action@v2
22+
## gradle 캐싱
23+
- name: Gradle Caching
24+
uses: actions/cache@v3
25+
with:
26+
path: |
27+
~/.gradle/caches
28+
~/.gradle/wrapper
29+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
30+
restore-keys: |
31+
${{ runner.os }}-gradle-
32+
33+
## create application.yml
34+
- name: make application-secret.yml
35+
run: |
36+
mkdir -p ./api/src/main/resources
37+
touch ./api/src/main/resources/application-secret.yml
38+
shell: bash
39+
- name: deliver application-secret.yml
40+
run: echo "${{ secrets.APPLICATION_SECRET }}" > ./api/src/main/resources/application-secret.yml
41+
shell: bash
42+
43+
# 빌드 및 테스트 단계.
44+
- name: Grant execute permission for gradlew
45+
run: chmod +x gradlew
46+
47+
# gradle build
48+
- name: Build with Gradle
49+
run: ./gradlew build -x test
50+
51+
# push 하기 위해 로그인
52+
- name: Docker Hub 로그인
53+
uses: docker/login-action@v3
2354
with:
2455
username: ${{ secrets.DOCKER_USERNAME }}
2556
password: ${{ secrets.DOCKER_PASSWORD }}
2657

27-
# AWS EC2 Server Connect & Docker command execution
28-
- name: Deploy
58+
#도커 빌드 & 이미지 push
59+
- name: Docker build & Push
60+
run: |
61+
docker build -f Dockerfile -t ${{ secrets.DOCKER_USERNAME }}/sponus-docker .
62+
docker push ${{ secrets.DOCKER_USERNAME }}/sponus-docker
63+
64+
# Docker 파일을 EC2 서버에 배포
65+
- name: Deploy to Prod
2966
uses: appleboy/ssh-action@master
67+
id: deploy-prod
3068
with:
31-
host: ${{ secrets.HOST }} # EC2 instance public DNS
69+
host: ${{ secrets.HOST }}
3270
username: ec2-user
33-
key: ${{ secrets.PRIVATE_KEY }} # pem key
71+
key: ${{ secrets.PRIVATE_KEY }}
72+
port: 22
3473
script: |
35-
sudo docker stop sponus-docker
36-
sudo docker rm sponus-docker
37-
sudo docker rmi ${{ secrets.DOCKER_USERNAME }}/sponus-docker
38-
sudo docker pull ${{ secrets.DOCKER_USERNAME }}/sponus-docker
39-
40-
sudo docker stop my-redis
41-
sudo docker rm my-redis
42-
sudo docker rmi redis
74+
if [ ! -z "$(docker ps -q)" ]; then
75+
docker stop $(docker ps -q)
76+
fi
4377
78+
if [ ! -z "$(docker ps -aq)" ]; then
79+
docker rm $(docker ps -aq)
80+
fi
81+
82+
if [ ! -z "$(docker network ls -qf name=my-network)" ]; then
83+
docker network rm my-network
84+
fi
85+
86+
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
87+
docker pull ${{ secrets.DOCKER_ID }}/tiki-taza
88+
4489
sudo docker pull redis
4590
sudo docker network create my-network
4691
sudo docker run --name my-redis --network my-network -d redis
4792
sudo docker run -e SPRING_PROFILES_ACTIVE=prod -it -d -p 8080:8080 --name sponus-docker -e TZ=Asia/Seoul --network my-network ${{ secrets.DOCKER_USERNAME }}/sponus-docker
4893
94+
docker system prune -f

.github/workflows/ci_gradle.yml

+9-109
Original file line numberDiff line numberDiff line change
@@ -1,123 +1,23 @@
1-
name: Java CI with Gradle
1+
name: CI
22

33
on:
44
pull_request:
55
branches: [ "develop" ]
66

7+
permissions:
8+
contents: read
9+
710
jobs:
811
ci:
912
runs-on: ubuntu-latest
1013
steps:
11-
- name: Checkout
12-
uses: actions/checkout@v3
14+
- uses: actions/checkout@v3
1315
- name: Set up JDK 17
1416
uses: actions/setup-java@v3
1517
with:
16-
1718
java-version: '17'
1819
distribution: 'temurin'
19-
20-
- name: 1) Convert to prod config
21-
run: |
22-
cd ./api/src/main/resources
23-
[ -e "application.yml" ] && rm application.yml
24-
echo "spring:" > application.yml
25-
echo " profiles:" >> application.yml
26-
echo " group:" >> application.yml
27-
echo " "prod": "db, s3, redis, email, portone, firebase, security"" >> application.yml
28-
echo " default: prod" >> application.yml
29-
30-
echo " servlet:" >> application.yml
31-
echo " multipart:" >> application.yml
32-
echo " max-file-size: 20MB" >> application.yml
33-
echo " max-request-size: 20MB" >> application.yml
34-
35-
36-
- name: 2) Set FCM
37-
env:
38-
DATA: ${{ secrets.FIREBASE_KEY }}
39-
run: |
40-
mkdir -p ./core/core-infra-firebase/src/main/resources/firebase
41-
echo $DATA > ./core/core-infra-firebase/src/main/resources/firebase/firebase-key.json
42-
43-
- name: 3) application-security.yml
44-
uses: microsoft/variable-substitution@v1
45-
with:
46-
files: ./core/core-infra-security/src/main/resources/application-security.yml
47-
env:
48-
spring.jwt.secret: ${{ secrets.JWT_SECRET }}
49-
spring.jwt.token.access-expiration-time: ${{ secrets.JWT_ACCESS_EXPIRATION_TIME }}
50-
spring.jwt.token.refresh-expiration-time: ${{ secrets.JWT_REFRESH_EXPIRATION_TIME }}
51-
52-
- name: 4) Set application-db.yml
53-
uses: microsoft/variable-substitution@v1
54-
with:
55-
files: ./core/core-infra-db/src/main/resources/application-db.yml
56-
env:
57-
spring.datasource.url: ${{ secrets.DB_URL }}
58-
spring.datasource.username: ${{ secrets.DB_USERNAME }}
59-
spring.datasource.password: ${{ secrets.DB_PW }}
60-
61-
- name: 5) Set application-s3.yml
62-
uses: microsoft/variable-substitution@v1
63-
with:
64-
files: ./core/core-infra-s3/src/main/resources/application-s3.yml
65-
env:
66-
cloud.aws.s3.bucket: ${{ secrets.BUCKET }}
67-
cloud.aws.region.static: ${{ secrets.REGION }}
68-
cloud.aws.credentials.accessKey: ${{ secrets.S3_ACCESS_KEY }}
69-
cloud.aws.credentials.secretKey: ${{ secrets.S3_SECRET_KEY }}
70-
71-
- name: 6) Set application-redis.yml
72-
uses: microsoft/variable-substitution@v1
73-
with:
74-
files: ./core/core-infra-redis/src/main/resources/application-redis.yml
75-
env:
76-
spring.data.redis.host: ${{ secrets.REDIS_HOST }}
77-
spring.data.redis.port: ${{ secrets.REDIS_PORT }}
78-
79-
- name: 7) Set application-email.yml
80-
uses: microsoft/variable-substitution@v1
81-
with:
82-
files: ./core/core-infra-email/src/main/resources/application-email.yml
83-
env:
84-
mail.smtp.port: ${{ secrets.EMAIL_PORT }}
85-
AdminMail.id: ${{ secrets.EMAIL_ID }}
86-
AdminMail.password: ${{ secrets.EMAIL_PASSWORD }}
87-
88-
- name: 8) Set application-portone.yml
89-
uses: microsoft/variable-substitution@v1
90-
with:
91-
files: ./core/core-infra-portone/src/main/resources/application-portone.yml
92-
env:
93-
PORT_ONE_KEY: ${{ secrets.PORT_ONE_KEY}}
94-
PORT_ONE_SECRET: ${{ secrets.PORT_ONE_SECRET}}
95-
96-
- name: 9) Set application-firebase.yml
97-
uses: microsoft/variable-substitution@v1
98-
with:
99-
files: ./core/core-infra-firebase/src/main/resources/application-firebase.yml
100-
env:
101-
firebase.fcmUrl: ${{ secrets.FIREBASE_URL}}
102-
firebase.firebaseConfigPath: ${{ secrets.FIREBASE_PATH}}
103-
104-
- name: Grant execute permission for gradlew and build
105-
run: |
106-
chmod +x ./gradlew
107-
./gradlew clean
108-
./gradlew build -x test
109-
110-
# Docker image Build (1)
111-
- name: Docker image build
112-
run: docker build -t ${{ secrets.DOCKER_USERNAME }}/sponus-docker --pull --no-cache --platform linux/amd64 .
113-
114-
# DockerHub Login (2)
115-
- name: Docker login
116-
uses: docker/login-action@v2
117-
with:
118-
username: ${{ secrets.DOCKER_USERNAME }}
119-
password: ${{ secrets.DOCKER_PASSWORD }}
120-
121-
# Docker Hub push (3)
122-
- name: Docker Hub push
123-
run: docker push ${{ secrets.DOCKER_USERNAME }}/sponus-docker
20+
- name: Grant execute permission for gradlew
21+
run: chmod +x gradlew
22+
- name: Test with Gradle
23+
run: ./gradlew test

api/build.gradle

+2-7
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,16 @@
11
dependencies {
22

3-
implementation project(':core:core-domain');
3+
compileOnly project(':core:core-domain');
44
implementation project(':core:core-infra-db');
55
implementation project(':core:core-infra-s3');
66
implementation project(':core:core-infra-redis');
77
implementation project(':core:core-infra-email');
8-
implementation project(':core:core-infra-portone');
98
implementation project(':core:core-infra-firebase');
109
implementation project(':core:core-infra-security');
1110

1211
// Core
1312
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
14-
15-
// implementation 'org.springframework.boot:spring-boot-starter-web'
16-
testImplementation 'org.springframework.boot:spring-boot-starter-test'
17-
testImplementation 'org.springframework.security:spring-security-test'
18-
implementation 'org.slf4j:slf4j-api:2.0.7'
13+
implementation 'org.springframework.boot:spring-boot-starter-security'
1914

2015
// Validation
2116
implementation 'org.springframework.boot:spring-boot-starter-validation'

api/src/main/resources/application.yml

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ server:
44
spring:
55
profiles:
66
group:
7-
"local": "db, secret"
8-
"prod": "db, s3, redis, email, portone, firebase, security"
7+
"local": "db, secret, s3, redis, email, firebase, security"
8+
"prod": "db, secret, s3, redis, email, firebase, security"
99
default: local
1010

1111
servlet:
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
package com.sponus.sponusbe;
22

3-
import org.junit.jupiter.api.Test;
4-
import org.springframework.boot.test.context.SpringBootTest;
5-
6-
@SpringBootTest
3+
// @SpringBootTest
74
class SponusBeApplicationTests {
85

9-
@Test
10-
void contextLoads() {
11-
}
12-
136
}

build.gradle

+6-8
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,15 @@ subprojects {
3838
}
3939

4040
dependencies {
41-
// Core
4241
implementation 'org.springframework.boot:spring-boot-starter-web'
43-
implementation 'org.springframework.boot:spring-boot-starter-security'
44-
testImplementation 'org.springframework.boot:spring-boot-starter-test'
45-
testImplementation 'org.springframework.security:spring-security-test'
42+
4643
implementation 'org.slf4j:slf4j-api:2.0.7'
4744

48-
// Lombok
49-
implementation 'org.projectlombok:lombok:1.18.22'
50-
annotationProcessor('org.projectlombok:lombok')
51-
testAnnotationProcessor('org.projectlombok:lombok')
45+
// lombok
46+
compileOnly 'org.projectlombok:lombok'
47+
annotationProcessor 'org.projectlombok:lombok'
48+
49+
testImplementation 'org.springframework.boot:spring-boot-starter-test'
5250

5351
// Swagger
5452
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.4'

core/core-infra-db/build.gradle

+1-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ dependencies {
22

33
implementation project(':core:core-domain');
44

5-
// Database
5+
// postgresql
66
runtimeOnly 'org.postgresql:postgresql'
7-
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
87

98
//querydsl
109
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,39 @@
1-
#spring:
2-
# config:
3-
# activate:
4-
# on-profile: local
5-
# datasource:
6-
# driver-class-name: org.postgresql.Driver
7-
# url: jdbc:postgresql://localhost:5432/postgres
8-
# username: postgres
9-
# password: postgres!
10-
# jpa:
11-
# database: postgresql
12-
# hibernate:
13-
# ddl-auto: create-drop
14-
# open-in-view: false
15-
# show-sql: true
16-
# generate-ddl: true
17-
# defer-datasource-initialization: true
18-
#
19-
# sql:
20-
# init:
21-
# mode: always
1+
spring.config.activate.on-profile: local
2+
3+
spring:
4+
datasource:
5+
driver-class-name: org.postgresql.Driver
6+
url: jdbc:postgresql://localhost:5432/postgres
7+
username: postgres
8+
password: postgres!
9+
jpa:
10+
database: postgresql
11+
hibernate:
12+
ddl-auto: create-drop
13+
open-in-view: false
14+
show-sql: true
15+
generate-ddl: true
16+
defer-datasource-initialization: true
17+
18+
sql:
19+
init:
20+
mode: always
21+
data-locations: classpath:db/data.sql
22+
# schema-locations: classpath:db/schema.sql
2223

2324
---
25+
spring.config.activate.on-profile: prod
2426

2527
spring:
26-
config:
27-
activate:
28-
on-profile: prod
2928
datasource:
3029
driver-class-name: org.postgresql.Driver
31-
url: ${DB_URL}
30+
url: jdbc:postgresql://${DB_URL}
3231
username: ${DB_USERNAME}
33-
password: ${DB_PW}
32+
password: ${DB_PASSWORD}
3433

3534
jpa:
3635
database: postgresql
3736
hibernate:
38-
ddl-auto: update
37+
ddl-auto: validate
3938
open-in-view: false
4039
show-sql: true
41-
generate-ddl: true

0 commit comments

Comments
 (0)