์ฐ์ฐจ๋ก ๋ ๋๋ ๋ก์ปฌ ์ฌํ ํ๋๋ โ "๋ฉฐ์น ์ด ์ ์๋"๋ผ๋ ์ง๋ฌธ ํ๋๋ก, ์ง์ฅ์ธ์ ์ฐ์ฐจ๋ฅผ ์ต๋๋ก ์ด๋ ค ์ผ์ ยท์ธ๊ตฌ๊ฐ์์ง์ญ ๋ก์ปฌ ์ฌํ์งยท์ ๋ถ ์ง์ ์ ์ฑ ์ด ๊ฒฐํฉ๋ ๊ตญ๋ด ์ฌํ ๊ณํ์ ์๋ ์์ฑํ๋ค.
OffWay ๋ฐฑ์๋(Spring Boot 4.1 ยท Java 25). ๊ณตํด์ผยท๊ด๊ดยท๊ตํตยท์ ์ฑ ๊ณต๊ณต๋ฐ์ดํฐ๋ฅผ ์กฐํฉํด "์ฐ์ฐจ ์์ ์ต์ ํ + ๋ก์ปฌ ์ฌํ ์ถ์ฒ + ์ ์ฑ ํ๋ ์ด์ "์ ํ๋์ ํ๋ก์ฐ๋ก ์ ๊ณตํ๋ค.
์ฐ์ฐจ๋ ๋จ๋๋ฐ ์ด๋๋ก ๊ฐ์ง ๋ชจ๋ฅธ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒ์ํ๋ฉด ๋์ค๋ ๊ณณ์ ๋ ๊ฐ์ ๋ช ๊ตฐ๋ฐ๋ค.
ํํธ ํ์ ์์ ๋ถ๋ ์ธ๊ตฌ๊ฐ์์ง์ญ 89๊ณณ์ ๊ณ ์ํ๋ค. ์ฌ๋์ด ์ค์ด ์๋ฉธ์ ๊ฑฑ์ ํ๋ ์ง์ญ๋ค์ด๊ณ , ๊ด๊ด ๋ฐ์ดํฐ๋ ์์ ํํ ์ฌํ ์๋น์ค๊ฐ ์ ๋ค๋ฃจ์ง ๋ชปํ๋ค. ์ ๋ถ๋ ์ด ์ง์ญ๋ค์ ์ํด ๋์งํธ๊ด๊ด์ฃผ๋ฏผ์ฆยท์๋ฐ์ธ์ผํ์คํ ๊ฐ์ ํํ์ ๋ด๋์ง๋ง, ํํ์ด ์๋์ง์กฐ์ฐจ ๋ชจ๋ฅด๋ ์ฑ๋ก ์ง๋๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
OffWay๋ ์ด ๋์ ์๋๋ค.
์ง์ฅ์ธ์ ๋จ์ ์ฐ์ฐจ๋ฅผ ์ต๋๋ก ์ด๋ ค์, ์ธ๊ตฌ๊ฐ์์ง์ญ์ผ๋ก ๋ ๋๋ ์ผ์ ์ ์ง๊ณ , ๊ทธ ์ฌํ์ ์ธ ์ ์๋ ์ ๋ถ ํํ์ ํจ๊ป ๋ถ์ธ๋ค.
| ํ๋ ์ผ | |
|---|---|
| ์ฐ์ฐจ๋ฅผ ์ต๋๋ก | ๊ณตํด์ผยท์ฃผ๋ง์ ์ฎ์ด ์ค์ ์ฌํ ๊ฐ๋ฅ ์๊ฐ(LNT)์ ๊ณ์ฐํ๋ค. ์ฐ์ฐจ 1~2์ผ๋ก ์ต๋ ํด์์ด ๋์ค๋ ์๋์์น ์ฐํด๋ฅผ ์ฐพ์์ค๋ค |
| ๊ฐ ๋งํ ๊ณณ์ ๊ณ ๋ฅธ๋ค | ์ถ๋ฐ์ง์์ ๋ฟ๋ ์๊ฐยท์ํ์ธ๊ตฌยท์ฝํ ์ธ ์์ ๋ฐ์ ธ 89๊ณณ ์ค ํ๋ณด๋ฅผ ์ถ๋ฆฐ๋ค |
| ์ฝ์ค๋ฅผ ์ง์ค๋ค | Day๋ณ ํ์๋ผ์ธ์ผ๋ก ๋ณผ๊ฑฐ๋ฆฌยท๋ผ๋ยท์์๋ฅผ ๋ฐฐ์นํ๋ค. ์ด๋ ์๊ฐ๊ณผ ๋์ฐฉ ์๊ฐ๊น์ง ๋ฐ์ํ๋ค |
| ํํ์ ๋ถ์ธ๋ค | ์๋ฐ์ธ์ผํ์คํ ยท ๋์งํธ๊ด๊ด์ฃผ๋ฏผ์ฆ ยท ๊ทผ๋ก์ํด๊ฐ์ง์ ยท ์ง์์ฒด๋ฐ์ฐ์ฒ ยท KTX/SRT ํ ์ธ ยท ๋ก์ปฌ100/๊ด๊ด๋๋ ยท ๋์ด์ฒดํ/์น์ ๊ด๊ด (๋ถ๋ฅ๋ ๋ฐฑ์คํผ์ค์์ ๋๊ณ ์ค๋ค) |
| ์ฐ์ฐจ๋ฅผ ์ฐจ๊ฐํ๋ค | ์ฝ์ค๋ฅผ ํ์ ํ๋ฉด ์ค์ ์ฌํ ๋ ์ง๋ก ์ฐ์ฐจ๋ฅผ ๊น๋๋ค. ์ทจ์ํ๋ฉด ๋๋๋ฆฐ๋ค |
์ฐ์ฐจ ๋ช ๊ฐ ์ธ ์ ์๋ โ ์ธ์ ๊ฐ๋ฉด ๊ฐ์ฅ ์ด๋์ธ๊ฐ โ ์ด๋๋ก ๊ฐ๊น โ ์ฝ์ค ์ง๊ธฐ โ ์ฐ์ฐจ ์ฐจ๊ฐ
LNT ์ฐ์ถ ์๋์์น ์ฐํด 89๊ณณ ์ถ์ฒ Day ํ์๋ผ์ธ ํ์
๊ด๊ด ๋ฐ์ดํฐ๊ฐ ์์ ์ง์ญ์ผ์๋ก "๋ณผ ๊ฒ ์๋ค"๋ก ์ฝํ๊ธฐ ์ฝ๋ค. ๊ทธ๊ฑด ๋ฐ์ดํฐ๊ฐ ์๋ ๊ฒ์ด์ง ๊ฐ ๊ณณ์ด ์๋ ๊ฒ ์๋๋ค.
์์ฑ๊ตฐ์ ์๋ก ๋ค๋ฉด, ๊ด๊ด API์๋ ์์๊ฐ 1๊ณณ๋ฟ์ด๋ค(๊ณ ํ ํ๋). ์ค์ ๋ก๋ ์๋ด์ 50๊ณณ ๋๊ฒ ์๋ค. ๊ทธ ์ฐจ์ด๋ฅผ ๋ฉ์ฐ์ง ์์ผ๋ฉด "์ ๊ณณ์ด ์๋ 2๋ฐ3์ผ"์ด ์ฌ์ฉ์์๊ฒ ๊ทธ๋๋ก ๋๊ฐ๋ค. ์๋ ๋ฐ์ดํฐ ํ์ ๊ทธ๋์ ๋ง๋ค์๋ค.
89๊ณณ ์ ๋ถ์ ๋ํด ๋ฏธ๋ฆฌ ํ๋ณดํด ๋ ์ฅ์๋ค. ์กฐํ์ ์ธ๋ถ API๋ฅผ ์ฐ์ง ์๋๋ค.
| ์ข ๋ฅ | ๊ฑด์ | ์ถ์ฒ |
|---|---|---|
| ๋ง์ง | 75,565 | ์ง๋ฐฉํ์ ์ธํ๊ฐ(์ผ๋ฐ์์์ ยท๊ด๊ด์๋นยท์ ๊ณผ์ ) |
| ์์ | 26,365 | ์๋ฐ์ ยท๋์ด์ด๋ฏผ๋ฐยทํ์ฅ์ฒดํยท๊ด๊ด์๋ฐยท๊ด๊ดํ์ |
| ์นดํ | 15,619 | ํด๊ฒ์์์ (์ปคํผ์ยท์ ํต์ฐป์งยท๋์ ํธ) |
| ๊ด๊ด๋ช ์ | 3,844 | ์ ํต์ฌ์ฐฐยท๋ฐ๋ฌผ๊ด/๋ฏธ์ ๊ดยทํ ๋งํํฌยท์ผ์์ฅยทํด์์์ค |
| ๊ตญ๊ฐ์ ์ฐ | 3,437 | ๊ตญ๊ฐ์ ์ฐ์ฒญ(์ ์ ๊ฑด์กฐ๋ฌผยท์์ฐ์ ์ฐยท๋ฑ๋ก๋ฌธํ์ ์ฐ) |
| ์ผ์์ฅ | 1,698 | ๊ณ ์บ ํ(ํ๊ตญ๊ด๊ด๊ณต์ฌ) |
| ์ถ์ | 345 | ์ ๊ตญ๋ฌธํ์ถ์ ํ์ค๋ฐ์ดํฐ(์ง์์ฒด 229๊ณณ โ ํฌํธ ๋ณํฉ) |
| ํฉ๊ณ | 126,873 | ์ง์ญ ์ปค๋ฒ 89/89 ยท ์ง์ญ๋น ์ต์ 305๊ณณ |
- ์์ ์ค์ธ ๊ณณ๋ง ๋ด๋๋ค. ์๋ณธ์๋ ํ์ ์ด ์์ฌ ์๋๋ฐ(๊ฒฝ๋ถ ์๋ฐ์ 41%๊ฐ ํ์ ) ๊ฑฐ๋ฅด์ง ์์ผ๋ฉด ์์ด์ง ๊ฐ๊ฒ๊ฐ ์ฝ์ค์ ๋ค์ด๊ฐ๋ค.
- ์ ์งยทํธ์์ ยท๋ถ์๋งค์ ๋ฑ ์ฌํ์ง๋ก ๋ณผ ์ ์๋ ์ ํ 115,530๊ฑด์ ์ ์ธํ๋ค. ์ฌ๊ธฐ์ ๋ํด ๋ฐฑํ์ ยท์์ธ๋ ยท์ผํ๋ชฐยท๋ํ๋งํธ ์ ์๋นยท์นดํ(216๊ฑด)์ ํธ์์ (465๊ฑด)์ ๋บ๋ค โ ์ ํ ํํฐ๊ฐ ์๋๋ฐ๋ ๋จ์๋ค. ๋ฐฑํ์ ์ ์คํ๋ฒ ์ค์ ์ ํ๋ '์ปคํผ'๊ณ , ํธ์์ ๋ ํด๊ฒ์์์ ์ผ๋ก ๋ฑ๋ก๋๋ฉด '๋ถ์'์ด๋ผ ์ ํ๋ก๋ ๊ฐ๋ฆด ์ ์๋ค. ์์น ๋จ์๊ฐ ์ฃผ์ ๋ฌธ์์ด์๋ง ์์ด ์์ค๋ช ยท๋ธ๋๋๋ช ์ผ๋ก ๊ฑฐ๋ฅด๋, ๋ค๋ฅธ ์ํธ์ ๋ผ๋ ๊ฒ(์ ์ด๋งํธยท์จ์ ๋ฏผ๋ฐยทCUBE)์ ์ ์๋ก ํ์ธํด ์์ธ๋ก ๋๋ค.
- ์ฃผ์์ ์๋ยท์๊ตฐ๊ตฌ๊ฐ ๊ทธ ์ง์ญ๊ณผ ๋ง๋์ง ํ์ธํ๋ค. ์์ ์๋ ์๊ตฐ๊ตฌ ์ด๋ฆ๋ง ๋ง์ผ๋ฉด ๋ถ์ฌ์, ์ ๊ตญ์ ๋๊ตฌยท๋จ๊ตฌ๊ฐ ๋ถ์ฐ ๋๊ตฌยท๋๊ตฌ ๋จ๊ตฌ๋ก ๋นจ๋ ค ๋ค์ด์๋ค(๋ถ์ฐ ๋๊ตฌ๋ 15,701๊ฑด ์ค ๋ถ์ฐ์ด 1,816๊ฑด๋ฟ์ด์๋ค). ๋ฐฐํฌ ํ์ผ์ ์ง์ ์ฌ๋ ํ ์คํธ๊ฐ ์ด ๋ถ๋ณ์์ ์ ๊ทผ๋ค.
- ์ ํ๋ฒํธ๊ฐ 49% ๋ถ์ด ์๋ค. ๊ด๊ด API์๋ ์๋ ์ ๋ณด๋ค.
- ๊ฐฑ์ ์ ๋ถ๊ธฐ 1ํ, ๋น๋ ํ์ ์คํฌ๋ฆฝํธ๋ก ์ฒ๋ฆฌํ๋ค(
scripts/build_place_pool.py).
์ถ์ ๋ TourAPI๊ฐ ๋น์ ๋ ์๋ฆฌ๋ค. ๊ด๊ด API์ ์ถ์ ์กฐํ๋ฅผ 89๊ณณ ์ ์๋ก ๋๋ฆฌ๋ฉด ํฉ๊ณ 1๊ฑด์ด ๋์จ๋ค(์ถ์ 0๊ฑด์ธ ์ง์ญ 86๊ณณ). ํ์นจ ์ค๋ฅ๊ฐ ์๋๋ผ ์ถ์ ํ์ ๋ง ๋น์ด ์๋ ๊ฒ์ผ๋ก, ์๋๊ตญ์ ํ์ถคํ์คํฐ๋ฒ์ด ์๋ ์๋์์กฐ์ฐจ 0์ด์๋ค. ๊ฐ์ 89๊ณณ์ ์ ๊ตญ๋ฌธํ์ถ์ ํ์ค๋ฐ์ดํฐ๋ก ์ฌ๋ฉด 446๊ฑด์ด๊ณ 88/89๊ณณ์ ๋ฎ๋๋ค(0๊ฑด์ ๊ฒฝ๋จ ํจ์๊ตฐ ํ๋). ๊ทธ์ค ์ขํ๊ฐ ์๋ 345๊ฑด๋ง ๋ด๋๋ค โ ์ขํ๊ฐ ์์ผ๋ฉด ๋์ ์ ๋ชป ์ฌ๋ฆฐ๋ค. ์์๋ ๋ณด๋ น์ 26 ยท ์ ์๊ตฐ 25 ยท ํ๋๊ตฐ 25 ยท ์์๊ตฐ 15๊ณณ์ด๊ณ , ์ง์ญ๋น ์ค์๊ฐ์ 3๊ณณ์ด๋ค. ๋ค๋ฅธ ํ๊ณผ ๋ฌ๋ฆฌ ์ฌ์ง์ด ์ค์ง ์๋๋ค. ์ฌํ์ผ์ ์ค์ ๋ก ์ด๋ฆฌ๋ ์ถ์ ๋ง ์ฝ์ค ํ๋ณด๊ฐ ๋๋ฉฐ, ๊ฐฑ์ ์ ์ 1ํ ๋ฐฐ์น๋ค.
์ผ์์ฅ์ ์์์ ๋นํ์ ๋ฉ์ด๋ค โ ์๊ฐ ์๋๋ผ ์ฌ์ง์ด๋ค. ์ธํ๊ฐ ์์๋ 26,365๊ฑด์ผ๋ก ์ง์ญ๋น ํ๊ท 296๊ณณ์ด๋ ๋์ง๋ง ์ฌ์ง์ด ํ ์ฅ๋ ์๋ค. ์ด๋ฆยท์ฃผ์ยท์ ํ๋ฟ์ด๋ผ ์ฝ์ค์ ์ฌ๋ผ๊ฐ๋ ํ๋ฉด์ด ํ์ ํ์ด ๋๋ค. ์ฌ์ง์ด ๋ถ์ ์์๋ ๊ด๊ด API ์ชฝ 922๊ฑด๋ฟ์ด๊ณ , 89๊ณณ์ผ๋ก ๋๋๋ฉด ์ง์ญ๋น ์ด๋ ๊ณณ ๋จ์ง์ด ํ๋ฉด์ ์ธ ์ ์๋ ์ ๋ถ์๋ค.
- ๊ณ ์บ ํ์ ์ฐ๋ฆฌ 89๊ณณ์ผ๋ก ์ฌ๋ฉด ์ด์ ์ค์ธ ๊ฒ์ด 1,702๊ฑด์ด๊ณ ๊ทธ์ค 1,698๊ฑด(99.8%)์ ์ขํ, 1,288๊ฑด(75%)์ ์ฌ์ง์ด ์๋ค. 87/89๊ณณ์ ๋ฎ๊ณ ์ง์ญ๋น ์ค์๊ฐ์ 13๊ณณ์ด๋ค. ๋น ์ง ๋์ ๋ถ์ฐ ๋๊ตฌยท๋๊ตฌ ๋จ๊ตฌ๋ก, ๋์ฌ ์์น๊ตฌ๋ผ ์ผ์์ฅ์ด ์๋ ๊ฒ์ด ์ ์์ด๋ค.
- ๊ฒน์นจ์ ๋จผ์ ์๋ค. ๊ด๊ด API ์์์ ์ด๋ฏธ ์ผ์์ฅ์ด ์์ฌ ์์ด(๋๋ถ๋ฅ ์๋ฐ 977๊ฑด ์ค 625๊ฑด์ด ๋ ํฌ์ธ ํ์ ) ์ด๋ฆ์ด ๊ฐ๊ฑฐ๋ ์ขํ๊ฐ 200m ์ด๋ด์ธ 375๊ฑด์ ์ ์ธํ๋ค. ์์ฆ์ 1,323๊ฑด์ด๊ณ ๊ทธ์ค 964๊ฑด์ ์ฌ์ง์ด ์๋ค โ ์ฌ์ง ์๋ ์์ ํ๋ณด๊ฐ 922 โ 1,886๊ฑด์ด ๋๋ค.
- ํด์ฅ์ ๋ด์ง ์๋๋ค. ์ ๊ตญ 3,115๊ฑด ์ค 123๊ฑด์ด ํด์ฅ์ธ๋ฐ, ๋ฌธ ๋ซ์ ๊ณณ์ ์ฝ์ค์ ๋ฃ์ผ๋ฉด ํ๊ฑธ์์ด๋ผ ์นด๋๊ฐ ๋น๋ ๊ฒ๋ณด๋ค ๋์๋ค.
- ํ์ ๊ด๊ด๋ช ์์๋ ์ผ์์ฅ์ด ์์ง๋ง ๋ค๋ฅธ ๊ฒ์ด๋ค. ๊ทธ์ชฝ์ ์ธํ๊ฐ ๋ฐ์ดํฐ์ ๋ณผ๊ฑฐ๋ฆฌ ๋ถ๋ฅ์ด๊ณ , ์ด ํ์ ์์ ํ๋ณด๋ก ๋ค์ด๊ฐ๋ค.
- ์ด์๊ธฐ๊ฐยท์ด์์ผยท์์ฝ๋ฐฉ๋ฒ์ด ํจ๊ป ์จ๋ค(78~80%). ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ฅ์ ํ ์ค "์ธ์ ์ฌ๋" ์ ๋ตํ๋ ์ ์ผํ ์์ค๋ผ, ์์ธ์์ ์ง๋๋ก ๋๊ธฐ์ง ์๋๋ค.
- ์ฝ์ค์๋ ์ฌ์ง ์๋ ์์๊ฐ ์์ ๋๋ง ์ฌ๋ผ๊ฐ๋ค. ์๋ฐ ์ฌ๋กฏ์ ๋ณผ๊ฑฐ๋ฆฌ ์ค์ฌ์์ ๊ฐ๊น์ด ๊ฒ์ ๋ฝ๋๋ฐ, ์ผ์์ฅ์ ์ฐยท๊ณ๊ณกยท์ ์ ๊ทผ์ฒ๋ผ ๊ทธ ์ค์ฌ์ ๊ฐ๊น๋ค. ๊ฑฐ๋ฆฌ๋ง ๋ณด๋ฉด ์ฌ์ง ์๋ ํธํ ์ ๋ฐ์ด๋ด ์ฌ์ง ์๋ ์์๊ฐ 141 โ 119๊ฑด์ผ๋ก ์คํ๋ ค ์ค์๋ค(83๊ณณ ร 2๋ฐ ์ค์ธก). ๊ทธ๋์ ์์๋ฅผ ๋จผ์ ์ฑ์ฐ๊ณ ๋ชจ์๋ ๋๋ง ์ผ์์ฅ์ ์ด๋ค โ ๊ทธ ๊ฒฐ๊ณผ ์๋ฐ ์๋ฆฌ์ 1%(2์๋ฆฌ) ์๋ง ๋ค์ด๊ฐ๊ณ , ์ฌ์ง ์๋ ์์๋ 166/166 ์ด ๋๋ค.
- ๊ฐฑ์ ์ ์ 1ํ ๋ฐฐ์น๋ค.
๊ตญ๊ฐ์ ์ฐ์ ์ธํ๊ฐ ๋ณผ๊ฑฐ๋ฆฌ์ ๋นํ์ ๋ฉ์ด๋ค. ์ธํ๊ฐ ๊ด๊ด๋ช ์์๋ ์ผ์์ฅยท๊ณจํ์ฅ์ด ์์ฌ ์๋๋ฐ, ๊ตญ๋ณดยท์ฌ์ ยท์ฒ์ฐ๊ธฐ๋ ๋ฌผ์ ๊ทธ ์์ฒด๊ฐ ๊ด๊ด ์์์ด๋ค. 88/89๊ณณ์ ๋ฎ๊ณ ์ง์ญ๋น ์ค์๊ฐ 36๊ณณ์ด๋ฉฐ, ๋ณผ๊ฑฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ์๋ ๊ฒฝ๋ถ(1,489)ยท๊ฒฝ๋จ(1,269)ยท์ ๋จ(992)์ด ๊ฐ์ฅ ๋๊ป๊ฒ ์ฑ์์ง๋ค. ๋๊ตฌ ์๊ตฌ๋ง 0๊ณณ์ธ๋ฐ ๊ทธ ์ง์ญ ๊ตญ๊ฐ์ ์ฐ์ด ๋ฌดํ์ ์ฐ 3๊ฑด๋ฟ์ด๋ผ ๊ทธ๋ ๋ค.
- ์ฌ์ง 97%ยท์ค๋ช 98% ๊ฐ ํจ๊ป ์จ๋ค(์ ์ฌ 3,437๊ฑด ๊ธฐ์ค). ์ธํ๊ฐ ๋ฐ์ดํฐ์๋ ๋ ๋ค ์์ด ์นด๋๊ฐ ๋น์๋ ์๋ฆฌ๋ค.
- ๊ฐ ์ ์๋ ๊ฒ๋ง ๋ด๋๋ค. ์์งํ 6,387๊ฑด ์ค ์ ๋ฌผ(1,409)ยท๊ธฐ๋ก์ ์ฐ(846)ยท๋ฌดํ์ ์ฐ(234)์ ๋๋ถ๋ฅ๋ก ๋นผ๊ณ , ๋๋ถ๋ฅ๊ฐ ํต๊ณผํ ๊ฒ์์๋ ๋ฐ๊ตด ์กฐ์ฌ ๊ตฌ์ญ(
์ ์ ํด์ ์ ๋ฌผ ๋งค์ฅํด์ญ)๊ณผ ๊ฐ์ธ ๋ฌ(์ด๊ท๋ณด ๋ฌ) 292๊ฑด์ ์ค๋ถ๋ฅ๋ก ๋บ๋ค. ์ขํ๋ฅผ ๋ชป ์ฑ์ด 126๊ฑด๊ณผ ์๋ณธ์ ์์ฌ์ง๊ฐ ์๋ 6๊ฑด๋ ๋น ์ง๋ค. ์ข ๋ชฉ์ผ๋ก๋ ์ ๊ฐ๋ฆฐ๋ค โ ์ฐ๋ฆฌ 89๊ณณ์ ๊ตญ๋ณดยท๋ณด๋ฌผ ํ๋ณธ 12๊ฑด์ด ์ ๋ถ๋๊ถ๋ยท์์ ์ด์ถฉ๋ ๋ณํ๊ฐ์ ์์ฅ ์ ๋ฌผ์ด์๊ณ , ์ฃผ์๊ฐ ์์ฅ ๊ธฐ๊ด์ด๋ผ ๊ทธ๋๋ก ์ฐ๋ฉด ๊ทธ๋ฆผ ํ ์ ์ด ๋ชฉ์ ์ง๊ฐ ๋๋ค. ๋ฐ๋๋ก ๊ตญ๋ณดยท๋ณด๋ฌผ์ ํต์งธ๋ก ๋นผ๋ฉด ์ฌ์ฐฐ ๋์ ์ ยท์ํ์ด ํจ๊ป ๋ ์๊ฐ๋ค. ๊ตญ๊ฐ์ ์ฐ์ฒญ์ด ์ฃผ๋ ๋๋ถ๋ฅ๊ฐ ์ ํํ ์ด ๋์ ๊ฐ๋ฅธ๋ค. - ์ขํ๋ฅผ ์ง์ค์ฝ๋ฉ์ผ๋ก ์ฑ์ด๋ค. ์๋ณธ์ 72%๋ง ์ขํ๋ฅผ ์ฃผ๋๋ฐ, ์์ฌ์ง ์ฃผ์๋ฅผ ์นด์นด์คยท๋ค์ด๋ฒ๋ก ์ฎ๊ฒจ 89% ๋ก ์ฌ๋ ธ๋ค.
๋ถ์ฐ๊ด์ญ์ ๋๊ตฌ์ฒ๋ผ ์๊ตฐ๊ตฌ๊น์ง๋ง ์๋ ์ฃผ์๋ ๊ด๊ณต์ ์ขํ๋ก ์ฐํ๋ฏ๋ก ์ผ๋ถ๋ฌ ๋ฒ๋ฆฐ๋ค. - ๊ด๊ด API ์ผ์ผ ํ๋์ ๋ฌด๊ดํ๋ค โ ๊ตญ๊ฐ์ ์ฐ์ฒญ ์์ฒด API ๋ผ ๊ทธ์ชฝ์ด ๋ง๋ผ๋ ์ด ํ๋ณด๋ ์ฐ๋ค.
- ๊ฐฑ์ ์ ์ฐ 1ํ๋ฉด ์ถฉ๋ถํ๋ค(
scripts/build_heritage_pool.py).
์ฌ๊ธฐ์ ๊ด๊ด API(TourAPI) ๊ฐ ์นํ๋ค. ๊ทธ์ชฝ์ ์ฌ์งยท์๊ฐ๊ฐ ๋ถ์ด ํ๋ฉด ํ์ง์ด ๋์ผ๋ฏ๋ก 1์์๋ก ์ฐ๊ณ , ๋ชจ์๋ ์๋ฆฌ๋ง ์ ํ๋ก ์ฑ์ด๋ค.
์ง์ญ ์นด๋์ ๋ํ ์ฌ์ง์ ๋ฐ๋ก ๊ณ ๋ฅธ๋ค. ๊ด๊ด๊ณต์ฌ ์ค์ฌ ๊ด๊ด์ง(์ค์ ์ด๋ ๋ฐ์ดํฐ ๊ธฐ๋ฐ ์์) ์์๋ฅผ ํ์ด ๊ด๊ด์ฌ์ง ๊ฐค๋ฌ๋ฆฌ 6,118๊ฑด์์ ์ฌ์ง์ด ์๋ ์ฒซ ๋ช ์๋ฅผ ์ธ์ด๋ค โ ๊ณต์ฃผ์๋ฉด ๊ณต์ฐ์ฑ์ด๋ค. ํฐ๋ฏธ๋ยท์ญยท๊ณจํ์ฅยท์คํค๋ฆฌ์กฐํธ๊ฐ 1์์ธ ์ง์ญ์ด ํํด์ ์์๋ฅผ ๊ทธ๋๋ก ์ฐ์ง ์๋๋ค. 86/89๊ณณ์ด ๊ฐค๋ฌ๋ฆฌ ์ฌ์ง์ผ๋ก ์ฑ์์ง๊ณ , ๋๋จธ์ง 3๊ณณ๋ง ๊ด๊ด API ์ฌ์ง์ผ๋ก ๋ด๋ ค๊ฐ๋ค.
๊ฐค๋ฌ๋ฆฌ๊ฐ ์ฃผ๋ URL์ 19%๊ฐ ์ฃฝ์ด ์์ด(1,790์ฅ ์ค 345์ฅ์ด 404) ์ ์ฌํ ๋ ์์กด์ ํ์ธํ๊ณ ๋ฒ๋ฆฐ๋ค. ํ์ธํ์ง ์์ผ๋ฉด ์ง์ญ 15๊ณณ์ ๊นจ์ง ์ด๋ฏธ์ง๊ฐ ๊ทธ๋๋ก ๋๊ฐ๋ค.
์ด ํ๋ก์ ํธ๋ ๋๋ฆฌ๊ณ ๋ถ์์ ํ ๊ณต๊ณต API ์์ ์ ์๋ค. ํ๋ฉด ํ๋๊ฐ ์ธ๋ถ API ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ชจ์ผ๋ฏ๋ก, ์ธ๋ถ ์ฅ์ ๊ฐ ๊ณง ์๋น์ค ์ฅ์ ๊ฐ ๋๊ธฐ ์ฝ๋ค. ์ค์ ๋ก ๊ฒช์๋ค โ ๊ด๊ด API ์ผ์ผ ํ๋๊ฐ ์์ง๋์ ์ฝ์ค ์์ฑ์ด ํต์งธ๋ก ๋ฉ์ท๋ค.
๊ทธ๋์ ๋ฐ๋์ง ์๋ ๋ฐ์ดํฐ๋ ๋ฏธ๋ฆฌ DB์ ๋ฃ๋๋ค.
| ๋ฐฉ์ | ๊ท๋ชจ | |
|---|---|---|
| ์์ยท๋ง์งยท์นดํยท๊ด๊ด๋ช ์ | ์ง๋ฐฉํ์ ์ธํ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋น๋ ํ์์ ๊ฐ๊ณต โ ๋ถํ ์ ์ ์ฌ | 122,085๊ฑด |
| 89๊ฐ ์ง์ญ ๋ง์คํฐ | ๋ง์ด๊ทธ๋ ์ด์ seed | 89๊ณณ |
| ๊ณตํด์ผยท๊ด๊ดยท๋ ์จยท๊ตํต | ๋ฐํ์ ํธ์ถ + ์บ์ | 11๊ฐ ํด๋ผ์ด์ธํธ |
ํจ๊ณผ๊ฐ ๋ถ๋ช ํ๋ค. ๊ด๊ด API๊ฐ ์ฃฝ์ด ์์ด๋ ์ฝ์ค๊ฐ ๋์จ๋ค.
๊ด๊ด API๊ฐ ๋๋ํ ์ง์ญ์ ๊ทธ์ชฝ์ ๋จผ์ ์ฐ๊ณ (์ฌ์งยท์๊ฐ๊ฐ ๋ถ๋๋ค), ๋ชจ์๋ ์๋ฆฌ๋ง ์ธํ๊ฐ ๋ฐ์ดํฐ๋ก ์ฑ์ด๋ค. LIC- ์ ๋์ด๋ก ์ถ์ฒ๊ฐ ๊ตฌ๋ถ๋๊ณ , ์์ธ ์กฐํ๋ ๋ฐฑ์๋๊ฐ ์์์ ์ฒ๋ฆฌํ๋ค.
- ์์ฒญ ๊ฒฝ๋ก์์ ์ธ๋ถ I/O๋ฅผ ๋บ๋ค. ์บ์ TTL์ ๋ฐ์ดํฐ ํน์ฑ์์ ๋์ถํ๋ค(์๊ฐ ๋ฐํ โ 6์๊ฐ, ์ค์๊ฐ โ ์์ญ ์ด).
- ํฌ์์์ ๋ณ๋ ฌ. ํ๋ณด N๊ฐ์ ์ธ๋ถ ํธ์ถ์ ๋ถ์ด๋ ์์ฐจ ๋ฃจํ๋ ์ง์ฐ์ด N๋ฐฐ๋ก ๊ณฑํด์ง๋ค.
- timeout์ p99์์ ์ ํ๋ค. ํธ์ถ ํ๋์ ์ํ๊ณผ ์์ ์ ์ฒด์ deadline์ ๋ณ๊ฐ๋ก ๋๋ค.
- ๋น ์๋ต์ ์ฑ๊ณต์ผ๋ก ์บ์ํ์ง ์๋๋ค. ์คํจ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์๋ฐ ์ฑ๊ณต TTL๋ก ๋๋ฅด๋ฉด ๋ฌด์๋ฏธํ ์ํ๊ฐ ๊ทธ๋งํผ ๊ตณ๋๋ค.
๊ทผ๊ฑฐ์ ์ค์ธก์น๋ ADR 0001.
package-by-feature. ๋๋ฉ์ธ์ด ๋๋ ทํ๊ฒ ๋๋๊ณ ์ธ๋ถ API ์ฐ๋์ ๊ฒฉ๋ฆฌํ๋ค.
com.offway.core.<domain>/
โโโ controller/ HTTP ์ง์
ยท <D>Api(OpenAPI ์ธํฐํ์ด์ค) ยท dto(API ๊ณ์ฝ)
โโโ service/ ์ ์ค์ผ์ด์ค ์กฐ์จ ยท @Transactional ๊ฒฝ๊ณ ยท dto(๋ด๋ถ command/result)
โโโ domain/ ์ํฐํฐ ยท ๊ฐ๊ฐ์ฒด ยท enum ยท ์์ธ โ ํ๋ ์์ํฌ ์์กด ์ต์
โโโ repository/ port(interface) + adapter(Impl โ JpaRepository)
โโโ infrastructure/ ์ธ๋ถ API port + adapter
์์กด ๋ฐฉํฅ์ controller โ service โ domain์ด๊ณ , repository์ infrastructure๊ฐ domain์ port๋ฅผ ๊ตฌํํ๋ค.
| ๋๋ฉ์ธ | ์ฑ ์ | ์์ ์ธ๋ถ API |
|---|---|---|
leave |
์ฐ์ฐจยท๊ฐ์ฉ์๊ฐ(LNT)ยท์๋์์น ์ฐํด | ํน์ผ์ ๋ณด |
trip |
์ธ๊ตฌ๊ฐ์์ง์ญยท๊ด๊ด์ง ์ถ์ฒ ยท ์ฅ์ ํ | TourAPI ยท ๊ด๊ด๋น ๋ฐ์ดํฐ |
transport |
๊ตํตยท๋์ | TMAP ยท TAGO(๋ฒ์คยท์ด์ฐจ) |
weather |
๋ ์จ | ๊ธฐ์์ฒญ ๋จ๊ธฐ/์ค๊ธฐ ยท ๊ด๊ด๊ธฐํ์ง์ |
itinerary |
์ฝ์ค ์์ฑ(trip+transport ์กฐํฉ) | โ |
region |
์ธ๊ตฌ๊ฐ์์ง์ญ 89๊ณณ ๋ง์คํฐยทํ๊ทธ | โ |
policy |
์ฌํ ํํ ๋งค์นญ | โ |
user |
์ฌ์ฉ์ยท์ธ์ฆ | OAuth (ํ์์) |
์ธ๋ถ API๋ ์์ ๋๋ฉ์ธ์ infrastructure/์ port+adapter๋ก ๋๋ค. ๋ค๋ฅธ ๋๋ฉ์ธ์ด ํ์ํ๋ฉด ์์ ๋๋ฉ์ธ์ service๋ฅผ ๊ฑฐ์น๋ค โ ์ง์ ํธ์ถํ์ง ์๋๋ค.
๋๋ฉ์ธ ๊ฐ ์ฐธ์กฐ๋ raw ID + ์๋น์ค ์กฐํ๋ค. JPA ์ฐ๊ด๊ด๊ณ๋ ์ ๊ทธ๋ฆฌ๊ฑฐํธ ๋ด๋ถ์๋ง ์ด๋ค(Itinerary โ ItineraryItem ๊ฐ์ ๊ฒ). ๋๋ถ๋ถ์ ์ฐธ์กฐ ๋์์ด ์ธ๋ถ API์์ ์จ ๋ ํผ๋ฐ์ค ๋ฐ์ดํฐ๋ผ ์จ์ ํ ์ํฐํฐ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ชจ๋ ์๋ต์ด ๊ฐ์ ๋ํผ๋ฅผ ์ด๋ค. ์ปจํธ๋กค๋ฌ๋ ApiResponseBody<T>๋ฅผ ๋ฐํํ๊ณ raw DTO๋ฅผ ๋
ธ์ถํ์ง ์๋๋ค.
{
"status": 200,
"data": { ... }, // ์คํจ ์ null
"detail": "์์ฒญ์ด ์ ์ ์ฒ๋ฆฌ๋์์ต๋๋ค.",
"code": "OK", // ์คํจ ์ ๋๋ฉ์ธ ์ฝ๋ (LEAVE-001, TOUR-003 ...)
"pageResponse": null // ๋ชฉ๋ก ์๋ต์๋ง
}๋ฌธ๊ตฌ๊ฐ ์๋๋ผ code(์: TRIP-001)๋ก ์ฌ์ ๋ฅผ ๊ฐ๋ฅธ๋ค. ๋๋ฉ์ธ๋ณ *ErrorCode enum์ด codeยทcategoryยทmessage๋ฅผ single source๋ก ๊ฐ๊ณ , HTTP status๋ ErrorCategory์์ ํ์ํ๋ค โ ์์ธ๊ฐ status๋ฅผ ์ง์ ๋ค์ง ์๋๋ค.
๋ฒํธ๋ append-only๋ค. ์ฌ์ฌ์ฉยท์ฌ๋ฐฐ์นํ์ง ์๊ณ ๊ฒฐ๋ฒ์ ์ ์งํ๋ค(์ฝ๋๊ฐ ํด๋ผ์ด์ธํธ ๊ณ์ฝ์ด๋ฏ๋ก).
์ธํ๊ฐ ๋ฐ์ดํฐ๋ก ์ฑ์ด ์ฌ๋กฏ์ ์ฌ์งยท์๊ฐ๊ฐ ์์ด ๋งค๋ฒ null์ด ์ค๋ ธ๋ค. ์ฝ์ค ์๋ต์์ ๊ทธ๋ฐ ํ๋๋ฅผ ๋บ๋ค โ ์๋ต์ด 16% ๊ฐ๋ฒผ์์ก๋ค(3,077์ โ 2,572์, null ํ๋ 26๊ฐ โ 0๊ฐ).
๋ค๋ง ๋ํผ์ dataยทpageResponse๋ null๋ก ๋๊ฐ๋ ๊ฒ์ด ๊ณ์ฝ์ด๋ผ ์ ์ญ ์ค์ ์ผ๋ก ์ผ์ง ์๋๋ค.
- HTTP 204๋ฅผ ์ฐ์ง ์๋๋ค. ๋ํผ๊ฐ ํญ์ body๋ฅผ ๋ง๋ค๋ฏ๋ก "body ์์"์ด ๋ณธ์ง์ธ 204์ ์ถฉ๋ํ๋ค. ๋ด๋ฆด ๋ฐ์ดํฐ๊ฐ ์์ผ๋ฉด 200 +
data: null. - ํ๋ ์์ํฌ ์์ธ(๊นจ์ง JSONยท์๋ชป๋ ๋ฉ์๋)๋
ResponseEntityExceptionHandler๋ฅผ ์์ํด Spring์ด ํ์ ํ 4xx๋ฅผ ๊ทธ๋๋ก ์ด๋ค. 500์ผ๋ก ๋ฎ์ผ๋ฉด ํด๋ผ์ด์ธํธ ์ค์๊ฐ ์๋ฒ ์ค๋ฅ๋ก ๋๊ฐํ๋ค.
์ธ๋ถ๋ ์์ธยท์๋ต ๊ท์ฝ.
๋ชจ๋ ์๋ํฌ์ธํธ๊ฐ HTTP Basic ์ธ์ฆ์ ์๊ตฌํ๋ค. ์ธ๋ถ์ ์ด๋ฆฐ ํฌํธ๋ก ์๋ฌด๋ ์ฐ๋ฆฌ ์ธ๋ถ API ํค๋ฅผ ํ์ฐ์ง ๋ชปํ๊ฒ ๋ง๋ ์์ ๊ฒ์ดํธ๋ค โ TMAP ๊ฒฝ์ ์ง ์ต์ ํ๋ ํ๋ฃจ 50๊ฑด์ด๋ผ ๋ด ํ ๋ง๋ฆฌ๋ก ๊ณ ๊ฐ๋๋ค.
Authorization: Basic base64(์์ด๋:๋น๋ฐ๋ฒํธ)
์ธ์ฆ ์คํจ๋ 401 + ๊ณตํต ๋ํผ(code: COMMON-401). ์์
๋ก๊ทธ์ธ์ด ๋ถ์ผ๋ฉด ์ด ๊ฒ์ดํธ๋ ๊ฑท์ด๋ธ๋ค.
ํ์ฌ ๋ฐฐํฌ๋ ํ๋ฌธ HTTP๋ค. Basic ์ธ์ฆ์ ์๊ฒฉ์ฆ๋ช ์ Base64๋ก ์ธ์ฝ๋ฉ๋ง ํ๋ฏ๋ก(์ํธํ๊ฐ ์๋๋ค) ๊ฐ์ ๋คํธ์ํฌ ๊ฒฝ๋ก์์ ์ฝํ๋ค. ํ ๋ด๋ถ ํ ์คํธ์ฉ์ด๋ผ ๊ฐ์ํ๊ณ ์์ผ๋, ์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ธฐ ์ ์ HTTPS ์ข ๋จ์ด ์ ํ๋ผ์ผ ํ๋ค.
main์ผ๋ก ๊ฐ๋ ๊ธธ๋ชฉ์ ๋ค ๊ฐ์ง๊ฐ ๊ฑธ๋ ค ์๋ค.
| ๋ฌด์ | |
|---|---|
| build & test | ์ปดํ์ผ + ์ ์ฒด ํ ์คํธ (Testcontainers MySQL) |
| ์ปจ๋ฒค์ ๊ฒ์ฌ | FK ์ ์ฝยทFetchType.EAGERยท@MockBeanยทdomain setter ๋ฑ์ ์์ค ์ ์๋ก ์ฐจ๋จ + PR ์ปค๋ฐ ๋ฉ์์ง ํ์ |
| MySQL ๋ง์ด๊ทธ๋ ์ด์ ๊ฒ์ฆ | ์ค์ MySQL 8.4์ Flyway 20๊ฐ๋ฅผ ์ ์ฉํด ๋ณธ๋ค. H2๋ก๋ง ๋๋ฉด ALTER COLUMN vs MODIFY ๊ฐ์ ๋ฐฉ์ธ ์ฐจ์ด๋ฅผ ๋ฐฐํฌ ์ค์์ผ ์๋ค |
| CodeRabbit | ์ฝ๋ ๋ฆฌ๋ทฐ |
๋ฐฐํฌ๋ dev ๋จธ์ง ์ ์๋์ผ๋ก ๋๋ค. ๊ธฐ๋ ํ์ธ โ ์ค๋ชจํฌ โ ์คํจ ์ ์ด์ ์ด๋ฏธ์ง๋ก ๋กค๋ฐฑ๊น์ง ์ํฌํ๋ก์ฐ๊ฐ ์ฒ๋ฆฌํ๋ค. ์ค๋ชจํฌ๋ ์ํ ์ฝ๋๋ง ๋ณด์ง ์๊ณ ์ ์ฌ ๊ฑด์๊น์ง ํ์ธํ๋ค โ "200์ธ๋ฐ ๋ด์ฉ์ด ๋น" ๋ฐฐํฌ๋ฅผ ์ฑ๊ณต์ผ๋ก ๋๊ธฐ์ง ์๊ธฐ ์ํด์๋ค.
scripts/prod-logs.sh # ์ต๊ทผ 200์ค + ๊ณ์ ๋ฐ๋ผ๊ฐ๊ธฐ
scripts/prod-logs.sh --level WARN # WARN ์ด์๋ง
scripts/prod-logs.sh --trace a1b2c3 # ์์ฒญ ํ๋๋ง๋ฐฐํฌ๊ฐ ์ฑ๊ณต์ด๊ณ API๊ฐ 200์ธ๋ฐ ํ๋ฉด๋ง ์ด์ํ ๊ฒฝ์ฐ๊ฐ ์๋ค โ ์ ์ฌ ๋ฐฐ์น๊ฐ ์กฐ์ฉํ ์คํจํ์ ๋๋ค. ๊ทธ๋ ๋ต์ ์๋ฒ ๋ก๊ทธ์ ์๋ฃ ํ ์ค์ ์๋ค. traceId๋ ๊ฐ์์ ์์ ๋ฝ์ผ๋ฏ๋ก, ํ ์์ฒญ์ด ๋จ๊ธด ๋ก๊ทธ๊ฐ ํฉ์ด์ ธ ์์ด๋ ์์ผ๋ก ์ด์ด ๋ณผ ์ ์๋ค.
์ ์ํ๋ ค๋ฉด ๋ณด์๊ทธ๋ฃน์ ์๊ธฐ IP๊ฐ 22๋ฒ์ผ๋ก ์ด๋ ค ์์ด์ผ ํ๋ค. ๋ฐฐํฌ ์ํฌํ๋ก์ฐ๋ ๋ฌ๋ IP๋ง ์ ๊น ์ด๊ณ ํ์ํ๋ฏ๋ก ํ์์ ๋ซํ ์๋ ๊ฒ์ด ์ ์์ด๋ค.
์ด ํ๋ก์ ํธ๋ ๊ท์ฝ์ ๋ฌธ์์ ์ ๊ณ ๊ธฐ๊ณ๋ก ๊ฐ์ ํ๋ค.
- ๋งค์ง ๊ฐ ๊ธ์ง(์์ยทenum), rich domain, DIP, ๋คํ์ฑ โ CLAUDE.md
- ํ๋จ์ด ํ์ ์๋ ๊ฒ(FKยทEAGERยท204ยท
@MockBean๋ฑ)์ ํ ๊ณผ CI๊ฐ ์ฐจ๋จํ๋ค - ํ๋จ์ด ํ์ํ ๊ฒ(์์ฐจ ํฌ์์ยท์บ์ ํค ์ํยทtimeout ๊ทผ๊ฑฐ)์ PR self-audit์ด ๋ด๋นํ๋ค
| ๋ฌธ์ | ๋ด์ฉ |
|---|---|
| CLAUDE.md | ๊ฐ๋ฐ ๊ท์ฝ (์ํคํ ์ฒยท๊ฐ์ฒด์งํฅ ์คํ์ผยท์ฑ๋ฅยท์ฉ์ด์ง) |
| .claude/rules/ | ์ฃผ์ ๋ณ ์ธ๋ถ ๊ท์ฝ (์์ธ/์๋ต ยท ์์์ฑ ยท API ยท ํ ์คํธ) |
| docs/adr/ | ์ค๊ณ ๊ฒฐ์ ๊ธฐ๋ก |
| docs/external-api-inventory.md | ์ธ๋ถ ๊ณต๊ณต๋ฐ์ดํฐ ์ธ๋ฒคํ ๋ฆฌยท๋ฐ๊ธ ์ฒดํฌ๋ฆฌ์คํธ |
Spring Boot 4.1 ยท Java 25 ยท Lombok ยท JPA ยท Flyway ยท MySQL ยท Redis ยท Spring Security ยท WebFlux(WebClient)
๋ฒ์ ์ ๋จ์ผ ์ง์ค ์์ฒ์
build.gradle.kts.
๋ก์ปฌ์ ๋์ปค๋ก ๋์ด MySQL์ ์ด๋ค(docker compose up -d). ์ด์๊ณผ ๊ฐ์ DB๋ก ๋๋ ค์ผ ๋ง์ด๊ทธ๋ ์ด์
๋ฌธ๋ฒ ์ค๋ฅ๋ฅผ ๋ก์ปฌ์์ ์ก์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค โ H2 ์์ ์ ๋ก์ปฌ์ด ์ ๋ถ ์ด๋ก์ธ๋ฐ MySQL์์ ๊นจ์ง๋ ์ผ์ด ์ค์ ๋ก ์์๋ค.
์ธ๋ถ API ํค๋ ์์ด๋ ๋ถํ ๋๋ค(์ค์ ํธ์ถ๋ง ๋นํ์ฑ). ์ด๊ฑด ๊ท์ฝ์ด๋ค โ ๋ถํ ์ ์ค ํค๋ฅผ ๊ฐ์ ํ๋ ๋ณ๊ฒฝ์ ๊ธ์งํ๋ค. CI ์ค๋ชจํฌ๊ฐ ๋นจ๊ฐ๋ถ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.