๐Ÿ“š [KB IT's Your Life] Spring MVC์™€ ํŒฉํ† ๋ฆฌ ๋””์ž์ธ ํŒจํ„ด

JUNยท2024๋…„ 8์›” 12์ผ
3

KB IT's your life

๋ชฉ๋ก ๋ณด๊ธฐ
4/16
post-thumbnail

์„œ๋ก 

์•ˆ๋…•ํ•˜์„ธ์š”! ์ด๋ฒˆ์ฃผ๋Š” ํ•™์Šต๋Ÿ‰์ด ์กฐ๊ธˆ ๋ฐฉ๋Œ€ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™๋„ค์š”!
์•„๋ฌด๋ž˜๋„ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ค€๋น„์™€ ํ•จ๊ป˜ KB Ai Finance ๊ณต๋ชจ์ „๊นŒ์ง€ ๊ฒน์ณ ์ •๋ง ๋ฐ”์œ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~

ํ•˜์ง€๋งŒ, ์ด๋Ÿด ๋•Œ์ผ์ˆ˜๋ก ๊ธฐ๋ณธ์— ์ถฉ์‹คํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜์ฃ !
์˜ค๋Š˜์€ ์ด๋ฒˆ์ฃผ์ฐจ์— ๋ฐฐ์šด ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ํ•ต์‹ฌ์ด ๋˜๋Š” Spring MVC์™€ ํŒฉํ† ๋ฆฌ ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•ด ์‹ฌ๋„ ์žˆ๊ฒŒ ๋‹ค๋ค„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Spring MVC ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ตฌ์กฐ์  ๊ธฐ์ดˆ

Spring MVC๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ฒด๊ณ„์ ์œผ๋กœ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๊ฐ•๋ ฅํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ „ํ†ต์ ์ธ MVC ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ Model, View, Controller์˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋กœ ๋ถ„๋ฆฌํ•ด ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

  1. Model: ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ์™€ ๊ทธ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ, ์ด ๊ณผ์ •์—์„œ
    DTO(Data Transfer Object),
    VO(Value Object),
    DAO(Data Access Object) ๋“ฑ์˜ ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
    ๋ชจ๋ธ ๊ณ„์ธต์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋น„์Šค ๊ณ„์ธต๊ณผ๋„ ๋ฐ€์ ‘ํ•˜๊ฒŒ ์—ฐ๊ด€๋ฉ๋‹ˆ๋‹ค.

  2. View: ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.
    JSP๋‚˜ Thymeleaf์™€ ๊ฐ™์€ ํ…œํ”Œ๋ฆฟ ์—”์ง„์ด ์ด ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” UI๋ฅผ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
    ์ด ๊ณ„์ธต์€ ์ปจํŠธ๋กค๋Ÿฌ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ํ™”๋ฉด์„ ๋ Œ๋”๋งํ•ฉ๋‹ˆ๋‹ค.

  3. Controller: ์‚ฌ์šฉ์ž์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ๊ทธ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฅผ Model์—์„œ ๊ฐ€์ ธ์™€ View์— ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
    Spring MVC์—์„œ ์ปจํŠธ๋กค๋Ÿฌ๋Š” @Controller์™€ @RestController ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ ์ •์˜๋˜๋ฉฐ, HTTP ์š”์ฒญ์„ ๋งคํ•‘ํ•˜๊ณ  ํ•ด๋‹น ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•ต์‹ฌ์ ์ธ ๊ณ„์ธต์ž…๋‹ˆ๋‹ค.

Spring MVC๋Š” ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ๋ถ„๋ฆฌ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์‘์ง‘๋„๋ฅผ ๋†’์ด๊ณ , ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋Œ€๊ทœ๋ชจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ์  ์„ค๊ณ„๋Š” ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.

์Šคํ”„๋ง MVC ์˜ ์ „์ฒด์ ์ธ ๊ตฌ์กฐ๋„

ํŒฉํ† ๋ฆฌ ๋””์ž์ธ ํŒจํ„ด๊ณผ Spring์˜ ์–ด๋…ธํ…Œ์ด์…˜

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

  • @Controller: ์ด ์–ด๋…ธํ…Œ์ด์…˜์€ Spring์ด ์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์—์„œ ํŒฉํ† ๋ฆฌ ํŒจํ„ด์ด ์ ์šฉ๋˜์–ด ๊ฐ์ฒด ์ƒ์„ฑ์˜ ๋ณต์žก์„ฑ์ด ์ˆจ๊ฒจ์ง‘๋‹ˆ๋‹ค.

  • @Service: ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์— ์ ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ, Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ๋นˆ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ถ„๋ฆฌ๋˜์–ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ด€๋ฆฌ๋˜๋„๋ก ๋„์™€์ค๋‹ˆ๋‹ค.

  • @Repository: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•˜๋Š” ๊ณ„์ธต์— ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉฐ, ํŒฉํ† ๋ฆฌ ํŒจํ„ด์„ ํ†ตํ•ด ๊ฐ์ฒด ์ƒ์„ฑ๊ณผ ๊ด€๋ฆฌ๋ฅผ ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ Spring์˜ DI(Dependency Injection) ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๊ฒฐํ•ฉ๋˜์–ด ๊ฐ์ฒด์˜ ์ƒ๋ช… ์ฃผ๊ธฐ์™€ ์˜์กด์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
Spring์ด ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ์–ด๋…ธํ…Œ์ด์…˜๋“ค์€ ํŒฉํ† ๋ฆฌ ๋””์ž์ธ ํŒจํ„ด์˜ ์›๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ๋”์šฑ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒฉํ† ๋ฆฌ ๋””์ž์ธ ํŒจํ„ด์€ ๊ฐ์ฒด ์ƒ์„ฑ ๋กœ์ง์„ ๋ณ„๋„์˜ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋กœ ์บก์Šํ™”ํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ์˜ ๊ตฌ์ฒด์ ์ธ ๊ณผ์ •์„ ์ˆจ๊ธฐ๋Š” ๋””์ž์ธ ํŒจํ„ด์ž…๋‹ˆ๋‹คโ 

์ฃผ์š” ํŠน์ง•

  • ๊ฐ์ฒด ์ƒ์„ฑ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹คโ 
  • ๊ฐ์ฒด ์ƒ์„ฑ ๊ณผ์ •์„ ํด๋ผ์ด์–ธํŠธ ์ฝ”๋“œ๋กœ๋ถ€ํ„ฐ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค
  • ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ๊ณผ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค

์Šคํ”„๋ง ์˜์กด์„ฑ ์ฃผ์ž…(DI)๊ณผ @Autowired

Spring์˜ ์˜์กด์„ฑ ์ฃผ์ž…(DI)์€ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด์„ฑ์„ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์œ ์—ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ•˜๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. @Autowired ์–ด๋…ธํ…Œ์ด์…˜์€ ์ด๋Ÿฌํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด๋‚˜ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š๊ณ ๋„ ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, GreetingService ํด๋ž˜์Šค๋ฅผ ์ปจํŠธ๋กค๋Ÿฌ์— ์ฃผ์ž…ํ•˜๋ ค๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

@Autowired
private GreetingService greetingService;

์ด์™€ ๊ฐ™์ด Spring์€ ์˜์กด์„ฑ ์ฃผ์ž…์„ ํ†ตํ•ด
์ด์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•œ ์„ค์ •๋งŒ์œผ๋กœ๋„, Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์ฃผ์ž…ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ๊ฐ„์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๊ณ , ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์ฃผ์š” ์–ด๋…ธํ…Œ์ด์…˜๋“ค๋„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค:

์–ด๋…ธํ…Œ์ด์…˜์„ค๋ช…ํŠน์ง•
@Controller์›น ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋กœ, Spring ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ด๋ฅผ ๋นˆ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌ์ฃผ๋กœ MVC ํŒจํ„ด์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• , HTTP ์š”์ฒญ ์ฒ˜๋ฆฌ ๋‹ด๋‹น
@Service๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„, Spring ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๋นˆ์œผ๋กœ ๊ด€๋ฆฌ
@Repository๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•˜๋Š” ํด๋ž˜์Šค์— ์‚ฌ์šฉ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต, Spring ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๋นˆ์œผ๋กœ ๊ด€๋ฆฌ
@Component์ผ๋ฐ˜์ ์ธ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•  ํด๋ž˜์Šค๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉSpring ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ๋นˆ, ํŠน๋ณ„ํ•œ ์—ญํ• ์ด ์—†๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ
@RestControllerRESTful ์›น ์„œ๋น„์Šค์˜ ์ปจํŠธ๋กค๋Ÿฌ ํด๋ž˜์Šค๋กœ ์‚ฌ์šฉ@Controller์™€ ์œ ์‚ฌํ•˜๋‚˜, ์ฃผ๋กœ JSON/XML ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜
@Configuration์„ค์ • ํŒŒ์ผ์„ ๋‚˜ํƒ€๋‚ด๋Š” ํด๋ž˜์Šค์— ์‚ฌ์šฉSpring ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด ์„ค์ • ๋นˆ์œผ๋กœ ๊ด€๋ฆฌ, Bean ์ •์˜ ํฌํ•จ
@Bean๋ฉ”์„œ๋“œ ๋ ˆ๋ฒจ์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฐ˜ํ™˜๋œ ๊ฐ์ฒด๋ฅผ Spring ์ปจํ…Œ์ด๋„ˆ์—์„œ ๋นˆ์œผ๋กœ ๊ด€๋ฆฌ์ฃผ๋กœ @Configuration ํด๋ž˜์Šค ๋‚ด์—์„œ ์‚ฌ์šฉ, ์ปค์Šคํ…€ ๋นˆ ์ •์˜

๋งˆ๋ฌด๋ฆฌ

Spring MVC์™€ ํŒฉํ† ๋ฆฌ ๋””์ž์ธ ํŒจํ„ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์˜ ๊ธฐ์ดˆ ๊ตฌ์กฐ์™€ ํšจ์œจ์ ์ธ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒจํ„ด๊ณผ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ฝ”๋“œ์˜ ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

profile
์ˆœ๊ฐ„์€ ๊ธฐ๋กํ•˜๊ณ  ๋ฐ˜๋ณต์€ ๋‹จ์ˆœํ™”ํ•˜์ž ๐Ÿš€

6๊ฐœ์˜ ๋Œ“๊ธ€

comment-user-thumbnail
2024๋…„ 8์›” 12์ผ

์ข‹์€ ์ •๋ณด ์–ป์–ด๊ฐ‘๋‹ˆ๋‹ค !

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2024๋…„ 8์›” 12์ผ

์™€ ์›ํ”ผ์Šค! ์กฐ๋กœ! ๐Ÿ‘

1๊ฐœ์˜ ๋‹ต๊ธ€
comment-user-thumbnail
2024๋…„ 8์›” 12์ผ

๋””์ž์ธ ํŒจํ„ด๊ณผ ์–ด๋…ธํ…Œ์ด์…˜ ๊ฐœ๋…์ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด ๋ณด๊ธฐ ์ข‹์•„์š”!!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ
comment-user-thumbnail
2024๋…„ 8์›” 12์ผ

์˜ค๋Š˜๋„ ์ข‹์€ ์ •๋ณด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ