์ฝ 6~7์ฃผ ๊ฐ 2022.01.09 ~ 2022.02.17 + (~ 2022.02.22) ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ค. (๊ธฐํ๋ถํฐ ๋ฐํ๊น์ง ๋ค ํฌํจ) ๊ฐ๋ฐํ๋ฌ ์จ 6๋ช ์ด์ ๊ธฐํ๋ถํฐ ๋์์ธ, ์ค๊ณ, ๊ฐ๋ฐ, ๋ฐํ๊น์ง ๋ค ํด์ผ ๋ผ์ ํ๋ค์๊ณ ๋นก๋นกํ ์ผ์ ์ด์๋ค.
ํ๋ก์ ํธ๋ฅผ ํ๋ ๋์ ์ฌ๋ฌ ์ผ๋ค์ด ์์๊ณ ํ๋ค์๋ค. ํ์ง๋ง ํ๋ก์ ํธ๋ฅผ ๋ฌด์ฌํ ๋ง์น๊ณ , ์์๊น์ง ํ๊ฒ ๋๋ฉฐ ์ ์๋ฏธํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ธ ๊ฒ ๊ฐ์ ๋ฟ๋ฏํ๋ค.
์ ์ ์์ด ๊ฐ๋ฐํ๋๋ผ ์ค๊ฐ์ค๊ฐ ๊ธฐ๋ก์ ํ์ง ๋ชปํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ๋๋๊ณ ํ๋ค์๋ ์ ์ด๋ ์์ฌ์ ๋ ์ ๋ค์ด ๋ง๊ฐ๋๊ธฐ ์์ํ๋ค. ๊ทธ๋์ ์์ด๋ฒ๋ฆฌ๊ธฐ ์ ์ ์ง๋ 6~7์ฃผ ๊ฐ์ ํ๋ก์ ํธ ๊ณผ์ ์ ๋์๋ณด๊ณ ์ ํ๋ค.
๐ข ํ๋ก์ ํธ ์๊ฐ
- ํ๋ก์ ํธ ์ธ์ : 6๋ช (ํ๋ก ํธ์๋ 3๋ช , ๋ฐฑ์๋ 3๋ช (๋ฐฑ์๋ 1๋ช ์ด ์ธํ๋ผ๋ ํจ))
- ํ๋ก์ ํธ : ์์ ์ด๋ ๋ชจ์ ๋งค์นญ ์๋น์ค
- ๊นํ๋ธ ๋งํฌ : ๋งํฌ ๋ด๋ฆผ
- ํ์ : GitLab, Jira, Notion, Mattermost, Webex, Discord
- ๊ธฐ์ ์คํ
- Frontend : React, Redux, Tailwind, Typescript
- Backend : Spring Boot, Spring Cloud, JPA, MySQL, Websocket, Redis, Oauth2
- Infra : AWS EC2, Docker, Jenkins, Nginx
๐ฉ๐ป๐ป ๋์ ์ญํ
- ๋ฐฑ์๋ ๊ฐ๋ฐ (Spring Boot, JPA, MySQL, Feign Client)
- DB ์ค๊ณ/๊ตฌ์ถ
- PPT ๋ด๋น
๐ฉ ํ๋ก์ ํธ ๊ณผ์
1. ๊ธฐํ
์ฐ๋ฆฌ ํ์ด ์ ํํ ํธ๋์ด ์น๋์์ธ์ธ ๋งํผ UX/UI์ ์ผ๋ก ๋ณด์ด๋ ๊ฒ์ด ์์ด์ผ ํ๊ณ , ์นRTC๋ฅผ ์ ํํ ๋ค๋ฅธ ํ๊ณผ๋ ๋ค๋ฅธ ๊ธฐ์ ์ ์ฐจ๋ณ์ ์ ์คฌ์ด์ผ ํ๋ค.
์ฒ์ ์ ๋๋ก ๋ ๊ธฐํ์ด ๋์๋ค. ์ ์ ๊ตฌ์ฒดํ๋ฅผ ํ ์๋ก ๋ด๊ฐ ๋ํ์์ ํ ํ๋ก์ ํธ๋ก ํ๋ ๊ธฐํ๊ณผ ์ ์ฌํด์ ธ ๊ฐ๋ค. ํ์๋ค๋ ํฌํธํด๋ฆฌ์ค๊ฐ ๊ฒน์น ๊ฒ์ ์ฐ๋ คํ์ง๋ง ๋๋ ๊ธฐ์ ์ ์ผ๋ก ๋ค๋ฅธ ์ฐจ๋ณ์ ์ด ์๋ค๋ฉด ๊ด์ฐฎ์ ๊ฑฐ๋ผ๋ฉฐ ์งํ์ ํ๊ณ , ์ปจ์คํดํธ๋๊ป ์ปจํ์ ๋ฐ์ผ๋ฌ ๊ฐ๋ค. ํ์ง๋ง ์ปจ์คํดํธ๊ป์ ๊ฒน์น๋ ์ฃผ์ ์ ํฌํธํด๋ฆฌ์ค๋ ๋์ค์ ๋ฉด์ ์ ๊ฐ๋ฉด ๋ถ๋ฆฌํด์ง๋ค๋ ๋ต๋ณ์ ์ฃผ์ จ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ์ ์ ๊ตฌํ๋๋ ๊ฐ๋ฐ๋์ด ์ ๋ค๋ ํผ๋๋ฐฑ์ ๋ฐ์๋ค. ๊ทธ๋์ ๊ธฐํ์ ๊ฐ์์๊ณ ๋ค์ ์์ํ๋ค.
๊ทธ๋ ๊ฒ ๊ฑฐ์ 2์ฃผ์ฐจ๊น์ง ๊ธฐํ์ ํ๊ฒ ๋์๋ค. ๊ธฐํ์ ๋นจ๋ฆฌ ํด์ผ ๊ฐ๋ฐ ๊ธฐ๊ฐ์ ๋ง์ด ๊ฐ์ ธ๊ฐ ์ ์๋๋ฐ, ๋๋ฌด์ง ๊ธฐํ์ด ์ ๋์์ ํ์๋ค ๋ชจ๋ ์ง์ณ๊ฐ๋ค. ๊ธฐํ์ด ์ด๋ ๊ฒ ์ด๋ ค์ด ์ค ๋ชฐ๋๋ค. ๋นจ๋ฆฌ ๊ฐ๋ฐ์ ์์ํ๊ณ ์ถ์ ๋ง์์ด์๋ค.
์ฒซ๋ฒ์งธ ๊ธฐํ์ ์ฃผ์ ์์ ๋ฐฉํฅ์ฑ์ ๋ฐ๊ฟ, ํ ํ์์ ๊ฐ์ธ์ ์ธ ๊ฒฝํ์ ๋ฐํ์ผ๋ก ํ ๊ธฐํ์ด ๋์๋ค. ์ด๋ ๋ชจ์ ์๋น์ค์ด๋ค. ๊ฐ์ธ๋ค์ด ์ด๋ ๋ชจ์์ ํ ์ ์๋๋ก ์ค๊ฐํด ์ฃผ๊ณ , ํ์ ๊พธ๋ ค ์ง์์ ์ผ๋ก ํ๋ค ๊ฐ ๊ฒฝ๊ธฐ๋ฅผ ํ ์ ์๋๋ก ๋์์ฃผ๋ฉฐ, ์ค์๊ฐ ์ฑํ , ์๋ ๋งค์นญ, ํ ํต๊ณ๊น์ง ์ง์ํ๋ ์๋น์ค์ด๋ค.
์ปจ์คํดํธ๋๊ป ํ๋ก ํธ์ ๋ฐฑ์ผ๋ก๋ ๊ธฐ์ ์ ๊ตฌํ๋๋ ๊ฐ๋ฐ๋์ด ๋ง๋ค๋ ์กฐ์ธ๋ ๋ฐ์๋ค. (ํ๋ก ํธ+๋ฐฑ ํฉ์ด 100์ด๋ผ๊ณ ์ณค์ ๋, ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ํ๋ก ํธ 70, ๋ฐฑ 70, ๋ํฉ 140์ ํ๋ก์ ํธ์๋ค๐ฑ ์ผ๊ทผ ํ์์..)
2. ์ค๊ณ
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์ค์๊ฐ์ฑ์ด ๊ฐํ๊ธฐ ๋๋ฌธ์ ์๋น์ค๋ฅผ ๋ชจ๋ฐ์ผ๋ก ๋ง์ด ์ด์ฉํ ๊ฒ ๊ฐ์, ์น์ฑ์ผ๋ก ๊ตฌ๋ํ๊ธฐ๋ก ํ๋ค. ์น์ฑ์ ๋ง๊ฒ ๋ชจ๋ ์ค๊ณ๋ฅผ ํ๋ค.
ํ๋ก ํธ๋ฅผ ๋งก๊ฒ ๋ ํ์๋ค์ ํผ๊ทธ๋ง๋ก ๋์์ธ ๋ฐ UX/UI ์ค๊ณ๋ฅผ ํ๊ณ , ๋ฐฑ์๋๋ฅผ ๋งก๊ฒ ๋ ํ์๋ค์ ๊ธฐ๋ฅ๋ช ์ธ์ ์์ฑ, ์ํคํ ์ฒ ์ค๊ณ, ERD ์ค๊ณ, API ์ค๊ณ๋ฅผ ํ๋ค.
- ํผ๊ทธ๋ง
๋ค๋ค ๋์์ธ๊ณผ๋ ๋จผ.. ๊ณต๋ ์ถ์ ์ด์ง๋ง, ๊ผผ๊ผผํ๊ฒ ์ค๊ณ๋ฅผ ์ํ๋ค. ํ์ ํ ์ค ์ดํ์ ์์ฃผ ์ฐ๊ณ ๊ฐ์ธ์ ์ผ๋ก UX/UI๊ฐ ์ง๊ด์ ์ด๊ณ ๊น๋ํ๋ค๊ณ ์๊ฐํ๋๋ฐ, ํ ์ค ์ดํ์ ์ฐธ๊ณ ํ๋ฉฐ ๋์์ธ๊ณผ UX/UI ์ค๊ณ๋ฅผ ํ๋ค. ํ์ด์ง ์๋ ์์ฒญ ๋ง๋ค! ๋ฐฑ์๋ ์ค๊ณํ๋ค๊ฐ ์ง๋ฃจํด์ง ๋์ฏค ์ค๊ฐ์ ๋๋ ์ผ๋ถ๋ถ(ํ์๊ฐ์ ํ์ด์ง, ๋ง์ดํ์ด์ง ์ผ๋ถ) ์ฐธ์ฌํ๋ค.์ปจ์คํดํธ๋๊ป ํ๋ก ํธ๋ ์ด๋๋ก ๊ฐ๋ฐ๋ง ์์ํ๋ฉด ๋๋ค๋ฉฐ, ํ๋ก ํธ ์ค๊ณ๊ฐ ํ๋ฅญํ๋ค๋ ํ์ ๋ค์๋ค.
๊ทผ๋ฐ ๋ฐฑ์๋ ์ค๊ณ๋? ํ๋ก ํธ์ ๋นํด์๋ ๊ผผ๊ผผํ์ง ๋ชปํ๋ค๋ ํ์ ๋ค์๋ค..
๋ฐฑ์๋์์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ง์ ์๋๋ฅผ ํ์ด์ผ ํ๋ค. ๋ฐฑ์๋ ์๋ฒ๋ฅผ ๋ชจ๋๋ฆฌํฑ์ด ์๋๋ผ MSA ๊ตฌ์กฐ๋ฅผ ์ฐ๊ฒ ๋์๊ณ , CI/CD๋ฅผ ๋์ ํด์ผ ๋๋ค. ์๋ฌด๋ ์ด์ ์ ์ด๋ฐ ๊ตฌ์กฐ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํด ๋ณธ ์ ์ด ์์ด์ ํนํ ์ํคํ ์ฒ ์ค๊ณ์ ์ ๋ฅผ ๋จน์๋ค.
- ๊ธฐ๋ฅ ๋ช ์ธ์
UX/UI ์ค๊ณ๋ฅผ ๋ณด๋ฉฐ ์์ฑ์ ํ๋ค. ์ด๋ ํ๋ก ํธ ํ๊ณผ ๊ธฐํ์ ํ ํ์๊ณผ ๋ง์ด ์ํต์ ํ์ด์ผ ํ๋ค. ํฐ ๊ธฐ๋ฅ๋ณ๋ก Epic๋ฅผ ๋๋ด์ผ๋ฉฐ, ํ๋ฉด๊ณผ ์ปดํฌ๋ํธ, ์ธ๋ถ ๊ธฐ๋ฅ๋ณ๋ก ํญ๋ชฉ์ ๋๋ ์์ฑํ๋ค.
- ERD
์ฒ์์๋ ERD Cloud์์ ์ค๊ณ๋ฅผ ํ๋ค. ์ค๋ช ๋ ๋ฃ์ ์ ์๊ณ , ํ์ ๊ธฐ๋ฅ๋ ์์ด์ ๋์ ํธ์ง๋ ๊ฐ๋ฅํ๊ณ ์ข์๋ฐ.. FK ์ ์ฝ์กฐ๊ฑด์ ์ค์ ํ๋ ๋ถ๋ถ์์๋ ๋ถํธํ๋ค. ์ ๋๋ก ํ์๊ฐ ์๋๋ค. ๊ทธ๋์ ๋๋ ์ต์ํ MySQL Workbench๋ก ๊ฐ์ํ์ ์ฌ๊ธฐ์ ์ค๊ณ๋ฅผ ํ๋ค. ์ด์ฐจํผ ๋์ค์ DB ๊ตฌ์ถ๋ ํด์ผ ํ๋๊น..
1์ฐจ๋ก ERD ์ค๊ณํ ๊ฑฐ๋ฅผ ๊ฐ์ง๊ณ ์ปจ์คํดํธ๋๊ป ๊ฐ์ ๋ Table๋ค์ ์ข ๋ ์ชผ๊ฐ๋ผ๋ ์กฐ์ธ์ ๋ค์๋ค. ์์ฃผ ์ ๋ฐ์ดํธ ๋๋ ์ ๋ณด์ ์ ๋ฐ์ดํธ๋์ง ์๋ ์ ๋ณด๋ฅผ ๋๋ ์ ์ ์ฅํ๋ ๊ฒ์ด ์ข๋ค๊ณ ํ์ จ๊ณ , ์ฌ๋ฌ ๊ณณ์์ ๊ณต์ฉ์ผ๋ก ๊ฐ์ ธ๋ค ์ฐ๋ ค๋ Table์ ๊ตณ์ด ํตํฉํ์ง ์๊ณ ๋๋ ์ ์ฐ๋๊ฒ ์ข๋ค๋ผ๊ณ ํ์ จ๋ค.
ERD๋ ๊ฐ๋ฐํ๋ฉด์ ์ถ๊ฐ๋๋ ๋ถ๋ถ์ด๋ ๋ณ๊ฒฝ๋๋ ๋ถ๋ถ์ด ์๊ธฐ๋ฉด์ ๋ง์ด ๋ฐ๋์๋ค. ์ด๊ฑด ์์ํ์ง๋ง ๊ฐ๋ฐ ๊ณผ์ ์์ DB๋ฅผ ์ผ๋ง๋ ๋ณ๊ฒฝํ๊ณ ์ฌ๊ตฌ์ถํ๋์ง ๋ชจ๋ฅด๊ฒ ๋ค..
- ์ํคํ ์ฒ ์ค๊ณ
Infra๋ฅผ ๋ด๋นํ๋ ๋ค๋ฅธ ํ์์ด ์ค๊ณ๋ฅผ ํ๋ค. MSA๋ก ์ค๊ณ๋ฅผ ํ๋๋ฐ, ์ฒ์ ํด๋ณด๋ ๊ฑฐ๋ผ ์ ๋ฅผ ๋จน์ผ์ จ๋ค๊ณ ํ๋ค. ์ด๋ ๋๋ ๊ฐ์ธ์ ์ธ ์ฌ์ ์ผ๋ก ์ฐธ์ฌ๋ฅผ ๋ชป ํ์ด์ ์ํคํ ์ฒ ๊ตฌ์กฐ์ ๋ํ ์ปจ์คํดํธ๋์ ์กฐ์ธ์ ๋ชป ๋ค์ด ์์ฌ์ ๋ค. ๊ทธ๋์ ๊ฐ๋ฐ ์ด๋ฐ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ ๋ฐ ์ ๋ฅผ ๋จน์๋ค.
MSA๋ฅผ Spring Cloud(API Gateway, Eureka)๋ฅผ ํ์ฉํ์ฌ ์ค๊ณํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋น์ค๋ฅผ ํฐ ๊ธฐ๋ฅ ๋จ์๋ก ๋ถ๋ฆฌํ์ฌ ํฌ๊ฒ 6๊ฐ์ ๋ง์ดํฌ๋ก ์๋น์ค๋ก ๋๋ด๋ค. ๋ฐฐํฌ๋ฅผ ์ํด Genkins์ Docker๋ฅผ ํ์ฉํ์ฌ CI/CD๋ฅผ ๊ตฌ์ฑํ๋ค.
- API ๋ฌธ์
๊ทธ๋์ ๋๋ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ๋ฌธ์๊น์ง ์ฐ๋ฉฐ API ์ค๊ณ๋ฅผ ํด๋ณธ ์ ์ด ์์๋๋ฐ, ์ด๋ฒ ํ๋ก์ ํธ์์๋ ๋ฏธ๋ฆฌ ๊ธฐ๋ฅ๋ณ๋ก ํ์ํ ๋ชจ๋ API๋ค์ ์ ๋ฆฌํ๋ ๊ฐ๋ฐํ๋ ๋ฐ ์ ์ฉํ๋ค. ๊ฐ ์๋ฒ ๋ฐ ๊ธฐ๋ฅ๋ณ ๊ตฌํํด์ผ ํ API ๋ถ๋์ ์ ์ ์์๊ณ , ๋ฌธ์๋๋ก Controller ๊ตฌํ์ ๋ฐ๋ก ๋ค์ด๊ฐ ์ ์์ด์ ์ข์๋ค.
๋๋ ์๋น์ค์ ์ฃผ์ ๊ธฐ๋ฅ ๋ถ๋ถ API ์ค๊ณ๋ฅผ ๋งก์์๋ค. ํ๋ก์ ํธ๊ฐ ์งํ๋จ์ ๋ฐ๋ผ ์ถ๊ฐ๊ธฐ๋ฅ๋ค์ ๋ด๊ฐ ๋งก๊ฒ ๋๋ฉด์ ์ด ์ฝ 40๊ฐ์ ๋ฌํ๋ API ์ค๊ณ๋ฅผ ํ๊ฒ ๋์๋ค! ์ด๊ฒ๋ ERD์ฒ๋ผ ๊ฐ๋ฐํ๋ฉด์ ๊ณ์ ๋ฐ๋๋ ๋ถ๋ถ์ด์๋ค.
๊ทธ ์ธ์ ์ํ์ค ๋ค์ด์ด๊ทธ๋จ๋ ๊ทธ๋ฆด ์ ์์์ง๋ง, ์ฐ๋ฆฌ ํ์ด ๊ธฐํ์ ๋ฆ๊ฒ ํด์ ๋ ์ด์ ๊ฐ๋ฐ ์์ ์๊ฐ์ ๋ฆ์ถ ์ ์์ด์ ๊ทธ๋ฆฌ์ง ์์๋ค.
3. ๊ฐ๋ฐ
๋๋์ด ๊ฐ๋ฐ ์์์ธ ๊ฒ์ธ๊ฐ..? ์ค๊ฐ์ ์ค์ฐํด๋ ๋ผ์ฌ์๊ณ , ๋ฐ๋ก ์ค๊ฐ๋ฐํ๊ฐ ์์ด ๋๋ PPT๋ฅผ ๋ง๋ค์์ด์ผ ํด์ ๊ฐ๋ฐ ์์์ผ์ด ๋ฆ์ถฐ์ก๋ค. 1์ 27์ผ๊น์ง PPT๋ฅผ ์์ ํ๋๋ผ ๊ฐ๋ฐ์ ์ ๋๋ก ์์ํ์ง ๋ชปํ๋ค. ๊ทธ๋ ๊ฒ ๋์ ๊ฐ๋ฐ ๊ธฐ๊ฐ์ 3์ฃผ + (์ถ๊ฐ 2~3์ผ)์๋ค. ์ ์ฒด์ ์ผ๋ก ๊ธฐํ, ์ค๊ณ, ๋ฐํ ์ค๋น ๋๋ฌธ์ ๊ฐ๋ฐ ๊ธฐ๊ฐ์ด ์ค์ด๋ค๊ณ ์์๋ค๐ญ ๊ทธ๋๋ ์ต์ข ์ ์ผ๋ก๋ ์ด์ฐ์ด์ฐ ๋ด๊ฐ ๋งก์ ๋ฐฑ์๋ ์๋ฒ ๊ฐ๋ฐ์ ๊ฑฐ์ ๋คํ๋ค.
์ฐ๋ฆฌ ํ๋ก์ ํธ์ ๊ธฐ๋ฅ์ ํฌ๊ฒ ๋๋์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ํ์ ๊ด๋ฆฌ / ์ธ์ฆ
- ์๋ฆผ ๊ธฐ๋ฅ
- ์ค์๊ฐ ์ฑํ
- ์ค์๊ฐ ์ด๋ ๋ชจ์ / ์ผ๋ฐ ์ด๋ ๋ชจ์
- ํ ๊ฒฝ๊ธฐ / ํ ํต๊ณ / ํ ๊ฒฝ๊ธฐ ์๋ ๋งค์นญ
๋ฐฑ์๋์์ 1์ฐจ๋ก ๊ฐ๊ฐ ํ์ ๊ด๋ฆฌ/์ธ์ฆ/์๋ฆผ, ์ค์๊ฐ ์ฑํ , ์ค์๊ฐ ์ด๋ ๋ชจ์ & ์ผ๋ฐ ์ด๋ ๋ชจ์์ ๋งก์ ๊ฐ๋ฐํ๊ธฐ๋ก ํ๋ค. ์ผ๋จ ํ ๊ด๋ จ ๊ธฐ๋ฅ์ 2์ฐจ๋ก ๋๋ ์ ๊ฐ๋ฐํ๊ธฐ๋ก ํ๋ค. ๋๋ 1์ฐจ๋ก ์ค์๊ฐ ์ด๋ ๋ชจ์๊ณผ ์ด๋ ๋ชจ์์ ๋งก๊ฒ ๋์๋ค. ๊ทธ๋์ ์ค์๊ฐ ์ง๋ ํ์ด์ง๋ฅผ ๋ง๋๋ ํ๋ก ํธ 1๋ช ๊ณผ ์ด๋ ๋ชจ์ ํ์ด์ง๋ฅผ ๋ง๋๋ ๋ค๋ฅธ ํ๋ก ํธ 1๋ช ๊ณผ ํ์ ์ ํ๊ฒ ๋์๋ค.
๊ฒฐ๊ตญ ์ต์ข ์ ์ผ๋ก๋ ๋๋ ์ค์๊ฐ ์ด๋ ๋ชจ์, ์ด๋ ๋ชจ์, ํ ๊ฒฝ๊ธฐ / ํ ๊ฒฝ๊ธฐ ์๋ ๋งค์นญ, ํ ํต๊ณ ๊ธฐ๋ฅ์ ๋งก์ ๊ฐ๋ฐ์ ํ๋ค. ๋ค๋ฅธ ๋ฐฑ์๋ 1๋ช ์ CI/CD์ Flutter, Firebase ๊ตฌ์ถ ๋๋ฌธ์ ๋ฐ์์ จ๊ณ , ๋ค๋ฅธ ๋ฐฑ์๋ 1๋ช ์ ์ค์๊ฐ ์ฑํ ๊ธฐ๋ฅ ๊ตฌํ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๊ฒ ๋์๋ค.
๋ด๊ฐ ๊ฐ๋ฐํ๋ฉด์ ๊ฒช์ ์ด์๋ ๊ธฐ์ ์ ํน์ง์ด๋ค.
- Swagger
๋ด๊ฐ ๋ง๋ ์๋ฒ API๋ฅผ ์ฐ๊ฒฐํ ํ๋ก ํธ ๊ฐ๋ฐ์์ ์ํตํ๊ธฐ ์ํด Swagger๋ฅผ ์ฌ์ฉํ๋ค. ์ง๋ ํ๋ก์ ํธ์์๋ Swagger๋ฅผ ์ฌ์ฉํด๋ณธ์ ์ด ์์ด์ ์ฝ๊ฒ ๋ถ์ผ ์ ์์ ์ค ์์๋ค.. ๊ทผ๋ฐ ์๋ฌด๋ฆฌ ํด๋ Swagger๊ฐ ๋ถ์ง ์์๋ค. ์ด์ ๋ Spring Boot์ ๋ฒ์ ์ด Swagger์ ๋ง์ง ์์์์๋ค. ์ฒ์์ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ Spring boot 3.0.2 ๋ฒ์ ์ผ๋ก ํ๋ค. ๊ฒฐ๊ตญ Swagger๋ฅผ ์ฐ๊ธฐ ์ํด ๋ ๋ฆ๊ธฐ ์ ์ Springboot 2.7.8 ๋ฒ์ ์ผ๋ก ๋ฐ๊ฟจ๋ค.
Swagger๋ฅผ ์ฌ์ฉํ๋ ํ๋ก ํธ ๊ฐ๋ฐํ๋ ํ์๊ณผ ์ด๋ค ํ์์ผ๋ก data๋ฅผ ์ฃผ๊ณ ๋ฐ์์ผ ํ๋์ง ์ํตํ๊ธฐ ํธํ๋ค. ๊ทธ๋ฆฌ๊ณ Swagger์์ ํ ์คํธ๋ฅผ ํด๋ณด๊ธฐ๋ ํธํ๋ค.
- JPA
ํ๋ถ ํ๋ก์ ํธ์์ Mybatis๋ก ๊ตฌํํ ๋ถ๋ถ์ JPA๋ก ์ ํํ๋ ๋ฆฌํฉํ ๋ง์ ์ํํ๋ฉฐ JPA๋ฅผ ์จ๋ณธ ์ ์ด ์์๋ค. ๊ทธ๋์ ๊ทธ๋ ํ๋ ๋๋ก ์ด๋ฒ์๋ ํ๋ก์ ํธ์๋ ์ ์ฉํ๋ ค ํ์๋ค. ๋น์์๋ Oracle DB๋ฅผ ์ผ๊ณ , ์กฐ์ธ๋๋ ๊ฐ์ฒด๋ค์ ๋จ๋ฐฉํฅ์ผ๋ก ๋งคํ์ ํ์๋ค.
ํ์ง๋ง ์กฐ์ธ์ผ๋ก ์ฎ์ฌ์๋ ํ ์ด๋ธ๋ค์ ๊ฐ์ด INSERT, DELETE ํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์๋์ฆ๊ฐ๋ ID ๊ฐ์ ์์ง ๋ชปํ๋ ๊ฒ์ด์๋ค. Oracle์๋ Squence๊ฐ ์์ด์ ์๋์ฆ๊ฐ๋ ID ๊ฐ์ ์ ์ ์์ด์ ๋จ๋ฐฉํฅ์ผ๋ก๋ INSERT์ ๋ฌธ์ ๊ฐ ์์๋ค. (Oracle์ ์ต์ํ๋ ๋๋ MySQL์ Squence๊ฐ ์๋ ์ค ๋ชฐ๋๋ค..)
ํด๊ฒฐ์ ํ๊ธฐ ์ํด ๊ตฌ๊ธ๋ง์ ํ ๊ฒฐ๊ณผ ์๋ฐฉํฅ์ผ๋ก ๋งคํ์ ํ๋ฉด ์ฟผ๋ฆฌ ํ ๋ฒ๋ง์ผ๋ก ํ ๋ฒ์ INSERT๋ฅผ ์ํํ ์ ์๋ค๊ณ ํ๋ค. ๊ธฐ์กด Entity๋ฅผ ๋ฏ์ด๊ณ ์ณ ์๋ฐฉํฅ์ผ๋ก ๋งคํ์ ํ๊ฒ ๋์๋ค. ํ์ง๋ง ์๋ฐฉํฅ DELETE ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ฒ ๋์๋ค. ์๋ฐฉํฅ์ผ๋ก ๋งคํ์ด ๋์ด์์ด ์ํ ์ฐธ์กฐ๊ฐ ๋ฐ์ํ๋ค..๐ญ ์ด๊ฑฐ ํด๊ฒฐํ๊ธฐ ์ํด์ ๊ตฌ๊ธ๋ง์ ์์ฒญํ๋ฉฐ JPA ๊ด๋ จ Annotation๊ณผ ์ต์ ๋ค์ ์์ฒญ ์ฐพ์๋ดค๋ค. ์ด์ ๋ณด๋ค JPA์ ๋ํด ๋ ๊ณต๋ถ๋ฅผ ํ๊ฒ ๋ ๊ธฐํ๊ฐ ๋์๋ค.
- MySQL ์ด๋ฒคํธ ์ค์ผ์ค๋ฌ
๊ฒ์๊ธ์ ๋ฑ๋กํ ์ง 30๋ถ์ด ์ง๋๋ฉด ์๋์ผ๋ก ์ญ์ ๊ฐ ๋๊ฒ ํด์ผ ํ์๋ค. MySQL์์ ์ด๋ฒคํธ ์ค์ผ์ค๋ฌ๋ฅผ ์จ์ DB์์ ์ฃผ๊ธฐ์ ์ผ๋ก ์๋์ผ๋ก ์ญ์ ๋ฅผ ์ํํ๋๋ก ํ๋ค. ์ด๋ฒคํธ ์ค์ผ์ค๋ฌ๋ฅผ ์ฒ์ ์จ๋ด์ ์ค์ผ์ค๋ฌ ๋ฌธ๋ฒ์ ์ดํดํ๊ณ ๋ด๊ฐ ์ํ๋ ์ด๋ฒคํธ๋ฅผ ๋ง๋๋ ๋ฐ ์ ๋ฅผ ๋จน์๋ค.
delimiter |
CREATE EVENT delete_live
ON SCHEDULE
EVERY 10 SECOND
ON COMPLETION PRESERVE
ENABLE
COMMENT '๋ฑ๋ก ํ 30๋ถ์ด ์ง๋๋ฉด ์ญ์ '
DO
BEGIN
delete m
from live_member m join live l
on m.live_id = l.live_id
where TIMESTAMPDIFF(MINUTE , l.regist_time, now()) >= 30;
delete from live
where TIMESTAMPDIFF(MINUTE , regist_time, now()) >= 30;
END
| delimiter ;
- HTTPS
ํ๋ก ํธ์๋์์ ์ง๋ API๋ฅผ ์ฐ๋๋ฐ HTTPS๋ก ํต์ ํด์ผ ํ๊ธฐ๋ ํ๊ณ , ๋ณด์์ฑ์ ์ํด ๋ชจ๋ API ํธ์ถ์ HTTPS๋ก ํต์ผํ๊ธฐ๋ก ํ๋ค. ํ๋ก ํธ์๋์ HTTPS๋ก ํต์ ํ ์ ์๊ฒ, ๋ฐฑ์๋ ์๋ฒ์์ SSL ์ธ์ฆ์๋ฅผ ๋ฐ์ ๋ณ๋๋ก ์ค์ ํด์ผ ๋์๋ค. ๋๋ถ์ SSL ์ธ์ฆ์ ๋ฐ๊ธ ๊ณผ์ ๊ณผ SSL์ด ์ ์ฉ๋๋ ๊ณผ์ ์ ๋ํด ๊ณต๋ถํ๊ฒ ๋์๋ค.
- CORS
ํ๋ก ํธ์๋ ํ์์ด ๋ด๊ฐ ๊ตฌํํ ๋ก์ปฌ ์๋ฒ API์ ์ฐ๊ฒฐํ๋ ์ค CORS ์๋ฌ๊ฐ ๋ฌ๋ค๊ณ ์๋ ค์คฌ๋ค. ์์ธ์ ์ฐพ์๋ณด๋ ๋ธ๋ผ์ฐ์ ์์ ๋ณด์์ ์ธ ์ด์ ๋ก cross-origin(๋๋ฉ์ธ ๋๋ ํฌํธ๋ฒํธ๊ฐ ๋ค๋ฆ)์ ์์ฒญ์ ์ ํํ๋ค๊ณ ํ๋ค. ํ๋ก ํธ์๋์ React ์๋ฒ์ ์ฃผ์๋ localhost:3000์ธ๋ฐ, ๋ฐฑ์๋์ ์๋ฒ์ ์ฃผ์๋ localhost:8080์ผ๋ก ๋์ ์๋ฒ์ ํฌํธ๋ฒํธ๊ฐ ๋ฌ๋ผ์ ๋ฐ์ํ ์ผ์ด์๋ค. CORS๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฐฑ์๋์ ์คํ๋ง ์๋ฒ์์ WebMvcConfigurer๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค. Allow-Origin์ ์ค์ ํ์ฌ ํด๊ฒฐํ ์ ์์๋ค.
- ELO ์๊ณ ๋ฆฌ์ฆ
๋น์ทํ ์์ค์ ํ๊ณผ ๊ฒฝ๊ธฐ๋ฅผ ํ ์ ์๋๋ก ๋กค, ํผํ๋ญํน ๋ฑ์์ ๋ง์ด ์ฐ๋ MMR ์์คํ ์ ๋์ ํ๋ค. MMR์ ๋ํ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ธ ELO ์๊ณ ๋ฆฌ์ฆ์ ์จ์ ๊ฒฝ๊ธฐ๋ฅผ ํ ๋๋ง๋ค ์ ์๋ฅผ ์ฐ์ ํ๋ค. ์ ์๊ฐ ๋์ ํ์ ๋ง๋์ ์ด๊ธฐ๋ฉด ๋ง์ ์ ์๋ฅผ ์ป๊ฒ ๋๊ณ , ์ ์๊ฐ ๋ฎ์ ํ์ ๋ง๋์ ์ง๋ฉด ๋ง์ ์ ์๋ฅผ ์๊ฒ ๋๋ค.
๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฑ๋กํ๋ฉด ์ ํด์ง ์์์ ๋ง๊ฒ ๊ณ์ฐํด์ ํฌ์ธํธ๋ฅผ ์ฆ๊ฐํ๋๋ก ํ๋ค. ์์คํ ๊ณผ ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ณ ์ฝ๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ฌ๋ฏธ์์๋ค. ๋ํ ์ด์ ์ฐ๊ฒฐ์์ผ์ ํ๋ณ ํต๊ณ๋ฅผ ๋ฝ๋ ๊ธฐ๋ฅ ๊ตฌํ๋ ํ๋ค.
//1. ์์ ์น๋ฅ ๊ตฌํ๊ธฐ
int Pme = teamMe.getPoint();
int Pop = teamOp.getPoint();
double Wme = 1.0 / (Math.pow(10, ((Pop - Pme) / 400)) + 1); //๋ด ํ์ ์์ ์น๋ฅ
double Wop = 1.0 / (Math.pow(10, ((Pme - Pop) / 400)) + 1); //์๋ ํ์ ์์ ์น๋ฅ
//2. ์ ์ ๊ณ์ฐํ๊ธฐ
int K = 30; //๊ฐ์ค์น
double W = 0; //๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ
//๊ฒฝ๊ธฐ ๊ฒฐ๊ณผ ๋ณ W
String resultMe = teamMatchResultMe.getResult();
String resultOp = teamMatchResultOp.getResult();
W = getW(W, resultMe);
Pme += (int)(K * (W - Wme));
W = getW(W, resultOp);
Pop += (int)(K * (W - Wop));
//3. ํ ๊ฐ์ฒด์์ ์ ์ ์ ๋ณด ๊ฐฑ์ ํ๊ธฐ
teamMe.setPoint(Pme);
teamOp.setPoint(Pop);
- ๋งค์นญ
ELO ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ณ์ฐ๋ ํ์ ์ ์๋ฅผ ๋ฐํ์ผ๋ก ๋งค์นญ ์กฐ๊ฑด์ ๋ง๋ ๋น์ทํ ์์ค์ ํ์ ๋งค์นญ์ํค๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. ๊น๋ค๋ก์ธ ๊ฒ ๊ฐ์์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๊ตฌํํ๊ฒ ๋์๋ค. ๋งค์นญ ์์คํ ๊ตฌํ์ ๋ํด ๋ง์ด ์ฐพ์๋ดค๋๋ฐ, ์ฃผ๋ก Redis๋ฅผ ์ฌ์ฉํ์ฌ ๋๊ธฐ์ด์ ๊ตฌํํ๋ค๊ณ ํ๋ค.
ํ๋ก์ ํธ ๋ง๊ฐ์ด ์ผ๋ง ๋จ์ง ์์์ MySQL DB์ '๋๊ธฐ๋ฐฉ'์ด๋ผ๋ ํ ์ด๋ธ์ ๋ง๋ค์ด์ ๋๊ธฐ์ด์ ๋ง๋ค์๊ณ , ๋๊ธฐ์ด ๋ด์์ ์ฌ์ฉ์๊ฐ ์ํ๋ ์กฐ๊ฑด์ ๋งค์นญ์ด ๋ ๋๊น์ง ๊ณ์ ํ์ํ๋๋ก ํ๋ค. ๋๊ธฐ์ด์ ๋ฃ๊ณ , ๋๊ธฐ์ด์ ์กฐํํ๊ณ , ๋๊ธฐ๊ฐ ๊ธธ์ด์ง๋ฉด ์กฐ๊ฑด์ ์ํํ๊ณ , ๋งค์นญ๋๋ฉด ๋๊ธฐ์ด์์ ์ญ์ ํ๊ณ , ๊ฒฝ๊ธฐ์ ๋ฑ๋กํ๊ณ , ์๋๋ฐฉ ํ ์ ๋ณด ๋ฐํํ๊ฒ ํ๊ณ .. ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ก ์ ๊ฒฝ์ ๋ง์ด ์ผ์ด์ผ ํ๋ค.
๊ตฌํ์ ํ๊ธด ํ์ง๋ง Redis๊ฐ ์๋๋ผ RDB๋ก ๊ตฌํ์ ํ๊ฒ ๋์ด์ ์ฐ์ฐํ๋ค. ๋์ค์ ์๊ฐ์ด ๋๋ฉด Redis๋ก ๋ฐ๊ฟ๋ณด๋ ์์ ์ ํด๋ณด๊ณ ์ถ๋ค.
- FCM ์๋ฆผ
๋งค์นญ์ด ์๋ฃ๋๋ฉด ๋งค์นญ์ด ๋ ์ฌ์ฉ์๋ค์๊ฒ ๋งค์นญ๋ ์๋๋ฐฉ์ ์ ๋ณด์ ํจ๊ป ๋งค์นญ์ด ์๋ฃ๋์๋ค๋ ์๋ฆผ์ ๋ณด๋ด์ฃผ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. ๋ฉ์์ง์ ํ์์ ๋ง๊ฒ ๋ค๋ฅธ ํ์์ด ๊ตฌ์ถํ FCM ์๋ฒ๋ก Json ํ์์ผ๋ก ์๋ฆผ์ ๋ณด๋์ด์ผ ํ๋ค.
FCM์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ ๊ฐ์ฒด์ ์๋ฆผ์ ํ์ํ ์ ๋ชฉ, ๋ด์ฉ, ์ ์ ํ ํฐ ๋ฆฌ์คํธ, data (String์ map)๋ฅผ ๋ด์์ ๋ณด๋ด๊ธฐ๋ก ํ๋ค. data์๋ ๋งค์นญ๋ ์ ์ ๋ค์๊ฒ ๋ณด๋ด์ค ๊ฐ๊ฐ ๋ค๋ฅธ ํ์ ์ ๋ณด๋ฅผ ๋ฃ์ด์ผ ํ๋ค. data๋ฅผ String์ผ๋ก ๋ณํํ๊ธฐ ์ํด Gson ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด Jsonํ์์ String์ผ๋ก ๋ฐ๊ฟจ๋ค.
- OpenFeign
ํ์ ์์ฑํ๋ฉด ์ฑํ ๋ฐฉ์ด ๋ง๋ค์ด์ง๋๋ก ํ์ด์ผ ํ๋ค. ํ์ง๋ง MSA ๊ตฌ์กฐ๋ก ์ฑํ ์๋ฒ๊ฐ ๋ฐ๋ก ๋๋์ด์ ธ ์์ด์ ์ด๋ป๊ฒ ์ฑํ ์๋ฒ์ Service๋ฅผ ์ฌ์ฉ์ ํ๋์ง ๊ถ๊ธํ๋ค. MSA ๊ตฌ์กฐ์์ ๋ค๋ฅธ ์๋ฒ์ ์๋น์ค ์ฌ์ฉ์ ์์๋ณด๋ค๊ฐ OpenFeign์ ๋ํด ์๊ฒ ๋์๋ค.
Feign Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ FeignClient interface๋ฅผ ๋ง๋ค์ด์ ์ฑํ ์๋ฒ RestController์ ํ์ํ ๋ฉ์๋๋ค์ ๊ฐ์ ธ์๋ค. ๊ทธ๋ฆฌ๊ณ Service์์ FeignClient interface๋ฅผ ๋ถ๋ฌ ํ์ํ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ์ฌ ์ฑํ ์๋ฒ์ api๋ฅผ ํธ์ถํ๋๋ก ํ๋ค.
@FeignClient(name = "chat", url = "https://")
public interface ChattingServiceClient {
@PostMapping("/GatheringChatRoom")
String createGatheringChatRoom(@RequestBody Map<String, Object> map);
@PostMapping("/TeamChatRoom")
@Headers(value = "Content-Type: application/json")
String createTeamChatRoom(@RequestBody Map<String, Object> map);
}
- Builder ํจํด
๊ทธ ์ธ
- ์์์ผ, ์คํฌ๋ผ & Jira
์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์์ ๋ค์ด๋ณด๊ธฐ๋ง ํ ์์์ผ, ์คํฌ๋ผ ๋ฐฉ์์ผ๋ก ์ฒ์ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฒ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ ๊ณํ๊ณผ ์งํ ์ํฉ์ ๊ด๋ฆฌํ๊ธฐ ์ํด Jira๋ฅผ ์ผ๋ค. 1์ฃผ์ผ ๋จ์๋ก ๊ณํ์ ์ธ์์ ์ด์๋ฅผ ์์ฑํ๊ณ ์คํ๋ฆฐํธ๋ฅผ ์งํํ๋ค. ๋๋ ์ด๋ฒ ํ๋ก์ ํธ์์ ์ฒ์ Jira๋ฅผ ์ฐ๊ฒ ๋์๋ค. ์ฒ์์๋ Jira๋ฅผ ์ฐ๋ ๊ฒ ์ต์ํ์ง ์์๊ณ ๊ท์ฐฎ์์ง๋ง, ํด์ผ ํ ์ผ์ ์์ฑํ๊ณ ์งํ ์ํฉ์ ๊ด๋ฆฌํ ์ ์์ด์ ํธ๋ฆฌํ๋ค.
- ํดํน
์ฐ๋ฆฌ ํ์ ํดํน์ 2๋ฒ์ด๋ ๋นํ๋ค! ์ ์ถํ๊ธฐ ์ฌ์ด ์๋ฒ url๊ณผ ๊ณ์ ID์ ํจ์ค์๋ ์ฌ์ฉ์ด ๋ฌธ์ ์๋ค. ์ฒ์ ํดํน์ ๋นํ์ ๋๋ DB๊ฐ ์ด๊ธฐํ๋ ์์๊ณ , ํด์ปค๊ฐ ๋นํธ์ฝ์ธ์ ๋ด๋์ผ๋ผ๊ณ ํ๋ค. ๊ฒฐ๊ตญ AWS์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ๊ณ์ ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ด๊ธฐํ๋ฅผ ์์ผ์คฌ๋ค.
ํ์ง๋ง ์๋ฒ๊ฐ ๋ ํธ๋ ธ๋ค.. ์ฌ์ง์ด ๋ฐํ ๋น์ผ ์๋ฒฝ์๐ญ ๋น์ฅ ๋ช ์๊ฐ ํ์ ํ๋ก์ ํธ ๊ฒฐ๊ณผ ๋ฐํํ ๋ ์ค์๊ฐ์ผ๋ก ์์ฐํด์ผ ํ๋๋ฐ ์๋ฒ๊ฐ ํฐ์ ธ์ ์ ๋์๊ฐ๊ณ , ์ฐ๋ฆฌ์ ๋ฉํ๋ ํฐ์ง๊ณ ๋๋ฆฌ๊ฐ ๋ฌ์๋ค.
์๋ฒ ๋ณต๊ตฌ์ ํดํน ๋์์ ์ํด CI/CD ํ๋ ํ์์ด ๊ณ ์์ ํ๋ค. ์คํ๋ ค ํดํน๋นํด์ ์ด๋ฅผ ์ํด ๋์์ ํ๋ ๊ฒ ์ดํ ํฌ์ธํธ๊ฐ ๋ ์ ์๋ค๋ ์กฐ์ธ์ ๋ค์๊ณ , ์ง์ถํ ์ ๊ตญ ๋ฐํํ์์ ์ด๋ป๊ฒ ํดํน์ ๋์ํ๋์ง๋ฅผ ๊ธฐ์ ํฌ์ธํธ ์ค ํ๋๋ก ์ด์ผ๊ธฐ๋ฅผ ํ๊ฒ ๋์๋ค.
4. ๋ฐํ
์ฐ๋ฆฌ ํ์ ํ๋ก์ ํธ ๊ธฐ๊ฐ ๋์ ์ค๊ฐ๋ฐํ, ์ต์ข ๋ฐํ, ์ ๊ตญ ๋ฐํํ ์ด 3๋ฒ์ ๋ฐํ๋ฅผ ํ๋ค. ์ค๊ฐ ๋ฐํ ๋๋ ๊ธฐํ๊ณผ ์ค๊ณํ ๋ด์ฉ๋ค ์์ฃผ๋ก ๋ฐํํ๊ณ , ์ต์ข ๋ฐํ์ ์ ๊ตญ ๋ฐํํ์์๋ ๊ธฐํ ๋ฐฐ๊ฒฝ, UCC์ ํจ๊ป ๊ฐ๋ฐ ๊ธฐ์ ๊ณผ ์์ฐ์ ์์ฃผ๋ก ๋ฐํ๋ฅผ ํ๊ฒ ๋์๋ค.
๊ธฐํ ๋ฐฐ๊ฒฝ์ ์ฐ๋ฆฌ ์๋น์ค์ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ์ฐ๊ฒฐ ์ง์ด์ ๊ฐ๊ฒฐํ๊ฒ ์ ๋ฌํ๋ ค๊ณ ํ๊ณ , UCC์์๋ ์ฐ๋ฆฌ์ ์๋น์ค๊ฐ ํ์ํ ์ด์ ๋ฅผ ๋ณด์ฌ์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ ํ๋ก์ ํธ๊ฐ ๋ค๋ฅธ ํ์ ํ๋ก์ ํธ์ ์ฐจ๋ณ์ ์ ์ค ์ ์๋ ๋ถ๋ถ์ ๊ธฐ์ ์ด๋ผ๊ณ ์๊ฐํด์ ๊ธฐ์ ์ ์ค๋ช ํ๋ ๋ถ๋ถ์ ๋น์ค์ ๋ง์ด ์คฌ๋ค.
์ต์ข ๋ฐํ ๋น์ผ ์๋ฒฝ์ ํดํน์ ๋นํ๊ธฐ ๋๋ฌธ์ ์ค์๊ฐ ์์ฐ์ด ๋ถ๊ฐ๋ฅํ์ฌ ๋ก์ปฌ์์ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๊ฐ๋ณ์ ์ผ๋ก ์์์ผ๋ก ๋จ๊ฒจ ์์ฐ์ ํ๊ฒ ๋์๋ค.. ์ ๊ตญ ๋ฐํํ๋ฅผ ์ํด ์๋ฒ๋ฅผ ๋ณต๊ตฌํ์ฌ ๋ผ์ด๋ธ ์์ฐ์ ํ ์ ์๊ฒ ์ ์ง๋ณด์๋ฅผ ์งํํ๊ณ , ๋ฐํ์์๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ ์ค์ด๊ณ ๊ธฐ์ ์ ์ค๋ช ํ๋ ๋ถ๋ถ์ ๋ ๋๋ฆฌ๊ฒ ๋์๋ค.
๋ฐํ ์ค๋น๋ฅผ ์ํด์ ํ์๋ค์ด ๊ณ ์์ ์ ๋ง ๋ง์ด ํ๋ค. ๋ฐํ์์ ์์ฐ์๋ ์๋๋ฆฌ์ค๋ฅผ ์ง์ ๊ณ์ ์ฐ์ต์ ํ๊ณ , ๋๋ PPT ๊ณ์ ๋ณด์ํ๊ณ , CI/CD ํ๋ ํ์์ ์๋ฒ ๊ณ์ ๋ณด๊ณ ์๊ณ .. ์ปจ์คํดํธ๋๊ณผ ์ฝ์น๋๋ค๊ป์๋ ๊ณ์ ๋ฐํ ํผ๋๋ฐฑ์ ์ฃผ์ จ๋ค. ๋๋ถ์ ์ ์ ๋ฐ์ ์ํฌ ์ ์์๊ณ ๋ฐํ๋ ์ ์ต๊ณ ์ ์ํ๋ก ๋ฐํํ๊ฒ ๋์๋ค.
๐ ๊ฒฐ๊ณผ
์ต์ข ์ ์ผ๋ก ๋ฐ 1๋ฑ์ผ๋ก ์ฐ์ ํ๋ก์ ํธ์ ์ ์ ์ด ๋์ด ์์ํ๊ฒ ๋์๋ค๐ ์ต์ข ๋ฐํ์์ ํดํน์ ๋นํ ํ์ ์์์ผ๋ก ์์ฐ์ ํ๊ฒ ๋์ด์ ์์์ด ์ด๋ ค์ธ ์๋ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋๋ฐ, ํ๋ก์ ํธ ๊ธฐ์ ๋ถ๋ถ์ ์ข๊ฒ ๋ด์ฃผ์ ์ ๋ฐ์์ ์์๊ถ ์์ ๋ค์ด ์ ๊ตญ ๋ฐํํ์ ์ง์ถํ๊ฒ ๋์๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ๋ฅผ ์ ๊ตญ์ ์ฌ๋ฌ ์ฌ๋๋ค ์์์ ๋ฐํํ๋ ์ข์ ๊ฒฝํ๋ ํ๊ฒ ๋์๋ค.
๐ ๋ฐฐ์ด ์ / ๋๋ ์
์ง๊ธ๊น์ง ์ฌ๋ฌ ํ๋ก์ ํธ๋ฅผ ์งํํ์ง๋ง ์ด๋ฒ ํ๋ก์ ํธ๊ฐ ๊ฐ์ฅ ๊ธฐ์ต์ ๋จ์ ๊ฒ ๊ฐ๋ค. ํ์๋ค์ด๋ ๋จ๊ธฐ๊ฐ์ ์ ๋ง ๋ง์ ๊ฒ๋ค์ ํ๋ค. ๋งค์ผ ์ ์ฌ๋ง๋ค ๊ฐ์ด ์ด๋๋ ํ๊ณ , ํ๋ก์ ํธ ๋ง๋ฐ์ง์๋ ๋ฐค๋ฆ๊ฒ๊น์ง ์นดํ์์ ์์ ๋ ํ๊ณ , UCC๋ ์ฐ๊ณ , ๋ฐํ ์ค๋น๋ ํ๊ณ , ์์๋ ํ๊ฒ ๋๊ณ .. ๊ฒฐ๊ตญ ํฌํธํด๋ฆฌ์ค๋ก ์ธ๋งํ ๋ถ๋ถ๋ ๋์จ ๊ฒ ๊ฐ๊ณ , ๊ฐ๋ฐ ์ธ์ ์ผ๋ก๋ ๋๋ ์ ๋ค๋ ๋ง๋ค.
- ํฌ๊ธฐํ์ง ์๊ณ ์ด์ฌํ ํ๋ฉด ๋๋ค
์ฐ๋ฆฌ๊ฐ ๊ตฌํํด์ผ ๋ ๋ถ๋์ด ๋ง์์ด์ ๋ค ๊ตฌํํ ์ ์์๊น ์๊ฐ๋ ๋ค์์ง๋ง, ๋ค๋ค ํ๋ก์ ํธ ์์ฑ์ด๋ผ๋ ๋ชฉํ๋ฅผ ๊ฐ์ง๊ณ ์ด์ฌํ ํ๋ ๊ฒฐ๊ตญ ์์ฑ์ ํ ์ ์์๋ค. ํ๋ก์ ํธ ๋ง๋ฐ์ง์๋ ์ ๋ ๋ง๋ค 24์๊ฐ ์นดํ์ ๊ฐ์ ๋ฆ์ ์๊ฐ๊น์ง ์์ ์ ํ๋ค. ์ฌ์ง์ด ๋ฐํ ๋น์ผ์๋ ๋ฐค์ ์ธ์ 6์๊น์ง ์์ ํ๋ค๊ฐ ๋ค์ ํตํํ๊ณ .. ํดํน์ ๋นํด์ ์๋ฒ๊ฐ ๋๊ฐ์ ๋๋ ๋ค๋ค ๋ฉํ์ด ๋๊ฐ๊ณ ๋ฐค์ ์ธ์ ์ฒด๋ ฅ๋ ๋ฐ๋ฅ๋ฌ์ง๋ง, ๋ฉํ ๋ถ์ก๊ณ ๋๋ ๊ฑฐ๋ผ๋ ํ ํ์๋คํํ ๋ ๊ณ ๋ง์ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ต์ข ๋ฐํ ์ดํ ๋ฐ๋ฅ๋ ์ฒด๋ ฅ์๋ ๋ถ๊ตฌํ๊ณ ์ ๊ตญ ๋ฐํํ๋ฅผ ์ํด์ ํ๋ก์ ํธ๋ฅผ ๋ ์ฐ์ฅ์์ผ์ ์ ์ง๋ณด์์๋ ์ฐธ์ฌํ๊ณ , ๋ฐํ ์ฐ์ต์๋ ๊ฐ์ด ์ฐธ์ฌ๋ฅผ ํ ํ์๋ค์๊ฒ๋ ๊ณ ๋ง์ ๋ค. ์ฐ๋ฆฌ ํ์ด ์์์ ํ ๊ฒ์ ํฌ๊ธฐํ์ง ์๊ณ ์ด์ฌํ ํ ๊ฒฐ๊ณผ๋ผ๊ณ ์๊ฐํ๋ค.
- ์ฑ์ฅํ๊ณ ์๋ค
๊ฐ๋ฐํ๋ฉด์ ์ค๊ฐ์ ๋งํ๋ ๋ถ๋ถ๋ ์์์ง๋ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ณ ๋ฏผํ๊ณ ์ฐพ์๋ณด๋ ๊ณผ์ ์์ ๋ ์ค์ค๋ก๋ ์ฑ์ฅํ๊ณ ์๋ค๋ ๊ฒ ๋๊ปด์ก๋ค. ์์ง์ ๋ถ์กฑํ์ง๋ง ์ด์ ๋ณด๋ค ๋ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ฏผํ๋ฉฐ ์ฝ๋๋ฅผ ์ง๋ ค๊ณ ํ๊ณ , JPA ๊ฐ๋ ๋ ๋ ์ตํ๊ฒ ๋์๊ณ , MSA ๋ฑ ์๋กญ๊ฒ ์ ์ฉํ๋ ๋ถ๋ถ๋ค๋ ์์ด์ ๋ฐฐ์๊ฐ๋ ๊ฒ์ด ๋ง์๋ค.
- ๋ฆฌํฉํ ๋ง ํ๊ณ ์ถ๋ค
๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ฝ๋์ ๊ตฌ์กฐ๊ฐ ๋ง์์ ๋ค์ง ์๋ ๋ถ๋ถ์ด ์กด์ฌํ๋ค.. ํนํ ๊ฐ๋ฐ ํ๋ฐ์ผ๋ก ๊ฐ์๋ก ๊ธฐ๋ฅ์ด ๋์๊ฐ๊ฒ ํ๋ ๊ฒ์ ๊ธํด์ ๊น๋ํ ์ฝ๋์ ๊ตฌ์กฐ์์ ๋ฉ์ด์ ธ ๊ฐ๋ค. ๋ฐ๊พธ๊ณ ์ถ์ ๋ถ๋ถ๋ค์ด ์กด์ฌํ์ง๋ง ๋จผ์ ๊ฐ๋ฐํ ๋ถ๋ถ๊ณผ ์ฐ๊ฒฐ๋์ด ์์ด์ ๊ณ ์น๊ธฐ๊ฐ ํ๋ค๊ธฐ๋ ํ๋ค. ์ฒ์๋ถํฐ ์ค๊ณ๋ฅผ ์ํ๊ฑฐ๋ ์ํคํ ์ฒ๋ ํด๋ฆฐ ์ฝ๋์ ๋ํ ๊ฒ์ ๋ ๊ณต๋ถํด์ ๊น๋ํ๊ฒ ๊ตฌ์กฐ์ ์ฝ๋๋ฅผ ์ง๋๋ก ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๐ ์์ฌ์ด ์
- ํ ์คํธ ์ฝ๋
ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๊ฐ๋ฐ์ ์งํํ๊ณ ์ถ์๋๋ฐ, ๊ฒฐ๊ตญ ๋ชปํ๋ค. ์ผ๋จ TDD์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์ต์ํ์ง ์์ ๊ฒ์ด ๋ฌธ์ ์๋ค. 3์ฃผ๋ผ๋ ์งง์ ๊ฐ๋ฐ ๊ธฐ๊ฐ์ ๋ง์ ๋ถ๋์ ๊ฐ๋ฐํด์ผ ํ๋ ์ํฉ์์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ์๊ฐ์ ์์ ์ฌ์ ๊ฐ ์์๋ค. ํ ์คํธ ์ฝ๋ ์์ฑ๋ณด๋ค๋ ๋น ๋ฅด๊ฒ ๋ก์ปฌ ํ๊ฒฝ์์ ์์ฒด์ ์ผ๋ก API ํ ์คํธ๋ฅผ ํ๊ฒ ๋์๋ค. ๊ฒฐ๊ตญ ํ์์์ ๊ณต๋ถ๋ฅผ ํ๊ณ , ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ต๊ด์ ๋ค์ฌ์ผ ํจ์ ๊นจ๋ซ๊ฒ ๋์๋ค..
- Redis ์ฌ์ฉ
'Project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Project/4th] 4. ํ ์คํธ ์๋ฒ ์ธํ๋ผ ๊ตฌ์ถ - SSH ์ ์, Docker๋ก ์๋๋ฐฐํฌ (0) | 2024.04.05 |
---|---|
[Project/4th] 3. JPA Entity ๊ด๊ณ ์ค์ ํ๊ธฐ (0) | 2024.03.27 |
[Project/4th] 2. ์คํ๋ง ํ๋ก์ ํธ ์์ฑ, ๊ฐ๋ฐํ๊ฒฝ ๊ตฌ์ฑ (0) | 2024.03.26 |
[Project/4th] 1. ์๋ฒ ์ค๊ณํ๊ธฐ (0) | 2024.03.18 |
[ํ๋ก์ ํธ ํ๊ณ ] 2์ฐจ ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉฐ (0) | 2023.04.09 |