์ธ์ข ๋ํ๊ต ๋ฉ์์ด ์ฌ์์ฒ๋ผ ํด์ปคํค : ๋์งํธ ๊ฒฉ์ฐจ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์๋น์ค
๊ฐ๋ฐ๊ธฐ๊ฐ: 2023.06 ~ 2023.08 (12์ฃผ)
๋ค์ค(DAO)๋ ๊ณ ๋ นํ ์ฌํ์์ ์ด๋ฅด์ ๋ค์ ์ฌ์ทจ์ ์ ์ง์ํ๊ธฐ ์ํ ๋ง์ถคํ ์ผ์๋ฆฌ ์ถ์ฒ ์๋น์ค์ ๋๋ค. ์ด๋ฅด์ ๋ค์ ๊ฑฐ์ฃผ ์ง์ญ๊ณผ ๊ด์ฌ์ฌ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ํฉํ ์ผ์๋ฆฌ๋ฅผ ์ถ์ฒํ๊ณ , ์๋ก์ด ์ผ์๋ฆฌ ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ์๋ฆผ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ๐ผ
๋ค์ค๋ ์ด๋ฅด์ ๋ค์ ๋์งํธ ์ ๋ณด ์ ๊ทผ์ฑ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ฌ์ทจ์ ๊ธฐํ๋ฅผ ํ๋ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค์ ์ง๊ด์ ์ธ ๊ธฐ๋ฅ์ ํตํด ์ด๋ฅด์ ๋ค๋ ์ฝ๊ฒ ์ผ์๋ฆฌ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์ง์ํ ์ ์๋๋ก ๋์์ค๋๋ค. ๐ฑ
ํ๋ก์ ํธ๋ฅผ ํตํด ๊ณ ๋ น์ธต์ ๊ณ ์ฉ ๋ฌธ์ ํด๊ฒฐ์ ๊ธฐ์ฌํ๊ณ , ์ด๋ฅด์ ๋ค์ ์ฌํ ์ฐธ์ฌ ๊ธฐํ๋ฅผ ๋์ด๋ ๊ฒ์ด ๋ค์ค์ ๊ถ๊ทน์ ์ธ ๋ชฉํ์ ๋๋ค. ์์ผ๋ก๋ ๋ค์ค๋ ์ด๋ฅด์ ๋ค์ ๋ชฉ์๋ฆฌ์ ๊ท ๊ธฐ์ธ์ด๋ฉฐ, ์ง์์ ์ผ๋ก ์๋น์ค๋ฅผ ๊ฐ์ ํด ๋๊ฐ ์์ ์ ๋๋ค. ๐ฏ
์กฐํ์ | ๊น๋ฏผ์ญ |
---|---|
@hyunsoo730 | @k-ms1998 |
์ธ์ข ๋ํ๊ต ์ํํธ์จ์ดํ๊ณผ 4ํ๋ | ์ธ์ข ๋ํ๊ต ์ํํธ์จ์ดํ๊ณผ 4ํ๋ |
๋ฌธ์ฑํฌ | ๊ณ ํ๋ฆฐ | ์ ๊ฒฝ์ |
---|---|---|
@seong-hui | @hlynnn | @jeonkyungwon |
์ธ์ข ๋ํ๊ต ์ง๋ฅ๊ธฐ์ 4ํ๋ | ์ธ์ข ๋ํ๊ต ์ง๋ฅ๊ธฐ์ 4ํ๋ | ์ธ์ข ๋ํ๊ต ์ง๋ฅ๊ธฐ์ 4ํ๋ |
์ด๋ฆ | ์ญํ ๋ฐ ๊ธฐ์ฌ๋ |
---|---|
์กฐํ์ | - ๐ ๋ฐฑ์๋ ๊ฐ๋ฐ ๋ฆฌ๋๋ก์ ๋ฐฑ์๋ ์ํคํ
์ฒ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ ์ด๊ด - ๐จ Spring Boot๋ฅผ ํ์ฉํ REST API ๊ตฌํ ๋ฐ ๋ฌธ์ํ - โ๏ธ Spring Batch๋ฅผ ํ์ฉํ ์ผ์๋ฆฌ ์ ๋ณด ์์ง ๋ฐฐ์น ์์ ๊ตฌํ - ๐ ์นด์นด์คํก ์๋ฆผ API ์ฐ๋ ๋ฐ ์๋ฆผ ๋ฐ์ก ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ - ๐พ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ๋ฐ ์ฟผ๋ฆฌ ์ต์ ํ |
๊น๋ฏผ์ญ | - ๐ค ์ํคํ
์ฒ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ & ๋ฐฑ์๋ ์๋ฒ ๊ฐ๋ฐ ๋ด๋น - ๐ฟ ๋์์ธ ํจํด์ ์ ์ฉํ API ์ปจํธ๋กค๋ฌ ๊ฐ๋ฐ ๋ฐ ์์ธ ์ฒ๋ฆฌ - ๐๏ธ MyBatis๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง ๊ฐ๋ฐ ๋ฐ ์ฟผ๋ฆฌ ์์ฑ - ๐ ์ฌ์ฉ์ ํ๋ ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์์ ์ํ ๋ก๊ทธ ์ค๊ณ ๋ฐ ๋ก๊น ์์ - ๐งช ๋จ์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ํตํ ์ฝ๋ ํ์ง ๊ฐ์ ํ๋ |
ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ์คํํ๊ธฐ ์ํด ๋ค์ ํ๊ฒฝ์ด ํ์ํฉ๋๋ค:
- ํ๋ก์ ํธ ํด๋ก
$ git clone https://github.com/HyunSoo730/likelion-hackaton.git
$ cd likelion-hackaton
Back-End
$ ./mvnw clean install
$ java -jar target/[your_project].jar
Front-End
$ nvm use v.14.19.3
$ npm install
$ npm run dev
ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๋ ์์ ๊ฐ์ ERD๋ฅผ ๋ฐํ์ผ๋ก ์ด๋ฃจ์ด์ก์ต๋๋ค.
User
ํ ์ด๋ธ: ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋๋ค. ์ฌ์ฉ์์ ๊ธฐ๋ณธ ์ ๋ณด์ ํจ๊ป ๊ด์ฌ ์ง์ญ(Region
)๊ณผ ๋งค์นญ๋ ์ผ์๋ฆฌ(Job
) ์ ๋ณด๋ฅผ ์ธ๋ํค๋ก ์ฐธ์กฐํฉ๋๋ค.Region
ํ ์ด๋ธ: ์ง์ญ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋๋ค. ์ฌ์ฉ์์ ๊ด์ฌ ์ง์ญ๊ณผ ์ผ์๋ฆฌ์ ๊ทผ๋ฌด ์ง์ญ์ ๊ด๋ฆฌํฉ๋๋ค.Job
ํ ์ด๋ธ: ์ผ์๋ฆฌ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋๋ค. ์ผ์๋ฆฌ์ ์์ธ ์ ๋ณด์ ํจ๊ป ๊ทผ๋ฌด ์ง์ญ(Region
) ์ ๋ณด๋ฅผ ์ธ๋ํค๋ก ์ฐธ์กฐํฉ๋๋ค.Application
ํ ์ด๋ธ: ์ฌ์ฉ์์ ์ผ์๋ฆฌ ์ง์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋๋ค. ์ฌ์ฉ์(User
)์ ์ผ์๋ฆฌ(Job
)์ ์ธ๋ํค๋ฅผ ์ฐธ์กฐํ์ฌ ์ง์ ๋ด์ญ์ ๊ด๋ฆฌํฉ๋๋ค.Notification
ํ ์ด๋ธ: ์ฌ์ฉ์์๊ฒ ์ ์ก๋ ์๋ฆผ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ํ ์ด๋ธ์ ๋๋ค. ์ฌ์ฉ์(User
)์ ์ผ์๋ฆฌ(Job
)์ ์ธ๋ํค๋ฅผ ์ฐธ์กฐํ์ฌ ์๋ฆผ ๋ด์ญ์ ๊ด๋ฆฌํฉ๋๋ค.
ERD์์ ๋ณผ ์ ์๋ฏ์ด, User
์ Region
, Job
ํ
์ด๋ธ์ ๋ค๋๋ค(Many-to-Many) ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ ํ ์ฌ์ฉ์๊ฐ ์ฌ๋ฌ ์ง์ญ์ ๊ด์ฌ์ ๊ฐ์ง ์ ์๊ณ , ํ ์ง์ญ์ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๊ด์ฌ์ ๊ฐ์ง ์ ์์์ ๋ํ๋
๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํ ์ฌ์ฉ์๋ ์ฌ๋ฌ ์ผ์๋ฆฌ์ ์ง์ํ ์ ์๊ณ , ํ ์ผ์๋ฆฌ์๋ ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ์ง์ํ ์ ์์ต๋๋ค.
Application
๊ณผ Notification
ํ
์ด๋ธ์ User
์ Job
ํ
์ด๋ธ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์ฐ๊ฒฐ ํ
์ด๋ธ(Join Table)์ ์ญํ ์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์์ ์ผ์๋ฆฌ ์ง์ ๋ด์ญ๊ณผ ์๋ฆผ ๋ด์ญ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๋ ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ํ์ฅ์ฑ์ ๊ณ ๋ คํ์ฌ ์งํ๋์์ผ๋ฉฐ, ํ์์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ธ ํ ์ด๋ธ์ด๋ ๊ด๊ณ๋ฅผ ๋์ ํ ์ ์๋ ์ ์ฐ์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๐๏ธ
์ฌ์ฉ์์ ๊ฑฐ์ฃผ ์ง์ญ์ ๊ธฐ๋ฐ์ผ๋ก ์ฌ์ฉ์ ๊ฐ๊ฐ์ธ์๊ฒ ํนํ๋ ์ผ์๋ฆฌ๋ฅผ ์ ์ํฉ๋๋ค.
์ฌ์ฉ์๊ฐ ์ค์ ํ ๊ด์ฌ ์ง์ญ์ ์๋ก์ด ์ผ์๋ฆฌ๊ฐ ๋ฑ๋ก๋๋ฉด ์นด์นด์คํก์ผ๋ก ์ค์๊ฐ ์๋ฆผ์ ๋ณด๋ด์ค๋๋ค. ์ด๋ฅด์ ๋ค์ ์๋ฆผ์ ํตํด ์๋ก์ด ๊ธฐํ๋ฅผ ์ฆ์ ํ์ธํ๊ณ ์ง์ํ ์ ์์ต๋๋ค. ๐ฃ
์ง๊ด์ ์ด๊ณ ๋์ ์ ๋๋ ๋์์ธ์ผ๋ก ์ด๋ฅด์ ๋ค๋ ์ฝ๊ฒ ์๋น์ค๋ฅผ ์ด์ฉํ ์ ์๋๋ก UI/UX๋ฅผ ์ค๊ณํ์์ต๋๋ค. ๋ถํ์ํ ๊ธฐ๋ฅ์ ์ต์ํํ๊ณ , ํ ๋์ ํ์ํ ์ ๋ณด๋ฅผ ํ์ ํ ์ ์๋๋ก ๊ตฌ์ฑํ์์ต๋๋ค. ๐
์ผ์๋ฆฌ ์ถ์ฒ๊ณผ ๋๋ถ์ด ์ด๋ฅด์ ๋ค์ ์ญ๋ ๊ฐํ๋ฅผ ์ํ ๋ค์ํ ๊ต์ก ํ๋ก๊ทธ๋จ ์ ๋ณด(์์ธ์ ๊ณต๊ณต ์๋น์ค)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ง์ ๊ต์ก, ๋์งํธ ํ์ฉ ๊ต์ก ๋ฑ์ ํตํด ์ด๋ฅด์ ๋ค์ ๊ฒฝ์๋ ฅ์ ๋์ผ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๐ฑ
๋ฐฑ์๋๋ Spring Boot๋ก ๊ตฌ์ถ๋ RESTful API ์๋ฒ๋ก, ํ๋ก ํธ์๋์์ ์ํํ ํต์ ์ ์ํด ์ง๊ด์ ์ด๊ณ ์ผ๊ด๋ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋๋์ ์ผ์๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ๊ณผ ์ฟผ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ์ ํ์ฉํ์์ต๋๋ค.
์ผ์๋ฆฌ ๋ฐ์ดํฐ ์์ง, ์๋ฆผ ๋ฐ์ก ๋ฑ์ ๋ฐ๋ณต์ ์ธ ์์ ์ Spring Batch์ Quartz๋ฅผ ํ์ฉํ์ฌ ์๋ํํ์์ต๋๋ค. ์ ํด์ง ์ค์ผ์ค์ ๋ฐ๋ผ ์์ ์ ์ผ๋ก ๋ฐฐ์น ์์ ์ด ์ํ๋๋ฉฐ, ์ฌ์ฉ์์๊ฒ ์ต์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฝ๋์ ํ์ง๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด JUnit5๋ฅผ ํ์ฉํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ฌ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฒ๊ทธ์ ์ด์๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ์์ต๋๋ค.
root
โโโ backend
โ โโโ Dockerfile
โ โโโ dao.iml
โ โโโ mvnw
โ โโโ mvnw.cmd
โ โโโ pom.xml
โ โโโ src
โ โโโ main
โ โ โโโ java
โ โ โ โโโ com
โ โ โ โโโ likelion
โ โ โ โโโ dao
โ โ โ โโโ DaoApplication.java
โ โ โ โโโ config
โ โ โ โ โโโ BatchConfig.java
โ โ โ โ โโโ OpenApiConfig.java
โ โ โ โ โโโ WebMvcConfig.java
โ โ โ โโโ controller
โ โ โ โ โโโ JobController.java
โ โ โ โ โโโ RegionController.java
โ โ โ โ โโโ UserController.java
โ โ โ โโโ dto
โ โ โ โ โโโ JobDto.java
โ โ โ โ โโโ RegionDto.java
โ โ โ โ โโโ UserDto.java
โ โ โ โโโ entity
โ โ โ โ โโโ Job.java
โ โ โ โ โโโ Region.java
โ โ โ โ โโโ User.java
โ โ โ โโโ repository
โ โ โ โ โโโ JobRepository.java
โ โ โ โ โโโ RegionRepository.java
โ โ โ โ โโโ UserRepository.java
โ โ โ โโโ service
โ โ โ โโโ JobService.java
โ โ โ โโโ KakaoAlarmService.java
โ โ โ โโโ RegionService.java
โ โ โ โโโ UserService.java
โ โ โโโ resources
โ โ โโโ application.properties
โ โ โโโ application-prod.properties
โ โโโ test
โ โโโ java
โ โโโ com
โ โโโ likelion
โ โโโ dao
โ โโโ DaoApplicationTests.java
โโโ frontend
โ โโโ README.md
โ โโโ node_modules
โ โโโ package-lock.json
โ โโโ package.json
โ โโโ public
โ โ โโโ favicon.ico
โ โ โโโ index.html
โ โ โโโ logo192.png
โ โ โโโ logo512.png
โ โ โโโ manifest.json
โ โ โโโ robots.txt
โ โโโ src
โ โโโ App.css
โ โโโ App.js
โ โโโ App.test.js
โ โโโ components
โ โ โโโ Footer.js
โ โ โโโ Header.js
โ โ โโโ JobDetail.js
โ โ โโโ JobList.js
โ โ โโโ KakaoAlarmModal.js
โ โ โโโ MyPage.js
โ โ โโโ RegionSelect.js
โ โโโ index.css
โ โโโ index.js
โ โโโ logo.svg
โ โโโ pages
โ โ โโโ AlarmPage.js
โ โ โโโ JobDetailPage.js
โ โ โโโ JobListPage.js
โ โ โโโ MainPage.js
โ โ โโโ MyPage.js
โ โโโ reportWebVitals.js
โ โโโ services
โ โ โโโ JobService.js
โ โ โโโ KakaoAlarmService.js
โ โ โโโ RegionService.js
โ โ โโโ UserService.js
โ โโโ setupTests.js
โโโ README.md
- ๐ ์ฌ์ฉ์์ ๊ฑฐ์ฃผ ์ง์ญ์ ๊ธฐ๋ฐ์ผ๋ก ๋ง์ถคํ ์ผ์๋ฆฌ๋ฅผ ์ถ์ฒํ์ฌ ๊ณ ๋ น์ธต์ ์ฌ์ทจ์ ์ ๊ทผ์ฑ์ ๋์์ต๋๋ค.
- ๐ฃ ์นด์นด์คํก ์๋ฆผ API๋ฅผ ํ์ฉํด ์๋ก์ด ์ผ์๋ฆฌ๊ฐ ๋ฑ๋ก๋๋ฉด ์ฌ์ฉ์์๊ฒ ์๋ฆผ์ ์ ์กํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ์์ต๋๋ค.
- ๐ Spring Boot์ MyBatis, JPA, Querydsl์ ํ์ฉํ์ฌ ์์ ์ ์ด๊ณ ํจ์จ์ ์ธ RESTful API ์๋ฒ๋ฅผ ๊ตฌ์ถํ์์ต๋๋ค.
- MyBatis๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๋ ๋ฐ ์ฟผ๋ฆฌ ๋งคํ์ ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ์์ต๋๋ค.
- JPA๋ฅผ ๋์ ํ์ฌ ๊ฐ์ฒด-๊ด๊ณ ๋งคํ(ORM)์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ํธ๋ฆฌํ๊ฒ ์ํํ์์ต๋๋ค.
- Querydsl์ ํ์ฉํ์ฌ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ณ ์คํํจ์ผ๋ก์จ ๋ณต์กํ ๊ฒ์ ์กฐ๊ฑด์ ์ ์ฐํ๊ฒ ์ฒ๋ฆฌํ์์ต๋๋ค.
- ๐๏ธ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ๊ณผ ์ฟผ๋ฆฌ ์ต์ ํ๋ฅผ ์งํํ์ฌ ๊ฒ์ ๋ฐ ์กฐํ ์๋๋ฅผ ๊ฐ์ ํ์์ต๋๋ค.
- โฐ Spring Batch์ Quartz๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ ์์ง๊ณผ ์๋ฆผ ๋ฐ์ก ๋ฑ์ ๋ฐฐ์น ์์ ์ ์๋ํํ์ฌ ์ด์ ํจ์จ์ฑ์ ๋์์ต๋๋ค.
- โ JUnit5๋ฅผ ํ์ฉํ ๋จ์ ํ ์คํธ๋ฅผ ์ง์์ ์ผ๋ก ์์ฑํ๊ณ ์ํํ์ฌ ์๋น์ค์ ์์ ์ฑ์ ํ๋ณดํ์์ต๋๋ค.
- ๐ ์ฌ์ฉ์๋ค์ ํผ๋๋ฐฑ์ ์ ๊ทน ์๋ ดํ์ฌ ์๋น์ค ์ฌ์ฉ์ฑ๊ณผ ํธ์์ฑ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ ์์ ์ ๋๋ค.
- ์) ๊ฑฐ์ฃผ ์ง์ญ + ์ด๋ฅด์ ๋ค์ ๊ฒฝ๋ ฅ์ ๋ํด ์ถ์ฒ ๊ณต๊ณ ๋ฅผ ์ ๊ณตํด๋ณผ ์๊ฐ
- ๐ค ๋์งํธ ๋ฆฌํฐ๋ฌ์๊ฐ ๋ฎ์ ๊ณ ๋ น์ธต ์ฌ์ฉ์๋ฅผ ์ํด ์๋น์ค ์ด์ฉ ๊ฐ์ด๋ ์ ์ ๋ฐ ์ฒซ ์ฌ์ฉ์ ํํ ๋ฆฌ์ผ ๊ธฐ๋ฅ์ ๋์ ํ ๊ณํ์ ๋๋ค.
- ๐ ์๋น์ค ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น ์ฒด๊ณ๋ฅผ ๊ฐํํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๊ฐ์งํ๊ณ ์ ์ํ๊ฒ ๋์ํ ์ ์๋๋ก ํ ์์ ์ ๋๋ค.
- ๐ ๋ฐฐ์น ์์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์์ ์๊ฐํ๊ณ ์์ต๋๋ค.
- ์ฆ์: ์ผ์๋ฆฌ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํ ๋ ์ฐ๊ด๋ ์ํฐํฐ๋ค์ ์ฆ์ ๋ก๋ฉ(EAGER)ํ์ฌ ๋ถํ์ํ ์ฟผ๋ฆฌ๊ฐ ๋ค์ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
- ์์ธ: JPA์ ์ฆ์ ๋ก๋ฉ ์ ๋ต์ผ๋ก ์ธํด ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์กฐํํ ๋๋ง๋ค ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์คํ๋์ด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
- ํด๊ฒฐ: ์ง์ฐ ๋ก๋ฉ(LAZY) ์ ๋ต์ผ๋ก ๋ณ๊ฒฝํ๊ณ , ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ช ์์ ์ผ๋ก ํ์น ์กฐ์ธ(Fetch Join)์ ์ฌ์ฉํ์ฌ ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ํจ๊ป ์กฐํํ๋๋ก ์ต์ ํํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ถํ์ํ ์ฟผ๋ฆฌ ์คํ์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์์ต๋๋ค.
- ์ฆ์: ์ผ์๋ฆฌ ๋งค์นญ ๋ฐฐ์น ์์ ์ ์ํํ ๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ์ฌ Out of Memory(OOM) ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
- ์์ธ: ๋ฐฐ์น ์์ ์์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ค๊ณ ์๋ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ๋ฐ์ํ์์ต๋๋ค.
- ํด๊ฒฐ: Spring Batch์ Chunk ๊ธฐ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ํฌ๊ธฐ๋ก ๋ถํ ํ์ฌ ์ฒ๋ฆฌํ๋๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํ๊ณ ์์ ์ ์ผ๋ก ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ต๋๋ค.
- ์ฆ์: ์ผ์๋ฆฌ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ์นด์นด์คํก์ผ๋ก ์๋ฆผ์ ๋ณด๋ผ ๋ ๊ฐํ์ ์ผ๋ก API ํธ์ถ์ด ์คํจํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
- ์์ธ: ์นด์นด์คํก ์๋ฆผ API์ ์์ฒญ ์ ํ(rate limit)์ ์ด๊ณผํ์ฌ ์ผ์์ ์ผ๋ก ํธ์ถ์ด ๊ฑฐ๋ถ๋๋ ๊ฒ์ผ๋ก ํ์ ๋์์ต๋๋ค.
- ํด๊ฒฐ: ์์ฒญ ์ ํ์ ๊ณ ๋ คํ์ฌ ์๋ฆผ ๋ฐ์ก ๋ก์ง์ ์์ ํ์์ต๋๋ค. ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๊ณ ์๋ฆผ์ ๋ฐ์กํ๋๋ก ์กฐ์ ํ๊ณ , ์คํจํ ํธ์ถ์ ์ฌ์๋ํ๋ ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐํ์์ต๋๋ค. ๋ํ, ์นด์นด์คํก ์๋ฆผ API์ ์ ์ฑ ์ ๋ฉด๋ฐํ ํ์ธํ๊ณ ์ค์ํ์ฌ ์์ ์ ์ธ ์๋ฆผ ๋ฐ์ก์ ์ ์งํ ์ ์์์ต๋๋ค.
์ด๋ฌํ ํธ๋ฌ๋ธ์ํ ๊ฒฝํ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๊ณ , ์ฌ์ฉ์์๊ฒ ๋ ๋์ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์์์ต๋๋ค. ์์ผ๋ก๋ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ์ ํตํด ์๋น์ค ํ์ง์ ๋์ฌ๊ฐ ๊ณํ์ ๋๋ค.