Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/hyunsoo730/aptdeal-insights

๐Ÿก ์„œ์šธ ์ง€์—ญ ๋ถ€๋™์‚ฐ ์ •๋ณด ํ•œ๋ˆˆ์— ๋ณด๊ธฐ
https://github.com/hyunsoo730/aptdeal-insights

jpa mybatis querydsl spring-batch spring-boot

Last synced: 4 days ago
JSON representation

๐Ÿก ์„œ์šธ ์ง€์—ญ ๋ถ€๋™์‚ฐ ์ •๋ณด ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

Awesome Lists containing this project

README

        

# HappyHouse ๐Ÿ 


์ง‘๊ตฌํ•˜๊ธฐ ํ”„๋กœ์ ํŠธ ์ด๋ฏธ์ง€

# HappyHouse ๐Ÿ  - ์„œ์šธ์‹œ ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ์ •๋ณด ์ œ๊ณต ์„œ๋น„์Šค
> **์„œ์šธ์‹œ์˜ ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋‹ค์–‘ํ•œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๋“ค์ด ํšจ๊ณผ์ ์œผ๋กœ ๋งค๋ฌผ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.**

## ๐Ÿ‘ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

HappyHouse๋Š” ์„œ์šธ์‹œ์˜ ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ํ•œ ๊ณณ์—์„œ ํ™•์ธํ•˜๊ณ  ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค. ์•„ํŒŒํŠธ ๋งค๋งค ์‹ค๊ฑฐ๋ž˜๊ฐ€, ์ „์›”์„ธ ์‹ค๊ฑฐ๋ž˜๊ฐ€, ์ฃผ๋ณ€ ํ•™๊ตฐ ์ •๋ณด, ์ฃผ๋ณ€ ๊ตํ†ต ์ •๋ณด, ํ†ต๊ณ„ ์ฐจํŠธ ๋“ฑ ๋‹ค์–‘ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๋“ค์ด ํšจ์œจ์ ์œผ๋กœ ๋งค๋ฌผ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๋น„๊ตํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์ •๋ณด ๊ตํ™˜์„ ์œ„ํ•œ ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆํ‹ฐ์™€ AI ์ฑ—๋ด‡ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋ณด๋‹ค ํŽธ๋ฆฌํ•œ ๋งค๋ฌผ ํƒ์ƒ‰ ๊ฒฝํ—˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋™์‚ฐ ๋งค๋ฌผ ๊ฒ€์ƒ‰์€ ๋ณต์žกํ•˜๊ณ  ์‹œ๊ฐ„ ์†Œ๋ชจ์ ์ธ ์ž‘์—…์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋น„๊ตํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HappyHouse๋Š” ์ด๋Ÿฌํ•œ ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ณ ์ž ์„œ์šธ์‹œ์˜ ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์›ํ•˜๋Š” ์กฐ๊ฑด์„ ์ž…๋ ฅํ•˜์—ฌ ๋งค๋ฌผ์„ ๊ฒ€์ƒ‰ํ•˜๊ณ , ๊ด€์‹ฌ ์žˆ๋Š” ๋งค๋ฌผ์„ ๋น„๊ตํ•˜๋ฉฐ, ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค๊ณผ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

HappyHouse๋Š” ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ ์ธํ„ฐํŽ˜์ด์Šค์™€ ์ง๊ด€์ ์ธ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ๊ฒ€์ƒ‰ ๊ณผ์ •์„ ๊ฐ„์†Œํ™”ํ•˜๊ณ  ์ตœ์ ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ AI ์ฑ—๋ด‡์„ ํ™œ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ์ฆ‰๊ฐ์ ์œผ๋กœ ์‘๋‹ตํ•˜๊ณ  ๋งž์ถคํ˜• ์ถ”์ฒœ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ๋ณด๋‹ค ํŽธ๋ฆฌํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งค๋ฌผ์„ ํƒ์ƒ‰ํ•˜๊ณ  ์˜์‚ฌ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ๊ฒ€์ƒ‰์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์„ ์ค„์ด๊ณ , ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๋งŒ์กฑ๋„๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์ด ์ €ํฌ ํ”„๋กœ์ ํŠธ HappyHouse์˜ ๊ถ๊ทน์ ์ธ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ๊ธฐ๋Šฅ ๋ฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ๊ณ„์†ํ•ด์„œ ํ•ด ๋‚˜๊ฐˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

## ๐Ÿ† ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์–ป์€ ์ 

๐ŸŒŸ **Querydsl ํ™œ์šฉ ์—ญ๋Ÿ‰ ๊ฐ•ํ™”**
- ๊ธฐ์กด์—๋Š” `JPA`์˜ ์ธํ„ฐํŽ˜์ด์Šค์— Querydsl์„ ํ•จ๊ป˜ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ(`Impl` ํ˜•ํƒœ๋กœ Querydsl ์‚ฌ์šฉ), ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” `@Repository` ์–ด๋…ธํ…Œ์ด์…˜๋งŒ์œผ๋กœ ํŠน์ • DB์— ์ ‘๊ทผํ•˜๋„๋ก Querydsl์„ ๋…๋ฆฝ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ข€ ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์ธ ์ฟผ๋ฆฌ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
- Querydsl์˜ `JPAQueryFactory`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ์ฟผ๋ฆฌ ์ƒ์„ฑ, ๋ณต์žกํ•œ ์กฐ๊ฑด ์ฒ˜๋ฆฌ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ `BooleanBuilder`๋ฅผ ํ™œ์šฉํ•˜์—ฌ null-safeํ•œ ๋™์  ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์กŒ๊ณ , `where()`์— ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ **Vue.js๋ฅผ ํ™œ์šฉํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๊ฒฝํ—˜**
- ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ์—์„œ ์ฒ˜์Œ์œผ๋กœ ํ”„๋ก ํŠธ์—”๋“œ๋ฅผ ๋งก์•„ Vue.js๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ, Vue.js์˜ ์žฅ์ ๊ณผ ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ ๋ฐฉ์‹์— ๋Œ€ํ•ด ์•Œ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
- Vue.js์˜ ๋ฐ˜์‘ํ˜• ์‹œ์Šคํ…œ, ๋‹จ๋ฐฉํ–ฅ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ, ์ปดํฌ๋„ŒํŠธ ์žฌ์‚ฌ์šฉ์„ฑ ๋“ฑ์„ ํ™œ์šฉํ•˜์—ฌ ํšจ์œจ์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜์„ฑ ๋†’์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ—๏ธ **ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ๋ฆฌ๋”ฉ ๊ฒฝํ—˜**
- ํ”„๋กœ์ ํŠธ์˜ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์„ ๋ฆฌ๋“œํ•˜๋ฉด์„œ ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์ ์ธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„๋ฅผ ์ฃผ๋„์ ์œผ๋กœ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ชจ๋“ˆํ™”, ๊ณ„์ธตํ™” ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•˜์—ฌ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ฃผ๋ ฅํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- RESTful API ์„ค๊ณ„, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ชจ๋ธ๋ง, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„ ๋“ฑ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์„ ๋‹ด๋‹นํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ ํŒ€์„ ์ด๋„๋Š” ๊ฒฝํ—˜์„ ์Œ“์„ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”„ **๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฐ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์ž๋™ํ™”**
- Spring Batch๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€๋Ÿ‰์˜ ๋งค๋ฌผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐฐ์น˜ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ๋ฐฐ์น˜ ์ž‘์—…์˜ ์Šค์ผ€์ค„๋ง, ์žฅ์•  ๋Œ€์‘, ๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ์„ ๊ฒฝํ—˜ํ•˜๋ฉด์„œ ์•ˆ์ •์ ์ธ ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”์™€ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์—ญ๋Ÿ‰์„ ๊ธฐ๋ฅผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿค **ํ˜‘์—… ๋ฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋Šฅ๋ ฅ ํ–ฅ์ƒ**
- ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ํŒ€์›๋“ค๊ณผ์˜ ํšจ๊ณผ์ ์ธ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜, ์—…๋ฌด ๋ถ„๋‹ด, ์ผ์ • ๊ด€๋ฆฌ ๋“ฑ ํ˜‘์—… ๋Šฅ๋ ฅ์„ ํ•œ์ธต ๋” ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
- ์ •๊ธฐ์ ์ธ ํšŒ์˜, ์ฝ”๋“œ ๋ฆฌ๋ทฐ, ๋ฌธ์„œํ™” ๋“ฑ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ์˜ ์ง„ํ–‰ ์ƒํ™ฉ์„ ๊ณต์œ ํ•˜๊ณ  ํ•จ๊ป˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด๋‚˜๊ฐ€๋Š” ๊ฒฝํ—˜์„ ์Œ“์•˜์Šต๋‹ˆ๋‹ค.

์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด Querydsl ํ™œ์šฉ, Vue.js ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ, ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ๋ฆฌ๋”ฉ, ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™” ๋ฐ ๋ฐฐ์น˜ ์ฒ˜๋ฆฌ ์ž๋™ํ™”, ํ˜‘์—… ๋ฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋Šฅ๋ ฅ ๋“ฑ ๋‹ค์–‘ํ•œ ์ธก๋ฉด์—์„œ ์—ญ๋Ÿ‰์„ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๋”์šฑ ์„ฑ์žฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

## ๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ
### Environment
![Java](https://img.shields.io/badge/Java-007396?style=for-the-badge&logo=java&logoColor=white)
![Spring Boot](https://img.shields.io/badge/Spring%20Boot-6DB33F?style=for-the-badge&logo=springboot&logoColor=white)
![MySQL](https://img.shields.io/badge/MySQL-4479A1?style=for-the-badge&logo=mysql&logoColor=white)
![Vue.js](https://img.shields.io/badge/Vue.js-4FC08D?style=for-the-badge&logo=vuedotjs&logoColor=white)

### Config
![npm](https://img.shields.io/badge/npm-CB3837?style=for-the-badge&logo=npm&logoColor=white)
![Gradle](https://img.shields.io/badge/Gradle-02303A?style=for-the-badge&logo=gradle&logoColor=white)

### Development
![Spring Data JPA](https://img.shields.io/badge/Spring%20Data%20JPA-6DB33F?style=for-the-badge&logo=spring&logoColor=white)
![QueryDSL](https://img.shields.io/badge/QueryDSL-3399FF?style=for-the-badge&logo=QueryDSL&logoColor=white)
![MyBatis](https://img.shields.io/badge/MyBatis-000000?style=for-the-badge&logo=mybatis&logoColor=white)
![Spring Batch](https://img.shields.io/badge/Spring%20Batch-6DB33F?style=for-the-badge&logo=spring&logoColor=white)
![Chart.js](https://img.shields.io/badge/Chart.js-FF6384?style=for-the-badge&logo=chartdotjs&logoColor=white)
![Tailwind CSS](https://img.shields.io/badge/Tailwind%20CSS-06B6D4?style=for-the-badge&logo=tailwindcss&logoColor=white)

### Database
![AWS RDS](https://img.shields.io/badge/AWS%20RDS-527FFF?style=for-the-badge&logo=amazonrds&logoColor=white)

### DevOps
![AWS EC2](https://img.shields.io/badge/AWS%20EC2-232F3E?style=for-the-badge&logo=amazonec2&logoColor=white)

### Communication
![Notion](https://img.shields.io/badge/Notion-000000?style=for-the-badge&logo=notion&logoColor=white)
![Mattermost](https://img.shields.io/badge/Mattermost-0058CC?style=for-the-badge&logo=mattermost&logoColor=white)

## ๐Ÿ‘ฅ ํŒ€ ์†Œ๊ฐœ
### ํŒ€ ๊ตฌ์„ฑ
| ์กฐํ˜„์ˆ˜ | ๊ณ ํ•œ๊ฐ• |
| :------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------: |
| | |
| [@hyunsoo](https://github.com/HyunSoo730) | [@hangang](https://github.com/hangang) |
| ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ฆฌ๋“œ & ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ | ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๋ฆฌ๋“œ & ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ |

## ๐Ÿ™‹โ€โ™‚๏ธ ํŒ€์›๋ณ„ ์—ญํ•  ๋ฐ ๊ธฐ์—ฌ๋„
| ์ด๋ฆ„ | ์—ญํ•  ๋ฐ ๊ธฐ์—ฌ๋„ |
|------|--------------|
| ๐Ÿ’ช ์กฐํ˜„์ˆ˜ | - ๐Ÿš€ **๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ๋ฆฌ๋“œ**๋กœ์„œ ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ ๋ฐ ๊ฐœ๋ฐœ ์ด๊ด„
- ๐ŸŽจ **Spring Boot**๋ฅผ ํ™œ์šฉํ•œ **RESTful API ๊ตฌํ˜„ ๋ฐ ๋ฌธ์„œํ™”**
- โš™๏ธ **Spring Batch**๋ฅผ ํ™œ์šฉํ•œ **๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„ ๋ฐฐ์น˜ ์ž‘์—… ๊ตฌํ˜„**
- ๐Ÿ’พ **๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ฑ๋Šฅ ์ตœ์ ํ™”** ๋ฐ **์ธ๋ฑ์‹ฑ ์ž‘์—… ์ˆ˜ํ–‰**
- ๐ŸŒ **๋ฐฐํฌ ๋ฐ ์šด์˜ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ๊ด€๋ฆฌ**
- ๐ŸŽจ **Vue.js**๋ฅผ ํ™œ์šฉํ•œ **ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ** ๋ฐ **UI/UX ๋””์ž์ธ ์ฐธ์—ฌ**
- ๐Ÿค **ํŒ€ ๋‚ด ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋ฐ ํ˜‘์—… ์ฃผ๋„**ํ•˜๋ฉฐ **ํ”„๋กœ์ ํŠธ ์ผ์ • ๊ด€๋ฆฌ**|
| ๐Ÿ’ช ๊ณ ํ•œ๊ฐ• | - ๐ŸŽจ **Vue.js**๋ฅผ ํ™œ์šฉํ•œ **ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ๋ฆฌ๋“œ** ๋ฐ **UI/UX ๋””์ž์ธ ์ด๊ด„**
- ๐Ÿ“Š **Chart.js**๋ฅผ ํ™œ์šฉํ•œ **๋ฐ์ดํ„ฐ ์‹œ๊ฐํ™” ๋ฐ ํ†ต๊ณ„ ์ฐจํŠธ ๊ตฌํ˜„**
- ๐ŸŒฟ **Tailwind CSS**๋ฅผ ํ™œ์šฉํ•œ **๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๋ฐ ์Šคํƒ€์ผ๋ง**
- ๐Ÿค– **AI ์ฑ—๋ด‡ ์„œ๋น„์Šค ์—ฐ๋™** ๋ฐ **์‚ฌ์šฉ์ž ์ƒํ˜ธ์ž‘์šฉ ๊ฐœ๋ฐœ**
- ๐Ÿงช **ํ”„๋ก ํŠธ์—”๋“œ ํ…Œ์ŠคํŠธ ๋ฐ ์„ฑ๋Šฅ ์ตœ์ ํ™” ์ž‘์—… ์ˆ˜ํ–‰**
- ๐Ÿš€ **Spring Boot**๋ฅผ ํ™œ์šฉํ•œ **๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ ์ฐธ์—ฌ** ๋ฐ **RESTful API ๊ตฌํ˜„**
- ๐Ÿ“ **ํ”„๋กœ์ ํŠธ ๋ฌธ์„œํ™”** ๋ฐ **์‚ฌ์šฉ์ž ๊ฐ€์ด๋“œ ์ž‘์„ฑ ๋‹ด๋‹น**|

## ๐Ÿ“Š ERD (Entity-Relationship Diagram)
![ERD](https://i.postimg.cc/sghZhbVD/ERD.png)

ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์œ„์™€ ๊ฐ™์€ ERD๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

- `apt_rent_sale` ํ…Œ์ด๋ธ”: ์•„ํŒŒํŠธ ์ „์›”์„ธ ๋ฐ ๋งค๋งค ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์•„ํŒŒํŠธ ์ด๋ฆ„, ์ฃผ์†Œ, ๊ฑฐ๋ž˜ ์œ ํ˜•(์ „์„ธ/์›”์„ธ/๋งค๋งค), ๊ฐ€๊ฒฉ, ๋ฉด์  ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
- `agent_review` ํ…Œ์ด๋ธ”: ๊ณต์ธ์ค‘๊ฐœ์‚ฌ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๋ฆฌ๋ทฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ ๋‚ด์šฉ, ํ‰์ , ์ž‘์„ฑ์ž, ์ž‘์„ฑ์ผ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
- `area` ํ…Œ์ด๋ธ”: ์ง€์—ญ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์ง€์—ญ ์ด๋ฆ„, ๊ตฌ, ๋™ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
- `apt_review` ํ…Œ์ด๋ธ”: ์•„ํŒŒํŠธ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๋ฆฌ๋ทฐ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ ๋‚ด์šฉ, ํ‰์ , ์ž‘์„ฑ์ž, ์ž‘์„ฑ์ผ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
- `like_area` ํ…Œ์ด๋ธ”: ์‚ฌ์šฉ์ž๊ฐ€ ๊ด€์‹ฌ ์žˆ๋Š” ์ง€์—ญ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ID์™€ ์ง€์—ญ ID๋ฅผ ๋งคํ•‘ํ•˜์—ฌ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
- `subway_station` ํ…Œ์ด๋ธ”: ์ง€ํ•˜์ฒ  ์—ญ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์—ญ ์ด๋ฆ„, ํ˜ธ์„ , ์œ„์น˜ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
- `dongcode` ํ…Œ์ด๋ธ”: ํ–‰์ •๋™ ์ฝ”๋“œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ๋™ ์ด๋ฆ„, ์ฝ”๋“œ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
- `chat_rooms` ํ…Œ์ด๋ธ”: ์ฑ„ํŒ…๋ฐฉ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์ฑ„ํŒ…๋ฐฉ ์ด๋ฆ„, ์ƒ์„ฑ์ž, ์ƒ์„ฑ์ผ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
- `apt_deal_info` ํ…Œ์ด๋ธ”: ์•„ํŒŒํŠธ ๊ฑฐ๋ž˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์•„ํŒŒํŠธ ID, ๊ฑฐ๋ž˜ ์ผ์ž, ๊ฑฐ๋ž˜ ๊ธˆ์•ก ๋“ฑ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
- `apt_hsd_info` ํ…Œ์ด๋ธ”: ์•„ํŒŒํŠธ ์„ธ๋Œ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ํ…Œ์ด๋ธ”์ž…๋‹ˆ๋‹ค. ์„ธ๋Œ€ ์ˆ˜, ๋‚œ๋ฐฉ ๋ฐฉ์‹, ๊ฑด์ถ• ์—ฐ๋„ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ERD์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ์•„ํŒŒํŠธ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์‚ฌ์šฉ์ž ๋ฆฌ๋ทฐ, ๊ด€์‹ฌ ์ง€์—ญ, ์ง€ํ•˜์ฒ  ์—ญ, ํ–‰์ •๋™ ๋“ฑ ๋‹ค์–‘ํ•œ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ํ…Œ์ด๋ธ”๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์•„ํŒŒํŠธ ๋งค๋ฌผ ๊ฒ€์ƒ‰, ์‚ฌ์šฉ์ž ๋ฆฌ๋ทฐ ๊ด€๋ฆฌ, ๊ด€์‹ฌ ์ง€์—ญ ์„ค์ •, ์ฃผ๋ณ€ ์ •๋ณด ์ œ๊ณต ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํšจ๊ณผ์ ์œผ๋กœ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ `apt_deal_info`์™€ `apt_hsd_info` ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ์•„ํŒŒํŠธ ๊ฑฐ๋ž˜ ์ •๋ณด์™€ ์„ธ๋Œ€ ์ •๋ณด๋ฅผ ๋ณ„๋„๋กœ ๊ด€๋ฆฌํ•จ์œผ๋กœ์จ ์ƒ์„ธํ•œ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## โ˜„๏ธ ์ฃผ์š” ๊ธฐ๋Šฅ

### ๋งค๋ฌผ ์ •๋ณด ๊ฒ€์ƒ‰
- ์ง€์—ญ๊ตฌ๋ณ„, ์•„ํŒŒํŠธ๋ณ„๋กœ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋งค๋งค ์‹ค๊ฑฐ๋ž˜๊ฐ€, ์ „์›”์„ธ ์‹ค๊ฑฐ๋ž˜๊ฐ€ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๊ด€์‹ฌ ์žˆ๋Š” ๋งค๋ฌผ์„ ์ฐœํ•˜๊ณ  ๋น„๊ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ํ•™๊ตฐ ๋ฐ ๊ตํ†ต ์ •๋ณด ์ œ๊ณต
- ์„ ํƒํ•œ ์•„ํŒŒํŠธ ์ฃผ๋ณ€์˜ ์ดˆ๋“ฑํ•™๊ต, ์ค‘ํ•™๊ต, ๊ณ ๋“ฑํ•™๊ต ํ•™๊ตฐ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
- ํ•˜๋ฒ„์‚ฌ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ ํ•ด๋‹น ์•„ํŒŒํŠธ๋กœ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ง€ํ•˜์ฒ ์—ญ 4๊ณณ์„ ์กฐํšŒํ•˜๊ณ , ๊ฐ ์—ญ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

### ํ†ต๊ณ„ ์ฐจํŠธ ์ œ๊ณต
- ์ง€์—ญ๊ตฌ๋ณ„, ์•„ํŒŒํŠธ๋ณ„ ๋งค๋ฌผ ๊ฐ€๊ฒฉ ์ถ”์ด๋ฅผ ์ฐจํŠธ๋กœ ์‹œ๊ฐํ™”ํ•˜์—ฌ ํ•œ๋ˆˆ์— ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋งค๋ฌผ์˜ ํ‰์ˆ˜๋ณ„ ๊ฐ€๊ฒฉ ๋น„๊ต ์ฐจํŠธ๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์˜ˆ์‚ฐ์— ๋งž๋Š” ์ ์ ˆํ•œ ํ‰์ˆ˜๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.
- ํ•ด๋‹น ์ง€์—ญ์˜ ํ‰๊ท  ๋งค๋งค๊ฐ€, ์ „์„ธ๊ฐ€ ๋“ฑ์„ ์ฐจํŠธ๋กœ ์ œ๊ณตํ•˜์—ฌ ์‹œ์„ธ ํŒŒ์•…์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

### ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ AI ์ฑ—๋ด‡
- ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์ •๋ณด ๊ตํ™˜์„ ์œ„ํ•œ ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
- ํ•ด๋‹น ์•„ํŒŒํŠธ๋‚˜ ์ง€์—ญ์— ๋Œ€ํ•œ ์ƒ์ƒํ•œ ํ›„๊ธฐ์™€ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- AI ์ฑ—๋ด‡์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์˜ ์งˆ๋ฌธ์— ์ฆ‰๊ฐ์ ์œผ๋กœ ๋‹ต๋ณ€ํ•˜๊ณ , ๋งž์ถคํ˜• ๋งค๋ฌผ ์ถ”์ฒœ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

### ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ… ๊ธฐ๋Šฅ
- ๊ด€์‹ฌ ๋งค๋ฌผ์— ๋Œ€ํ•ด ๊ณต์ธ์ค‘๊ฐœ์‚ฌ์™€ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋งค๋ฌผ ๊ด€๋ จ ๋ฌธ์˜์‚ฌํ•ญ์ด๋‚˜ ์ถ”๊ฐ€ ์ •๋ณด ์š”์ฒญ ๋“ฑ์„ ์ฑ„ํŒ…์„ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

### ๋งค๋ฌผ ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌ
- ๊ณต์ธ์ค‘๊ฐœ์‚ฌ๋Š” ๊ฐ„ํŽธํ•˜๊ฒŒ ๋งค๋ฌผ์„ ๋“ฑ๋กํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
- ๋“ฑ๋ก๋œ ๋งค๋ฌผ์˜ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๊ฑฐ๋ž˜ ์™„๋ฃŒ๋œ ๋งค๋ฌผ์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

## ๐Ÿ“บ ํ™”๋ฉด ๊ตฌ์„ฑ

| ๋ฉ”์ธ ํŽ˜์ด์ง€ | ๋งค๋ฌผ ๊ฒ€์ƒ‰ ํ™”๋ฉด |
| :-------------------------------------------: | :-------------------------------------------: |
| ๋ฉ”์ธ ํŽ˜์ด์ง€ | ๋งค๋ฌผ ๊ฒ€์ƒ‰ ํ™”๋ฉด |
| ๋ฉ”์ธ ํŽ˜์ด์ง€์—์„œ๋Š” ์„œ๋น„์Šค์˜ ์ฃผ์š” ๊ธฐ๋Šฅ๊ณผ ์ตœ์‹  ๋งค๋ฌผ ์ •๋ณด๋ฅผ ํ•œ๋ˆˆ์— ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋ฌผ ๊ฒ€์ƒ‰, ์ปค๋ฎค๋‹ˆํ‹ฐ, ๊ด€์‹ฌ ์ง€์—ญ ์„ค์ • ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ๋ฐ”๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” UI๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. | ๋งค๋ฌผ ๊ฒ€์ƒ‰ ํ™”๋ฉด์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์—ฌ ์›ํ•˜๋Š” ๋งค๋ฌผ์„ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ง€์—ญ, ๋งค๋งค/์ „์›”์„ธ, ๊ฐ€๊ฒฉ, ๋ฉด์  ๋“ฑ์˜ ์กฐ๊ฑด์„ ์ž…๋ ฅํ•˜๊ณ  ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |

| ๋งค๋ฌผ ์ƒ์„ธ ์ •๋ณด | ๋งค๋ฌผ ๋“ฑ๋ก |
| :-------------------------------------------: | :-------------------------------------------: |
| ๋งค๋ฌผ ์ƒ์„ธ ์ •๋ณด | ๋งค๋ฌผ ๋“ฑ๋ก |
| ๋งค๋ฌผ ์ƒ์„ธ ์ •๋ณด ํ™”๋ฉด์—์„œ๋Š” ์„ ํƒํ•œ ๋งค๋ฌผ์˜ ์ƒ์„ธํ•œ ์ •๋ณด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋ฌผ์˜ ์‚ฌ์ง„, ๊ฐ€๊ฒฉ, ๋ฉด์ , ์œ„์น˜, ์˜ต์…˜ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ, ํ•ด๋‹น ๋งค๋ฌผ์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ๋ฆฌ๋ทฐ์™€ ์งˆ๋ฌธ/๋‹ต๋ณ€์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. | ๋งค๋ฌผ ๋“ฑ๋ก ํ™”๋ฉด์—์„œ๋Š” ๊ณต์ธ์ค‘๊ฐœ์‚ฌ๊ฐ€ ์ƒˆ๋กœ์šด ๋งค๋ฌผ์„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๋ฌผ์˜ ๊ธฐ๋ณธ ์ •๋ณด, ์‚ฌ์ง„, ์ƒ์„ธ ์„ค๋ช… ๋“ฑ์„ ์ž…๋ ฅํ•˜๊ณ  ๋งค๋ฌผ์„ ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |

| ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ AI ์ฑ—๋ด‡ | ์ฑ„ํŒ…๋ฐฉ ํ™”๋ฉด |
| :-------------------------------------------: | :-------------------------------------------: |
| ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ AI ์ฑ—๋ด‡ | ์ฑ„ํŒ…๋ฐฉ ํ™”๋ฉด |
| ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ AI ์ฑ—๋ด‡ ํ™”๋ฉด์—์„œ๋Š” ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์ •๋ณด ๊ณต์œ ์™€ ์†Œํ†ต์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ๋งค๋ฌผ ๊ด€๋ จ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€, ์ง€์—ญ ์ •๋ณด ๋“ฑ์„ ๊ฒŒ์‹œํŒ ํ˜•ํƒœ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ AI ์ฑ—๋ด‡์„ ํ†ตํ•ด ๋ถ€๋™์‚ฐ ๊ด€๋ จ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ž๋™ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. | ์ฑ„ํŒ…๋ฐฉ ํ™”๋ฉด์—์„œ๋Š” ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งค๋ฌผ ๋ฌธ์˜, ๊ฑฐ๋ž˜ ์กฐ๊ฑด ํ˜‘์˜ ๋“ฑ ๊ฐœ์ธ ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. |

| ๋งˆ์ด ํŽ˜์ด์ง€ |
| :-------------------------------------------: |
| ๋งˆ์ด ํŽ˜์ด์ง€ |
| ๋งˆ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ ์ •๋ณด ๊ด€๋ฆฌ, ๊ด€์‹ฌ ๋งค๋ฌผ ๋ชฉ๋ก, ๋ฌธ์˜ ๋‚ด์—ญ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๊ด€์‹ฌ ๋งค๋ฌผ์„ ์ถ”๊ฐ€/์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž์‹ ์ด ์ž‘์„ฑํ•œ ๋ฌธ์˜ ๋‚ด์—ญ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. |

## ๐Ÿ›๏ธ ์•„ํ‚คํ…์ฒ˜
### ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

```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
```

## ๐ŸŽ‰ ํ”„๋กœ์ ํŠธ ๊ฒฐ๊ณผ ๋ฐ ์„ฑ๊ณผ
- ๐Ÿ˜๏ธ ์„œ์šธ์‹œ์˜ ๋ฐฉ๋Œ€ํ•œ ๋ถ€๋™์‚ฐ ๋งค๋ฌผ ์ •๋ณด๋ฅผ ํ•œ ๊ณณ์—์„œ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๋“ค์˜ ๋งค๋ฌผ ๊ฒ€์ƒ‰ ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ๐Ÿ“Š ํ†ต๊ณ„ ์ฐจํŠธ์™€ ๋น„๊ต ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค์ด ํšจ๊ณผ์ ์œผ๋กœ ๋งค๋ฌผ์„ ๋ถ„์„ํ•˜๊ณ  ์˜์‚ฌ ๊ฒฐ์ •์„ ๋‚ด๋ฆด ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ๐ŸŽ“ ์ฃผ๋ณ€ ํ•™๊ตฐ ๋ฐ ๊ตํ†ต ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๋“ค์ด ๋งค๋ฌผ ์„ ํƒ ์‹œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์š”์†Œ๋ฅผ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ๐Ÿ’ฌ ์‹ค์‹œ๊ฐ„ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์ •๋ณด ๊ณต์œ ์™€ ์†Œํ†ต์„ ํ™œ์„ฑํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ๐Ÿค– AI ์ฑ—๋ด‡์„ ๋„์ž…ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋“ค์˜ ์งˆ๋ฌธ์— ์ฆ‰๊ฐ์ ์œผ๋กœ ์‘๋‹ตํ•˜๊ณ  ๋งž์ถคํ˜• ์ถ”์ฒœ์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.
- โฐ Spring Batch๋ฅผ ํ™œ์šฉํ•ด ๋Œ€๋Ÿ‰์˜ ๋งค๋ฌผ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐฐ์น˜ ์ž‘์—…์„ ์ž๋™ํ™”ํ•˜์—ฌ(๋ฐฐ์น˜ ํ”„๋กœ์„ธ์‹ฑ ์ž๋™ํ™” ๊ตฌ์ถ•) ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
- ๐Ÿ—„๏ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ๊ณผ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ๐ŸŒ AWS EC2๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์—์„œ ์„œ๋น„์Šค๋ฅผ ๋ฐฐํฌํ•˜๊ณ  ์šด์˜ํ•จ์œผ๋กœ์จ ํ™•์žฅ์„ฑ๊ณผ ๊ฐ€์šฉ์„ฑ์„ ํ™•๋ณดํ•˜์˜€์Šต๋‹ˆ๋‹ค.

## ๐Ÿ”ง ๊ฐœ์„  ์‚ฌํ•ญ ๋ฐ ์ถ”ํ›„ ๊ณ„ํš
- ๐Ÿ™Œ ์‚ฌ์šฉ์ž๋“ค์˜ ํ”ผ๋“œ๋ฐฑ์„ ์ ๊ทน ์ˆ˜๋ ดํ•˜์—ฌ ์„œ๋น„์Šค ์‚ฌ์šฉ์„ฑ๊ณผ ํŽธ์˜์„ฑ์„ ์ง€์†์ ์œผ๋กœ ๊ฐœ์„ ํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
- ์˜ˆ) ๋งค๋ฌผ ํ•„ํ„ฐ๋ง ์˜ต์…˜ ๋‹ค์–‘ํ™”, ์‚ฌ์šฉ์ž ๋งž์ถคํ˜• ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณ ๋„ํ™”(์ปจํ…์ธ  ๊ธฐ๋ฐ˜ ์ถ”์ฒœ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ƒ๊ฐ ์ค‘) ๋“ฑ
- ๐Ÿ” ๋” ๋งŽ์€ ์ง€์—ญ์œผ๋กœ ์„œ๋น„์Šค ํ™•๋Œ€๋ฅผ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ์šธ์‹œ ์™ธ ์ˆ˜๋„๊ถŒ ๋ฐ ์ฃผ์š” ๋„์‹œ๋กœ ๋งค๋ฌผ ์ •๋ณด ์ œ๊ณต ๋ฒ”์œ„๋ฅผ ๋„“ํž ๊ณ„ํš์ž…๋‹ˆ๋‹ค.
- ๐Ÿ“ˆ ์„œ๋น„์Šค ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐ ๋กœ๊น… ์ฒด๊ณ„๋ฅผ ๊ฐ•ํ™”ํ•˜์—ฌ ์‚ฌ์šฉ์ž ํ–‰๋™ ๋ถ„์„๊ณผ ์„œ๋น„์Šค ๊ฐœ์„ ์— ํ™œ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
- ๐Ÿš€ ์ฆ๊ฐ€ํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ๊ณผ ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ์— ๋Œ€์‘ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜ ์ตœ์ ํ™”์™€ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ์— ์ฃผ๋ ฅํ•  ๊ณ„ํš์ž…๋‹ˆ๋‹ค.

## ๐Ÿšจ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…
### ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์‹œ ์„ฑ๋Šฅ ์ €ํ•˜
- ์ฆ์ƒ: ๋งค๋ฌผ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐ ๋ถ„์„ ๋ฐฐ์น˜ ์ž‘์—… ์ˆ˜ํ–‰ ์‹œ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋กœ ์ธํ•ด ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ์›์ธ: ๋ฐ์ดํ„ฐ ๋ณผ๋ฅจ ์ฆ๊ฐ€์— ๋”ฐ๋ฅธ ๋ฐฐ์น˜ ์ž‘์—… ์ฒ˜๋ฆฌ ์‹œ๊ฐ„ ์ฆ๊ฐ€์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ์ฃผ๋œ ์›์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๊ฒฐ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์‹ฑ๊ณผ ์ฟผ๋ฆฌ ์ตœ์ ํ™”๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์กฐํšŒ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ฐฐ์น˜ ์ž‘์—…์˜ ์ฒญํฌ ์‚ฌ์ด์ฆˆ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.

### ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜
- ์ฆ์ƒ: ๋งค๋ฌผ ๊ฒ€์ƒ‰ ์‹œ ๋ณต์žกํ•œ ์กฐ๊ฑด์„ ํฌํ•จํ•œ ์ฟผ๋ฆฌ๋กœ ์ธํ•ด ์‘๋‹ต ์†๋„๊ฐ€ ์ €ํ•˜๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค. ํŠน์ • ๊ฒ€์ƒ‰ ์กฐ๊ฑด์—์„œ ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด 1์ดˆ ์ด์ƒ ์†Œ์š”๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ด€์ธก๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
- ์›์ธ: ๋ณต์žกํ•œ ์กฐ์ธ๊ณผ ํ•„ํ„ฐ ์กฐ๊ฑด, ์ธ๋ฑ์Šค ๋ฏธ์‚ฌ์šฉ ๋“ฑ์œผ๋กœ ์ธํ•ด ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ณ„ํš์ด ๋น„ํšจ์œจ์ ์œผ๋กœ ์ˆ˜๋ฆฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
- ํ•ด๊ฒฐ: ์ฟผ๋ฆฌ ๋ถ„์„์„ ํ†ตํ•ด ๋ณ‘๋ชฉ ์ง€์ ์„ ์‹๋ณ„ํ•˜๊ณ , ์ธ๋ฑ์Šค ์ƒ์„ฑ ๋ฐ ์ฟผ๋ฆฌ ์กฐ๊ฑด ์ตœ์ ํ™”๋ฅผ ์ง„ํ–‰ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ์กฐ์ธ์„ ์ œ๊ฑฐํ•˜๊ณ , ํ•„ํ„ฐ ์กฐ๊ฑด์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ์ฟผ๋ฆฌ ์‹คํ–‰ ์†๋„๋ฅผ ๊ฐœ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ํ‰๊ท  ์ฟผ๋ฆฌ ์‹คํ–‰ ์‹œ๊ฐ„์ด 140ms์—์„œ 52ms๋กœ ์•ฝ 63% ๊ฐ์†Œํ•˜์˜€์Šต๋‹ˆ๋‹ค.

### JPA N+1 ๋ฌธ์ œ๋กœ ์ธํ•œ ์„ฑ๋Šฅ ์ €ํ•˜
- ์ฆ์ƒ: ๋งค๋ฌผ ์ƒ์„ธ ์ •๋ณด ์กฐํšŒ ์‹œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ์ฟผ๋ฆฌ ์‹คํ–‰ ํšŸ์ˆ˜๊ฐ€ ๊ณผ๋„ํ•˜๊ฒŒ ์ฆ๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ์›์ธ: JPA์˜ ์ง€์—ฐ ๋กœ๋”ฉ(Lazy Loading) ์ „๋žต์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ๋กœ๋”ฉํ•˜๋Š” ๊ณผ์ •์—์„œ N+1 ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
- ํ•ด๊ฒฐ: ํŽ˜์น˜ ์กฐ์ธ(Fetch Join)์„ ํ™œ์šฉํ•˜์—ฌ ์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ•œ ๋ฒˆ์— ๋กœ๋”ฉํ•˜๋„๋ก ์ตœ์ ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค. JPQL ์ฟผ๋ฆฌ์— ํŽ˜์น˜ ์กฐ์ธ์„ ๋ช…์‹œํ•˜์—ฌ ํ•„์š”ํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฆ‰์‹œ ๋กœ๋”ฉํ•˜๋„๋ก ์กฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ ๋Œ€ํญ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

## ๐Ÿ–ฅ๏ธ ํ”„๋กœ์ ํŠธ ์‹œ์—ฐ ์˜์ƒ
### ์•„๋ž˜ ์‚ฌ์ง„ ํด๋ฆญ


ํ”„๋กœ์ ํŠธ ์‹œ์—ฐ ์˜์ƒ

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋‹ค์–‘ํ•œ ๊ธฐ์ˆ ์  ์ฑŒ๋ฆฐ์ง€๋ฅผ ๊ฒฝํ—˜ํ–ˆ์ง€๋งŒ, ํŒ€์›๋“ค๊ณผ์˜ ํ˜‘์—…๊ณผ ๋…ธ๋ ฅ ๋ฐ ๋ˆ๊ธฐ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์„ฑ๊ณต์ ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์™„์ˆ˜ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ํ˜‘์—…์˜ ์ค‘์š”์„ฑ๊ณผ ๋ฌธ์ œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์ƒˆ๋กœ์šด ์ ‘๊ทผ๋ฒ•์„ ๋ฐฐ์› ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ œ๊ฐ€ ๊ฐ€์ง„ ๊ฐœ๋ฐœ ์—ญ๋Ÿ‰์„ ํ•œ์ธต ๋” ๋ฐœ์ „์‹œํ‚ฌ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์•ž์œผ๋กœ๋„ ์ด๋Ÿฌํ•œ ๊ฒฝํ—˜์„ ๋ฐ”ํƒ•์œผ๋กœ ๋”์šฑ ์„ฑ์žฅํ•ด๋‚˜๊ฐ€๊ฒ ์Šต๋‹ˆ๋‹ค.