BE ๊ด์ ์์์ ํ๋ก์ ํธ ์๊ฐ
์ฝ๋์คํ ์ด์ธ ๋ฐฑ์๋ ๋ถํธ์บ ํ๋ฅผ ๋ง์น๊ณ ์ฒ์์ผ๋ก ํํ๋ก์ ํธ๋ฅผ ์งํํ์๋ค. ์คํ์ค๋ฒํ๋ก์ฐ ํด๋ก ์ฝ๋ฉ์ด๋ผ๋ ์ฃผ์ ๋ก FE 3๋ช , BE 3๋ช ์ด ํ์ ํ๋ ๋ฐฉ์์ผ๋ก ์งํ๋์๋ค. ํ์๋ค๊ณผ ํจ๊ป ์งํํ ์ฒซ๋ฒ์งธ ํ๋ก์ ํธ์ฌ์ ์ ์ ์ด ๋์น๊ณ , ๋์๊ฒ ์ ๋ง ์์คํ ๊ฒฝํ์ด์๋ค.
๊ธฐ๊ฐ
2023์ 08์04์ผ ~ 08์ 23์ผ (2์ฃผ)
๋ฐฑ์๋ ๊ธฐ์ ์คํ
- Java 11.0.20
- Spring Boot 2.7.14
- Spring Data JPA
- MySQL
- H2 (๊ฐ๋ฐ๊ณผ์ )
- Spring Security
- ๋ฐฐํฌ : AWS + RDS
- CICD : Github Action + AWS CodeDeploy
ํ ์ด๋ธ ๋ช ์ธ์
์ฌ์ฉ์ ์๊ตฌ์ฌํญ ์ ์์๋ฅผ ์์ฑํ๋ค DB๊ฐ ํ์ํ ๋ถ๋ถ์ ๋ถ์ํด๋ณด๋ ํ์๊ฐ์ ์ ํด์ผํ๋ฏ๋ก ํ์ ํ ์ด๋ธ์ด ํ์ํ์๊ณ , ์ง๋ฌธ, ๋ต๋ณ ํ ์ด๋ธ์ด ํ์ํ๋จ ๊ฒ์ ๋์ถํ๋ค. ์ง๋ฌธ์๋ ์กฐํ์ ๊ธฐ๋ฅ๊ณผ ํ๊ทธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค. ํ์ 1๋ช ์ด ์ฌ๋ฌ๊ฐ์ ์ง๋ฌธ๊ณผ ๋ต๋ณ์ด ์์ฑ ๊ฐ๋ฅํ์ฌ 1:N ๊ด๊ณ๋ก ์ค์ ํ์๊ณ , ์ง๋ฌธ๊ณผ ํ๊ทธ์ ๊ฒฝ์ฐ์๋ N:M์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋๊ฒ์ ์ง๋ฌธํ๊ทธ ํ ์ด๋ธ์ ์ถ๊ฐํ์ฌ 1:N N:1๊ด๊ณ๋ฅผ ๊ฐ๋๋ก ํ์๋ค. ์ ๋๋ก ์คํ์ค๋ฒํ๋ก์ฐ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ํจ์ฌ ๋ ๋ง์ ํ ์ด๋ธ์ด ํ์ํ์์ง๋ง, ์๊ฐ์ด 2์ฃผ๋ผ๋ ์ ๊ณผ ์ฒซ ํ๋ก์ ํธ๋ผ๋ ์ ์์ ์ง์ง ๊ตฌํํด๋ผ์์๋ ๊ธฐ๋ฅ๋ง ์ ํํ์ฌ ์์ฑํ๊ธฐ๋ก ์๊ฒฌ์ด ๋ชจ์ฌ์ก๋ค.
API ๋ช ์ธ์
๋ฐฑ์๋๋ผ๋ฆฌ๋ง ๊ฐ๋ฐ์ ํ๊ณ ํ ์คํธ๋ฅผ ์งํํ ๋๋ API ๋ช ์ธ์๊ฐ ์ผ๋ง๋ ์ค์ํ์ง ์์ง ๋ชปํ๊ณ ์์๋ค. ๋ฌผ๋ก ๊ณํ์ ์ผ๋ก ์ ์๋ ๋ฌธ์๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์์์ง๋ง, ํ๋ก ํธ๋ถ๋ค๊ณผ ํ์๋ฅผ ์งํํ๊ณ ๊ฐ์ด ๊ฐ๋ฐ์ ํด๊ฐ๋ฉด์ ์๋ง๋ค์ด์ง ๋ฌธ์์ ํ์์ฑ์ ์ ๋๋ก ๊นจ๋ซ๊ฒ ๋์๋ค.
Review
๊ฒฐ๊ณผ๋ฌผ
์ญํ
๋๋ ์ด๋ฒ ํ๋ก์ ํธ์์ ํ์ฅ์ญํ ์ ๋งก๊ฒ ๋์๋ค. ํ์ ์ด๋์์๋ ๊ธฐํ๊ฐ ์์ฃผ ์์ง ์์๊ณ , ๋ชจ๋ ์ฒ์ ํด๋ณด๋ ํ๋ก์ ํธ์ด๋ค๋ณด๋ ์ญํ ์ ์์ํ ํด๋ผ ์ ์์์ง์ ๋ํ ๊ฑฑ์ ์ ๋ง์ด ํ์๋ค. 2์ฃผ๋ผ๋ ์งง์ ๊ธฐ๊ฐ๋์ ์ ์์ ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์๋ฃํ๊ธฐ ์ํด์ Github Issue์ ์นธ๋ฐ์ ํตํด ํ์๋ค์ ์ผ์ ์ ๊ด๋ฆฌํ๊ณ , ๋งค์ผ ์ค์ , ์คํ 2๋ฒ์ ํ์ ์งํํ๋ฉด์ ์งํ์ํฉ๊ณผ ์ด์๋ฅผ ๊ณต์ ํ๊ณ ๋ฐฉํฅ์ ์ ์ํ๋ ค๊ณ ๋ ธ๋ ฅํ์๋ค. ๊ฒจ์ฐ 6๋ช ์ ์ฌ๋์ด ๋ชจ์๋๋ฐ๋ ๋ค๋ค ์๊ฐํ๊ณ ์๋๊ฒ๋ค์ด ๋ค๋ฅด๋ค๋ณด๋, ์์ ์๊ฒฌ๊น์ง๋ ํตํฉํ๊ณ ์ ๋ฆฌํ์ฌ ํ์ ๋ชจ๋๊ฐ ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ๊ฐ์์๋๋ก ๋ง๋๋๊ฒ์ด ์ฝ์ง ์๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ํ์์ ์ ์ฅ์์ ์ ๋ง ๊ฐ์ฌํ๊ฒ๋ ํ์๋ถ๋ค์ด ๋๋ฌด ์ด์ฌํ ํด์ฃผ์ จ๊ณ ๋ฏฟ๊ณ ๋ฐ๋ผ์ค์ ์ข์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ผ์์์๋ค.
์ํํ ์ญํ
- ํ์ฅ
- DB ํ ์ด๋ธ ์์ฑ
- ์ง๋ฌธ ๋๋ฉ์ธ CRUD ์์ฑ
- ํ๊ทธ ๋๋ฉ์ธ CUD ์์ฑ
- ์ํฐํฐ ๋งคํ
- MySQL DB ์ฐ๋
- github Action + AWS CICD ๋ฐฐํฌ ๋ฐ ์๋ฒ ๊ด๋ฆฌ
๋ฐฐ์ด ์
ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์ ๋ง ๋ง์ ๊ฒ๋ค์ ๋ฐฐ์ฐ๊ณ ๋๊ผ๋ค. ์ฒซ๋ฒ์งธ๋ก ์ปค๋ฎค๋์ผ์ด์ ์ด ์ผ๋ง๋ ํฌ๊ฒ ์์ฉํ๋๊ฐ๋ฅผ ์๊ฒ ๋์๋ค. ํ์๋ฅผ ํตํด ๊ฐ์ ๋ด์ฉ์ ๊ณต์ ํ๊ณ ๊ฐ๋ฐ์ ์งํํ์์ง๋ง, ๋ชจ๋๊ฐ ๋ค๋ฅธ์๊ฐ์ ๊ฐ์ง๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ฉด ๊ฐ์ ์ฃผ์ ๋ก ๋๋ค์ ํ์๋ฅผ ํด์ผํ๊ณ , ์์ฑ๋ ์ฝ๋๋ ์์ ํด์ผํด์ ์์ฐ์ ์ธ ๋ฉด์์ ์ ๋ง ๋ง์ด๋์ค์๋ค. ์ด๋ฅผ ๊ทน๋ณตํ๊ธฐ ์ํด์๋ ๋ชจ๋ ๋ค๋ฅด๊ฒ ์๊ฐํ๊ณ ์๋ค๋ ๊ฒ์ ์ธ์ ํด์ผํ๊ณ , ๋จ์ง ํ์๋๋ง ์๊ฒฌ์ ์กฐ์จํ๋ ๊ฒ์ด ์๋๋ผ, ๊ถ๊ธํ๊ฑฐ๋ ์ ๋งคํ ๊ฒ๋ค์ด ์๊ฒผ์๋ ๋ฐ๋ก ํ์๋ค๊ณผ ์ํตํ์ฌ ํด๊ฒฐํด์ผ ํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค. ๊ทธ๋ฆฌ๊ณ ํ์์์ ๋์จ ๋ด์ฉ๋ค์ ๋ชจ๋ ํ์ ํด(๋ ธ์ , ๋์ค์ฝ๋ ์ด์ฉ) ์ ์ด์ฉํ์ฌ ๋ฌธ์ํ ํ์๋ค.
๋๋ฒ์งธ๋ก๋ Git์ ์ค์์ฑ์ ๋๊ผ๋ค. ์ ๋ณด์ฒ๋ฆฌ๊ธฐ์ฌ๋ฑ์ ๊ต๊ณผ์์ ์ธ ๊ฐ๋ ์ผ๋ก๋ง ์ตํ๋ ํ์๊ด๋ฆฌ์ ๋ํด์ ์ข ๋ ๊น์ด์๊ฒ ์ดํดํ ์์์๋ค. ํ๋ก์ ํธ์ ๋ค์ด๊ฐ๊ธฐ ์ ์ ํ์ ๋ชจ๋๊ฐ Git์ ๊ฑฐ์ ๋ค๋ค๋ณด์ง ์์ ์ํฉ์ด์๋๋ฐ, ์ ํ๋ธ์ ๋ ํผ๋ฐ์ค๋ค์ ์ฐพ์๊ฐ๋ฉด์ ๊น ์ปค๋งจ๋์ ๊น ํ๋ก์ฐ๋ฅผ ๊ณต๋ถํ์๊ณ ํ์๋ค๊ณผ ์ด๋ฅผ ๋ฐํ์ผ๋ก ์ฐ์ต์ ์งํํ์ฌ ๊น์ ์ต์ํด์ง์์๊ฒ ๋ ธ๋ ฅํ์๋ค. ์ด๊ณผ์ ์์ ์ค์๋ก ํ๋ ํฌ๋ฅผ ๋ ๋ ค๋ฒ๋ฆฌ๋ ๋ถ์์ฌ๊ฐ ์์์ง๋ง ์ด๋ํ ๊ฒฝํ์ด์๋๊ฒ๊ฐ๋ค. ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ผ๋ง๋ ์์คํ ๋ค๋ค์ผํ๋์ง, ๋ ๊ผผ๊ผผํ์ง ๋ชปํ ์ฑ๊ฒฉ์ ์ข๋ ๊ผผ๊ผผํ๊ฒ ์ฝ๋ ์ต๊ด์ผ๋ก ๋ฐ๊พธ๊ฒ ๋ง๋ค์ด์คฌ๋ค.
์ธ๋ฒ์งธ๋ก ๋ฐฐํฌ์ ์ค์์ฑ์ ๋๊ผ๋ค. ๋ง์ ๊ฐ๋ฐ์ ์ ๋ถ ๋ค ๋๋ด๋๋ผ๋ ๋ฐฐํฌ๊ฐ ์ ์์ ์ผ๋ก ๋์ง์๋๋ค๋ฉด ์๋ฌด๋ฐ ์์ฉ์ด ์๋ค. ์ด๋ค๋ฐฉ์์ผ๋ก, ์ด๋ค ์์์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌ๋ฅผ ์งํ ํ ๊ฑด์ง ๊ฒฐ์ ํ๊ณ ํ๋์ฉ ํด๊ฒฐํด ๋๊ฐ๋๊ฒ์ด ์ฌ๋ฏธ๋ ์์๊ณ ์ ๋ง ์ ์ตํ๋๊ฒ๊ฐ๋ค. ์ด์ ๊น์ง๋ CICD๋ ๊ต๊ณผ์์ ์ธ ๊ด์ ์์ ์ข๋ ํธ๋ฆฌํ๋ค๊ณ ์๊ณ ์์๋ค๋ฉด, ์ค์ ๋ก CICD๋ฅผ ์ ์ฉํ๊ณ ํ์ฉํ๋ฉด์, ์ ์๋ํ๊ฐ ํ์ํ์ง์ ๋ํด์ ์ง๊ด์ ์ผ๋ก ๋ค๊ฐ์๋ค.
์ด๋ ค์ ๋ ์
CORS... ๋ง๋ก๋ง ๋ค์๋ CORS๊ฐ ์ ๋ง ํ์ฐธ๋์ ๋ฐ๋ชฉ์ ์ก์๋ค. ๋ฌธ์ ํด๊ฒฐ์ ์ํด์ ํ๋ก ํธ ํ๋ถ๊ณผ ํจ๊ป ์๋ฒฝ๊น์ง ๋ก์ปฌ๋ก ์๋ฒ๋ฅผ ์ด์ด๋๊ณ ์์ชฝ์์ ํ๋์ฉ ๋ฐ๊ฟ๊ฐ๋ฉด์ ํ ์คํธ๋ฅผ ์งํํ์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์๋์ํ ์์๊ฒ ํด๊ฒฐํ์๋ค. ์ด๋ฅผ ํตํด์ CORS์๋ํด์ ์ข๋ ์์๋ณด๊ณ ๊ณต๋ถํ ์์์ด์ ์ข์๊ณ , ํ ์คํธ ํ๋ ๋์์ ์ ๋ง ๋ต๋ตํ์ง๋ง ํด๊ฒฐํ์๋์ ๊ทธ ์ง๋ฆฟํจ์ ์์์๊ฐ ์๋ค!ใ ใ ใ ใ ์ด์ Mainํ๋ก์ ํธ๋ฅผ ์งํํ๋๋ฐ ํ์๋ค์ด ๋๋ฌด ๋ง์ด ์๋ง์์ Mainํ๋ก์ ํธ๋ ํจ๊ป ์งํํ๊ธฐ๋ก ํ์๋ค. ํ๋ฌ ๋ฐ ์ ๋ ๋ค์ ํ์ฅ์ผ๋ก์จ์ ์ญํ ์ ํด์ผํ๋๋ฐ ์ด๋ ต๊ฒ ์ง๋ง ์ฑ ์๊ฐ์๊ฒ ๋ ธ๋ ฅํด์ผ๊ฒ ๋ค.