Skip to content
View CheonKiO's full-sized avatar
  • ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต

Organizations

@SEI-Team2 @KB-ITL-CodingTest @KB-its-your-life-Final-Project

Block or report CheonKiO

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please donโ€™t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this userโ€™s behavior. Learn more about reporting abuse.

Report abuse
CheonKiO/README.md

์•ˆ๋…•ํ•˜์„ธ์š”. ์ฒœ๊ธฐ์˜ค์ž…๋‹ˆ๋‹ค.

์ €๋Š” ์ง„์งœ ๋ฌธ์ œ๊ฐ€ ๋ฌด์—‡์ธ์ง€, ์™œ ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ๊ณ ๋ฏผํ•ฉ๋‹ˆ๋‹ค.
๋„๋ฆฌ ์“ฐ์ด๋Š” ๊ธฐ์ˆ ๋„ ์ •๋ง ์ œ ์ƒํ™ฉ์— ์ ์ ˆํ•œ์ง€ ๋”ฐ์ ธ๋ณด๊ณ , ๋” ์‰ฝ๊ณ  ๋‹จ์ˆœํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์œผ๋ฉด ๊ทธ์ชฝ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ•’ Timeline

2019.03 ~ 2025.02๐ŸŽ“ ์„ฑ๊ท ๊ด€๋Œ€ํ•™๊ต ์†Œํ”„ํŠธ์›จ์–ดํ•™๊ณผ (์ „๊ณต 4.31 / 4.5 ยท ์šฐ๋“ฑ ์กธ์—…)
2024.09 ~ 2024.12๐Ÿ’ผ ์ฃผ์‹ํšŒ์‚ฌ ์œ„๋ธ ์ธํ„ด์‹ญ โ€” SI ์›น๊ฐœ๋ฐœ
2025.03 ~ 2025.08๐Ÿ“š [KB] IT's Your Life 6๊ธฐ ์ˆ˜๋ฃŒ, ์šฐ์ˆ˜ ํ›ˆ๋ จ์ƒ ์ˆ˜์ƒ
2026.01 ~ ์ง„ํ–‰ ์ค‘๐Ÿš€ SSAFY 15๊ธฐ(Java ์ „๊ณต), 1ํ•™๊ธฐ ์„ฑ์  ์šฐ์ˆ˜ ์ˆ˜์ƒ

์ž๊ฒฉ / ์ธ์ฆ ย ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ SQLD ์‚ผ์„ฑ์ „์ž SW ์—ญ๋Ÿ‰ํ…Œ์ŠคํŠธ Bํ˜•(Professional) TOPCIT


๐Ÿ›  Stack

Backend Java Spring Boot MyBatis MySQL Redis

Frontend Vue.js JavaScript

Infra / Tools GitHub Actions Apache Git


๐Ÿงฉ Algorithm

๋งค์ผ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฃจํ‹ด์„ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ฃผ์–ด์ง„ ์ œ์•ฝ ์•ˆ์—์„œ ๋ฌด์—‡์„ ํฌ๊ธฐํ• ์ง€ ๊ณ ๋ฅด๋Š” ํ›ˆ๋ จ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ์Œ“์€ ๊ฐ๊ฐ์€ ์‹ค๋ฌด์—์„œ ์ฝ”๋“œ๋ฅผ ๊ฒ€์ฆํ•˜๊ณ  ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์„ ์ฐพ๋Š” ๋ฐ‘๋ฐ”ํƒ•์ด ๋ฉ๋‹ˆ๋‹ค.

Solved.ac Profile solved.ac ๋ฌธ์ œ ํ•ด๊ฒฐ ์ŠคํŠธ๋ฆญ - ์ตœ์žฅ 88์ผ ์—ฐ์†

[KB] IT's Your Life ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์Šคํ„ฐ๋”” Repository (2025.03 ~ 2025.06)
SSAFY ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์Šคํ„ฐ๋”” Repository (2026.02 ~ 2026.04)

๐Ÿค ํ˜‘์—… ๋ฐฉ์‹

  • ํŒ€์›์ด ๊ฐ€์ ธ๋‹ค ์“ธ ๊ณตํ†ต ๊ธฐ๋ฐ˜์„ ๋งŒ๋“œ๋Š” ์—ญํ•  โ€” ํŒ€์›๋งˆ๋‹ค ๋”ฐ๋กœ ๋งŒ๋“  ์ค‘๋ณต ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ณ , ๋„ˆ๋ฌด ์ปค์ง„ ํ™”๋ฉด์„ ์ฑ…์ž„ ๋‹จ์œ„๋กœ ์ชผ๊ฐฐ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฐ ์ •๋ฆฌ๋Š” ๊ธฐ๋Šฅ์ด ๋๋‚œ ๋’ค ๋ชฐ์•„์„œ ํ•˜์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ ์ค‘์— ๊พธ์ค€ํžˆ ํ•˜๋Š” ํŽธ์ด๊ณ , ์„ธ ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐ™์€ ์—ญํ• ์„ ๋ฐ˜๋ณตํ•ด ๋งก์•˜์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์ ํŠธ์˜ ๋นˆํ‹ˆ์„ ๋ฉ”์šฐ๋Š” ์—ญํ•  โ€” ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์€ ์œ„ํ—˜์€ ์—†๋Š”์ง€ ์‚ดํ”ผ๊ณ , ํšŒ์ƒ‰์ง€๋Œ€์— ๋‚จ์€ ์ผ์„ ์ƒ๊ธฐ์‹œํ‚ค๋Š” ํŽธ์ž…๋‹ˆ๋‹ค. ํŒ€์›๋“ค์—๊ฒŒ "๊ฑฐ๊ธฐ๊นŒ์ง€ ์ƒ๊ฐ ๋ชป ํ–ˆ๋‹ค"๋Š” ๋ง์„ ๋“ค์„ ๋•Œ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค.
  • ํŒ๋‹จ ๊ทผ๊ฑฐ๋ฅผ ๋‚จ๊ธฐ๋Š” ์ปค๋ฐ‹๊ณผ PR โ€” ๋ฌด์—‡์„ ์™œ ๋ฐ”๊ฟจ๋Š”์ง€ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ  ์ ๊ณ , ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟ€ ๋•Œ๋Š” ์™œ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์•ˆ ๊ณจ๋ž๋Š”์ง€๊นŒ์ง€ ํ•จ๊ป˜ ์ ์Šต๋‹ˆ๋‹ค. PR์€ ์ž‘์—… ๋‚ด์—ญ / ๋ณ€๊ฒฝ ์‚ฌํ•ญ / ํ…Œ์ŠคํŠธ ํ”Œ๋žœ ํ˜•์‹์œผ๋กœ ์”๋‹ˆ๋‹ค.

๐Ÿค– AI๋ฅผ ๊ฐœ๋ฐœ์— ๋“ค์ด๋Š” ๋ฐฉ์‹

์ฒ˜์Œ์—” AI๋ฅผ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์ผ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์ž…๋ ฅ์—๋„ ๋‹ค๋ฅธ ๋‹ต์„ ๋‚ด๋Š” ํ™•๋ฅ ์  ํŠน์„ฑ์„ ๋ฏฟ๊ธฐ ์–ด๋ ค์› ๊ณ , ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์‚ฌ๊ณ ๋กœ ์ด์–ด์งˆ ์œ„ํ—˜์ด ํฌ๋‹ค๊ณ  ๋ดค๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ตœ๊ทผ ํ”„๋กœ์ ํŠธ์— ์กฐ๊ธˆ์”ฉ ๋“ค์—ฌ๋ณด๋‹ˆ ๊ฒฐ๊ณผ๊ฐ€ ์ƒ๊ฐ๋ณด๋‹ค ํ›จ์”ฌ ์ข‹์•˜๊ณ , ๊ด€์ ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค โ€” ์‚ฌ๋žŒ๋„ ์‹ค์ˆ˜ํ•˜๊ณ  AI๋„ ์‹ค์ˆ˜ํ•œ๋‹ค๋ฉด, ์ƒ์‚ฐ์„ฑ์ด ๋†’์€ ์ชฝ์„ ์“ฐ๋˜ ํ‹€๋ฆฐ ๋ถ€๋ถ„์„ ์งš์–ด๋‚ผ ์ˆ˜ ์žˆ์œผ๋ฉด ๋˜์ง€ ์•Š๋‚˜.

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

๐Ÿ”— ์ด ๊ณผ์ •์„ ์ •๋ฆฌํ•œ ๊ฐœ์ธ ์„ค์ •์„ ๊ณต๊ฐœํ•ด ๋‘์—ˆ์Šต๋‹ˆ๋‹ค โ€” claude-dotfiles

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



๐Ÿ’ผ Experience

์ฃผ์‹ํšŒ์‚ฌ ์œ„๋ธ โ€” ๊ฐœ๋ฐœํŒ€ ์ธํ„ด (2024.09 ~ 2024.12)

ICT ํ•™์ ์—ฐ๊ณ„ ํ”„๋กœ์ ํŠธ๋กœ ์ฐธ์—ฌํ•œ SI ์›น๊ฐœ๋ฐœ ์ธํ„ด์‹ญ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋‚ฉํ’ˆ๋˜๋Š” ์„œ๋น„์Šค๋ฅผ ๋‹ค๋ฃฌ ์ฒซ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ด๋‹น ์—…๋ฌด

  • ํ•œ๊ตญMICEํ˜‘ํšŒ ์›น์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€๋ณด์ˆ˜
  • Artitutor(๋ฐœ๋ ˆ ์˜จ๋ผ์ธ ์ˆ˜๊ฐ• ยท ์ฝฉ์ฟจ ์‹ ์ฒญ ํ”Œ๋žซํผ) ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ
  • AI ๊ธฐ๋ฐ˜ ์›น๋นŒ๋” Zaemit / Z-Studio QA

์‚ฌ์šฉ ๊ธฐ์ˆ  ย jQuery PHP MariaDB Git Docker

๐Ÿ’ก ์—ฌ๊ธฐ์„œ ๋ฐฐ์šด ๊ฒƒ

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


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


๐Ÿ“Œ Projects


๐Ÿ  LightHouse โ€” ์‚ฌํšŒ์ดˆ๋…„์ƒ์„ ์œ„ํ•œ ๋ถ€๋™์‚ฐ ์•ˆ์‹ฌ ์ง„๋‹จ ์„œ๋น„์Šค (2025.07 ~ 2025.08)

6์ธ ํŒ€ (์ „๊ณต์ž 4 ยท ๋น„์ „๊ณต์ž 2) ยท 2๊ฐœ์›” ยท KB IT's Your Life 6๊ธฐ Final ๋‹ด๋‹น: ์‹ค๊ฑฐ๋ž˜๊ฐ€ ์™ธ๋ถ€ API ์—ฐ๋™ ๊ตฌ์กฐ, ๋™๋„ค ๊ฒ€์ƒ‰ ์„ฑ๋Šฅ ๊ฐœ์„ , ๊ด€์‹ฌ ๋ชฉ๋ก, ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ, ๋ฐฑ์—”๋“œ ํ™˜๊ฒฝ ๊ตฌ์„ฑ, ์„ค์น˜ ๊ฐ€์ด๋“œ Backend ยท Frontend

image

image

image

์ „์„ธ์‚ฌ๊ธฐ ํ”ผํ•ด์ž์˜ 75%๊ฐ€ 2030์ด๋ผ๋Š” ๋ฐ์ดํ„ฐ์—์„œ ์ถœ๋ฐœํ•ด, ์ฃผ์†Œ๋งŒ ๋„ฃ์œผ๋ฉด ์‹ค๊ฑฐ๋ž˜๊ฐ€ยท๊ฑด์ถ•๋ฌผ๋Œ€์žฅยท์žฌ์ • ์•ˆ์ •์„ฑ์„ ์ข…ํ•ฉํ•œ ์•ˆ์‹ฌ ๋ฆฌํฌํŠธ๋ฅผ ์ฃผ๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. ๊ทœ๋ชจ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜์Œ ๋‹ค๋ค„๋ณธ ์‹ค์ „ ํŒ€ ํ”„๋กœ์ ํŠธ์˜€์Šต๋‹ˆ๋‹ค.

Java 17 Spring Framework 5.3.38 MyBatis MySQL Spring Security JWT Vue 3 TypeScript ๊ณต๊ณต๋ฐ์ดํ„ฐํฌํ„ธ CODEF Naver Cloud

๐Ÿ” ๋ฌด์—‡์„ ๊ณ ๋ฏผํ–ˆ๋‚˜

๋น„์Šทํ•œ API 8๊ฐœ์˜ ๊ณตํ†ต ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์„ฑ

๊ณต๊ณต๋ฐ์ดํ„ฐ API์˜ ์•„ํŒŒํŠธ / ์—ฐ๋ฆฝ๋‹ค์„ธ๋Œ€ / ์˜คํ”ผ์Šคํ…” / ๋‹จ๋…๋‹ค๊ฐ€๊ตฌ ร— ๋งค๋งค / ์ „์›”์„ธ โ€” ์—”๋“œํฌ์ธํŠธ๋„ ์‘๋‹ต ๊ตฌ์กฐ๋„ ์กฐ๊ธˆ์”ฉ ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค. 8๊ฐœ๋ฅผ ๊ฐ๊ฐ ๊ตฌํ˜„ํ•˜๋ฉด ํ˜ธ์ถœยทํŒŒ์‹ฑยท์ €์žฅ ํ๋ฆ„์ด ์œ ์‚ฌํ•˜๊ฒŒ ๋ณต์ œ๋ฉ๋‹ˆ๋‹ค.

์‘๋‹ต ํƒ€์ž…๋งŒ ๋‹ค๋ฅด๊ณ  ํ๋ฆ„์€ ๊ฑฐ์˜ ๊ฐ™๋‹ค๋Š” ๋ฐ ์ฐฉ์•ˆํ•ด, ์ €์žฅ ๋™์ž‘์„ SaveHandler<T> ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋บ์Šต๋‹ˆ๋‹ค โ€” ๋งˆ์นจ ์ž๋ฐ” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ฐฐ์šด ์ฐธ์ด๋ผ ์‹ค์ œ๋กœ ์ ์šฉํ•ด๋ณด๊ณ  ์‹ถ๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ API๋Š” VO ํƒ€์ž…๊ณผ ๋งคํผ ๋ฉ”์„œ๋“œ ๋ ˆํผ๋Ÿฐ์Šค๋งŒ ๋„˜๊ธฐ๊ณ , XML ์‘๋‹ต์€ XmlMapper + constructParametricType์œผ๋กœ ์ œ๋„ค๋ฆญ DTO ํ•˜๋‚˜๊ฐ€ 8์ข…์„ ๋‹ค ๋ฐ›๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

insertCommon(APT_TRADE_ENDPOINT, lawdCd, dealYmd,
    ApartmentTradeVO.class, mapper::insertApartmentTradeBatch, "์•„ํŒŒํŠธ ๋งค๋งค");

์‘๋‹ต ๊ตฌ์กฐ๊ฐ€ ๊ฐ™์€ ์ด 8์ข… ์•ˆ์—์„œ๋Š” ์ค‘๋ณต์„ ์ค„์ด๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ๋‚˜์ค‘์— ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ API(๋ฒ•์ •๋™ ์ฝ”๋“œยท๊ฑด์ถ•๋ฌผ๋Œ€์žฅ)๋ฅผ ๋ถ™์ผ ๋•Œ๋Š” ์ด ๊ตฌ์กฐ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋งž์ง€ ์•Š์•„ ๊ฒฐ๊ตญ ๋ณ„๋„ ๊ฒฝ๋กœ๋กœ ๊ฐ”์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋ณด๋ฉด "์ด 8๊ฐœ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฌถ์„๊นŒ"๋งŒ ๋ดค์ง€ "์•ž์œผ๋กœ ์–ด๋–ค API๋ฅผ ๋” ์‚ผํ‚ฌ๊นŒ"๋Š” ๋ฌป์ง€ ์•Š์•„, ์ €์žฅ๋งŒ ์ถ”์ƒํ™”ํ•œ ์ข์€ ๊ตฌ์กฐ๊ฐ€ ๋์Šต๋‹ˆ๋‹ค. ๋ˆˆ์•ž์˜ ์ค‘๋ณต์„ ์ค„์ด๋Š” ๊ฒƒ๊ณผ ์‹œ์Šคํ…œ์ด ์ž๋ž„ ๋ฐฉํ–ฅ์„ ๋ณด๋Š” ๊ฑด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ผ๋Š” ๊ฑธ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

๋ณ‘๋ชฉ์˜ ์›์ธ์„ ์ฐพ์•„ ์ˆ˜์ •ํ•œ ๊ฒฝํ—˜

์‹ค๊ฑฐ๋ž˜๊ฐ€ ๋ฐ์ดํ„ฐ ์ ์žฌ๊ฐ€ ํ•œ ๋ฒˆ์— 2๋ถ„ ๋„˜๊ฒŒ ๊ฑธ๋ ค, ๋ณ‘๋ชฉ์ด ํ˜ธ์ถœ์ธ์ง€ ์ €์žฅ์ธ์ง€ ์‹ค์ธกํ–ˆ์Šต๋‹ˆ๋‹ค. ์›์ธ์€ ๋‹จ๊ฑด INSERT์˜€์Šต๋‹ˆ๋‹ค.

๋ฐฉ์‹ 1,000๊ฑด ์†Œ์š” ์‹œ๊ฐ„
๋‹จ๊ฑด INSERT ๋ฐ˜๋ณต ์•ฝ 2๋ถ„
bulk INSERT ์•ฝ 2์ดˆ

I/O๋ฅผ ํ•œ ๋ฒˆ์— ๋ฌถ๋Š” ๊ฒŒ ๋‚ซ๋‹ค๋Š” ๊ฑธ ์•Œ๊ณ ๋Š” ์žˆ์—ˆ์ง€๋งŒ, ๊ทธ ์ฐจ์ด๊ฐ€ ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ํฌ๋‹ค๋Š” ๊ฑธ ์ฒ˜์Œ ๊ฒฝํ—˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ดํ›„ ๋‚˜๋จธ์ง€ API ์ ์žฌ๋„ ์ „๋ถ€ bulk๋กœ ๋ฐ”๊พธ๊ณ , ์ธก์ •์น˜๋ฅผ ์ฃผ์„์œผ๋กœ ๋‚จ๊ฒจ ๋‚˜์ค‘์— ์ด ๊ฐ’์„ ๊ฑด๋“œ๋ฆด ์‚ฌ๋žŒ์ด ๊ทผ๊ฑฐ๋ฅผ ๋ณด๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋™๋„ค ๊ฒ€์ƒ‰์ด ๋А๋ ธ๋˜ ์ด์œ 

๋ฒ•์ •๋™ ๊ฒ€์ƒ‰์–ด ํ›„๋ณด๋ฅผ ํƒ€์ดํ•‘ํ•  ๋•Œ๋งˆ๋‹ค DB ์กฐํšŒ๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ ๋ฐ˜์‘์ด ๋А๋ ธ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—” ๋””๋ฐ”์šด์Šคยท์บ์‹ฑ์œผ๋กœ ํ˜ธ์ถœ์„ ์ค„์ด๋ ค ํ–ˆ์ง€๋งŒ, ๊ทธ๊ฒŒ ๊ทผ๋ณธ ๊ฐœ์„ ์ธ์ง€ ๊ณ ๋ฏผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋ฒ•์ •๋™ ์ฝ”๋“œ๋Š” ๋ฐ”๋€” ์ผ์ด ๊ฑฐ์˜ ์—†๋Š” ์ •์  ๋ฐ์ดํ„ฐ์ด๊ณ  5,000๊ฑดยท6ํ•„๋“œ์˜ ์†Œ๊ทœ๋ชจ์˜€์Šต๋‹ˆ๋‹ค. ๋งค๋ฒˆ ์™•๋ณตํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์ฒ˜์Œ ํ•œ ๋ฒˆ ๋‹ค ๋ฐ›์•„๋‘๊ณ  ๊ฒ€์ƒ‰์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ•˜๋Š” ๊ฒŒ ์‹ธ๋‹ค๊ณ  ํŒ๋‹จํ•ด ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ ๊ทœ๋ชจ๊ฐ€ ๋” ํฌ๊ฑฐ๋‚˜ ๋™์  ๋ฐ์ดํ„ฐ์˜€๋‹ค๋ฉด ๋ฐฑ์—”๋“œ ์กฐํšŒ๊ฐ€ ๋” ์ข‹์€ ๋ฐฉ์‹์ด์—ˆ๊ฒ ์ง€๋งŒ, ์ƒํ™ฉ์„ ๋ถ„์„ํ•˜๊ณ  ํŒ๋‹จํ•˜์—ฌ ์ ์ ˆํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐœ์„ ํ•œ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ๋งˆ์šดํŠธ ์‹œ์ ์— ๋ฐ›์•„ ์žฌ๋ฐฉ๋ฌธ๋งˆ๋‹ค ๋‹ค์‹œ ๋ฐ›์•„์˜ค๋Š” ๊ฑด ์•„์‰ฝ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์ด๋ผ๋ฉด ํƒ€์ž„์Šคํƒฌํ”„๋กœ ๋งŒ๋ฃŒ๋ฅผ ๊ด€๋ฆฌํ•˜๊ฑฐ๋‚˜ HTTP ์บ์‹œ์— ๋งก๊ฒผ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ขŒํ‘œ๋ฅผ ์‹๋ณ„์ž๋กœ ์‚ผ์•˜๋Š”๋ฐ, ์ธ๋ฑ์Šค๋Š” ๋†“์ณค์Šต๋‹ˆ๋‹ค

์ฃผ์†Œ๋Š” ํ‘œ๊ธฐ๊ฐ€ ์ œ๊ฐ๊ฐ(์„œ์šธ์‹œ / ์„œ์šธํŠน๋ณ„์‹œ)์ด๋ผ ๋ฌธ์ž์—ด๋กœ ๋น„๊ตํ•˜๋ฉด ๊ฐ™์€ ๊ฑด๋ฌผ์ด ๋‹ค๋ฅธ ๋งค๋ฌผ๋กœ ์ค‘๋ณต ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฃผ์†Œ๋ฅผ ์ขŒํ‘œ(์œ„ยท๊ฒฝ๋„)๋กœ ๋ณ€ํ™˜ํ•ด ์‹๋ณ„์ž๋กœ ์“ฐ๊ธฐ๋กœ ํŒ€์—์„œ ์ •ํ–ˆ๊ณ , ์ €๋Š” ๊ด€์‹ฌ ๋ชฉ๋ก์—์„œ ๊ทธ ์ขŒํ‘œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ™์€ ๋งค๋ฌผ์˜ ์ค‘๋ณต์„ ๋ง‰์•˜์Šต๋‹ˆ๋‹ค. ์ฐœ ํ•ด์ œ๋„ row ์‚ญ์ œ ๋Œ€์‹  ์ƒํƒœ๊ฐ’(์ฐœ / ํ•ด์ œ)์œผ๋กœ ๊ด€๋ฆฌํ•ด ๊ธฐ๋ก์„ ํ•œ ์ค„๋กœ ์œ ์ง€ํ•˜๊ณ  ์ด๋ ฅ์„ ๋‚จ๊ฒผ์Šต๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์ขŒํ‘œ๋ฅผ ์‹๋ณ„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์•˜์œผ๋ฉด์„œ ์ •์ž‘ ์กฐํšŒ์— ์“ฐ๋Š” ์œ„ยท๊ฒฝ๋„ ์ปฌ๋Ÿผ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ง€๋„ ์กฐํšŒ๊ฐ€ WHERE ์œ„๋„ BETWEEN ... AND ๊ฒฝ๋„ BETWEEN ...์ธ๋ฐ ์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด, ๊ฑด๋ฌผ์ด 30๋งŒ ๊ฑด ๊ฐ€๊นŒ์ด ์Œ“์ด์ž ๋งค๋ฒˆ ์ „์ฒด๋ฅผ ์Šค์บ”ํ•˜๋ฉฐ 2~3์ดˆ์”ฉ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฌด์—‡์„ ์‹๋ณ„์ž๋กœ ์‚ผ์„์ง€์™€, DB๊ฐ€ ๊ทธ๊ฑธ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฑด ๋‹ค๋ฅธ ๋ฌธ์ œ๋ผ๋Š” ๊ฑธ ๋†“์ณค๊ณ , ์ดํ›„ ํ”„๋กœ์ ํŠธ์—์„œ ๋ฐ์ดํ„ฐ ๊ทœ๋ชจ์™€ ์กฐํšŒ ๋ฐฉ์‹์„ ๋จผ์ € ๋ณด๊ฒŒ ๋œ ๊ณ„๊ธฐ๊ฐ€ ๋์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์–ป์€ ๊ฒƒ

  • "์–ด๋–ป๊ฒŒ ์ตœ์ ํ™”ํ• ๊นŒ"๋ณด๋‹ค "์ด ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ค ์„ฑ๊ฒฉ์ธ๊ฐ€"๋ฅผ ๋จผ์ € ๋ฌป๊ฒŒ ๋์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ ํ•ด๊ฒฐ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ œ ์ •์˜๊ฐ€ ๋จผ์ €๋ผ๋Š” ๊ฑธ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜๋ณต๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ถ”์ƒํ™”ํ•  ๋•Œ ๋ฌด์—‡์„ ๊ณตํ†ต์œผ๋กœ ๋ฌถ๊ณ  ๋ฌด์—‡์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋บ„์ง€ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.


๐Ÿฏ HisTour โ€” AI ๊ธฐ๋ฐ˜ ๋ฌธํ™”์œ ์‚ฐ ํƒ๋ฐฉ ๊ธฐ๋ก ์„œ๋น„์Šค (2026.06.09 ~ 2026.06.25)

3์ธ ํŒ€ ยท 17์ผ ยท SSAFY ๊ด€ํ†ต ํ”„๋กœ์ ํŠธ ๋‹ด๋‹น: AI ์—ฐ๋™ ํŒŒ์ดํ”„๋ผ์ธ, ์ž„๋ฒ ๋”ฉยท๋ฒกํ„ฐ ๊ฒ€์ƒ‰, ๋ฐ์ดํ„ฐ ๋ฐฐ์น˜ ์ ์žฌ, ์ถ”์ฒœยท๋ฆฌํฌํŠธ API, ๋ฐฑ์—”๋“œยทํ”„๋ก ํŠธ์—”๋“œ ๊ณตํ†ต ๊ธฐ๋ฐ˜(์‘๋‹ต ๊ทœ๊ฒฉยท์ „์—ญ ์˜ˆ์™ธยทJWT ์ธํ„ฐ์…‰ํ„ฐยท์ธ์ฆ ๊ฐ€๋“œ) Backend ยท Frontend

image

image

image

์‚ฌ์ง„ ํ•œ ์žฅ๊ณผ ์œ„์น˜ ์ •๋ณด๋กœ ๋ฌธํ™”์œ ์‚ฐ์„ ์‹๋ณ„ํ•ด AI ํ•ด์„ค์„ ์ฃผ๊ณ , ํƒ๋ฐฉ์ด ๋๋‚˜๋ฉด ํ€ด์ฆˆ์™€ ๋ฆฌํฌํŠธ๋กœ ๋ณต์Šตํ•˜๊ฒŒ ํ•˜๋Š” ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

AI๋ฅผ ์„œ๋น„์Šค ์•ˆ์— ๋„ฃ์–ด๋ณธ ์ฒซ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ํ•ด์„ค์„ ์“ฐ๊ณ  ์‹ค์ œ ๋ฐ์ดํ„ฐ์—์„œ ํ€ด์ฆˆ๋ฅผ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ผ์ด LLM์˜ ์ƒ์„ฑ ๋Šฅ๋ ฅ์— ์ •ํ™•ํžˆ ๋งž๋Š” ๋ฌธ์ œ๋ผ๊ณ  ๋ดค๊ณ , ํ™•๋ฅ ์ ์ด๋ผ๋Š” ๋ถˆํ™•์‹ค์„ฑ์€ ๊ฐ์ˆ˜ํ•  ๊ฐ’์–ด์น˜๊ฐ€ ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ ๋ฏผ์€ ์ƒ์„ฑ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋””๊นŒ์ง€ ๋ฏฟ์„ ๊ฒƒ์ธ๊ฐ€์™€ ์œ ํ•œํ•œ ํ† ํฐ์„ ์–ด๋–ป๊ฒŒ ์“ธ ๊ฒƒ์ธ๊ฐ€๋กœ ๋ชจ์˜€์Šต๋‹ˆ๋‹ค.

Java 21 Spring Boot 3.5.1 MyBatis MySQL(SRID 4326) Redis Stack Jedis Vue 3 TypeScript Kakao Maps

๐Ÿ” ๋ฌด์—‡์„ ๊ณ ๋ฏผํ–ˆ๋‚˜

ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ ์ค„์ด๋ ค๊ณ , ์ขŒํ‘œ๋กœ ์ขํ˜€ ๊ฐ๊ด€์‹์œผ๋กœ ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค

์‚ฌ์ง„์„ ์ฃผ๊ณ  "์ด๊ฒŒ ๋ญ์•ผ?"์ฒ˜๋Ÿผ ์—ด์–ด๋†“๊ณ  ๋ฌผ์œผ๋ฉด ๋ชจ๋ธ์€ ๊ทธ๋Ÿด๋“ฏํ•œ ์˜ค๋‹ต์„ ๋งŒ๋“ค๊ณ , ์—†๋Š” ๋ฌธํ™”์œ ์‚ฐ ์ด๋ฆ„์ด ๋‚˜์™€๋„ ์„œ๋น„์Šค๋Š” ํ‹€๋ ธ๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋ธ์ด ๋‚ผ ์ˆ˜ ์žˆ๋Š” ๋‹ต์˜ ๋ฒ”์œ„๋ฅผ ์ฝ”๋“œ๊ฐ€ ๋ฏธ๋ฆฌ ์ •ํ•ด๋‘๋Š” ๊ตฌ์กฐ๋กœ ๊ฐ”์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๊ธฐ์ค€ ์ขŒํ‘œ์—์„œ ๋ฐ˜๊ฒฝ 500m ์•ˆ์˜ ํ›„๋ณด๋ฅผ DB์—์„œ ๋ฝ‘๊ณ , ์‚ฌ์ง„๊ณผ ๊ทธ ๋ชฉ๋ก์„ ํ•จ๊ป˜ ๋„˜๊ธด ๋’ค ๋ฒˆํ˜ธ ํ•˜๋‚˜๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค. ์ถœ๋ ฅ์ด ์ˆซ์ž๋ฟ์ด๋ผ max_tokens๋ฅผ 50์œผ๋กœ ๋ฌถ์—ˆ๊ณ , ํ›„๋ณด์— ์—†์œผ๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ”„๋กฌํ”„ํŠธ์— ๊ทœ์ •ํ–ˆ๊ณ , ์„œ๋น„์Šค๋‹จ์—์„œ๋„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ๋ฒˆํ˜ธ๋Š” ์‹๋ณ„ ์‹คํŒจ๋กœ ๋Š์Šต๋‹ˆ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์ƒ์„ฑ์‹œํ‚จ ๋’ค ํ›„์ฒ˜๋ฆฌ๋กœ ๊ฑฐ๋ฅด๊ธฐ๋ณด๋‹ค, ์• ์ดˆ์— ๊ณ ๋ฅผ ์„ ํƒ์ง€๋งŒ ์ฃผ๋Š” ์ชฝ์ด ํ™•์‹คํ•˜๋‹ค๊ณ  ๋ดค์Šต๋‹ˆ๋‹ค.

ํ›„๋ณด๋ฅผ ์ขํžˆ๋Š” ๊ธฐ์ค€ ์ขŒํ‘œ๋Š” EXIF๋ฅผ ์šฐ์„  ์ผ์Šต๋‹ˆ๋‹ค โ€” ์ฐ์€ ๊ณณ๊ณผ ์„œ ์žˆ๋Š” ๊ณณ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์–ด, ์‚ฌ์ง„์— ์ดฌ์˜ ์ขŒํ‘œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ทธ๊ฒƒ์„, ์—†์œผ๋ฉด ๊ธฐ๊ธฐ ์œ„์น˜๋ฅผ ์”๋‹ˆ๋‹ค. ๊ฑธ๋ฆผ๋Œ์€ ์•„์ดํฐ์ด์—ˆ๋Š”๋ฐ, HEIC๋ฅผ ๋ธŒ๋ผ์šฐ์ €์—์„œ JPEG๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ์บ”๋ฒ„์Šค ์žฌ์ธ์ฝ”๋”ฉ ๊ณผ์ •์—์„œ EXIF๊ฐ€ ์œ ์‹ค๋˜์–ด ์ขŒํ‘œ๋Š” ๋ณ€ํ™˜๋ณธ์ด ์•„๋‹ˆ๋ผ ์›๋ณธ์—์„œ ์ฝ๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ง„ ์ž์ฒด๋Š” 512px ยท JPEG 70%๋กœ ์••์ถ•ํ•ด ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค โ€” ๋น„์ „ ์ž…๋ ฅ์€ ํ•ด์ƒ๋„๊ฐ€ ํด์ˆ˜๋ก ํ† ํฐ์„ ๋” ๋จน๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํ† ํฐ์ด ์œ ํ•œํ•œ ์ž์›์ด๋ผ๋Š” ์ „์ œ์—์„œ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค

๊ต์œก ๊ณผ์ •์—์„œ ๋ฐ›์€ AI ๊ฒŒ์ดํŠธ์›จ์ด ํ† ํฐ์ด ๋„‰๋„‰ํ•˜์ง€ ์•Š์•„, "๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ"๊ณผ "์‹ธ๊ฒŒ ๋˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ"์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ™์€ ๋ฌธ์ œ๋กœ ๋†“์•˜์Šต๋‹ˆ๋‹ค.

ํ˜ธ์ถœ์„ ์ชผ๊ฐœ ์บ์‹œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—” ๋ถ„๋ฅ˜์™€ ํ•ด์„ค์„ ํ•œ ์š”์ฒญ์— ๋‹ด์•˜๋Š”๋ฐ, ๋ฌธํ™”์œ ์‚ฐ์„ ์‹๋ณ„ํ•˜๋ ค๋ฉด ์‚ฌ์ง„์ด ํ•„์š”ํ•˜์ง€๋งŒ ํ•ด์„ค์„ ์“ฐ๋Š” ๋ฐ๋Š” ํ•„์š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ง„์ด ๊ฑธ๋ฆฐ ๋ถ„๋ฅ˜๋Š” ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ฌ๋ผ ์บ์‹ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํ•ด์„ค์€ ๋ฌธํ™”์œ ์‚ฐ ๋‹จ์œ„๋กœ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘˜์„ ๋‚˜๋ˆ„์ž ๊ฐ™์€ ๊ณณ์„ ๋ฐฉ๋ฌธํ•œ ๋‘ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋ถ€ํ„ฐ ๋น„์‹ผ ํ•ด์„ค ํ˜ธ์ถœ์ด 0ํšŒ๊ฐ€ ๋๊ณ , ์ธ๊ธฐ ์žˆ๋Š” ๊ณณ์ผ์ˆ˜๋ก ํ•ด์„ค ๋น„์šฉ์ด ๋ฐฉ๋ฌธ์ž ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฌธํ™”์œ ์‚ฐ 1๊ฐœ๋‹น 1ํšŒ๋กœ ์ˆ˜๋ ดํ•ฉ๋‹ˆ๋‹ค. ์บ์‹œ ์ €์žฅ์†Œ๋„ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ๊ฐˆ๋ž์Šต๋‹ˆ๋‹ค โ€” ํ•ด์„ค์€ ๊ณ„์† ์“ฐ๋Š” ๋ฐ˜์˜๊ตฌ ๋ฐ์ดํ„ฐ๋ผ MySQL์—, ๋ฆฌํฌํŠธ ์š”์•ฝ์ด๋‚˜ ํ˜ธ์ถœ ์นด์šดํ„ฐ์ฒ˜๋Ÿผ ์‚ฌ๋ผ์ ธ๋„ ๋˜๋Š” ๊ฐ’์€ Redis์— ๋’€์Šต๋‹ˆ๋‹ค.

  • ์šฉ๋„๋ณ„ ํ† ํฐ ์ƒํ•œ ์ฐจ๋“ฑ โ€” ๋ถ„๋ฅ˜ 50 / ์š”์•ฝ 500 / ๊ธฐ๋ณธ ํ•ด์„ค 1500 / ์‹ฌํ™” ํ•ด์„ค 2048 / ํ€ด์ฆˆ ์ƒ์„ฑ 4096
  • ์ž‘์—… ์„ฑ๊ฒฉ๋ณ„ ๋ชจ๋ธ ๋ผ์šฐํŒ… โ€” ์ •ํ™•ํ•œ ๋น„์ „ ๋ถ„๋ฅ˜๊ฐ€ ํ•„์š”ํ•œ ์•ž๋‹จ์€ GPT-4o, ์ถœ๋ ฅ์ด ํฌ๊ณ  ๋Œ€๋Ÿ‰์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ์‹ฌํ™” ํ•ด์„คยทํ€ด์ฆˆ๋Š” ์ €๋น„์šฉ ๋ชจ๋ธ(Claude Haiku)
  • ์‚ฌ์šฉ์ž๋‹น ํ˜ธ์ถœ ์ œํ•œ โ€” Redis INCR + TTL 1๋ถ„์œผ๋กœ ํ•ด์„ค API๋ฅผ ๋ถ„๋‹น 3ํšŒ๋กœ ์ œํ•œ
  • ๋™์‹œ ์š”์ฒญ ์ค‘๋ณต ์ฐจ๋‹จ โ€” ๊ฐ™์€ ๋ฌธํ™”์œ ์‚ฐ์ด ์บ์‹œ ์ฐจ๊ธฐ ์ „ ๊ฒน์ณ ๋“ค์–ด์˜ค๋ฉด ID ๋‹จ์œ„ ๋ฝ์œผ๋กœ ๋น„์‹ผ ํ•ด์„ค ํ˜ธ์ถœ์„ ํ•œ ๋ฒˆ์œผ๋กœ (๋‹จ์ผ ์ธ์Šคํ„ด์Šค ์ „์ œ)

๋ณ„๋„ ๋ฒกํ„ฐ DB ์—†์ด, Redis๋กœ ์˜๋ฏธ ๊ธฐ๋ฐ˜ ์ถ”์ฒœ๊นŒ์ง€

์˜๋ฏธ๊ฐ€ ๋น„์Šทํ•œ ๋ฌธํ™”์œ ์‚ฐ์„ ์ฐพ๋Š” ์ถ”์ฒœ์—๋Š” ๋ฒกํ„ฐ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ–ˆ๊ณ , ์ฝ”์‚ฌ์ธ KNN์€ HashMapยทRDB๋กœ ํ’€ ์ˆ˜ ์—†์–ด Redis Stack์˜ ๋ฒกํ„ฐ ์ธ๋ฑ์Šค๋กœ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์บ์‹œยท์นด์šดํ„ฐยท๋ ˆ์ดํŠธ๋ฆฌ๋ฐ‹๋„ ๊ฐ™์€ Redis๋กœ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธํ™”์œ ์‚ฐ ์ „๋Ÿ‰์„ text-embedding-3-small๋กœ ์ž„๋ฒ ๋”ฉํ•ด 1536์ฐจ์› ๋ฒกํ„ฐ๋กœ ๋งŒ๋“ค๊ณ  ์ฝ”์‚ฌ์ธ ๊ฑฐ๋ฆฌ๋กœ ์ธ๋ฑ์‹ฑํ–ˆ์œผ๋ฉฐ, Spring Data Redis๊ฐ€ RediSearch๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์•„ ๋ฒกํ„ฐ ์งˆ์˜๋งŒ Jedis๋กœ FT.SEARCH๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ์ธ๋ฑ์Šค๋ฅผ ์ถ”์ฒœ ๊ธฐ๋Šฅ ๋‘ ๊ฐœ๊ฐ€ ๋‚˜๋ˆ  ์“ฐ๋Š”๋ฐ, ๋‘˜ ๋‹ค ๊ฐ™์€ ์œ ์‚ฌ๋„๋ฅผ ์“ฐ๋ฉด์„œ ๊ฑฐ๋ฆฌ ์กฐ๊ฑด์€ ์ •๋ฐ˜๋Œ€๋กœ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์—ฌํ–‰ ์ค‘ ์ถ”์ฒœ ๋ฆฌํฌํŠธ์˜ ๋‹ค์Œ ์ฝ”์Šค ์ถ”์ฒœ
๋ชฉ์  ์ง€๊ธˆ ๊ฐˆ ๊ณณ ๋‹ค์Œ์— ๊ฐˆ ๊ณณ
๊ฑฐ๋ฆฌ ์กฐ๊ฑด ๋ฐ˜๊ฒฝ ์ด๋‚ด ๊ฐ€๊นŒ์šธ์ˆ˜๋ก ๋ฐฉ๋ฌธ ์ค‘์‹ฌ์—์„œ 50km ์ด์ƒ ๋ฉ€์–ด์•ผ

์œ ์‚ฌ๋„ ์ ์ˆ˜๋งŒ ๋ณด๋ฉด ๋‘˜ ๋‹ค ๋งž๋Š” ๋‹ต์ด์ง€๋งŒ, "๋‹ค์Œ ์—ฌํ–‰์ง€"๋กœ ์ง€๊ธˆ ์žˆ๋Š” ๋™๋„ค๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฑด ์‚ฌ์šฉ์ž ๋งฅ๋ฝ์—์„œ ์™„์ „ํžˆ ์“ธ๋ชจ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ™์€ ์œ ์‚ฌ๋„ ์ง€ํ‘œ๋ผ๋„ ๋ฌด์—‡์ด ์ข‹์€ ๊ฒฐ๊ณผ์ธ์ง€๋Š” ์“ฐ๋Š” ๋งฅ๋ฝ์ด ์ •ํ•œ๋‹ค๋Š” ์ ์„ ๊นจ๋‹ฌ์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฝ”์Šค ์ชฝ์€ ๋ฉ€๋ฆฌ ๋–จ์–ด์ง„ ํ›„๋ณด๋งŒ ๋‚จ๊ธด ๋’ค ๋ฐ˜๊ฒฝ 25km๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋ฌถ์–ด "ํ•˜๋ฃจ์— ๋Œ ์ˆ˜ ์žˆ๋Š” ๋ฌถ์Œ"์„ ๋งŒ๋“ค๊ณ , ๊ฒฝ๋กœ๋Š” TSP ๊ทผ์‚ฌ๋กœ ์ •๋ ฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”— CourseService.java#L21-L22 โ€” ํด๋Ÿฌ์Šคํ„ฐ ๋ฐ˜๊ฒฝ 25km ยท ์ตœ์†Œ ์ด๊ฒฉ ๊ฑฐ๋ฆฌ 50km

์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฒ• โ€” LightHouse์—์„œ ์•„์‰ฌ์› ๋˜ ๋ถ€๋ถ„ ๊ฐœ์„ 

๊ตญ๊ฐ€์œ ์‚ฐ์ฒญ ๋ฐ์ดํ„ฐ 8,313๊ฑด์„ ๋ฐฐ์น˜๋กœ ์ ์žฌํ•ด ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋กœ ์‚ผ์•˜์Šต๋‹ˆ๋‹ค.

๋„ค ๊ฐœ์˜ ์—”๋“œํฌ์ธํŠธ ์ค‘ ์ด๋ฏธ์ง€ API๋งŒ ์‘๋‹ต์ด ๊ทœ๊ฒฉ์„ ๋ฒ—์–ด๋‚ฌ์Šต๋‹ˆ๋‹ค. ํ•œ ํ•ญ๋ชฉ ์•ˆ์—์„œ ํ•„๋“œ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ , ๋ฌธํ™”์œ ์‚ฐ ์ด๋ฆ„ ์ž์ฒด๋ฅผ XML ํƒœ๊ทธ๋กœ ์”๋‹ˆ๋‹ค(<๋Œ€์„ฑ์ „>, <๊ถŒ1-5>). ์„ ์–ธํ˜• ํŒŒ์„œ๋กœ๋Š” ์ฝ๋‹ค๊ฐ€ ๊นจ์กŒ์Šต๋‹ˆ๋‹ค.

LightHouse์—์„œ ์„ฑ๊ฒฉ์ด ๋‹ค๋ฅธ API๋ฅผ ์–ต์ง€๋กœ ๊ธฐ์กด ๊ตฌ์กฐ์— ๋งž์ถ”๋ ค๋‹ค ๋ณ„๋„ ๊ฒฝ๋กœ๋กœ ๋Œ์•„๊ฐ„ ์ ์ด ์žˆ์–ด, ์ด๋ฒˆ์—” ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐˆ๋ž์Šต๋‹ˆ๋‹ค. ์ •์ƒ ์‘๋‹ต ์„ธ ๊ฐœ๋Š” XmlMapper๋กœ ๋‘๊ณ , ์ด๋ฏธ์ง€ API๋งŒ ๋น„์ •์ƒ ํƒœ๊ทธ๋ฅผ ๊ฑท์–ด๋‚ธ ๋’ค StAX๋กœ ์ˆœํšŒํ•ด ํ•„๋“œ ์Œ๋งˆ๋‹ค ํ•ญ๋ชฉ ํ•˜๋‚˜๋กœ ์„ธ๋„๋ก ๋”ฐ๋กœ ์งฐ์Šต๋‹ˆ๋‹ค. ๊นจ์ง„ ์ผ€์ด์Šค๋Š” ํ…Œ์ŠคํŠธ๋กœ ๊ณ ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”— HeritageApiClient.java

LightHouse์—์„œ ์ขŒํ‘œ์— ์ธ๋ฑ์Šค๋ฅผ ์•ˆ ๊ฑธ์–ด ์ง€๋„ ์กฐํšŒ๊ฐ€ ์ „์ฒด ์Šค์บ”์ด ๋๋˜ ํƒ“์—, ์ด๋ฒˆ์—” ์Šคํ‚ค๋งˆ ๋‹จ๊ณ„์—์„œ ์ฑ™๊ฒจ ๋‘ ํ…Œ์ด๋ธ” ๋ชจ๋‘ ์ขŒํ‘œ๋ฅผ POINT(SRID 4326)์œผ๋กœ ๋‘๊ณ  ๊ณต๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ ์ด๊ฒŒ ์‹ค์ œ๋กœ ์ธ๋ฑ์Šค๋ฅผ ํƒ€๋Š”์ง€๊นŒ์ง€ ํ™•์ธํ•˜์ง€ ๋ชปํ•œ ๋ฐ˜์ชฝ์งœ๋ฆฌ ๊ฐœ์„ ์ด์—ˆ๊ณ , ๊ทธ ์ด์•ผ๊ธฐ๋Š” ์•„๋ž˜ ์•„์‰ฌ์šด ์ ์—์„œ ์ด์–ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ’ก ์–ป์€ ๊ฒƒ

  • ์ƒ์„ฑ์˜ ๋ฒ”์œ„๋ฅผ ๋ฏธ๋ฆฌ ์ขํžˆ๋Š” ์„ค๊ณ„. ์—ด๋ฆฐ ์งˆ๋ฌธ์„ ๋˜์ง€๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค, ๋‹ต์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋งŒ ์ฃผ๊ณ  ๊ณ ๋ฅด๊ฒŒ ํ•˜๋Š” ์ชฝ์ด ํ›จ์”ฌ ์•ˆ์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ• ๋ฃจ์‹œ๋„ค์ด์…˜์„ ์‚ฌํ›„์— ๊ฑธ๋Ÿฌ๋‚ด๋Š” ๋ฌธ์ œ์—์„œ ์• ์ดˆ์— ์ƒ๊ธธ ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌธ์ œ๋กœ ๋ฐ”๊ฟ” ๋ณธ ๊ฒฝํ—˜์ž…๋‹ˆ๋‹ค.
  • ๋น„์šฉ์ด ๊ตฌ์กฐ๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐ๊ฐ. ์บ์‹œ๋ฅผ ์–ด๋А ๋‹จ์œ„๋กœ ์žก์„์ง€, ๋ฌด์—‡์„ ์–ด๋””์— ์ €์žฅํ• ์ง€, ์–ด๋–ค ์ž‘์—…์„ ์–ด๋–ค ๋ชจ๋ธ๋กœ ๋ณด๋‚ผ์ง€๋ฅผ ์ „๋ถ€ "์–ผ๋งˆ๋‚˜ ์‹ธ๊ฒŒ ๋˜๋Š”๊ฐ€"์—์„œ ์—ญ์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ด ์•„๋‹ˆ๋ผ ๋น„์šฉ์ด ์„ค๊ณ„๋ฅผ ๋Œ๊ณ  ๊ฐ„ ์ฒซ ๊ฒฝํ—˜์ด์—ˆ์Šต๋‹ˆ๋‹ค.
  • AI ์‘๋‹ต์€ ๋ฏฟ์„ ์ˆ˜ ์—†๋Š” ์ž…๋ ฅ์ด๋ผ๋Š” ๊ด€์ . JSON ํ˜•์‹์„ ๊ฐ•์ œํ•˜๊ณ , ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ๋ธ”๋ก์œผ๋กœ ๊ฐ์‹ธ ์˜ค๋Š” ๊ฒฝ์šฐ์™€ ํ† ํฐ ์ƒํ•œ์— ์ž˜๋ ค ์˜ค๋Š” ๊ฒฝ์šฐ๊นŒ์ง€ ํ™•์ธํ•œ ๋’ค์—์•ผ ์„œ๋น„์Šค์— ๋ฐ˜์˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž˜๋ฆฐ ์‘๋‹ต์€ ์กฐ์šฉํžˆ ๋„˜๊ธฐ์ง€ ์•Š๊ณ  ๋ช…ํ™•ํ•œ ์˜ˆ์™ธ๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.

๐Ÿ™ ์ง€๊ธˆ ๋ณด๋ฉด ์•„์‰ฌ์šด ์ 

AI๊ฐ€ ๋งŒ๋“  ๊ฒฐ๊ณผ์˜ ํ’ˆ์งˆ์„ ์ œ๋Œ€๋กœ ๊ฒ€์ฆํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ์ด ๊ฐ™์œผ๋ฉด ์ถœ๋ ฅ์ด ๊ฐ™์€ ์ธ์ฆยทํ€ด์ฆˆยท๋ฐฐ์น˜์—๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๊น”์•˜์ง€๋งŒ, ์ •์ž‘ ํ•ต์‹ฌ์ธ ์‚ฌ์ง„ ํŒ๋ณ„ ์ •ํ™•๋„์™€ ํ•ด์„คยทํ€ด์ฆˆ ํ’ˆ์งˆ์€ ์žฅ์†Œ 10~20๊ณณ์„ ์ง์ ‘ ์ฐ์–ด ๋ˆˆ์œผ๋กœ ํ™•์ธํ•œ ๊ฒŒ ์ „๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ํ”„๋กฌํ”„ํŠธ๋„ ์•ˆ ๋˜๋Š” ์ผ€์ด์Šค๋ฅผ ๋ณด๊ณ  ๊ณ ์นœ ๋’ค ๊ทธ ์ผ€์ด์Šค๋กœ ๋˜๋Œ๋ ค๋ณด๋Š” ์‹์ด๋ผ, ์ง„์งœ ์ข‹์•„์ง„ ๊ฑด์ง€ ๊ณผ์ ํ•ฉ์ธ์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ์ด๋ผ๋ฉด ์ •๋‹ต์„ ๋ถ™์ธ ํ‰๊ฐ€์…‹์„ ๋จผ์ € ๋งŒ๋“ค์–ด ๊ณ ์น˜๋Š” ์ผ€์ด์Šค์™€ ์žฌ๋Š” ์ผ€์ด์Šค๋ฅผ ๋ถ„๋ฆฌํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค โ€” AI๋ฅผ ์„œ๋น„์Šค์— ๋„ฃ๋Š” ๊ฑด ๊ฒฐ๊ตญ ์ •๋‹ต์ด ํ•˜๋‚˜๊ฐ€ ์•„๋‹Œ ์ถœ๋ ฅ์„ ์–ด๋–ป๊ฒŒ ๊ฒ€์ฆํ•˜๋А๋ƒ์˜ ๋ฌธ์ œ๋ผ, ์ดํ›„ AI ๊ธฐ๋Šฅ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ์ฑ™๊ธฐ๋Š” ๋ถ€๋ถ„์ด ๋์Šต๋‹ˆ๋‹ค.

์ถ”์ฒœ๋„ ๊ฐ™์€ ๋ฟŒ๋ฆฌ์—์„œ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค โ€” ๋ฌด์—‡์„ ๊ธฐ์ค€์œผ๋กœ ๋น„์Šทํ•˜๋‹ค ํ• ์ง€ ์ •ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฆ„ยท๋ถ„๋ฅ˜ยท์‹œ๋Œ€ยท์„ค๋ช…์„ ํ•œ ๋ฒŒ์˜ ๋ฒกํ„ฐ๋กœ ๋ญ‰์ณ ๋‘ ๊ธฐ๋Šฅ์ด ๊ทธ๋Œ€๋กœ ๋‚˜๋ˆ  ์ผ๊ณ , ํ’ˆ์งˆ ๊ธฐ์ค€์ด ์—†์œผ๋‹ˆ ๋” ์ •๊ตํ•˜๊ฒŒ ๋งŒ๋“ค ๊ทผ๊ฑฐ๋„ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณต๊ฐ„ ์ธ๋ฑ์Šค๋„ ๊ฑธ์–ด๋‘๊ธฐ๋งŒ ํ•˜๊ณ  ์กฐํšŒ ์ฟผ๋ฆฌ์—์„œ ์ธ๋ฑ์Šค ์ปฌ๋Ÿผ์„ ํ•จ์ˆ˜๋กœ ๊ฐ์‹ธ ์ •์ž‘ ํƒ€์ง€ ๋ชปํ•˜๊ฒŒ ์งฐ๋Š”๋ฐ, ์‹คํ–‰ ๊ณ„ํš์„ ํ•œ ๋ฒˆ๋„ ํ™•์ธํ•˜์ง€ ์•Š์€ ํƒ“์ž…๋‹ˆ๋‹ค โ€” 8์ฒœ์—ฌ ๊ฑด์ด๋ผ ๋ฌธ์ œ๋Š” ์•ˆ ๋์ง€๋งŒ ๋‹ค์Œ์— DB๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๊ผญ ์ฑ™๊ธธ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค.



โšซ Omok โ€” ์‹ค์‹œ๊ฐ„ ์˜จ๋ผ์ธ ์˜ค๋ชฉ (1์ฐจ 2025.06 ~ 2025.08 ยท 2์ฐจ 2026.05 ~ 2026.06 ์žฌ๊ฐœ๋ฐœ)

๊ฐœ์ธ ํ”„๋กœ์ ํŠธ Backend ยท Frontend ยท โ–ถ Live Demo

image

image

image

STOMP/SockJS ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ๋Œ€์ „ ์˜ค๋ชฉ. Oracle Cloud์— ์ง์ ‘ ๋ฐฐํฌํ•ด ์šด์˜ ์ค‘์ž…๋‹ˆ๋‹ค. 1์ฐจ๋Š” ๋ถ€ํŠธ์บ ํ”„์—์„œ ๋ฐฐ์šด ๊ฑธ ๋ณต์Šตํ•˜๊ณ  ๋ฐฐํฌ๊นŒ์ง€ ์ง์ ‘ ๊ฒฝํ—˜ํ•˜๋ ค๊ณ , 2์ฐจ๋Š” AI ์—์ด์ „ํŠธ ํ™œ์šฉ์„ ์‹œํ—˜ํ•˜๋ ค๊ณ  ์ง„ํ–‰ํ•œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

Java 21 Spring MVC 6 WebSocket/STOMP Vue 3 Pinia Tomcat 10 GitHub Actions

๐Ÿ” ๋ฌด์—‡์„ ๊ณ ๋ฏผํ–ˆ๋‚˜

๊ฐ™์€ ๊ฒ€์ฆ์„ ๋‘ ๋ฒˆ ๋‘๋Š” ์ด์œ 

๋ Œ์ฃผ๋ฃฐ ๊ธˆ์ˆ˜(3-3, 4-4, ์žฅ๋ชฉ) ํŒ์ •์„ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์—”๋“œ ์–‘์ชฝ์— ๋’€์Šต๋‹ˆ๋‹ค. ํ”„๋ก ํŠธ๋Š” ํด๋ฆญ ์ฆ‰์‹œ ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๊ณ , ๋ฐฑ์—”๋“œ๋Š” ์‹ ๋ขฐ ๊ฒฝ๊ณ„์ž…๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์กฐ์ž‘๋  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์„œ๋ฒ„๊ฐ€ ํ„ด ์ˆœ์„œยท์ค‘๋ณต ์ฐฉ์ˆ˜ยท๊ธˆ์ˆ˜ ์—ฌ๋ถ€๋ฅผ ์ „๋ถ€ ๋‹ค์‹œ ๊ฒ€์ฆํ•œ ๋’ค์—๋งŒ ์ƒํƒœ๋ฅผ ๋ฐ˜์˜ํ•ฉ๋‹ˆ๋‹ค.

๊ทœ์น™ ์ž์ฒด๋„ ๋‹จ์ˆœํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ํ‘์€ ์ •ํ™•ํžˆ 5๋ชฉ์ด์–ด์•ผ ์Šน๋ฆฌ(6๋ชฉ์€ ์žฅ๋ชฉ ๊ธˆ์ˆ˜)์ด๊ณ  ๋ฐฑ์€ 5๋ชฉ ์ด์ƒ์ด๋ฉด ์Šน๋ฆฌ๋ผ, ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๋˜ ๊ธˆ์ˆ˜ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝํ•ด๋„ ๊ทธ ์ˆ˜๋กœ 5๋ชฉ์ด ์™„์„ฑ๋˜๋ฉด ์Šน๋ฆฌ๊ฐ€ ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”— GameService.java โ€” ํŒ์ • ๋กœ์ง (๋ฒ„๊ทธ ์ˆ˜์ • ๊ทผ๊ฑฐ๋ฅผ ์ฃผ์„์œผ๋กœ ๋‚จ๊ฒจ๋‘ )

์—ฐ๊ฒฐ์ด ๋Š๊ธด ์‚ฌ๋žŒ์„ ๋ฐ”๋กœ ํŒจ๋ฐฐ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋‚˜

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

๐Ÿ”— WebSocketEventListener.java#L68-L93 โ€” ๊ฒŒ์ž„ ์ค‘ ๋Š๊น€ vs ๊ฒŒ์ž„ ์™ธ ๋Š๊น€ ๋ถ„๊ธฐ

๐Ÿ’ก ์–ป์€ ๊ฒƒ

1์ฐจ์—์„œ๋Š” ๋ฐฐ์šด ๊ฑธ ์‹ค์ „์— ์จ๋ณด๊ณ  ๋ฐฐํฌยท์šด์˜๊นŒ์ง€ ๊ฐ€๋ณ๊ฒŒ๋‚˜๋งˆ ๊ฒช์—ˆ์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ์„ ์‚ฌ์„œ ์—ฐ๊ฒฐํ•˜๊ณ , ์™ธ๋ถ€๋Š” HTTPS๋กœ ๋ฐ›์•„ ๋‚ด๋ถ€๋Š” HTTP๋กœ ๋„˜๊ธฐ๋Š” ํ”„๋ก์‹œ๋ฅผ ๋‘๊ณ , ๋กœ์ปฌ์—์„  ๋˜๋˜ ๊ฒŒ ์„œ๋ฒ„์—์„  ์•ˆ ๋˜๋Š” ์ง€์ ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ’€์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ด ๋์ด ์•„๋‹ˆ๋ผ ์šด์˜์—์„œ ์‹ ๊ฒฝ ์“ธ ๊ฒŒ ํ›จ์”ฌ ๋งŽ๋‹ค๋Š” ๊ฑธ ํฌ๊ฒŒ ๋А๊ผˆ์Šต๋‹ˆ๋‹ค.

2์ฐจ๋Š” AI ์—์ด์ „ํŠธ๋ฅผ ๊ฐœ๋ฐœ์— ๋ณธ๊ฒฉ์ ์œผ๋กœ ์จ๋ณธ ์ฒซ ํ”„๋กœ์ ํŠธ๋กœ, ๊ฐœ๋ฐœ ๋ฐฉ์‹ โ€” ํŠนํžˆ ํ…Œ์ŠคํŠธ์— ๋Œ€ํ•œ ์ƒ๊ฐ์ด ํฌ๊ฒŒ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. 1์ฐจ์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ๊ฑด๋„ˆ๋›ด ๊ฑด ์ƒ์‚ฐ์„ฑ ๋•Œ๋ฌธ์ด์—ˆ๋Š”๋ฐ, AI๊ฐ€ ํ…Œ์ŠคํŠธ ์ž‘์„ฑ ๋น„์šฉ์„ ํ™• ๋‚ฎ์ถ”์ž ํŒ์ • ๋กœ์ง์— ํ…Œ์ŠคํŠธ๋ฅผ ๋‘๋ฅผ ์ˆ˜ ์žˆ์—ˆ๊ณ , ์˜› ๋กœ์ง์ด 3-3์„ ์ž˜๋ชป ํŒ์ •ํ•˜๋˜ ๋ฒ„๊ทธ๋„ ๊ทธ ๊ณผ์ •์—์„œ ๋“œ๋Ÿฌ๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์•ž์œผ๋กœ๋Š” AI๋ฅผ ๋‹ค๋ฃจ๋Š” ๋‚˜๋งŒ์˜ ๋ฐฉ์‹์„ ์–ผ๋งˆ๋‚˜ ๋‹จ๋‹จํžˆ ๊ฐ–์ถ”๋А๋ƒ๊ฐ€ ๊ฐœ๋ฐœ์„ ํฌ๊ฒŒ ์ขŒ์šฐํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ฒŒ ๋์Šต๋‹ˆ๋‹ค.



Pinned Loading

  1. KB-its-your-life-Final-Project/FinalProjectFront KB-its-your-life-Final-Project/FinalProjectFront Public

    Vue 3

  2. KB-its-your-life-Final-Project/FinalProjectBack KB-its-your-life-Final-Project/FinalProjectBack Public

    Java 3

  3. financial-investment/HisTour_FE financial-investment/HisTour_FE Public

    Vue

  4. financial-investment/HisTour_BE financial-investment/HisTour_BE Public

    Java

  5. omok-front omok-front Public

    Vue

  6. omok-back omok-back Public

    Java