๐ŸŒผ Spring ๊ธฐ์ดˆ โ‘ก - ํ”„๋ ˆ์ž„์›Œํฌ, ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ / TIL - day 21

ํ•˜๋ฆฌ๋น„ยท2025๋…„ 3์›” 19์ผ
2

๐ŸŒผ Spring

๋ชฉ๋ก ๋ณด๊ธฐ
3/11
post-thumbnail

โ–ช๏ธํ”„๋ ˆ์ž„์›Œํฌ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


๐Ÿ“– ํ”„๋ ˆ์ž„์›Œํฌ

๐Ÿ’ก ๋ถ•์–ด๋นต์„ ๋งŒ๋“ค๋• ๋ถ•์–ด๋นตํ‹€์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค ! ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“ค๋•Œ ํ‹€

๐Ÿ“Œ ์žฅ์ 

  • ์ผ๊ด€๋œ ๊ตฌ์กฐ๋กœ ํŒ€ ํ˜‘์—… ํŽธํ•ด์ง
  • ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๊ณผ ๋„๊ตฌ(๋ณด์•ˆ๊ด€๋ จ ๊ธฐ๋Šฅ๊นŒ์ง€)๋ฅผ ์ œ๊ณต, ๊ฐœ๋ฐœ์ž๋“ค์€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์— ์ง‘์ค‘ ๊ฐ€๋Šฅ
  • ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์„œ๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค (์ปค๋ฎค๋‹ˆํ‹ฐ)

๐Ÿ“Œ ๋‹จ์ 

  • ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•˜๋‹ค ๋ณด๋‹ˆ ์ฒ˜์Œ ๋ฐฐ์šธ๋•Œ ์‹œ๊ฐ„ ๋งŽ์ด ์†Œ์š”๋œ๋‹ค
  • ๋ฒ„์ „์ด ๋‹ฌ๋ผ์ง€๋ฉด ๊ธฐ์กด ์ฝ”๋“œ์™€ ํ˜ธํ™˜์ด ๋ถˆ๊ฐ€ํ• ์ˆ˜๋„
  • ํ‹€์ด ์žˆ๋‹ค๋ณด๋‹ˆ ์ž์œ ๋กญ๊ฒŒ ๋ณ€๊ฒฝ์€ ๋ถˆ๊ฐ€


๐Ÿ“– ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

๐Ÿ’ก ๋„์„œ๊ด€์—์„œ ์ฑ… ์ฐพ์•„์ฝ๋“ฏ, ์†Œํ”„ํŠธ์›จ์–ด ๋งŒ๋“ค๋•Œ ํ•„์š”ํ•œ ๋„๊ตฌ๋ฅผ ๊บผ๋‚ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค

๐Ÿ“Œ ์žฅ์ 

  • ๋ˆ„๊ตฐ๊ฐ€ ๋งŒ๋“ค์–ด ๋‘์—ˆ๊ธฐ์— ์ง์ ‘ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์•„๋„ ๋˜๊ณ , ๊ฐœ๋ฐœ์ƒ์‚ฐ์„ฑ ๋†’์•„์ง„๋‹ค
  • ๊ฒ€์ฆ๋œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ โž ํ’ˆ์งˆ ๋ณด์žฅ

๐Ÿ“Œ ๋‹จ์ 

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


โ–ช๏ธ Annotation


๐Ÿ“– Annotation

๐Ÿ’ก Java์˜ ์ฃผ์„๊ณผ ๋น„์Šท ( ์‚ฌ๋žŒ์—๊ฒŒ ์ •๋ณด ์ œ๊ณต ) , ์–ด๋…ธํ…Œ์ด์…˜์€ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์ •๋ณด ์ œ๊ณต
์ฝ”๋“œ์— ํŠน๋ณ„ํ•œ ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๊ฑฐ๋‚˜, ํŠน์ • ๋™์ž‘์„ ํŠธ๋ฆฌ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • Annotation @๋กœ ์‹œ์ž‘, ๋‹ค์–‘ํ•œ ๋ ˆ๋ฒจ์— ์œ„์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค

๐Ÿ“Œ ๋‚ด์žฅ Annotation

  • @Override
    : ์ƒ์œ„ ํด๋ž˜์Šค๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜๊ณ  ์žˆ์Œ
    (์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์‹ค์ œ ์˜ค๋ฒ„๋ผ์ด๋“œ ์ค‘์ธ์ง€ ํ™•์ธ)

  • @Deprecated
    : ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์š”์†Œ๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ
    (์ด ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ปดํŒŒ์ผ ๊ฒฝ๊ณ  ๋ฐœ์ƒ)

  • SuppressWarnings
    : ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ  ์–ต์ œ
    (์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฌด์‹œํ•  ์ˆ˜ ์žˆ๋‹ค)

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ •์˜ Annotation

  • ํ•„์š”์— ๋”ฐ๋ผ ์–ด๋…ธํ…Œ์ด์…˜์„ ์ปค์Šคํ…€ ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, AOP๋ฅผ ๊ฒฐํ•ฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค


๐Ÿ“– Lombok

๐Ÿ’ก ์–ด๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘, ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ค„์—ฌ์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
์ฃผ๋กœ ์ปดํŒŒ์ผ ์‹œ์ ์— ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋กœ ๋ณ€ํ™˜
*๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ -getter setter ๋ฉ”์„œ๋“œ ์ƒ์„ฑ์ž ๋“ฑ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑ๋˜๋Š” ์ฝ”๋“œ

๐Ÿ“Œ ์ฃผ์š” Lombok Annotation

  • @Getter, @Setter

    • ํด๋ž˜์Šค ๋‚ด๋ถ€์— ๋ชจ๋“  ํ•„๋“œ์— ๋Œ€ํ•ด getter ,setter๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

  • @ToString

    • ๊ฐ์ฒด์˜ toString() ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

  • @EqualsAndHashCode

    • equals()์™€ hashCode() ๋ฉ”์„œ๋“œ๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ

  • โถ@NoArgsConstructor โท@AllArgsConstructor โธ@RequiredArgsConstructor

    • โถ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑ
    • โท ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ƒ์„ฑ
    • โธ ํ•„์ˆ˜(final) ํ•„๋“œ๋งŒ์„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ํ•˜๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • @Data

    • @Getter, @Setter, @ToString, @EqualsAndHashCode,@RequiredArgsConstructor๋ฅผ ํ•œ๊บผ๋ฒˆ์— ์ ์šฉ
    • ์ฃผ๋กœ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ ์‚ฌ์šฉ (์ž˜ ์•ˆ์”€)
  • @Builder

    • ๋ณต์žกํ•œ ๊ฐ์ฒด๋“ค์„ ํ•„๋“œ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด์„œ ํŽธํ•˜๊ฒŒ ์ƒ์„ฑ ๊ฐ€๋Šฅ
      User user = User.builder()
                  .name("John")
                  .age(30)
                  .build();
  • @Slf4j

    • ํด๋ž˜์Šค์— ๋กœ๊ทธ๋ฅผ ๋‚จ๊ธฐ๊ธฐ ์œ„ํ•œ Logger ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
      @Slf4j
      public class UserService {
      		    public void logMessage() {
      		        log.info("This is a log message");
      	}
      }


โ–ช๏ธSpring Framework์™€ Spring Boot โ–ช๏ธ


๐Ÿ“– Spring Framework

๐Ÿ’ก ์ž๋ฐ”๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์ž์ฃผ ์‚ฌ์šฉ
*์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ : ๋Œ€๊ทœ๋ชจ ๋น„์ฆˆ๋‹ˆ์Šค ํ”„๋กœ์„ธ์Šค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜

๐Ÿ“Œ ํŠน์ง•

  • ๋‹ค์–‘ํ•œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๊ด€๋ฆฌ
  • ๋ˆ„๊ตฌ๋‚˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์˜คํ”ˆ ์†Œ์Šค
  • ๋ชจ๋“ˆํ™”๋˜์–ด ์žˆ์–ด ํŠน์ • ๊ธฐ๋Šฅ๋งŒ ์„ ํƒ์  ์‚ฌ์šฉ๋„ ๊ฐ€๋Šฅ
  • Java์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์ธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์˜ ํŠน์ง•์„ ์‚ด๋ ค๋‚ธ ํ”„๋ ˆ์ž„์›Œํฌ


๐Ÿ“– Spring Boot

๐Ÿ’กSpring Framework๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋„๊ตฌ

๐Ÿ“Œ ํŠน์ง•

  • ์ž๋™๊ตฌ์„ฑ(Auto-configuration) ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์„œ ์ง์ ‘ ๋ณต์žกํ•œ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค -> ์ƒ์‚ฐ์„ฑ ๋†’์•„์ง

  • ๋‚ด์žฅ WAS(Tomcat)๋ฅผ ์ œ๊ณตํ•ด์„œ ์„œ๋ฒ„ ์„ค์ • ์—†์ด ๋ฐ”๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ

  • ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ(spring-boot-starter-web)๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋ชจ๋“  ์ข…์†์„ฑ๊ณผ ์„ค์ •๋„ ์ž๋™ ๊ตฌ์„ฑ

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ์•Œ์•„์„œ ํ˜ธํ™˜ ๊ฐ€๋Šฅํ•œ ๋ฒ„์ „ ์ฐพ๊ณ  ์„ค์ •๊นŒ์ง€!!
    ( 100% ํ•ด๊ฒฐ์€ ์•„๋‹์ง€๋„ )



โ–ช๏ธ ๋นŒ๋“œ ๊ด€๋ฆฌ ๋„๊ตฌ โ–ช๏ธ


๐Ÿ“– Gradle

Java์™€ ์œ ์‚ฌํ•œ ๋ฌธ๋ฒ• ๊ตฌ์กฐ๋กœ Groovy๊ธฐ๋ฐ˜์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ

โœ”๏ธ ๋นŒ๋“œ?

  • ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€ํ™˜
  • ๋นŒ๋“œ์— ํ•„์š”ํ•œ ๊ณผ์ •

โœ”๏ธ ๋นŒ๋“œ ์ž๋™ํ™” ๋„๊ตฌ

  • Gradle์€ ๋นŒ๋“œ ๋ฟ ์•„๋‹ˆ๋ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…Œ์ŠคํŠธ ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌ๋„ ํ•  ์ˆ˜ ์žˆ๋‹ค

๐Ÿ“Œ ํŠน์ง•

  • 1๏ธโƒฃ ์œ ์—ฐ์„ฑ
    - ์ง์ ‘ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ

  • 2๏ธโƒฃ ์„ฑ๋Šฅ ์ข‹๋‹ค
    - ๋นŒ๋“œ ๊ฒฐ๊ณผ๋ฌผ์„ ์บ์‹ฑํ•ด์„œ ์žฌ์‚ฌ์šฉ
    - ์ ์ง„์  ๋นŒ๋“œ ( ๋งˆ์ง€๋ง‰ ๋นŒ๋“œ ํ˜ธ์ถœ ์ดํ›„ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ๋นŒ๋“œ -> ํšจ์œจ์  )
    - ๋ฐ๋ชฌ ํ”„๋กœ์„ธ์Šค ( ๋‹ค์Œ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด ๋Œ€๊ธฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค, ์ดˆ๊ธฐํ™” ์ดํ›„ ์ดˆ๊ธฐํ™” ์•ˆํ•จ )

  • 3๏ธโƒฃ ๋ฉ€ํ‹ฐ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ์ง€์› ( ๋‹ค๊ฐ™์ด ์“ฐ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ชจ๋“ˆํ™” ์‹œ์ผœ์„œ ๊ฐ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ )

  • 4๏ธโƒฃ ์„ค์ • ์ฃผ์ž… ๋ฐฉ์‹
    - ํ”„๋กœ์ ํŠธ ๋ณ„๋กœ ์„ค์ •์„ ๋‹ค๋ฅด๊ฒŒ ํ•˜๊ฑฐ๋‚˜, ๊ณตํ†ต์„ ํ•œ๋ฒˆ์— ์ฃผ์ž…ํ•˜๊ฑฐ๋‚˜

๐Ÿ˜ build.gradle๋ฅผ ์‚ดํŽด๋ณด์ž

  1. ํ”Œ๋Ÿฌ๊ทธ์ธ
    • ํŠน์ • ์ž‘์—…์„ ์œ„ํ•ด ๋ชจ์•„ ๋†“์€ task๋“ค์˜ ๋ชจ์Œ์ง‘
  2. ์˜์กด์„ฑ ๊ด€๋ฆฌ
    • ์šฐ๋ฆฌ๊ฐ€ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•  ํŒจํ‚ค์ง€๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ
    • ์˜์กด์„ฑ ์„ค์ •?
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ์ ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • Implementation
      • ์ปดํŒŒ์ผ, ๋Ÿฐํƒ€์ž„ ์‹œ์  ๋ชจ๋‘์—์„œ ์‚ฌ์šฉํ•œ๋‹ค.
    • compileOnly
      • ์ปดํŒŒ์ผํ•  ๋•Œ๋งŒ ์‚ฌ์šฉ๋˜๊ณ  ๋Ÿฐํƒ€์ž„ ๋•Œ์—๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
    • runtimeOnly
      • ๋Ÿฐํƒ€์ž„ ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
    • testImplementation
      • ํ…Œ์ŠคํŠธํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.
  3. repositories
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ €์žฅ๋œ ์œ„์น˜๋ฅผ ์ •์˜ํ•˜๊ณ  ์˜จ๋ผ์ธ ์ €์žฅ์†Œ์—์„œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค

Java ์›น ๊ธฐ์ˆ ์˜ ์—ญ์‚ฌ

  1. Servlet์˜ ๋“ฑ์žฅ
  • Servlet๋งŒ์œผ๋กœ ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ๋‹ค ํ–ˆ์Œ -> ์ฝ”๋“œ ๋ณต์žก
  1. JSP(JavaServer Pages) ๋„์ž…
  • jsp๋Š” html๋‚ด์— java์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค -> jsp ๋‚ด์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค
  1. MVC ํŒจํ„ด ๋„์ž…
  • UI, ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง, ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค
  • Servlet์œผ๋กœ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ณ  JSP๋กœ ๋ทฐ๋ฅผ ๋งŒ๋“ ๋‹ค -> ์œ ์ง€๋ณด์ˆ˜์„ฑ๊ณผ ํ™•์žฅ์„ฑ ํ–ฅ์ƒ, ์ค‘๋ณต ์ฝ”๋“œ ๋ฐœ์ƒ
  1. MVC ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์žฅ
  • MVC ํŒจํ„ด์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ฃผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ๋“ฑ์žฅํ–ˆ๋‹ค


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