๐ ๊ถ์ฉ์ฌ
(Front">
<div align="center">
<img src="<https://github.com/angly97/DoLearnDoLearn/assets/70613905/8ef87700-4a2b-42f0-982b-4a8dd4f594b8>" width="50%"/>
</div>
<br/>
# SSAFAST Project
<br>
## ๐ช ๊ฐ๋ฐ ๋ฉค๋ฒ ์๊ฐ
<table> <tr> <td height="140px" align="center"> <a href="<https://github.com/dolpongg>"> <img src="<https://avatars.githubusercontent.com/u/96533697?v=4>" width="140px" /> <br><br> ๐ ์ด์๋ จ <br>(Back-End) </a> <br></td> <td height="140px" align="center"> <a href="<https://github.com/xswaqz>"> <img src="<https://avatars.githubusercontent.com/u/70613905?v=4>" width="140px" /> <br><br> ๐ ๋ฏผ์ดํ <br>(Back-End) </a> <br></td> <td height="140px" align="center"> <a href="<https://github.com/mickeyshoes>"> <img src="<https://avatars.githubusercontent.com/u/49228132?v=4"width="140px>" /> <br><br> ๐ถ ์์ฑ๋ฏผ <br>(Back-End) </a> <br></td> <td height="140px" align="center"> <a href="<https://github.com/YongjaeKwon>"> <img src="<https://avatars.githubusercontent.com/u/109266749?v=4>" width="140px" /> <br><br> ๐ ๊ถ์ฉ์ฌ <br>(Front-End) </a> <br></td> <td height="140px" align="center"> <a href="<https://github.com/moxnox63>"> <img src="<https://avatars.githubusercontent.com/u/71482583?v=4>" width="140px" /> <br><br> ๐ ์ฅ์์ง <br>(Front-End) </a> <br></td> <td height="140px" align="center"> <a href="<https://github.com/HanKyeon>"> <img src="<https://avatars.githubusercontent.com/u/109321867?v=4>" width="140px" /> <br><br> ๐ ํ๊ธฐํ <br>(Front-End) </a> <br></td> </tr>
<tr> <td align="center">OverloadTest<br/>Workspace<br/>Figma<br/>APISpec<br/>GCP<br/>GCP SDK<br/>Spring Boot<br/>JPA<br/>MySQL<br/>Redis<br/>
<td align="center">CI/CD<br/>UsecaseTest<br/>APIExec<br/>Auth<br/>Member<br/>JavaPoet<br/>SpringSecurity<br/>Spring Boot<br/>JPA<br/>MySQL<br/>MongoDB<br/>Redis</td>
<td align="center">APISpec<br/>DtoSpec<br/>Spring Boot<br/>JPA<br/>MySQL<br/>MongoDB</td>
<td align="center">UI/UX<br/>NextJS<br/>React<br/>ReactHookForm<br/>Typescript<br/>Redux<br/>Tailwind<br/></td>
<td align="center">UI/UX<br/>NextJS<br/>React<br/>Typescript<br/>Redux<br/>ReduxTookKit<br/>Tailwind<br/></td>
<td align="center">NextJS<br/>React<br/>Typescript<br/>ReactQuery<br/>Redux<br/>ReduxTookKit<br/>Tailwind<br/>FigmaAPI<br/>Y.JS<br/></td></tr> </table>
<br />
## ๐ ํ๋ก์ ํธ ๊ธฐ๊ฐ
### 23.04.10. ~ 23.05.19
- ๊ธฐํ ๋ฐ ์ค๊ณ : 23.04.10 ~ 23.04.24
- ํ๋ก์ ํธ ๊ตฌํ : 23.04.24 ~ 23.05.18
- ๋ฒ๊ทธ ์์ ๋ฐ ์ฐ์ถ๋ฌผ ์ ๋ฆฌ : 23.05.15 ~ 23.05.18
<br />
## ๐ก ์๋น์ค ์๊ฐ
### SSAFAST
> ํ๋ก์ ํธ ์ค๊ณใํ
์คํธ ๋จ๊ณ์์์ ๋ ๋์ ๊ฐ๋ฐ์ ๊ฒฝํ์ ์ํ ์คํ์์ค<br /><br />Figma, Notion, Postman, Swagger, Locust ๋ฑ<br /> ์๋ง์ ๊ฐ๋ฐ ํ๋ซํผ์ ์ด๋์ ์ต์ํํจ์ผ๋ก์จ, ์
๋ฌด ์ง์ค๋ ฅ์ ๋์
๋๋ค!<br /><br />๊ฐ๋ฐ์๋ค์ด ํ๋ก์ ํธ์ ์ฐธ์ฌํ๋ฉฐ ๋๋ ์ ์๋ ํฌ๊ณ ์์ ๋ถํธํจ์ ํด์ํ๊ณ ์ ํ์์ต๋๋ค.
### ๋ถํธํจ์ ํด์ํ์ฌ ๊ฐ๋ฐ ์๋๋ฅผ ๋์ฑ ๋น ๋ฅด๊ฒ, SSAFAST
<br/>
## ๐ ๏ธ ๊ธฐ์ ์คํ
#### Front
<img src="<https://img.shields.io/badge/Next.js-000000?style=for-the-badge&logo=Next.js&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/React-61DAFB?style=for-the-badge&logo=React&logoColor=black>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Typescript-3178C6?style=for-the-badge&logo=Typescript&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/ReactQuery-FF4154?style=for-the-badge&logo=React%20Query&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/React> Hook Form-EC5990?style=for-the-badge&logo=React-hook-form&logoColor=white" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Tailwind-06B6D4?style=for-the-badge&logo=Tailwind%20CSS&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Redux-764ABC?style=for-the-badge&logo=Redux&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Reduxtoolkit-764ABC?style=for-the-badge&logo=Redux&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Axios-5A29E4?style=for-the-badge&logo=Axios&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Y.JS-7FEB7E?style=for-the-badge&logo=yjs&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/>
#### Back
<img src="<https://img.shields.io/badge/Java-007396?style=for-the-badge&logo=Java&logoColor=#007396>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Spring> Boot-6DB33F?style=for-the-badge&logo=Spring Boot&logoColor=white" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Spring> Security-6DB33F?style=for-the-badge&logo=Spring Security&logoColor=white" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/JSON> Web Tokens-000000?style=for-the-badge&logo=JSON Web Tokens&logoColor=white" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <br/> <img src="<https://img.shields.io/badge/MongoDB-FFEEEEE?style=for-the-badge&logo=MongoDB&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Redis-000000?style=for-the-badge&logo=Redis&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/GCP> SDK-BBBBBB?style=for-the-badge&logo=GCPSDK&logoColor=white" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/OAuth2-2496ED?style=for-the-badge&logo=OAuth2&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/GCP-2496ED?style=for-the-badge&logo=Ubuntu&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/><img src="<https://img.shields.io/badge/Gradle-02303A?style=for-the-badge&logo=Gradle&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/>
#### CI/CD
<img src="<https://img.shields.io/badge/Nginx-009639?style=for-the-badge&logo=NGINX&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Docker-2496ED?style=for-the-badge&logo=Docker&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Jenkins-D24939?style=for-the-badge&logo=Jenkins&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/>
#### ๊ธฐํ
<img src="<https://img.shields.io/badge/Java> Poet-E25A1C?style=for-the-badge&logo=JavaPoet&logoColor=white" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Vegeta-3776AB?style=for-the-badge&logo=Vegeta&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/>
#### ํ์
ํด
<img src="<https://img.shields.io/badge/Jira-0052CC?style=for-the-badge&logo=Jira&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/GitLab-FC6D26?style=for-the-badge&logo=GitLab&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/> <img src="<https://img.shields.io/badge/Mattermost-0058CC?style=for-the-badge&logo=Mattermost&logoColor=white>" style="height : auto; margin-left : 10px; margin-right : 10px;"/>
<details><summary> <b> ์์ธ ๊ธฐ์ ์คํ ๋ฐ ๋ฒ์ </b> </summary>
| ๊ตฌ๋ถ | ๊ธฐ์ ์คํ | ์์ธ๋ด์ฉ | ๋ฒ์ |
| -------- | -------------------------- | -------------------------- | --------- |
| ๊ณตํต | Gitlab | ํ์๊ด๋ฆฌ | \\- |
| | Jira | ์ด์๊ด๋ฆฌ | \\- |
| | Mattermost, Notion | ์ปค๋ฎค๋์ผ์ด์
| \\- |
| BackEnd | MySQL | DBMS | 8.0.21 |
| | MongoDB |DBMS, DataBase | 6.0.5 |
| | Java | OpenJDK | 1.8.0_362 |
| | Spring Boot | Java Server Framework | 2.7.6 |
| | Spring Security | | \\- |
| | JPA | | \\- |
| | IntelliJ | IDE | \\- |
| | Java Poet | Code Generator | 1.13.0 |
| | OAuth2 | | 2.6.2 |
| | Vegeta | ๋ถํํ
์คํธ ์คํ์์ค | 8.0.0 |
| | Redis | ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค | 7.0.11 |
| | Gradle | Build | 7.6.1 |
| FrontEnd | Next.JS | ํ๋ก ํธ ํ๋ ์์ํฌ | 13.3.0 |
| | React | | 18.0.35 |
| | Typescript | | 5.0.4 |
| | ReactQuery | ์๋ฒ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | 0.17.6 |
| | React Hook Form | ํผ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | 7.43.9 |
| | Redux ToolKit | ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | 1.9.3 |
| | Tailwind | CSS ๋ผ์ด๋ธ๋ฌ๋ฆฌ | 3.3.1 |
| | axios | API ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ | 1.2.3 |
| | IDE | Visual Studio Code | 1.75.1 |
| Server | AWS EC2 | Server | \\- |
| | Nginx | | 1.23.3 |
| | Docker | | 23.0.1 |
| Test | test | Postman | 10.9.4 |
| | test | JUnit5 | \\- |
| | test | Mockito | \\- |
| | test | Jacoco | toolVersion 0.8.7 |
</details>
<br />
## ๐๏ธ ํ๋ก์ ํธ ๊ตฌ์ฑ
์์คํ
์ํคํ
์ฒ
---

---
์๋น์ค ํ๋ฆ๋
---

---
<details>
<summary>FE ํด๋ ๊ตฌ์กฐ</summary>
```Plain Text
โโโ components
โย ย โโโ apis
โย ย โโโ canvas
โย ย โโโ common
โย ย โโโ create
โย ย โโโ forms
โย ย โโโ preview
โย ย โโโ work
โย ย โโโ APIConnectContainer
โย ย โโโ APIDocsContainer
โย ย โย ย โโโ formComponent
โย ย โโโ APIEditContainer
โย ย โโโ APITestContainer
โย ย โโโ usecase
โโโ hooks
โย ย โโโ queries
โโโ nginx
โโโ pages
โย ย โโโ api
โย ย โโโ space
โย ย โโโ [spaceId]
โโโ public
โย ย โโโ assets
โย ย โโโ fonts
โย ย โโโ images
โโโ store
โโโ styles
โโโ utils
</details>
<details>
<summary>BE ํด๋ ๊ตฌ์กฐ</summary>
โโโ gradle
โย ย โโโ wrapper
โโโ src
โโโ main
โย ย โโโ java
โย ย โโโ com
โย ย โโโ rocket
โย ย โโโ ssafast
โย ย โโโ apiexec
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โย ย โโโ document
โย ย โย ย โย ย โย ย โโโ element
โย ย โย ย โย ย โโโ entity
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โย ย โโโ element
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ apispec
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โย ย โโโ Document
โย ย โย ย โย ย โย ย โโโ element
โย ย โย ย โย ย โย ย โโโ temp
โย ย โย ย โย ย โโโ Entity
โย ย โย ย โย ย โโโ Enum
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ auth
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ handler
โย ย โย ย โโโ jwt
โย ย โย ย โโโ service
โย ย โโโ config
โย ย โโโ dtospec
โย ย โย ย โโโ Enum
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โย ย โโโ element
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ exception
โย ย โโโ figma
โย ย โย ย โโโ domain
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ member
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ overload
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ tmp
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โโโ dto
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ usecase
โย ย โย ย โโโ controller
โย ย โย ย โโโ domain
โย ย โย ย โย ย โโโ document
โย ย โย ย โย ย โย ย โโโ element
โย ย โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โย ย โโโ response
โย ย โย ย โย ย โโโ entity
โย ย โย ย โโโ dto
โย ย โย ย โย ย โโโ request
โย ย โย ย โย ย โโโ response
โย ย โย ย โโโ repository
โย ย โย ย โโโ service
โย ย โโโ utils
โย ย โโโ workspace
โย ย โโโ controller
โย ย โโโ domain
โย ย โโโ dto
โย ย โย ย โโโ request
โย ย โย ย โโโ response
โย ย โโโ repository
โย ย โโโ service
โโโ test
</details>
<br/>
๐จ Figma
<img src="https://github.com/angly97/DoLearnDoLearn/assets/70613905/8c673930-6578-4b7c-9692-a997a5431e9f" width=50%>
<br />
๐ ERD
<img src="https://file.notion.so/f/s/65004c33-5176-4ce7-b5df-91b34e6019b0/erd_img.png?id=bd9f93a2-79fb-4c9f-9a7b-49da2175d713&table=block&spaceId=26ae456f-746f-4803-abcb-5d882cacc221&expirationTimestamp=1684242755170&signature=iSQRQUoqWIUW35DaYXgNk8xTTLuq0tyCk8pBRDPZivA&downloadName=erd+img.png" width="50%"></div>
<br />
๐ฅ๏ธ ์ฃผ์๊ธฐ๋ฅ
๊ฐ์
- API ๋ช
์ธ
- ํ๋ฉด ๋ณ UI ๋์์ธ์ ๋ณด๋ฉฐ ํ์ํ ์์ฒญ/์๋ต ๋ฐ์ดํฐ๋ฅผ ํ์ธํ์ฌ ๊ฐ์ ๊ณต๊ฐ์์ API ์ค๊ณ
- API ๋ช
์ธ ์์ฑ์ ์ํด Figma ํ๋ฉด๊ณผ ๋ช
์ธ ์์ฑ ๋ฌธ์๋ฅผ ๋ฒ๊ฑฐ๋กญ๊ฒ ์ด๋ํด์ผํ๋ ๋ถํธํจ ํด์
- Postman, Swagger์ ๋ฌ๋ฆฌ Request ๊ฐ ์ ์ฝ์กฐ๊ฑด์ ์ ์ฝ์กฐ๊ฑด๊ณผ Response ํญ๋ชฉ์ ๋ํ ์ฃผ์ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ ๊ฐ๋ฐ ๊ณผ์ ์ ์คํด๋ฅผ ์ต์ํ
- ๊ฐ ํ๋ฉด๋ง๋ค ํ์ํ API ๋ชฉ๋ก ์ฐ๊ฒฐ ๊ฐ๋ฅ
- ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ํด ํ๋ฉด๋ณ๋ก ์ด๋ค API๊ฐ ํ์ํ์ง ํ๋์ ํ์ธ ๊ฐ๋ฅ
- code generator
- API ์์ฒญ
- ํ๋ฉด๋ณ๋ก ์ฐ๊ฒฐ๋ API ๋ชฉ๋ก์ ํ๋์ ํ์ธํ๊ณ ๊ฐ์ ๊ณต๊ฐ์์ ์์ฒญ ํ
์คํธ๋ฅผ ์งํํจ์ผ๋ก์จ, ํด๋น ํ๋ฉด์ ํ์ํ API๋ค์ด ์ฑ๊ณต์ ์ผ๋ก ์๋ํ๋์ง ์ฝ๊ฒ ํ์ธ ๊ฐ๋ฅ
- API ์์ฒญ์ ๋ํ ์๋ต์ ์ ์ฅํจ์ผ๋ก์จ, ์ฑ๊ณต ์๋ต๊ณผ ์คํจ ์๋ต ๊ทธ๋ฆฌ๊ณ ๊ทธ ์๋ต์ ๋ณด๋์ ๋์ ์์ฒญ๊ฐ ์ ๋ณด๋ฅผ ํ์ธ ๊ฐ๋ฅ
- ์ ์ค์ผ์ด์ค ํ
์คํธ
- ํ๋์ ์๋๋ฆฌ์ค๋ฅผ ์ํด ์คํ๋์ด์ผํ๋ API๋ค์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ์์ฒญํ์ฌ, ํด๋น ๊ธฐ๋ฅ์ด ์ฑ๊ณต์ ์ผ๋ก ๊ตฌํ๋์๋์ง ์ฝ๊ฒ ํ์ธ
- ex. ๋๊ธ ์์ฑ ์ ์ค์ผ์ด์ค ํ
์คํธ
- ๋ก๊ทธ์ธ API ํธ์ถ์ ์ํด, ๊ณ์ ์ ๋ณด๋ฅผ ์
๋ ฅ
- ๊ธ ์์ฑ API ํธ์ถ์ ์ํด, ์ ๋ชฉ๊ณผ ๋ด์ฉ์ ์
๋ ฅํ๊ณ 1๋ฒ API ์๋ต ํค๋์ Access Token๋ฅผ 2๋ฒ API ์์ฒญ ํค๋์ Authorization์ ๋งคํ
- ํด๋น ๊ธ์ ๋ํ ๋๊ธ ์์ฑ API ํธ์ถ์ ์ํด, ๋๊ธ ๋ด์ฉ์ ์
๋ ฅํ๊ณ 2๋ฒ API ์๋ต์ ๊ธ ID๋ฅผ 3๋ฒ API์ ์์ฒญ ๋ฐ๋์ ๊ธ id์ ๋งคํ
- ์ ์ค์ผ์ด์ค ํ
์คํธ ์คํ ๋ฒํผ์ ํด๋ฆญํ์ฌ, ์์ API๋ค์ ์์ฐจ์ ์ผ๋ก ์คํ ๋ง์ง๋ง์ผ๋ก ํธ์ถ๋ API ์๋ต์ ํ์ธ
- ์ฑ๋ฅ ํ
์คํธ
- ํ
์คํธํ๊ณ ์ ํ๋ api, duration, ์ด๋น request ์๋ฅผ ์
๋ ฅํ๋ฉด ๋์ ์ผ๋ก ํ
์คํธ ์๋ฒ๋ฅผ ์์ฑํ์ฌ ์ฑ๋ฅํ
์คํธ๋ฅผ ๋๋ฆฌ ์ํํจ
- GCP SDK๋ฅผ ์ด์ฉํ์ฌ ํด๋ผ์ฐ๋ ์๋ฒ ๋์ ์์ฑ
- vegeta ์คํ์์ค๋ก ์ฑ๋ฅํ
์คํธ ์ํ
<br />
I. ์ํฌ์คํ์ด์ค ์์ฑ

- 1๋จ๊ณ : ํ์์ ์ฌ์ฉํ๊ณ ์๋ ํผ๊ทธ๋ง url์ ์
๋ ฅํ๋ฉด ํผ๊ทธ๋ง API๋ฅผ ์ด์ฉํด ํผ๊ทธ๋ง ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
- 2๋จ๊ณ : ํ๋ก์ ํธ์ ์ ๋ณด๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ฆ, ์ค๋ช
, ๊ธฐ๊ฐ ๋ฑ์ ์
๋ ฅํ๊ณ , ํ์๋ ์ด๋ํฉ๋๋ค.
- 3๋จ๊ณ : ํ์์ ์ฌ์ฉํ ํผ๊ทธ๋ง ์น์
๋ชฉ๋ก์ ์ ํํ๊ณ ์ํฌ์คํ์ด์ค ์์ฑ์ ๋ง๋ฌด๋ฆฌํฉ๋๋ค.
<br />
II. ์ํฌ์คํ์ด์ค ํํ๋ฉด
<img src="https://github.com/angly97/DoLearnDoLearn/assets/70613905/d9abe420-1ad9-457b-b1b9-88a51e660359" width="50%"/>
- ์ผ์ชฝ ์๋จ์ ์ํฌ์คํ์ด์ค ์์ฑ์ ์์ฑํ ํ๋ก์ ํธ ์ ๋ณด์
๋๋ค.
- ์ผ์ชฝ ํ๋จ์ ๋ช
์ธํ API ๋ชฉ๋ก์
๋๋ค.
- ์ค๋ฅธ์ชฝ ์๋จ์ ์ ์ฒด API ๋ชฉ๋ก์ค ํ
์คํธ๊ฐ ์๋ฃ๋ API ๊ฐฏ์์ ๋น์จ์
๋๋ค.
- ์ค๋ฅธ์ชฝ ํ๋จ์ ํ์ ๋ชฉ๋ก์
๋๋ค.
<br />
III. DTO ๋ช
์ธ & API ๋ช
์ธ

- ์ค๋ฅธ์ชฝ์์ DTO ๋ช
์ธ๋ฅผ ์์ฑํฉ๋๋ค. ํ๋์ ์ด๋ฆ๊ณผ ํ์
, ์ ์ฝ์กฐ๊ฑด๊น์ง ์์ฑํฉ๋๋ค.
- ๋ฑ๋กํ DTO๋ ์ผ์ชฝ์์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ค๋ฅธ์ชฝ ์๋จ DTO ์ฝ๋ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ช
์ธํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์์ฑ๋ DTO ํด๋์ค ์ฝ๋๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.

- ์ผ์ชฝ์ ํผ๊ทธ๋ง์์ ์์ฑํ ์น์
์
๋๋ค. ํผ๊ทธ๋ง๋ฅผ ๋ณด๋ฉฐ ์ค๋ฅธ์ชฝ์์ API ๋ช
์ธ๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
- ๋ช
์ธ์๋ param, path variable, header, body ์ ๋ณด๋ฅผ ์
๋ ฅํฉ๋๋ค.
- body์ ๊ฐ์ฒด ํํ์ ํ๋๊ฐ ๋ค์ด๊ฐ๋ค๋ฉด ๋ช
์ธํ๋ DTO๋ฅผ ๋ถ๋ฌ์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
<br />
IV. Figma ํ๋ฉด๋ณ ์ฌ์ฉ๋๋ API ์ฐ๊ฒฐ

- ํ๋ฉด๋ณ๋ก ์ฌ์ฉ๋ API๋ฅผ ์ฐ๊ฒฐํ๋ ๋จ๊ณ์
๋๋ค.
- ์ผ์ชฝ ํผ๊ทธ๋ง ์น์
์ค ํ๋๋ฅผ ๊ณจ๋ผ API ์ ์ฒด ๋ชฉ๋ก์ค ์ฌ์ฉํ API๋ค์ ์ ํํด ์ ์ฅํฉ๋๋ค.
<br />
V. API ์์ฒญ ๋ฐ Axios ์์ฒญ ๊ฐ์ฒด ์ฝ๋ ๋ฐํ

- ๋ช
์ธํ๋ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ ๋จ๊ณ์
๋๋ค.
- ๋ช
์ธ ์ ๋ณด๋ฅผ ํ์ธํ๋ฉฐ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ ํ ๋ฐ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์์ต๋๋ค.
- ์์ฒญํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก Axios ์์ฒญ ๊ฐ์ฒด ์ฝ๋๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
<br />
VI. ์ ์ค์ผ์ด์ค ํ
์คํธ

- ์ ์ค์ผ์ด์ค ๊ฒ์ฆ์ ํ์ํ API ๋ชฉ๋ก์ ์ ํํฉ๋๋ค.
- API ๋ช
์ธ๋ฅผ ๋ฐํ์ผ๋ก ์ ์ ํ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํฉ๋๋ค.
- ๋ณ์ ๊ด๊ณ ์ค์ : "Response ์ฐ๊ฒฐ" ๋ฒํผ์ ๋๋ฌ ์ค๋ฅธ์ชฝ์ ์ด์ ์๋ต ๋ฐ์ดํฐ ์ค ํ๋๋ฅผ ๊ณจ๋ผ ๋ณ์ ๊ด๊ณ๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
- ์ ์ค์ผ์ด์ค ์ฑ๊ณต์์๋ ๋ง์ง๋ง API์ ์์ฒญ ๊ฒฐ๊ณผ๊ฐ, ์คํจ์์๋ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ์์ฒญ๋ API ์์ฒญ ๊ฒฐ๊ณผ๊ฐ ๋น๋๋ค.
<br />
VII. ์ฑ๋ฅํ
์คํธ
- ์๋ฒ ์์ ์ธ์ฆ : ์๋จ์ ์ฝ๋ ์ค ์๋ฒ์ ํ๋ ์์ํฌ์ ์ผ์นํ๋ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ์๋ฒ์ ๋ถ์
๋๋ค. ์ด๋ ์์ฒญ์ ๋ฐ์ ์ ์๋ ๊ฒฝ๋ก๊ฐ "[server_url]/api/ssfast" ์ธ์ง ๊ผญ ํ์ธํด์ผํฉ๋๋ค.
- ๋ชจ๋ ์๋ฒ์ ๋ํ ์ธ์ฆ์ด ์๋ฃ๋์ด์ผ ์ฑ๋ฅํ
์คํธ๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
- ํ
์คํธํ๊ณ ์ ํ๋ API๋ฅผ ์ ํํด์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
ํ๊ณ ์ด๋น ์์ฒญ ํ์, duration์ ์
๋ ฅํ๊ณ ์์ฒญํฉ๋๋ค.
<br />
<br />
<div id="6"></div>
๐ฅ ํ์
๊ด๋ฆฌ
I. Git



<br />
II. Notion
<a href="https://magical-sweatshirt-a0d.notion.site/93d9ef3bac7f448089c1096c304fad54" target="_blank">Link</a>
<br />