Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cs-tudy/cstudy_backend
๐ ์ทจ์
CS ๊ฑฑ์ ํ์ง๋ง, CStudy
https://github.com/cs-tudy/cstudy_backend
java11 jpa querydsl spring-boot
Last synced: about 1 month ago
JSON representation
๐ ์ทจ์ CS ๊ฑฑ์ ํ์ง๋ง, CStudy
- Host: GitHub
- URL: https://github.com/cs-tudy/cstudy_backend
- Owner: CS-tudy
- Created: 2023-08-12T07:46:24.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-04-13T13:13:31.000Z (7 months ago)
- Last Synced: 2024-09-30T14:07:47.250Z (about 2 months ago)
- Topics: java11, jpa, querydsl, spring-boot
- Language: Java
- Homepage: https://cstudying.site
- Size: 38.9 MB
- Stars: 6
- Watchers: 0
- Forks: 0
- Open Issues: 4
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ๐ ์ทจ์ CS ๊ฑฑ์ ํ์ง๋ง, CS;tudy
### ~~๐ข [๋ฐฐํฌ ์ฌ์ดํธ ๋ฐ๋ก๊ฐ๊ธฐ - [ ๋ฐ๋ก๊ฐ๊ธฐ ]](https://cstudying.site/)~~
| ``2023. 10`` ~ ``2023.12``
- ๋น์ฉ ๋ฌธ์ ๋ก ``23. 12. 18``์ดํ๋ก ๋นํ์ฑํํฉ๋๋ค.## โจ ํ๋ก์ ํธ ์๊ฐ
### [ ํ๋ก์ ํธ ๊ฐ๋จ ์๊ฐ ]
- ์ทจ์ ์ ์์ด ํ์ํ CS ์ง์์ ํ์ตํ ์ ์๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ํ๋ซํผ ์ ๋๋ค. ์นดํ ๊ณ ๋ฆฌ ๋ณ ๋ฌธ์ ๋ฅผ ํตํด ํ์ํ ์ง์์ ๋น ๋ฅด๊ฒ ํ์ตํ ์ ์์ผ๋ฉฐ ํ๋ฆฐ ๋ฌธ์ ๋ฅผ ๋ชจ์์ ๋ถ์กฑํ ๋ถ๋ถ์ ๋น ๋ฅด๊ฒ ์ธ์งํ ์ ์์ต๋๋ค. ๋ํ
๊ฒฝ์์ ํตํ์ฌ ์ง๋ฃจํ CS ํ์ต์ ์ฌ๋ฏธ๋ฅผ ๋ถ์ฌํ๋ฉฐ ์ ์์ ๊ฒฝ์์ ํตํด ๋๋ฃ์ ํจ๊ป ์ฑ์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค.
### [ ํ๋ก์ ํธ๋ฅผ ์ฒ์ ๊ธฐํ์ ์๊ฐํ ์ด์ ]
- ๊ตญ๋น์ง์์์ ํ๋ก์ ํธ [IPMS](https://github.com/KMGeon/IPMS)๋ฅผ ๋ง๋ค๊ณ ์์ฌ์์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค. ๋ชจ๋ ํ์์ด ํฌํธํด๋ฆฌ์ค๋ฅผ ์ํ์ฌ ๋ง๋ค์๊ธฐ ๋๋ฌธ์ ์ค์ ์๋น์ค๋ฅผ ํ๊ธฐ์ ์ ์ ํ ๋๋ฉ์ธ์ด ์๋๋ผ๊ณ ํ๋จํ์ฌ ์๋ก์ด ์๋น์ค๋ฅผ ๋ง๋ค๊ฒ ๋ค๊ณ ์๊ฐ์ ํ์ต๋๋ค.
- ์ทจ์ ์ ์ค๋นํ๋ฉด์ ํ๊ณผ์์ ๋ฐฐ์ด CS ๊ณต๋ถ๊ฐ ์ฌ๋ฏธ๋ ์์ง๋ง ๋จ์ํ Github์ ์ ๋ฆฌ, ๋์์, ์ฑ ์ ํตํด์ ํ์ตํ์ฌ ์ง๋ฃจํจ์ ๋๋ผ๊ฒ ๋์๊ณ , ์ด๋ฅผ ๊ฐ์ ํ๊ณ ์ ๋ฌธ์ ๋ฅผ ํ์ด ์ฌ๋ฏธ์๊ฒ ํ์ตํ๋ ์๋น์ค๋ฅผ ๋ง๋ค๊ณ ์ ์๊ฐ์ ํ์ต๋๋ค.
### [ ์ฒ์๋ง๋ ์ฌ๋๋ค์ ๋ฆฌ๋ฉํ์ฌ ์ฑ๊ณต์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์์๋ ์ด์ ]
![img.png](image/1.png)
- ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ `ํ์ `์ ๊ฐ์ฅ ์ค์ํ๊ฒ ์๊ฐ์ ํ์์ต๋๋ค. `ํด๋ผ์ด์ธํธ`์ `์๋ฒ`์ ์ดํด๋, ์ธ์ง์ ์ฐจ์ด๊ฐ ์๋ค๊ณ ์๊ฐํ์ฌ ์ต๋ํ ๊ฐ๋จํ๊ฒ ์ค๋ช ( ๊ธ, ๊ทธ๋ฆผ์ ํตํ์ฌ )ํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ธ์ ์ ์ธ ์ปค๋ฎค๋์ผ์ด์ ์ ํ๊ธฐ ์ํ์ฌ ๋ ธ๋ ฅํ์์ต๋๋ค.
## ๐จโ๊ธฐ์ ์คํ
์ดํ๋ฆฌ์ผ์ด์
DB
์ธํ๋ผ
๋ฌธ์ / ํ์
## ๐จ ERD Diagram
![img.png](image/2.png)
## ๐ฅ ๋ชจ๋ํฐ๋ง
![img.png](image/3.png)
![img.png](image/4.png)[ ํ์ฌ ์๋น์ค ์ด์ ๋ฌธ์ ์ ]
- ์๋ฒ๋ฅผ ์ด์ํ๋ฉด์ CPU 100%๊ฐ ๋์ด์ ์์คํ ์ ์ค๋ฅ๊ฐ ๋ฐ์.
- ์๋ฒ ๋น์ฉ์ ๋ฌธ์ ๋ก ์ธํ์ฌ ํ์ฅ์ฑ์ด ๋ถ์กฑํ EC2์ DB ์ค์นํ์ฌ ์ด์.
- DB ์๋ฒ๊ฐ CPU 100%๊ฐ ๋๋ฉด ์๋น์ค ์ค๋ฅ, ์๋ฒฝ 2์์ Redis Backup์ ์ํํ์ง ๋ชปํ๋ ๋ฌธ์ ๋ฐ์[ ํ์ฌ ๋ฌธ์ ๊ฐ์ ]
- ํ์ฌ๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ Swap, EC2 ๋ฒ์คํธ ํ์์ Credit ๋ถ์กฑ์ ๋ง๊ธฐ ์ํ์ฌ ์ธ์คํด์ค ์ ํ ๋ณ๊ฒฝ, Stop & Start ๋ฐฉ์์ผ๋ก ๋ฌธ์ ํด๊ฒฐ
- Stop & Start ๋ฐฉ์์ ์ํํ๋ฉด์ ๋ชจ๋ํฐ๋ง์ ์ค์์ฑ์ด ์ฆ๊ฐํ์ฌ ์ด๋ฅผ ์๋ํ ํ๊ธฐ ์ํ์ฌ `CloudWatch`, `Lambda`, `Slack`์ ์ด์ฉํ์ฌ ์๋ํ ๋ณ๊ฒฝ[ ๊ฐ์ ํด์ผ ๋๋ ๋ถ๋ถ ]
- ์๋ฆผ์ ํตํ์ฌ ์๋ํ๋ฅผ ํ์ฌ๋ ํ์ฌ Stop & Start ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ฌ์์์ ํด์ผ๋๋ ๋ฌธ์
- ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํ์ฌ Lambda Trigger๋ฅผ ํตํ์ฌ Stop & Start ๋ฐฉ์์ ๋ฌธ์ ์ ์ ๊ฐ์ ํ์
- Lambda๋ฅผ ํตํ์ฌ Stop & Start์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ๋ ์ฌ์์ํ๋ ๋์ ์๋น์ค๊ฐ ์ ์ ์ฌ์ฉํ์ง ๋ชปํ๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ์ฌ ๋ถ์ฐ ํ๊ฒฝ์ผ๋ก ๋ณ๊ฒฝ์ ํด์ผ๋๋ค.
## ๐งTest Code
### Controller
- ํ ์คํธ ์ฝ๋๋ ๋จ์ํ ๋ฐ์ดํฐ์ ์ ํฉ์ฑ์ ๊ฒ์ฆํ๋ ๋ก์ง์ด ์๋๋ผ ๋ด ์ฝ๋๋ฅผ ์ฝ๋ ์๋๋ฐฉ์๊ฒ ์ค๋ช ํ๋ ์ฝ๋๋ผ๊ณ ์๊ฐํฉ๋๋ค.
- ``Controller``์ ํ ์คํธ๋ Mock์ ํตํ์ฌ HTTP ์์ฒญ, ๊ฒ์ฆ์์ ์ฑ ์, ์ฃผ์ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์ฌ ``์์ฒญ,๊ฒ์ฆ``์ ๋ถ๋ฆฌ๋ฅผ ํ์์ต๋๋ค.![img.png](image/5.png)
### Service
``Service Layer Test``์ ๊ฒฝ์ฐ์ Test Double(Mocking)์ ํตํ์ฌ ํ ์คํธ๋ฅผ ์งํ์ ํ์์ ๋ Repository์ ์ธํฐํ์ด์ค๊ฐ ๋ณํ๋ฅผ ํ๋ฉด ์คํจ๋ฅผ ํ๋ค.
- ๋จ์ ํ ์คํธ์์ Mocking์ ํ๋ฉด ์ฐ๊ด ๊ด๊ณ์ ``์ธํฐํ์ด์ค์ ๊ฐํ๊ฒ ์์กด``ํ์ฌ ๋ฆฌํํ ๋ง์ ์ด๋ ต๊ธฐ ๋๋ฌธ์ Classic ๋ฐฉ์์ ํตํ์ฌ ํ ์คํธ๋ฅผ ์งํ์ ํ์์ต๋๋ค.
- ์ ์ดํ ์ ์๋ ์ฝ๋์ธ ๊ฒฝ์ฐ์๋ง Test Double์ ์ฌ์ฉ์ ํ์์ต๋๋ค.
- ``LocalDateTime.now()``์ ํ ์คํธ ์ฝ๋๋ ํญ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๊ธฐ ํ๋ค์ด Service์ ๋ณ์๋ฅผ ๋๊ฒจ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋ณ๊ฒฝ![img.png](image/6.png)
## ๐ API ๋ฌธ์ - [๋ฌธ์ ๋ณด๊ธฐ](https://documenter.getpostman.com/view/23650109/2s9YXk41jC)
## ๐CStudy์ ์ฌ์ ์ ๊ธฐ๋ฅ์ ์๊ฐํ ๊ฒ์.
![img.png](image/7.png)
## ๐๏ธ CI/CD ์ํคํ ์ฒ (๋ฐฐํฌ ์๋ํ)
### 1. ๊ธฐ์กด์ Jenkins๋ฅผ ํตํ์ฌ ๋ฐฐํฌ ์๋ํ
![img.png](image/8.png)
๋ธ๋ก๊ทธ : [Jenkins Pipeline์ ์ด์ฉํ CI/CD + SSHAgent](https://pos04167.tistory.com/195)
- ์ฒ์ ๋ฐฐํฌ๋ฅผ ์ ํํ `ํ์ดํ๋ผ์ธ`์ ๋๋ค. ์ด๋ Jenkins๋ฅผ ์ ํํ ์ด์ ๋ ์คํฐ๋๋ฅผ ํตํ์ฌ Jenkins๋ฅผ ํ์ตํ ๊ฒฝํ์ด ์์ด ๋ค๋ฅธ 2๊ฐ์ ๊ธฐ์ ๋ณด๋ค ๋ฌ๋์ปค๋ธ๊ฐ ๋ฎ๋ค๊ณ ์๊ฐํ์ฌ ์ ์ฉ์ ํ์์ต๋๋ค.
- Jenkins๋ฅผ ํตํ์ฌ ๋ฐฐํฌ์ ๋ฌธ์ ์ ์ ํธ๋ํฝ์ด ์ฆ๊ฐ๋ฅผ ํ์์ ๋ Auto Scailing์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํ์ฌ ์คํ๋ง ๋ถํธ์ AWS๋ก ํผ์ ๊ตฌํํ๋ ์น ์๋น์ค์ ๋ฌด์ค๋จ ๋ฐฐํฌ๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝ์
ํ์ต๋๋ค.### 2. ํ์ฌ ๋ฐฐํฌ์ ๊ตฌ์กฐ / ์ ํํ ์ด์ (Github Action ๋ฐฐํฌ ์๋ํ ๋ณ๊ฒฝ)
![img.png](image/9.png)
![img.png](image/infra.png)
๋ธ๋ก๊ทธ : [Github Actions CI + CodeDeploy๋ก CI/CD ๊ตฌํํ๊ธฐ](https://velog.io/@geon_km/Github-Actions-CI-CodeDeploy%EB%A1%9C-CICD-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0-vum9u82d)
[ ํ์ฌ ๋ฌธ์ ]
- SSE๋ฅผ ์ถ๊ฐํ๋ฉด์ ๋ถ์ฐ ํ๊ฒฝ์ ๋ํ ์ ์ฝ์ฌํญ์ด ๋ฐ์์ ํ์์ต๋๋ค.
- ์ด๋ฌํ ๋ฌธ์ ๋ก WAS๋ฅผ 1๊ฐ๋ง ์ฌ์ฉํ๊ฒ ๋ณ๊ฒฝ[ ํ์ฌ ์ ์ฉ ]
- Git๊ณผ ์ฐ๋์ฑ์ด ์ข์ Github Action์ ํตํ ๋ฐฐํฌ ์๋ํ๋ก ๋ณ๊ฒฝ์ ํ์ต๋๋ค.
- ๋ณ๊ฒฝํ ์ด์ ๋ ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ๋ฐฐํฌ ์๋ํ๋ฅผ ๊ตฌ์ฑํ ์ ์์๊ณ , ์ ํ๋ Resource๋ฅผ ํตํ์ฌ ์ต๋์ ํจ์จ๋ก ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค. ( Action๋ง ์ฌ์ฉํ์ฌ ํ์ดํ๋ผ์ธ ํจ์จ์ ๊ด๋ฆฌ, ๋ฐฐํฌ ์ฑ๊ณต์ ์๋์ด ๋์ค๋
ChatOps๋ฅผ ํตํด ์๋น์ค ์ค๋ฅ์ ๋น ๋ฅด๊ฒ ๋์์ด ๊ฐ๋ฅํ๋ค. )[ ๋ณ๊ฒฝ์ ์๊ฐํ๋ ๋ถ๋ถ ]
- ํ์ฌ SSE์ ํ์ฅ์ฑ์ ์๊ฐํ์ฌ ๋ฉ์ธ์ง(Kafka)๋ฅผ ์ ์ฉํ์ฌ AWS ๊ณ ๊ฐ์ฉ์ฑ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ฅผ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค.
## ๐ฅ Wireframe
[๐ Figma ๋ฐ๋ก๊ฐ๊ธฐ ](https://www.figma.com/file/67asFaSpQCu4s2CKAJqxac/Untitled?type=design&node-id=0-1&mode=design&t=DdRtY5ictOvnNkSn-0)
![image](https://github.com/CStudyTeam/CStudy-backend/assets/103854287/cf4eae6b-43b5-409d-9125-178e33b89473)