Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
193 commits
Select commit Hold shift + click to select a range
ec3ba54
๐Ÿ”งconfig: add gitignore element
minseokey Feb 11, 2025
e4c4d29
๐Ÿ‘ทconfig: init CI/CD pipeline with readme
minseokey Feb 11, 2025
e748274
:wrench: config: "add missing gradle file"
yunyoung1819 Feb 11, 2025
ea4d3bf
:wrench: config: "include gradle-wrapper.properties"
yunyoung1819 Feb 11, 2025
a215147
Merge branch 'develop' into feature/ci_cd
minseokey Feb 12, 2025
7ed1b79
:sparkles: feat: add common api response code and common error code
yunyoung1819 Feb 13, 2025
f304651
๐Ÿ“docs: update worflow readme
minseokey Feb 13, 2025
d020e83
๐ŸŽจstyle: add EOL to CD script
minseokey Feb 13, 2025
17a6241
:sparkles: feat: add common api response code and common error code
yunyoung1819 Feb 13, 2025
8295ccd
๐Ÿ‘ทbuild: modify CI/CD triggers
minseokey Feb 13, 2025
7aca33c
๐Ÿ‘ทbuild: update upload-artifact action to v4
minseokey Feb 13, 2025
fb4a170
๐Ÿ‘ทbuild: update upload-artifact action to v4 on step docker
minseokey Feb 13, 2025
d861f7c
๐Ÿ‘ทbuild: fix image tag logic
minseokey Feb 13, 2025
9f8b597
๐Ÿ‘ทbuild: test image tag logic
minseokey Feb 13, 2025
32c61f9
๐Ÿ‘ทbuild: test image tag logic
minseokey Feb 13, 2025
9e481b1
:sparkles: fix: annotation ์ˆ˜์ •
yunyoung1819 Feb 13, 2025
a8751e0
๐Ÿ‘ทbuild: test image tag logic
minseokey Feb 13, 2025
2e0b2fd
๐Ÿ‘ทbuild: test image tag logic
minseokey Feb 13, 2025
86a9900
๐Ÿ‘ทbuild: correct Image_Tag setting
minseokey Feb 13, 2025
6baca9f
๐Ÿ‘ทbuild: correct Image_Tag setting
minseokey Feb 13, 2025
0e780d9
Merge pull request #25 from depromeet/feature/ci_cd
minseokey Feb 13, 2025
30ac1d3
:wrench: config: set up jacoco (#27)
linirini Feb 13, 2025
2e080f8
๐Ÿ”ง config: set up application config (#26)
linirini Feb 13, 2025
9689595
:recycle: refactor: refactoring code review feedback
yunyoung1819 Feb 15, 2025
64b71ce
Merge pull request #28 from depromeet/feature/common-response
yunyoung1819 Feb 15, 2025
9023093
๐Ÿ”งconfig: redis setting for standalone and sentinel
minseokey Feb 18, 2025
155e16d
๐Ÿ”งconfig: use default spring redis setting
minseokey Feb 18, 2025
6cdf399
๐Ÿ”งconfig: setup swagger config with GroupedOpenApi
minseokey Feb 18, 2025
a7866b6
๐Ÿ”งconfig: change uuid to string
minseokey Feb 18, 2025
215328c
๐Ÿ”งconfig: change grouped api naming
minseokey Feb 19, 2025
949e43c
๐Ÿ”งconfig: restructure config file
minseokey Feb 19, 2025
1c8e27a
๐Ÿ”งconfig: restructure config file
minseokey Feb 19, 2025
f9137f4
Merge pull request #31 from depromeet/feature/redis-config
minseokey Feb 19, 2025
f3425db
โœจfeature: initial commit for location and centroid
minseokey Feb 20, 2025
5f00722
Merge pull request #32 from depromeet/feature/swagger-config
minseokey Feb 20, 2025
d473748
:sparkles: [Feature/room] implement create room (#30)
yunyoung1819 Feb 20, 2025
b2c5970
โœจ [Feature/subway] load and save station data (#29)
linirini Feb 21, 2025
5840f61
๐Ÿ”งconfig: fix deploy info for NCP enviroment
minseokey Feb 25, 2025
a2a68a1
โ™ป๏ธrefactor: add request validaton
minseokey Feb 27, 2025
7c15816
โ™ป๏ธrefactor: refactor file structure
minseokey Feb 27, 2025
b93b8cd
โ™ป๏ธrefactor: service depends on port
minseokey Feb 27, 2025
943973a
Merge branch 'develop' into feature/centroid-place
minseokey Feb 28, 2025
8988812
[feature/room-participant] implements room participation and get partโ€ฆ
yunyoung1819 Feb 28, 2025
6106361
โ™ป๏ธ rrefactor: change dialect version
minseokey Feb 28, 2025
331288f
Merge pull request #34 from depromeet/feature/centroid-place
minseokey Feb 28, 2025
145db2d
๐Ÿ›fix: fix file architecture inconsistency
minseokey Feb 28, 2025
890a81c
Merge pull request #39 from depromeet/bugfix/file-structure-inconsistโ€ฆ
minseokey Feb 28, 2025
41888db
๐Ÿš€deploy: change pub key setting
minseokey Feb 28, 2025
42a952b
๐Ÿš€deploy: change image name setting
minseokey Feb 28, 2025
891646c
๐Ÿš€deploy: change image tag setting
minseokey Feb 28, 2025
166e7aa
๐Ÿš€deploy: change image tag setting
minseokey Feb 28, 2025
6d8bf6f
๐Ÿš€deploy: change image tag setting
minseokey Feb 28, 2025
64cf756
๐Ÿš€deploy: change image tag setting
minseokey Feb 28, 2025
b0c1e33
๐Ÿš€deploy: change image tag setting
minseokey Feb 28, 2025
b9429eb
โ™ป๏ธrefactor: change constraints for numeric value
minseokey Feb 28, 2025
b5c21be
โ™ป๏ธrefactor: add swagger info for location controller
minseokey Mar 1, 2025
d21ae09
๐Ÿš€[Deploy/dev cd] dev cd configuration (#40)
minseokey Mar 1, 2025
05cab17
โœจ [Feature/testcontainers] implement testcontainers (#38)
linirini Mar 1, 2025
d7cba1a
:bug: fix: update cors config (#41)
yunyoung1819 Mar 2, 2025
118ab91
:bug: fix: enable flyway.baseline-on-migrate to initialize schema hisโ€ฆ
yunyoung1819 Mar 2, 2025
38158d9
โ™ป๏ธrefactor: add swagger info for location controller
minseokey Mar 4, 2025
162c415
Merge branch 'develop' into deploy/dev_cd
minseokey Mar 4, 2025
119d6b8
Merge pull request #43 from depromeet/deploy/dev_cd
minseokey Mar 4, 2025
4b38c18
๐Ÿš€deploy: chage sed -i cd script
minseokey Mar 4, 2025
4b7a044
๐Ÿš€deploy: change ncp redis to instance local
minseokey Mar 4, 2025
de511ab
Merge pull request #44 from depromeet/hotfix/change_standalone_redis
minseokey Mar 4, 2025
fef4657
๐Ÿš€deploy: add redis volume at docker-compose
minseokey Mar 4, 2025
a108eee
๐Ÿš€deploy: change dev redis path to .env
minseokey Mar 4, 2025
8183096
Merge pull request #45 from depromeet/hotfix/change_standalone_redis
minseokey Mar 4, 2025
18ce9a2
โœจfeature: implement route time and transit counter between user locatโ€ฆ
minseokey Mar 4, 2025
07c775d
โš™chore: add tmap properties
minseokey Mar 4, 2025
5c55c21
:recycle: :refactor: Replace BaseController with annotion (#46)
yunyoung1819 Mar 6, 2025
0bd9ac5
โœจfeature: add caching for Tmap API calls
minseokey Mar 6, 2025
861ceff
โœ…Resolve merge conflict with develop
minseokey Mar 6, 2025
2e208af
โœจfeature: add ConvexHull logic for return locations
minseokey Mar 6, 2025
c9bd2ae
โ™ป๏ธrefactor: remove dead code
minseokey Mar 6, 2025
b3c3d07
:sparkles: [Feature/Room] implement finding Room for Client Sharing lโ€ฆ
linirini Mar 6, 2025
92f03a4
:recycle: refactor: change package path
minseokey Mar 8, 2025
da31ced
:recycle: refactor: add error handler on restClient call"
minseokey Mar 8, 2025
6f7e331
Merge pull request #51 from depromeet/feature/convex-hull
minseokey Mar 8, 2025
341e736
Merge branch 'develop' into feature/station-route
minseokey Mar 8, 2025
1dfa58f
Merge pull request #47 from depromeet/feature/station-route
minseokey Mar 8, 2025
87d5a1e
๐Ÿ› [Fix/station-normalization] normalize station table (#54)
linirini Mar 8, 2025
0938854
[Feature/Room] Implement random profile generation (#53)
yunyoung1819 Mar 8, 2025
03a6779
:bug: fix: fix query method referencing wrong field
linirini Mar 8, 2025
42b5625
:wrench: config: activate test on build
linirini Mar 8, 2025
45537a9
:sparkles: feature: add complex public transportation route
minseokey Mar 8, 2025
c44da29
:sparkles: feature: add complex public properties
minseokey Mar 8, 2025
864ab53
Merge branch 'develop' into feature/route_complex
minseokey Mar 8, 2025
459a3ce
:recycle: refactor: change dependency adapter to port
minseokey Mar 8, 2025
59c85c7
Merge remote-tracking branch 'origin/feature/route_complex' into featโ€ฆ
minseokey Mar 8, 2025
de91495
:recycle: refactor: findout typo
minseokey Mar 8, 2025
99b7b5d
Merge pull request #57 from depromeet/feature/route_complex
minseokey Mar 8, 2025
97933b4
Merge branch 'develop' of https://github.com/depromeet/kok-server intโ€ฆ
linirini Mar 8, 2025
eeaf64d
:wrench: config: deactivate test on build
linirini Mar 8, 2025
eb1b884
:wrench: config: add exposed port for redis on test container
linirini Mar 8, 2025
206f62d
:wrench: config: disable flyway..
linirini Mar 8, 2025
3027927
Merge pull request #55 from depromeet/feature/fix-flyway
minseokey Mar 8, 2025
0039a22
[Fix/station] fix station config error (#58)
linirini Mar 8, 2025
ef59a82
:bug: fix: add missing configuration
linirini Mar 10, 2025
8b309e0
:white_check_mark: test: make context loads test use testContainer
linirini Mar 10, 2025
c513d4e
:white_check_mark: test: use mock for external api
linirini Mar 10, 2025
1c55205
:bug: fix: change wrong flyway script path to default flyway script path
linirini Mar 11, 2025
566dbdc
:wrench: config: change ddl auto to validate
linirini Mar 11, 2025
a8837cd
:wrench: config: add flyway locations
linirini Mar 11, 2025
daaefeb
:wrench: config: activate flyway on dev
linirini Mar 11, 2025
d383820
:recycle: refactor: add EOL
linirini Mar 11, 2025
596382e
:recycle: refactor: fix indent format
linirini Mar 11, 2025
277f56c
:sparkles: feat: add priority data sql script
linirini Mar 11, 2025
eda278b
:recycle: refactor: rename init sql script name
linirini Mar 11, 2025
4f19ebc
:wrench: config: set up flyway baseline-version for dev environment
linirini Mar 11, 2025
928eeae
Merge pull request #64 from depromeet/feature/fix-flyway
minseokey Mar 12, 2025
e783673
Merge branch 'develop' into feature/fix-test
minseokey Mar 12, 2025
97e3b0e
Merge pull request #61 from depromeet/feature/fix-test
minseokey Mar 12, 2025
58ea7a1
:sparkles: feat: add station recommend
minseokey Mar 12, 2025
787c6ee
:sparkles: feat: add station recommend added
minseokey Mar 12, 2025
b7c8ad3
:coffin: chore: remove test workflow
minseokey Mar 12, 2025
3aa9752
:sparkles: add cache for station recommendation
minseokey Mar 13, 2025
418876c
:recycle: refactor: move Centroid processing from controller to serviโ€ฆ
minseokey Mar 13, 2025
9ed21db
:recycle: refactor: change lon, lat order
minseokey Mar 13, 2025
e6c2bde
โ™ป๏ธ [Fix/appointment-room] update room response and change new profileโ€ฆ
yunyoung1819 Mar 18, 2025
c21d39d
:recycle: refactor: change memberId Integer to String
minseokey Mar 19, 2025
6347471
:recycle: refactor: change uuid to room_id
minseokey Mar 19, 2025
1b929b5
Merge pull request #65 from depromeet/feature/recommend-station
minseokey Mar 19, 2025
30ae41f
โœจ [Feature/share-link] Add checking location input termination logic โ€ฆ
linirini Mar 24, 2025
3bd877c
โœจ [Feature/RoomParticipant] add boolean field if room is full for getโ€ฆ
linirini Mar 25, 2025
b7a0d21
[Refactor/v1] refactor code (#75)
linirini Mar 26, 2025
d736f24
:sparkles: feature: add custom voting candidate function
minseokey Mar 27, 2025
97e1f4d
:recycle: fix: resolve conflicts
minseokey Mar 27, 2025
afb989b
:recycle: fix: resolve conflicts
minseokey Mar 27, 2025
46a80c8
:recycle: fix: resolve conflicts
minseokey Mar 28, 2025
cfdc159
Merge branch 'develop' into feature/custom-station
minseokey Mar 28, 2025
3404bd5
:recycle: refactor: add locationName column
minseokey Mar 28, 2025
8c2b2df
:recycle: refactor: change native query to query method
minseokey Mar 28, 2025
2e20564
:recycle: refactor: change name of recommended stations by subject
minseokey Mar 29, 2025
a79ed93
:recycle: refactor: change name locationName to location
minseokey Mar 29, 2025
7e82755
:hammer: refactor: add V2 script for new column name
minseokey Mar 29, 2025
82865c2
:hammer: refactor: refactor V2 script for new column name
minseokey Mar 29, 2025
5bb6402
:hammer: refactor: add name field for test
minseokey Mar 29, 2025
a2f32f7
Merge pull request #81 from depromeet/feature/custom-station
minseokey Mar 29, 2025
bb3a9d8
โœจ [Feature/vote] implement getting candidates API (#78)
linirini Mar 29, 2025
9c44744
โœจ [Feature/vote] implement save vote API (#79)
linirini Mar 29, 2025
62957a5
โœจ [Feature/vote] implement getting members vote status API (#80)
linirini Mar 29, 2025
9e11a76
:sparkles: [Feature/location] add member profile image field to Locatโ€ฆ
yunyoung1819 Mar 29, 2025
5192973
:sparkles: feat: add isVoteMode on room detail response (#86)
linirini Mar 29, 2025
81dbdee
โœจ [Feature/vote] implement getting vote deadline API (#87)
linirini Mar 29, 2025
bd3144b
:sparkles: feat: implements places search api (#88)
yunyoung1819 Mar 29, 2025
82787cb
:sparkles: feat: add address field to RoomParticipantResponse (#92)
yunyoung1819 Mar 30, 2025
81e9fb3
โœจ [Feature/room] change isVoteMode to roomStatus on API (#97)
linirini Mar 30, 2025
e13ffaf
โœจ [Feature/vote] implement getting vote result API (#98)
linirini Mar 31, 2025
40b4c28
โœจ [Feature/vote] implement closing vote API (#99)
linirini Mar 31, 2025
7547118
:green_heart: deploy: refactor prod cd script
minseokey Apr 1, 2025
835462e
:green_heart: deploy: refactor prod cd with nginx
minseokey Apr 1, 2025
1b43f0c
:green_heart: deploy: remove nginx.conf at CD script
minseokey Apr 1, 2025
d2f520f
:green_heart: deploy: refactor health check port
minseokey Apr 1, 2025
300248c
:green_heart: deploy: increase health check time
minseokey Apr 1, 2025
b34b265
:green_heart: deploy: add health check result
minseokey Apr 1, 2025
09efbc0
:green_heart: deploy: change docker network external
minseokey Apr 1, 2025
e40785f
:green_heart: deploy: change root user
minseokey Apr 1, 2025
16fcba8
:green_heart: deploy: change nginx port
minseokey Apr 1, 2025
f8d24b3
:green_heart: deploy: change nginx root
minseokey Apr 1, 2025
dedd167
:green_heart: deploy: add ssl config
minseokey Apr 1, 2025
ba799f5
:green_heart: deploy: change health check
minseokey Apr 1, 2025
fe8f41e
:green_heart: deploy: change nginx path
minseokey Apr 1, 2025
84e6e49
:green_heart: deploy: change nginx path
minseokey Apr 1, 2025
536c8bb
:green_heart: deploy: change nginx path
minseokey Apr 1, 2025
698b151
:green_heart: deploy: change env name
minseokey Apr 1, 2025
637a11d
:green_heart: deploy: enable swagger for test
minseokey Apr 1, 2025
9d68e65
:green_heart: deploy: enable swagger for test
minseokey Apr 1, 2025
a002b2b
Merge pull request #102 from depromeet/deploy/prod
minseokey Apr 1, 2025
dddee5d
:green_heart: deploy: change nginx reload to restart
minseokey Apr 1, 2025
60a3f72
Merge pull request #103 from depromeet/deploy/prod
minseokey Apr 2, 2025
174e9fa
โœจ [Feature/vote] implement getting vote final result API (#101)
linirini Apr 2, 2025
b384cda
:bug: refactor: change swagger http to https
minseokey Apr 2, 2025
9555a2a
Merge pull request #104 from depromeet/fix/subway-search
minseokey Apr 2, 2025
0fe6975
:sparkles: [Feature/station] delete code from route domain (#105)
linirini Apr 2, 2025
1f7fa1a
:bug: fix: move changing route name logic into domain due to duplicatโ€ฆ
linirini Apr 2, 2025
a9047e7
โ™ป๏ธ [Refactor/room] determine participant count by location input counโ€ฆ
linirini Apr 3, 2025
98920b0
โœจ [Feature/vote] fix key name error and add candidate count for gettiโ€ฆ
linirini Apr 3, 2025
eef282b
:bug: fix: fix save Room and and add logging for redis (#108)
yunyoung1819 Apr 4, 2025
9ad042a
๐Ÿ› [Fix/Room] fix timezone error and add safety code for getting expirโ€ฆ
linirini Apr 4, 2025
dfb59e7
:wrench: config: add jackson timezone (#111)
linirini Apr 4, 2025
0c0ee0e
๐Ÿ› [Fix/candidate] remove candidate duplication (#112)
linirini Apr 4, 2025
cdb278a
:bug: fix: fix candidate-duplication (#113)
linirini Apr 4, 2025
925b26f
[Feature/vote] fix getting current result api due to change of UI (#117)
linirini Apr 14, 2025
9b9cf9b
[Feature/vote] remove closing vote api and close vote when all memberโ€ฆ
linirini Apr 16, 2025
f86f81a
:bug: fix: fix room status validation error when get current vote resโ€ฆ
linirini Apr 17, 2025
ec54385
:bug: fix: fix room status validation error when get current vote resโ€ฆ
linirini Apr 17, 2025
df44a91
:bug: fix: fix room status validation error to check if vote not starโ€ฆ
linirini Apr 17, 2025
1bdfe40
[Deploy/dev] Dev Server migration (#123)
linirini May 4, 2025
5e5c8e9
๐Ÿš€ [Deploy] migrate prod server (#125)
linirini May 4, 2025
2ef9fdb
:construction_worker: build: fix health check path (#126)
linirini May 4, 2025
0f19740
:construction_worker: build: fix service url from localhost to exact โ€ฆ
linirini May 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions .github/workflows/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
## ๐Ÿ“Œ CI/CD ๊ฐœ์š”
์ด ํ”„๋กœ์ ํŠธ๋Š” **GitHub Actions + Docker + Nginx + Blue-Green Deployment**๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ **์ž๋™ํ™”๋œ CI/CD**๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

## โœ… CI (Continuous Integration)
| ๋ธŒ๋žœ์น˜ | ๋™์ž‘ |
|---------------------------------|-------------------------------------------|
| `feature/*, bugfix/*, hotfix/*` | **๋นŒ๋“œ & Docker Push** (`kok-CI.yml`) |
| `develop` | **๋นŒ๋“œ & Docker Push** (`kok-CI.yml`) |

---

## โœ… CD (Continuous Deployment)
| ๋ธŒ๋žœ์น˜ | ๋™์ž‘ |
|-----------|-------------------------------------------|
| `develop` | **๊ฐœ๋ฐœ ์„œ๋ฒ„** ๋ฐฐํฌ (`kok-dev-CD.yml`) |
| `main` | **์šด์˜ ์„œ๋ฒ„ (Blue-Green ๋ฐฐํฌ, ์ˆ˜๋™ ์‹คํ–‰)** (`kok-prod-CD.yml`) |

---

## ๐Ÿ“‚ CI/CD ์›Œํฌํ”Œ๋กœ์šฐ ํŒŒ์ผ ์„ค๋ช…

| ํŒŒ์ผ๋ช… | ์„ค๋ช… |
|-------------------------|--------------------|
| `kok-CI.yml` | ๋นŒ๋“œ ๋ฐ Docker ๋ฐฐํฌ |
| `kok-dev-CD.yml` | ๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋ฐฐํฌ |
| `kok-prod-CD.yml` | ์šด์˜ ์„œ๋ฒ„ (Blue-Green) ๋ฐฐํฌ |
| `blue-green-Nginx.conf` | Nginx ์„ค์ • (ํŠธ๋ž˜ํ”ฝ ์Šค์œ„์นญ) |

---

## ๐Ÿ”‘ **ํ•„์š”ํ•œ GitHub Secrets ๋ชฉ๋ก**
| ์ด๋ฆ„ | ์„ค๋ช… |
|------|------|
| `DOCKERHUB_USERNAME` | Docker Hub ๋กœ๊ทธ์ธ ID |
| `DOCKERHUB_PASSWORD` | Docker Hub ๋กœ๊ทธ์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ |
| `NCP_HOST` | NCP ์„œ๋ฒ„ ์ฃผ์†Œ (๋ฐฐํฌ ์„œ๋ฒ„ IP) |
| `NCP_USER` | NCP ์„œ๋ฒ„ ๋กœ๊ทธ์ธ ๊ณ„์ • (๋ณดํ†ต `ubuntu` ๋˜๋Š” `root`) |
| `NCP_KEY` | NCP ์„œ๋ฒ„ ์ ‘๊ทผ์„ ์œ„ํ•œ SSH Key (pem ํŒŒ์ผ ๋‚ด์šฉ) |
| `COMPOSE_FILE_PATH` | Docker Compose๊ฐ€ ์‹คํ–‰๋  ์„œ๋ฒ„ ๊ฒฝ๋กœ |
| `IMAGE_NAME` | Docker Hub์— ์—…๋กœ๋“œํ•  ์ด๋ฏธ์ง€๋ช… |

---

## ๐Ÿ› ๏ธ GitHub Actions ์‹คํ–‰ ๋ฐฉ๋ฒ•

### 1๏ธโƒฃ **์ˆ˜๋™ ์‹คํ–‰ for Prod(`workflow_dispatch`)**
GitHub Actions์—์„œ `Run Workflow` ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ฐฐํฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

| ๋ธŒ๋žœ์น˜ | ์‹คํ–‰ ์›Œํฌํ”Œ๋กœ์šฐ|
|---------|-----------------------------|
| `main` | `kok-prod-CD.yml` (์šด์˜ ์„œ๋ฒ„ ๋ฐฐํฌ) |

### 2๏ธโƒฃ **์ž๋™ ์‹คํ–‰ for Dev & CI**
| ๋ธŒ๋žœ์น˜ | ํŠธ๋ฆฌ๊ฑฐ | ์‹คํ–‰๋˜๋Š” ์›Œํฌํ”Œ๋กœ์šฐ |
|-----------|--------|------------------------------|
| `feature/*, bugfix/*, hotfix/*` | `PR` | `kok-CI.yml` (๋นŒ๋“œ & Docker ๋ฐฐํฌ) |
| `develop` | `PR` | `kok-CI.yml` (๋นŒ๋“œ & Docker ๋ฐฐํฌ) |
| `develop` | `Push` | `kok-CI.yml` (๋นŒ๋“œ & Docker ๋ฐฐํฌ) |
| `develop` | `Push` | `kok-dev-CD.yml` (๊ฐœ๋ฐœ ์„œ๋ฒ„ ๋ฐฐํฌ) |

---

## ๐Ÿš€ ์šด์˜(Prod) ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค (Blue-Green Deployment)
์šด์˜ ๋ฐฐํฌ๋Š” **Blue-Green Deployment** ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ **๋ฌด์ค‘๋‹จ ๋ฐฐํฌ**๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

### **1๏ธโƒฃ ๋ฐฐํฌ ํŠธ๋ฆฌ๊ฑฐ**
- `main` ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๋ฅผ ํ‘ธ์‹œํ•˜๊ณ  ๋‚œ ํ›„, ์ˆ˜๋™์œผ๋กœ (`workflow_dispatch`) ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
- GitHub Actions๊ฐ€ `docker-compose-prod.yml`์„ ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•˜๊ณ  ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

### **2๏ธโƒฃ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์„œ๋น„์Šค ํ™•์ธ**
- `nginx.conf`์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ(`kok-blue` ๋˜๋Š” `kok-green`์„ ํ™•์ธ)ํ•ฉ๋‹ˆ๋‹ค.

### **3๏ธโƒฃ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰**
- ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ํ™˜๊ฒฝ์ด `kok-blue`์ด๋ฉด `kok-green`์„ ์‹คํ–‰ (`docker-compose-green.yml` ์‚ฌ์šฉ).
- ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ธ ํ™˜๊ฒฝ์ด `kok-green`์ด๋ฉด `kok-blue`๋ฅผ ์‹คํ–‰ (`docker-compose-blue.yml` ์‚ฌ์šฉ).

### **4๏ธโƒฃ Health Check**
- ์ƒˆ๋กญ๊ฒŒ ์‹คํ–‰๋œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•˜๋Š”์ง€ `/health_check` ์—”๋“œํฌ์ธํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
- Health Check ์‹คํŒจ ์‹œ ๋กค๋ฐฑํ•˜์—ฌ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

### **5๏ธโƒฃ ํŠธ๋ž˜ํ”ฝ ์ „ํ™˜**
- `nginx.conf`์˜ `upstream` ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜์—ฌ, ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
- `nginx -s reload` ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ Nginx์„ค์ •์„ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

### **6๏ธโƒฃ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ์ •๋ฆฌ**
- ์ƒˆ๋กœ์šด ํ™˜๊ฒฝ์ด ์ •์ƒ์ ์œผ๋กœ ๋ฐฐํฌ๋œ ํ›„, ์ด์ „ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์‚ญ์ œํ•˜์—ฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•ฉ๋‹ˆ๋‹ค.

---

## ๐Ÿš€ ๊ฐœ๋ฐœ(Dev) ๋ฐฐํฌ ํ”„๋กœ์„ธ์Šค
๊ฐœ๋ฐœ ๋ฐฐํฌ๋Š” ์šด์˜ ํ™˜๊ฒฝ๋ณด๋‹ค **๊ฐ„๋‹จํ•œ ๋‹จ์ผ ์ปจํ…Œ์ด๋„ˆ ๋ฐฐํฌ** ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

### **1๏ธโƒฃ ๋ฐฐํฌ ํŠธ๋ฆฌ๊ฑฐ**
- `develop` ๋ธŒ๋žœ์น˜์— ์ฝ”๋“œ๊ฐ€ ํ‘ธ์‹œ๋˜๋ฉด `kok-dev-CD.yml`์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
- GitHub Actions๊ฐ€ `docker-compose-dev.yml`์„ ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•˜๊ณ  ๋ฐฐํฌ๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

### **2๏ธโƒฃ ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ์ข…๋ฃŒ**
- ๊ธฐ์กด์— ์‹คํ–‰ ์ค‘์ธ `kok-dev` ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ (`docker compose down` ์‹คํ–‰).

### **3๏ธโƒฃ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰**
- `docker compose -f docker-compose-dev.yml up -d` ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
101 changes: 101 additions & 0 deletions .github/workflows/kok-CI.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: kok-CI (Build & Push for kok)

on:
pull_request:
branches:
- develop
- main
push:
branches:
- develop
- main

jobs:
build:
runs-on: ubuntu-latest
outputs:
IMAGE_TAG: ${{ steps.determine-tag.outputs.IMAGE_TAG }}
steps:
- name: Checkout Repository
uses: actions/checkout@v2

- name: Set up JDK 21
uses: actions/setup-java@v2
with:
distribution: 'zulu'
java-version: '21'

- name: Determine Image Tag (prod/dev)
id: determine-tag
run: |
if [[ "$GITHUB_EVENT_NAME" == "pull_request" ]]; then
BRANCH_NAME="$GITHUB_BASE_REF"
else
BRANCH_NAME="$GITHUB_REF_NAME"
fi

echo "๐Ÿ” ํ˜„์žฌ ๋ธŒ๋žœ์น˜: $BRANCH_NAME"

if [[ "$BRANCH_NAME" == "main" ]]; then
echo "IMAGE_TAG=prod" | tee -a $GITHUB_ENV
echo "::set-output name=IMAGE_TAG::prod"
else
echo "IMAGE_TAG=dev" | tee -a $GITHUB_ENV
echo "::set-output name=IMAGE_TAG::dev"
fi

echo "โœ… ํ˜„์žฌ GITHUB_ENV ๊ฐ’:"
cat $GITHUB_ENV

- name: Build with Gradle (๋ฉ€ํ‹ฐ๋ชจ๋“ˆ)
run: |
./gradlew clean build -x test

- name: Save Build Artifacts
uses: actions/upload-artifact@v4
with:
name: build-artifact
path: kok-api/build/libs/*.jar

docker:
runs-on: ubuntu-latest
needs: build
env:
IMAGE_TAG: ${{ needs.build.outputs.IMAGE_TAG }}

steps:
- name: Checkout Repository
uses: actions/checkout@v2

- name: Download Build Artifacts
uses: actions/download-artifact@v4
with:
name: build-artifact
path: kok-api/build/libs/

- name: Login to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}

- name: Build & Push Docker Image
run: |
echo "๐Ÿท IMAGE_TAG ๊ฐ’ ํ™•์ธ: '$IMAGE_TAG'"

if [[ -z "$IMAGE_TAG" ]]; then
echo "๐Ÿšจ ERROR: IMAGE_TAG ๊ฐ’์ด ๋น„์–ด ์žˆ์Œ!"
exit 1
fi

IMAGE_NAME="${{ secrets.DOCKERHUB_USERNAME }}/kok-${IMAGE_TAG}"

echo "๐Ÿš€ Building Docker Image: $IMAGE_NAME:$GITHUB_SHA"

# Docker Build & Push
docker build -t $IMAGE_NAME:$GITHUB_SHA -f Dockerfile .
docker push $IMAGE_NAME:$GITHUB_SHA

- name: Notify Deployment Trigger
run: |
echo "๐Ÿš€ Docker ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์™„๋ฃŒ! Image: $IMAGE_NAME"
47 changes: 47 additions & 0 deletions .github/workflows/kok-dev-CD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: kok-dev-CD (Deploy to Dev)

on:
push:
branches:
- develop
- deploy/dev_cd # ๋ฐฐํฌ ํ…Œ์ŠคํŠธ ๋ธŒ๋žœ์น˜

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Get Latest Docker Image Tag
id: latest_tag
run: |
LATEST_TAG=$(curl -s "https://hub.docker.com/v2/repositories/${{ secrets.DOCKERHUB_USERNAME }}/kok-dev/tags" | jq -r '.results[0].name')
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV


- name: Create SSH key file
run: echo "${{ secrets.AWS_KEY }}" > /tmp/AWS_KEY.pem

- name: Set permissions for SSH key file
run: chmod 400 /tmp/AWS_KEY.pem

- name: Upload `docker-compose.yml` to AWS
run: |
scp -i /tmp/AWS_KEY.pem -o StrictHostKeyChecking=no infra/docker-compose-dev.yml ${{ secrets.AWS_USER }}@${{ secrets.AWS_DEV_HOST }}:${{ secrets.COMPOSE_FILE_PATH }}

- name: Deploy to Dev Server
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.AWS_DEV_HOST }}
username: ${{ secrets.AWS_USER }}
key: ${{ secrets.AWS_KEY }}
script: |
cd ${{ secrets.COMPOSE_FILE_PATH }}

sed -i '/^KOK_DEV_TAG = /d' .env
echo "KOK_DEV_TAG = ${{ env.LATEST_TAG }}" >> .env

sudo docker compose -f docker-compose-dev.yml pull
sudo docker compose -f docker-compose-dev.yml down
sudo docker compose -f docker-compose-dev.yml up -d
40 changes: 40 additions & 0 deletions .github/workflows/kok-prod-CD.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: kok-prod-CD (Deploy to Prod - Blue-Green Auto)

on:
workflow_dispatch:

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2

- name: Get Latest Docker Image Tag
id: latest_tag
run: |
LATEST_TAG=$(curl -s "https://hub.docker.com/v2/repositories/${{ secrets.DOCKERHUB_USERNAME }}/kok-prod/tags" | jq -r '.results[0].name')
echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV

- name: Create SSH key file
run: echo "${{ secrets.AWS_KEY }}" > /tmp/AWS_KEY.pem

- name: Set permissions for SSH key file
run: chmod 600 /tmp/AWS_KEY.pem

- name: Upload Compose files & deploy.sh to AWS
run: |
scp -i /tmp/AWS_KEY.pem -o StrictHostKeyChecking=no infra/docker-compose-blue.yml ${{ secrets.AWS_USER }}@${{ secrets.AWS_PROD_HOST }}:${{ secrets.COMPOSE_FILE_PATH }}
scp -i /tmp/AWS_KEY.pem -o StrictHostKeyChecking=no infra/docker-compose-green.yml ${{ secrets.AWS_USER }}@${{ secrets.AWS_PROD_HOST }}:${{ secrets.COMPOSE_FILE_PATH }}
scp -i /tmp/AWS_KEY.pem -o StrictHostKeyChecking=no infra/deploy.sh ${{ secrets.AWS_USER }}@${{ secrets.AWS_PROD_HOST }}:${{ secrets.COMPOSE_FILE_PATH }}

- name: Deploy to AWS via deploy.sh
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.AWS_PROD_HOST }}
username: ${{ secrets.AWS_USER }}
key: ${{ secrets.AWS_KEY }}
script: |
cd ${{ secrets.COMPOSE_FILE_PATH }}
chmod +x deploy.sh
./deploy.sh "${{ env.LATEST_TAG }}"
Loading
Loading