์๋ก์ด ์๋ฆฌ์ฆ๋ก ์ฐพ์๋ต๋ React์ Spring Boot๋ฅผ ์ด์ฉํ์ฌ ์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ์
๋๋ค! ์ด๋ฒ ํฌ์คํ
์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ ๋ ์ด๊ธฐ ํ๋ก์ ํธ ์ธํ
ํ๋ ๋ฐฉ๋ฒ์
๋๋ค. ์ฒ์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด๋ ค๋ ๋ถ์ด์๋๊ฑฐ๋ ์ ์ฒ๋ผ ๋ง๋ค์ด ๋ณด์ ์ ์ ์์ด๋ ์๊พธ ๊น๋จน์ผ์๋๋ถ์ ์ํ ๊ธ์
๋๋คใ
ใ
. ์ด๋ฒ ์๊ฐ์ ํตํด ํ๋ก์ ํธ์ ๊ฐ๋ฐ ์ธํ
, ์ดํ์๋ ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฅ๋จ์ ๊ณผ ์ฐ์ด๋ ์ญํ ์ ํ๋์ฉ ์ง์ด๋ณด๊ณ ์ผ๋ฐ๋ก๊ทธ์ธ, Kakao๋ Google ์์
๋ก๊ทธ์ธ๊น์ง ๊ตฌํํด๋ณด๋ ๊ฒ์ ๋ชฉํ๋ก ํด๋ณด๊ฒ ์ต๋๋ค. ํ์ดํ
!
์ด์์ฒด์
- OS:Mac OS
- IDE:IntelliJ
- Shell: Zsh
Spring Boot ํ๋ก์ ํธ ์์ฑ
- IntelliJ์์ New Projrct ํด๋ฆญ!

- ํด๋ฆญ ํ Generators์์ Spring Initializr ์ ํ

- Name: ๋ณธ์ธ์ด ๊ฐ๋ฐํ๋ ค๋ ํ๋ก์ ํธ์ ๋ฐฉํฅ์ ๋ํ ์ด๋ฆ์ผ๋ก ์ง์ด์ฃผ๋ฉด ๋ฉ๋๋ค
- Language: Java๋ก ์ธํ
ํด๋ก์๋ค.
- Type: Gradle๋ก ์ค์ ํฉ๋๋ค.
- JDK: 21 ๋ง๊ณ ๋ฌด์กฐ๊ฑด 17!! ๋ก ์ค์ ํด๋ก์๋ค. 17์ด ์์๊ฒฝ์ฐ JDK 17์ ๋ค์ด๋ฐ์ผ์
์ผ ํฉ๋๋ค.
- Java: ์ด ์ญ์ JDK ๋ฒ์ ๊ณผ ๋ง๋ 17๋ก ์ค์ ํฉ์๋ค.
์์กด์ฑ ์ค์น ๋จ๊ณ

- Spring ์ด ์ฒ์ ๋์ฌ๋๋ ์์กด์ฑ์ ์ผ์ผ์ด ๋ค ์ก์์ ์ค์นํด์ผํฉ๋๋ค๋ง, Spring Boot๋ ์ฌ๋ฌ ์์กด์ฑ๋ค์ ํ๋ก์ ํธ ์์ฑ ๋จ๊ณ์์ ์ค์นํ ์ ์์ต๋๋ค!
- Spring Boot Initializr์์ ์ ๊ณตํ์ง ์๋ ์์กด์ฑ๋ ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ์์กด์ฑ์ ์ถ๊ฐํด์ผ๋๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค! ๊ทธ๋ฌ๋ Spring Boot์์ ์์กด์ฑ์ ์ถ๊ฐํ๋ ์์
์ ์์ฃผ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ ๊ฑฑ์ ์ ์ํ์
๋ ๋ฉ๋๋ค! ๐ฆพ
์ถ๊ฐํ ์ด๊ธฐ ์์กด์ฑ

- ์ ๋ ์ผ๋จ ์์
๋ก๊ทธ์ธ์ ๊ตฌํํด๋ณด๊ธฐ ์ํด์ ์ด๋ ๊ฒ ์์กด์ฑ์ ์ถ๊ฐํ์ต๋๋ค!
- ๊ฐ ์์กด์ฑ์ ๋ํ ์ค๋ช
์ ์กฐ๊ธ ํด๋ณด๊ฒ ์ต๋๋ค
- Spring Web:
- RESTful API ๋ฐ HTTP ์์ฒญ/์๋ต ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ณธ ๋ชจ๋์
๋๋ค.
- ํด๋ผ์ด์ธํธ(React)์ ํต์ ํ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ์์
๋๋ค!!
- Lombok:
- Getter/Setter, ์์ฑ์ ๋ฑ ๋ฐ๋ณต์ ์ธ ์ฝ๋๋ฅผ ์ค์ฌ์ฃผ๋ ํธ๋ฆฌํ ๋๊ตฌ.
- Spring Boot DevTools:
- ์ฝ๋ ๋ณ๊ฒฝ ์ ์ ํ๋ฆฌ์ผ์ด์
์ ์๋์ผ๋ก ๋ฆฌ๋ก๋ํ์ฌ ๊ฐ๋ฐ ์๋ ํฅ์.
- Spring Web Services:
- SOAP ๊ธฐ๋ฐ ์น ์๋น์ค๋ฅผ ๊ตฌํํ๊ฑฐ๋ ์ฌ์ฉํ ๋ ํ์.
- ํ์ฌ ํ๋ก์ ํธ์์๋ ์์
๋ก๊ทธ์ธ์๋ ์ง์ ์ ์ผ๋ก ํ์ํ์ง ์์ ์ ์์.
- Spring Security:
- ์ธ์ฆ ๋ฐ ๊ถํ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ธฐ๋ณธ ํ๋ ์์ํฌ.
- OAuth2์ ์ฐ๋ํ์ฌ ๋ก๊ทธ์ธ ์ฒ๋ฆฌ ๊ฐ๋ฅ.
- OAuth2 Client:
- ์์
๋ก๊ทธ์ธ์ ๊ตฌํํ๊ธฐ ์ํ ํ์ ์์กด์ฑ.
- Google, Facebook, GitHub ๋ฑ์ OAuth2 ์ธ์ฆ ์ฒ๋ฆฌ ๊ฐ๋ฅ.
- Spring Data JPA:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ๋ฐ ORM(Object-Relational Mapping)์ ์ง์.
- MySQL๊ณผ ํจ๊ป ์ฌ์ฉํ ๊ฒฝ์ฐ ์ ํฉ.
- H2 Database:
- ํ
์คํธ์ฉ์ผ๋ก ๋ด์ฅํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉ.
- ๊ฐ๋ฐ ์ด๊ธฐ ๋จ๊ณ์์ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ตฌ์ถํ๊ณ ํ
์คํธ ๊ฐ๋ฅ.
- Validation:
- ์ฌ์ฉ์ ์
๋ ฅ ๊ฐ ๊ฒ์ฆ์ ์ฌ์ฉ.
- ์์
๋ก๊ทธ์ธ๊ณผ ๋๋ถ์ด ํผ ๋ฐ์ดํฐ(์: ํ๋กํ ์ ๋ณด, ์ถ๊ฐ ์
๋ ฅ ๊ฐ ๋ฑ) ๊ฒ์ฆ์ ์ ์ฉ.
- MySQL Driver:
- MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๊ธฐ ์ํด ํ์.
- ํ๋ก๋์
๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก MySQL์ ์ฌ์ฉํ ๋ ํ์.
์ด๊ธฐ ํ๋ก์ ํธ ์์ฑ ํ ํ๋ฉด

- create๋ฅผ ๋๋ฅด์ ๋ถ์ด๋ผ๋ฉด ์ด์ ์ด๋ ๊ฒ ํ๋ฉด์ด ๋จ์ค ๊ฒ๋๋ค! ์์ด๋ ๋ง๊ณ ์กฐ์กํด ๋ณด์ด์ง๋ง ์ฒ์ฒํ ์ ํฌ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ธฐ์ํด ์ฐจ๊ทผ์ฐจ๊ทผ ์งํํด๋ณด์๊ตฌ์!
Spring Boot ์คํ
์ด์ ๋ฐฑ์๋์ ์ด๊ธฐ์ค์ ์ ์ด๋์ ๋ ๋์์ผ๋ ์๋ฒ ์คํ์ ํตํด ๋ฌธ์ ์์ด ๋์๊ฐ๋์ง ํ์ธํด๋ณผ๊น์?
./gradlew bootRun
- ์ ๋ช
๋ น์ด๋ฅผ ํฐ๋ฏธ๋์ ์ณ์ ์๋ฒ๋ฅผ ์คํ์ํค๊ฑฐ๋ intellij ์ค๋ฅธ์ชฝ ์๋น์ ํ์ดํ ๋ชจ์์ ํด๋ฆญํด ์๋ฒ๋ฅผ ์คํ์ํต๋๋ค!

โ ์ ์์ ์ผ๋ก ์๋ฒ๊ฐ ์คํ์ด ๋์์ผ๋ฉด 8080ํฌํธ์ ์คํ์ด ๋๊ณ , ์ ์ด๋ฏธ์ง์ ๊ฐ์ ํ๋ฉด์ด ๋์ค์ค๊ป๋๋ค. ์ฌ๊ธฐ๊น์ง ๋ฐ๋ผ์ค์
จ๋์?

์ด์ ๋ฐฑ์๋ ํ๋ก์ ํธ ์ด๊ธฐ ์ค์ ์ ์ด๋์ ๋ ๋์์ผ๋ React ํ๋ก ํธ์๋ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ฐจ๋ก์
๋๋ค. ๋ฐ๋ผ์ค์ธ์!
React ํ๋ก์ ํธ ์์ฑ
ํฐ๋ฏธ๋์ ์ฐพ์๋ผ!

- ์ผ๋จ, ์ผ์ชฝ ์๋๋ฅผ ๋ณด์๋ฉด ํฐ๋ฏธ๋์ด๋ผ๋ ๋ฉ๋ด๊ฐ ๋ณด์ด์ค๊ฒ๋๋ค. ์ด๊ฑธ Click! ํด์ฃผ์ธ์. ์์ผ๋ก ์ ํฌ๊ฐ ํ๋ก์ ํธ์ React๋ฅผ ์ค์นํ๊ธฐ ์ํด ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ ํ๋กฌํํธ์
๋๋ค.

- ํฐ๋ฏธ๋์ ๋๋ฅด๋ฉด, ์ด๋ ๊ฒ ๋์คํ
๋ฐ ๋ณธ์ธ ํ๋ก์ ํธ๋ฅผ ์ค์ ํด๋ ๊ฒฝ๋ก์ ๋ฐ๋ผ ์ ์๋ ์กฐ๊ธ ๋ค๋ฅผ ์ ์๋ค๋ ์ ์ธ์งํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค!
๋ฆฌ์กํธ ํ๋ก์ ํธ ์์ฑ
npx create-react-app frontend
- React ํ๋ก์ ํธ ์์ฑ: Spring Boot ํ๋ก์ ํธ ํด๋์ ๋ณ๋๋ก React ํ๋ก์ ํธ ํด๋๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค! ์์ ๋ช
๋ น์ด๋ฅผ ๊ทธ๋๋ก ์
๋ ฅํ์๋ฉด ๋ฉ๋๋ค.

- ์๊ฐ์ด ์กฐ๊ธ ์์๋ ์ ์๋ค๋ ์ !!!! ์์ง๋ง์ธ์
- ์ค์น๊ฐ ์๋ฃ๋์๋ค๋ฉด, ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ ๊ณผ ๊ตฌ์กฐ๊ฐ ์ฝ๊ฐ ๋ค๋ฅธ๊ฒ์ ํ์ธํ ์ ์์ด์!
๋ฆฌ์กํธ ํ๋ก์ ํธ ์ค์น ํ ์ ์ฒด ํ๋ก์ ํธ ๊ตฌ์กฐ ๋ณํ

- Frontend๋ผ๋ ํด๋๊ฐ ์๊ฒจ๋ฌ๊ณ ์์ผ๋ก ํ๋ก ํธ์๋ ์ชฝ ์ฝ๋๋ฅผ ๊ฐ๋ฐํ๊ฑฐ๋ ์์ ํ ๋๋ ๊ฑฐ์ ๋ชจ๋ ์ฝ๋๊ฐ ์ ํด๋ ์์์ ์ด๋ฃจ์ด์ง๋๋ค.
frontend ํด๋๋ก ์ด๋
cd frontend
- cd ๋ช
๋ น์ด๋ก frontend ํด๋๋ก ์ด๋ํฉ๋๋ค!
React ์์กด์ฑ ์ค์น
- ์๊น ์คํ๋ง ๋ถํธ ์ด๊ธฐ ์ค์ ์์ ์์กด์ฑ์ ์ค์นํ๋ ๋ถ๋ถ์ด ์์์ฃ ? ๋ฆฌ์กํธ ์ญ์ ์์กด์ฑ์ ์ด๊ธฐ์ ์ค์น๋ฅผ ํ๋๋ฐ์(์ดํ์ ์์กด์ฑ ์ถ๊ฐํด๋ ํฐ ๋ฌธ์ ๋ ์์ต๋๋ค).

- ํ๋ก์ ํธ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ๋ ๊ณผ์ ์
๋๋ค.
npm install react-router-dom axios @mui/material @emotion/react @emotion/styled
- ์ฐ์ ์ ์ผ๋ก, ์ ๋ React Router, axios, Material-ui(MUI)๋ฅผ ์ค์นํ์์ต๋๋ค.
- React Router: ํ์ด์ง ์ด๋์ ์ํ ๋ผ์ฐํฐ์
๋๋ค.
- axios: ๋ฐฑ์๋์ ํ๋ก ํธ์๋๋ฅผ HTTPํต์ ์ผ๋ก ์ด์ด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
- Material-UI (MUI): ๊ฐ๋จํ UI ๊ตฌ์ฑ.
- ์ ๋ ๋ ๋ค์ํ ๋ฆฌ์กํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฝํํด๋ณด๊ณ ์ ์ถ๊ฐ์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์น ํ์์ต๋๋ค! ์ ์ ๊ฐ์ด ํจ๊ป ํ์ค ๋ถ์ ๋ฐ๋ผ์ ์ฃผ์ธ์๐
์ํ๊ด๋ฆฌ ๊ด๋ จ
- Redux
- ์ํ๋ฆฌ์ผ์ด์
์ ์ ์ญ ์ํ ๊ด๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ๋ก๊ทธ์ธ ๊ด๋ฆฌ, ์ฌ์ฉ์ ์ธ์
, ํ
๋ง ๋๋ ๋ณต์กํ ์ํ ๊ด๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
npm install @reduxjs/toolkit react-redux
- Zustand
- Redux๋ณด๋ค ๋ ๊ฐ๋ฒผ์ด ์ํ๊ด๋ฆฌ ๋๊ตฌ์
๋๋ค.
npm install zustand
์คํ์ผ๋ง ๊ด๋ จ
- Styled-components
- CSS-in-JS ๋ฐฉ์์ผ๋ก ์ปดํฌ๋ํธ๋ฅผ ์คํ์ผ๋งํฉ๋๋ค.
- CSS ์ JavaScript๋ฅผ ํตํฉํ์ฌ React ์ปดํฌ๋ํธ ์คํ์ผ๋ง์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
npm install styled-components
- Tailwind CSS
- ์ ํธ๋ฆฌํฐ ๊ธฐ๋ฐ์ CSS ํ๋ ์์ํฌ์
๋๋ค.
- ๋น ๋ฅด๊ณ ์ผ๊ด๋ ์คํ์ผ๋ง์ ์ ์ฉํ ์ ์์ต๋๋ค
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init
HTTP ์์ฒญ ๊ด๋ฆฌ
- React Query (TanStack Query)
- ์๋ฒ ์ํ ๊ด๋ฆฌ ๋ฐ ์บ์ฑ ์ญํ ์ ํฉ๋๋ค.
- Axios๋ณด๋ค ๋ ํจ์จ์ ์ผ๋ก API ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ฉฐ, ์บ์ฑ ๋ฐ ๋ฆฌํจ์นญ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
npm install @tanstack/react-query
ํผ ๊ด๋ฆฌ
- React Hook Form
- ํผ ์ํ์ ์ ํจ์ฑ ๊ฒ์ฌ ๊ด๋ฆฌ๋ฅผ ํฉ๋๋ค.
- ๋ก๊ทธ์ธ, ํ์๊ฐ์
๊ฐ์ ํผ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋จํ API๋ก ํผ ๊ด๋ฆฌ๋ฅผ ์ฝ๊ฒ ๋ฐฐ์ธ ์ ์์ต๋๋ค.
npm install react-hook-form
์์ด์ฝ ๋ฐ ์ ํธ๋ฆฌํฐ
- React Icons
- ๋ค์ํ ์์ด์ฝ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์์ต๋๋ค
npm install react-icons
- Moment.js ๋๋ Day.js
- ๋ ์ง์ ์๊ฐ์ ๊ด๋ฆฌํ๋ ์ญํ ์ ํฉ๋๋ค.
- ์๊ฐ ๊ธฐ๋ฐ ๋ฐ์ดํฐ(์: ๊ฒ์๊ธ ์์ฑ ์๊ฐ)๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉํฉ๋๋ค.
npm install dayjs
ํ
์คํธ
- Jest + Testing Library
- React ์ปดํฌ๋ํธ์ API์ ๋จ์ ๋ฐ ํตํฉ ํ
์คํธ ์์ฑ์ ์ฉ์ดํฉ๋๋ค.
npm install --save-dev jest @testing-library/react @testing-library/jest-dom
์ ๋๋ฉ์ด์
- Framer Motion
- ์ ๋๋ฉ์ด์
๋ฐ ์ ํ ํจ๊ณผ ๊ตฌํ์ ์ฉ์ดํฉ๋๋ค.
npm install framer-motion
๋ฆฌ์กํธ ์คํ
์ด์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค์น๊ฐ ๋๋ฌ์ผ๋ฉด ๋ฆฌ์กํธ๊ฐ ์ ์์ ์ผ๋ก ๋์๊ฐ๋์ง ํ์ธ์ ํด๋ด์ผ๊ฒ ์ฃ ??
npm start
์ด ๋ช
๋ น์ด๋ฅผ ํตํด ๋ฆฌ์กํธ๋ฅผ ์คํํ๋ฉด, ํ๋ก ํธ์๋๋ฅผ ๋ด๋นํ๋ ๋ฆฌ์กํธ์ ํฌํธ๊ฐ ์ ์์ ์ด๊ณ , ๋ฆฌ์กํธ๊ฐ ์ ์์ ์ผ๋ก ๋์๊ฐ๊ธฐ ์ํ ํ์์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค์น๋์๋ค๋ฉด ์ ์์ ์ผ๋ก ๋ฐ์ ์ด๋ฏธ์ง ํ๋ฉด์ด ๋์์ผํฉ๋๋ค.

์ฌ๊ธฐ๊น์ง ์งํ์ด ์๋ฃ๋์๋ค๋ฉด Spring Boot์ React์ ์ด๊ธฐ ์ค์ ๊ณผ ์คํ์ ์๋ฃ๋์๊ณ , ๋ค์ ํฌ์คํ
์์ Spring Boot์ React์ ์ฐ๋ ์ค๋น ๊ณผ์ ์ ๋ํด ํฌ์คํ
ํด๋ณด๊ฒ ์ต๋๋ค! ๊ธด ๊ธ ์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ๋ค์ ํฌ์คํ
์์ ๋ต๊ฒ ์ต๋๋ค โฃ๏ธ