Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hyunsoo730/likelion-hackaton
๐ ํด์ปคํค ํ๋ก์ ํธ : ๋
ธ์ธ ๊ตฌ์ง ์ ๋ณด ์๋ฆผ & ๊ณต๊ณต์๋น์ค ์๋ฆผ ์๋น์ค
https://github.com/hyunsoo730/likelion-hackaton
Last synced: 4 days ago
JSON representation
๐ ํด์ปคํค ํ๋ก์ ํธ : ๋ ธ์ธ ๊ตฌ์ง ์ ๋ณด ์๋ฆผ & ๊ณต๊ณต์๋น์ค ์๋ฆผ ์๋น์ค
- Host: GitHub
- URL: https://github.com/hyunsoo730/likelion-hackaton
- Owner: HyunSoo730
- Created: 2023-07-20T03:36:26.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-08-11T17:28:09.000Z (3 months ago)
- Last Synced: 2024-08-11T18:59:27.129Z (3 months ago)
- Language: Java
- Homepage:
- Size: 1.31 MB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# ๋ค์ค(DAO) ๐
# ๋ค์ค(DAO) - ์ด๋ฅด์ ๋ค์ ์ํ ๋ง์ถคํ ์ผ์๋ฆฌ ์ถ์ฒ ์๋น์ค ๐ฅ
> **์ธ์ข ๋ํ๊ต ๋ฉ์์ด ์ฌ์์ฒ๋ผ ํด์ปคํค : ๋์งํธ ๊ฒฉ์ฐจ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์๋น์ค**
> **๊ฐ๋ฐ๊ธฐ๊ฐ: 2023.06 ~ 2023.08 (12์ฃผ)**## ๐ฅ ํ๋ก์ ํธ ์๊ฐ
๋ค์ค(DAO)๋ ๊ณ ๋ นํ ์ฌํ์์ ์ด๋ฅด์ ๋ค์ ์ฌ์ทจ์ ์ ์ง์ํ๊ธฐ ์ํ ๋ง์ถคํ ์ผ์๋ฆฌ ์ถ์ฒ ์๋น์ค์ ๋๋ค. ์ด๋ฅด์ ๋ค์ ๊ฑฐ์ฃผ ์ง์ญ๊ณผ ๊ด์ฌ์ฌ๋ฅผ ๊ณ ๋ คํ์ฌ ์ ํฉํ ์ผ์๋ฆฌ๋ฅผ ์ถ์ฒํ๊ณ , ์๋ก์ด ์ผ์๋ฆฌ ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ์๋ฆผ์ผ๋ก ์ ๊ณตํฉ๋๋ค. ๐ผ
๋ค์ค๋ ์ด๋ฅด์ ๋ค์ ๋์งํธ ์ ๋ณด ์ ๊ทผ์ฑ ๋ถ์กฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ , ์ฌ์ทจ์ ๊ธฐํ๋ฅผ ํ๋ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ์ฌ์ฉ์ ์นํ์ ์ธ ์ธํฐํ์ด์ค์ ์ง๊ด์ ์ธ ๊ธฐ๋ฅ์ ํตํด ์ด๋ฅด์ ๋ค๋ ์ฝ๊ฒ ์ผ์๋ฆฌ ์ ๋ณด๋ฅผ ํ์ธํ๊ณ ์ง์ํ ์ ์๋๋ก ๋์์ค๋๋ค. ๐ฑ
ํ๋ก์ ํธ๋ฅผ ํตํด ๊ณ ๋ น์ธต์ ๊ณ ์ฉ ๋ฌธ์ ํด๊ฒฐ์ ๊ธฐ์ฌํ๊ณ , ์ด๋ฅด์ ๋ค์ ์ฌํ ์ฐธ์ฌ ๊ธฐํ๋ฅผ ๋์ด๋ ๊ฒ์ด ๋ค์ค์ ๊ถ๊ทน์ ์ธ ๋ชฉํ์ ๋๋ค. ์์ผ๋ก๋ ๋ค์ค๋ ์ด๋ฅด์ ๋ค์ ๋ชฉ์๋ฆฌ์ ๊ท ๊ธฐ์ธ์ด๋ฉฐ, ์ง์์ ์ผ๋ก ์๋น์ค๋ฅผ ๊ฐ์ ํด ๋๊ฐ ์์ ์ ๋๋ค. ๐ฏ
## ๐ฅ ํ ์๊ฐ
### ๋ฐฑ์๋
| ์กฐํ์ | ๊น๋ฏผ์ญ |
| :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: |
| | |
| [@hyunsoo730](https://github.com/hyunsoo730) | [@k-ms1998](https://github.com/k-ms1998) |
| ์ธ์ข ๋ํ๊ต ์ํํธ์จ์ดํ๊ณผ 4ํ๋ | ์ธ์ข ๋ํ๊ต ์ํํธ์จ์ดํ๊ณผ 4ํ๋ |### ํ๋ก ํธ์๋
| ๋ฌธ์ฑํฌ | ๊ณ ํ๋ฆฐ | ์ ๊ฒฝ์ |
| :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| | | |
| [@seong-hui](https://github.com/seong-hui) | [@hlynnn](https://github.com/hlynnn) | [@jeonkyungwon](https://github.com/jeonkyungwon) |
| ์ธ์ข ๋ํ๊ต ์ง๋ฅ๊ธฐ์ 4ํ๋ | ์ธ์ข ๋ํ๊ต ์ง๋ฅ๊ธฐ์ 4ํ๋ | ์ธ์ข ๋ํ๊ต ์ง๋ฅ๊ธฐ์ 4ํ๋ |## ๐โโ๏ธ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ์ญํ ๋ฐ ๊ธฐ์ฌ๋
| ์ด๋ฆ | ์ญํ ๋ฐ ๊ธฐ์ฌ๋ |
|------|--------------|
| ์กฐํ์ | - ๐ ๋ฐฑ์๋ ๊ฐ๋ฐ ๋ฆฌ๋๋ก์ ๋ฐฑ์๋ ์ํคํ ์ฒ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ ์ด๊ด
- ๐จ Spring Boot๋ฅผ ํ์ฉํ REST API ๊ตฌํ ๋ฐ ๋ฌธ์ํ
- โ๏ธ Spring Batch๋ฅผ ํ์ฉํ ์ผ์๋ฆฌ ์ ๋ณด ์์ง ๋ฐฐ์น ์์ ๊ตฌํ
- ๐ ์นด์นด์คํก ์๋ฆผ API ์ฐ๋ ๋ฐ ์๋ฆผ ๋ฐ์ก ๋น์ฆ๋์ค ๋ก์ง ๊ฐ๋ฐ
- ๐พ MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ ๋ฐ ์ฟผ๋ฆฌ ์ต์ ํ |
| ๊น๋ฏผ์ญ | - ๐ค ์ํคํ ์ฒ ์ค๊ณ ๋ฐ ๊ฐ๋ฐ & ๋ฐฑ์๋ ์๋ฒ ๊ฐ๋ฐ ๋ด๋น
- ๐ฟ ๋์์ธ ํจํด์ ์ ์ฉํ API ์ปจํธ๋กค๋ฌ ๊ฐ๋ฐ ๋ฐ ์์ธ ์ฒ๋ฆฌ
- ๐๏ธ MyBatis๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์ก์ธ์ค ๋ก์ง ๊ฐ๋ฐ ๋ฐ ์ฟผ๋ฆฌ ์์ฑ
- ๐ ์ฌ์ฉ์ ํ๋ ๋ฐ์ดํฐ ์์ง ๋ฐ ๋ถ์์ ์ํ ๋ก๊ทธ ์ค๊ณ ๋ฐ ๋ก๊น ์์
- ๐งช ๋จ์ ํ ์คํธ ์ฝ๋ ์์ฑ์ ํตํ ์ฝ๋ ํ์ง ๊ฐ์ ํ๋ |## ๐ ์ด์ฉ ๊ฐ์ด๋
### Requirements
ํ๋ก์ ํธ๋ฅผ ๋น๋ํ๊ณ ์คํํ๊ธฐ ์ํด ๋ค์ ํ๊ฒฝ์ด ํ์ํฉ๋๋ค:
- [Java 11](https://www.oracle.com/java/technologies/javase-jdk11-downloads.html)
- [Maven](https://maven.apache.org/)
- [Node.js 14.19.3](https://nodejs.org/ca/blog/release/v14.19.3/)
- [Npm 9.2.0](https://www.npmjs.com/package/npm/v/9.2.0)### Installation
1. ํ๋ก์ ํธ ํด๋ก
```bash
$ git clone https://github.com/HyunSoo730/likelion-hackaton.git
$ cd likelion-hackatonBack-End
$ ./mvnw clean install
$ java -jar target/[your_project].jarFront-End
$ nvm use v.14.19.3
$ npm install
$ npm run dev
```## ๐ ๏ธ ๊ธฐ์ ์คํ
### Environment
![Git](https://img.shields.io/badge/Git-F05032?style=for-the-badge&logo=Git&logoColor=white)
![Github](https://img.shields.io/badge/GitHub-181717?style=for-the-badge&logo=GitHub&logoColor=white)### Config
![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)
### Development
![JavaScript](https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=Javascript&logoColor=white)
![React](https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB)
![Bootstrap](https://img.shields.io/badge/Bootstrap-7952B3?style=for-the-badge&logo=Bootstrap&logoColor=white)
### Communication
![Slack](https://img.shields.io/badge/Slack-4A154B?style=for-the-badge&logo=Slack&logoColor=white)
![Notion](https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=Notion&logoColor=white)
![GoogleMeet](https://img.shields.io/badge/GoogleMeet-00897B?style=for-the-badge&logo=Google%20Meet&logoColor=white)## ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ
### ERD (Entity-Relationship Diagram)
![ERD](https://i.postimg.cc/tC9B4RhZ/ERD.png)ํ๋ก์ ํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค๊ณ๋ ์์ ๊ฐ์ 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๋ฅผ ์ค๊ณํ์์ต๋๋ค. ๋ถํ์ํ ๊ธฐ๋ฅ์ ์ต์ํํ๊ณ , ํ ๋์ ํ์ํ ์ ๋ณด๋ฅผ ํ์ ํ ์ ์๋๋ก ๊ตฌ์ฑํ์์ต๋๋ค. ๐### โญ๏ธ ๊ต์ก ํ๋ก๊ทธ๋จ ์ฐ๊ณ
์ผ์๋ฆฌ ์ถ์ฒ๊ณผ ๋๋ถ์ด ์ด๋ฅด์ ๋ค์ ์ญ๋ ๊ฐํ๋ฅผ ์ํ ๋ค์ํ ๊ต์ก ํ๋ก๊ทธ๋จ ์ ๋ณด(์์ธ์ ๊ณต๊ณต ์๋น์ค)๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ง์ ๊ต์ก, ๋์งํธ ํ์ฉ ๊ต์ก ๋ฑ์ ํตํด ์ด๋ฅด์ ๋ค์ ๊ฒฝ์๋ ฅ์ ๋์ผ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๐ฑ### โญ๏ธ ์์ ์ ์ธ API ์๋ฒ
๋ฐฑ์๋๋ Spring Boot๋ก ๊ตฌ์ถ๋ RESTful API ์๋ฒ๋ก, ํ๋ก ํธ์๋์์ ์ํํ ํต์ ์ ์ํด ์ง๊ด์ ์ด๊ณ ์ผ๊ด๋ API ์๋ํฌ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค.### โญ๏ธ ๋น ๋ฅธ ๋ฐ์ดํฐ ์กฐํ
๋๋์ ์ผ์๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ธ๋ฑ์ฑ๊ณผ ์ฟผ๋ฆฌ ์ต์ ํ ๊ธฐ๋ฒ์ ํ์ฉํ์์ต๋๋ค.### โญ๏ธ ์๋ํ๋ ๋ฐฐ์น ์์
์ผ์๋ฆฌ ๋ฐ์ดํฐ ์์ง, ์๋ฆผ ๋ฐ์ก ๋ฑ์ ๋ฐ๋ณต์ ์ธ ์์ ์ Spring Batch์ Quartz๋ฅผ ํ์ฉํ์ฌ ์๋ํํ์์ต๋๋ค. ์ ํด์ง ์ค์ผ์ค์ ๋ฐ๋ผ ์์ ์ ์ผ๋ก ๋ฐฐ์น ์์ ์ด ์ํ๋๋ฉฐ, ์ฌ์ฉ์์๊ฒ ์ต์ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.### โญ๏ธ ๋จ์ ํ ์คํธ
์ฝ๋์ ํ์ง๊ณผ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด JUnit5๋ฅผ ํ์ฉํ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ฌ ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐ์ํ ์ ์๋ ๋ฒ๊ทธ์ ์ด์๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ์์ต๋๋ค.## ๐๏ธ ์ํคํ ์ฒ
### ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ```plaintext
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๋ฅผ ํ์ฉํ ๋จ์ ํ ์คํธ๋ฅผ ์ง์์ ์ผ๋ก ์์ฑํ๊ณ ์ํํ์ฌ ์๋น์ค์ ์์ ์ฑ์ ํ๋ณดํ์์ต๋๋ค.## ๐ง ๊ฐ์ ์ฌํญ ๋ฐ ์ถํ ๊ณํ
- ๐ ์ฌ์ฉ์๋ค์ ํผ๋๋ฐฑ์ ์ ๊ทน ์๋ ดํ์ฌ ์๋น์ค ์ฌ์ฉ์ฑ๊ณผ ํธ์์ฑ์ ์ง์์ ์ผ๋ก ๊ฐ์ ํด ๋๊ฐ ์์ ์ ๋๋ค.
- ์) ๊ฑฐ์ฃผ ์ง์ญ + ์ด๋ฅด์ ๋ค์ ๊ฒฝ๋ ฅ์ ๋ํด ์ถ์ฒ ๊ณต๊ณ ๋ฅผ ์ ๊ณตํด๋ณผ ์๊ฐ
- ๐ค ๋์งํธ ๋ฆฌํฐ๋ฌ์๊ฐ ๋ฎ์ ๊ณ ๋ น์ธต ์ฌ์ฉ์๋ฅผ ์ํด ์๋น์ค ์ด์ฉ ๊ฐ์ด๋ ์ ์ ๋ฐ ์ฒซ ์ฌ์ฉ์ ํํ ๋ฆฌ์ผ ๊ธฐ๋ฅ์ ๋์ ํ ๊ณํ์ ๋๋ค.
- ๐ ์๋น์ค ๋ชจ๋ํฐ๋ง ๋ฐ ๋ก๊น ์ฒด๊ณ๋ฅผ ๊ฐํํ์ฌ ์ ์ฌ์ ์ธ ๋ฌธ์ ๋ฅผ ์ฌ์ ์ ๊ฐ์งํ๊ณ ์ ์ํ๊ฒ ๋์ํ ์ ์๋๋ก ํ ์์ ์ ๋๋ค.
- ๐ ๋ฐฐ์น ์์ ์ ์ฑ๋ฅ์ ํฅ์์ํค๊ธฐ ์ํด ๋ฉํฐ ์ค๋ ๋ ํ๊ฒฝ์์์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์์ ์๊ฐํ๊ณ ์์ต๋๋ค.## ๐จ ํธ๋ฌ๋ธ์ํ ๊ฐ์ด๋
### N+1 ๋ฌธ์ ๋ฐ์
- ์ฆ์: ์ผ์๋ฆฌ ์์ธ ์ ๋ณด๋ฅผ ์กฐํํ ๋ ์ฐ๊ด๋ ์ํฐํฐ๋ค์ ์ฆ์ ๋ก๋ฉ(EAGER)ํ์ฌ ๋ถํ์ํ ์ฟผ๋ฆฌ๊ฐ ๋ค์ ๋ฐ์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ๊ฒฌ๋์์ต๋๋ค.
- ์์ธ: JPA์ ์ฆ์ ๋ก๋ฉ ์ ๋ต์ผ๋ก ์ธํด ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์กฐํํ ๋๋ง๋ค ์ถ๊ฐ ์ฟผ๋ฆฌ๊ฐ ์คํ๋์ด ์ฑ๋ฅ ์ ํ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
- ํด๊ฒฐ: ์ง์ฐ ๋ก๋ฉ(LAZY) ์ ๋ต์ผ๋ก ๋ณ๊ฒฝํ๊ณ , ํ์ํ ๊ฒฝ์ฐ์๋ง ๋ช ์์ ์ผ๋ก ํ์น ์กฐ์ธ(Fetch Join)์ ์ฌ์ฉํ์ฌ ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ํจ๊ป ์กฐํํ๋๋ก ์ต์ ํํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ถํ์ํ ์ฟผ๋ฆฌ ์คํ์ ๋ฐฉ์งํ๊ณ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์์ต๋๋ค.### ๋๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ OOM ๋ฐ์
- ์ฆ์: ์ผ์๋ฆฌ ๋งค์นญ ๋ฐฐ์น ์์ ์ ์ํํ ๋ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉํ์ฌ Out of Memory(OOM) ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
- ์์ธ: ๋ฐฐ์น ์์ ์์ ๋๋์ ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ค๊ณ ์๋ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ํ์์ด ๋ฐ์ํ์์ต๋๋ค.
- ํด๊ฒฐ: Spring Batch์ Chunk ๊ธฐ๋ฐ ์ฒ๋ฆฌ๋ฅผ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ ํ ํฌ๊ธฐ๋ก ๋ถํ ํ์ฌ ์ฒ๋ฆฌํ๋๋ก ๋ณ๊ฒฝํ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ต์ํํ๊ณ ์์ ์ ์ผ๋ก ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋์์ต๋๋ค.### ์นด์นด์คํก ์๋ฆผ API ํธ์ถ ์คํจ
- ์ฆ์: ์ผ์๋ฆฌ ๋งค์นญ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉ์์๊ฒ ์นด์นด์คํก์ผ๋ก ์๋ฆผ์ ๋ณด๋ผ ๋ ๊ฐํ์ ์ผ๋ก API ํธ์ถ์ด ์คํจํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์์ต๋๋ค.
- ์์ธ: ์นด์นด์คํก ์๋ฆผ API์ ์์ฒญ ์ ํ(rate limit)์ ์ด๊ณผํ์ฌ ์ผ์์ ์ผ๋ก ํธ์ถ์ด ๊ฑฐ๋ถ๋๋ ๊ฒ์ผ๋ก ํ์ ๋์์ต๋๋ค.
- ํด๊ฒฐ: ์์ฒญ ์ ํ์ ๊ณ ๋ คํ์ฌ ์๋ฆผ ๋ฐ์ก ๋ก์ง์ ์์ ํ์์ต๋๋ค. ์ผ์ ์๊ฐ ๊ฐ๊ฒฉ์ ๋๊ณ ์๋ฆผ์ ๋ฐ์กํ๋๋ก ์กฐ์ ํ๊ณ , ์คํจํ ํธ์ถ์ ์ฌ์๋ํ๋ ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐํ์์ต๋๋ค. ๋ํ, ์นด์นด์คํก ์๋ฆผ API์ ์ ์ฑ ์ ๋ฉด๋ฐํ ํ์ธํ๊ณ ์ค์ํ์ฌ ์์ ์ ์ธ ์๋ฆผ ๋ฐ์ก์ ์ ์งํ ์ ์์์ต๋๋ค.์ด๋ฌํ ํธ๋ฌ๋ธ์ํ ๊ฒฝํ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๊ณ , ์ฌ์ฉ์์๊ฒ ๋ ๋์ ์๋น์ค๋ฅผ ์ ๊ณตํ ์ ์์์ต๋๋ค. ์์ผ๋ก๋ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ๊ฐ์ ์ ํตํด ์๋น์ค ํ์ง์ ๋์ฌ๊ฐ ๊ณํ์ ๋๋ค.
## ์๋ฃ ์ค๋น
### ํ๋ก์ ํธ ์๊ฐ### ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉํ
### ์๋น์ค ๊ธฐ๋ฅ
### ์๋น์ค ํน์ฅ์
### ๋น์ฆ๋์ค ๋ชจ๋ธ