Skip to content

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

Notifications You must be signed in to change notification settings

HyunSoo730/AptDeal-Insights

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

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 Spring Boot MySQL Vue.js

Config

npm Gradle

Development

Spring Data JPA QueryDSL MyBatis Spring Batch Chart.js Tailwind CSS

Database

AWS RDS

DevOps

AWS EC2

Communication

Notion Mattermost

๐Ÿ‘ฅ ํŒ€ ์†Œ๊ฐœ

ํŒ€ ๊ตฌ์„ฑ

์กฐํ˜„์ˆ˜ ๊ณ ํ•œ๊ฐ•
@hyunsoo @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

ํ”„๋กœ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์œ„์™€ ๊ฐ™์€ 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 ์ฑ—๋ด‡์„ ํ†ตํ•ด ๋ถ€๋™์‚ฐ ๊ด€๋ จ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์ž๋™ ์‘๋‹ต์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ…๋ฐฉ ํ™”๋ฉด์—์„œ๋Š” ์‚ฌ์šฉ์ž๋“ค ๊ฐ„์˜ ์‹ค์‹œ๊ฐ„ ์ฑ„ํŒ…์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋งค๋ฌผ ๋ฌธ์˜, ๊ฑฐ๋ž˜ ์กฐ๊ฑด ํ˜‘์˜ ๋“ฑ ๊ฐœ์ธ ๊ฐ„ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์œ„ํ•œ ์ฑ„ํŒ… ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์ด ํŽ˜์ด์ง€
๋งˆ์ด ํŽ˜์ด์ง€
๋งˆ์ด ํŽ˜์ด์ง€์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ ์ •๋ณด ๊ด€๋ฆฌ, ๊ด€์‹ฌ ๋งค๋ฌผ ๋ชฉ๋ก, ๋ฌธ์˜ ๋‚ด์—ญ ๋“ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์ˆ˜์ •ํ•˜๊ณ , ๊ด€์‹ฌ ๋งค๋ฌผ์„ ์ถ”๊ฐ€/์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ž์‹ ์ด ์ž‘์„ฑํ•œ ๋ฌธ์˜ ๋‚ด์—ญ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ›๏ธ ์•„ํ‚คํ…์ฒ˜

๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

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 ์ฟผ๋ฆฌ์— ํŽ˜์น˜ ์กฐ์ธ์„ ๋ช…์‹œํ•˜์—ฌ ํ•„์š”ํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฆ‰์‹œ ๋กœ๋”ฉํ•˜๋„๋ก ์กฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ ์‹คํ–‰ ํšŸ์ˆ˜๋ฅผ ๋Œ€ํญ ๊ฐ์†Œ์‹œํ‚ค๊ณ  ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ–ฅ๏ธ ํ”„๋กœ์ ํŠธ ์‹œ์—ฐ ์˜์ƒ

์•„๋ž˜ ์‚ฌ์ง„ ํด๋ฆญ

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

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

About

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

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published