🌈 [Section2] 13. λ°μ΄ν„°λ² μ΄μŠ€ 섀계

ν˜„μ£ΌΒ·2022λ…„ 10μ›” 6일
0

bootcamp

λͺ©λ‘ 보기
32/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • λ°μ΄ν„°λ² μ΄μŠ€ 섀계
  • μŠ€ν‚€λ§ˆ λ””μžμΈ μ‹€μŠ΅

✏️ κ΄€λ ¨ ν‚€μ›Œλ“œ

βœ” μŠ€ν‚€λ§ˆ(Schema)

➜ λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 데이터가 κ΅¬μ„±λ˜λŠ” 방식과 μ„œλ‘œ λ‹€λ₯Έ μ—”ν‹°ν‹° κ°„μ˜ 관계에 λŒ€ν•œ μ„€λͺ…
( λ°μ΄ν„°λ² μ΄μŠ€μ˜ 각 ν…Œμ΄λΈ”μ˜ ꡬ쑰와 ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό ν‘œν˜„ν•œ 것이라고 μƒκ°ν•˜λ©΄ 됨 )

Ex. μˆ˜κ°•μ‹ μ²­ μ‹œμŠ€ν…œ λ§Œλ“€ λ•Œ,
일단 전체적인 ν™”λ©΄ ꡬ성(μ–΄λ–€ 데이터가 μ–΄λ–»κ²Œ ν‘œν˜„λ˜λŠλƒ)을 μƒκ°ν•˜μ—¬ Teachers, Students, Classes λ“±μ˜ ν…Œμ΄λΈ”μ„ λ§Œλ“€μ–΄ 데이터λ₯Ό μ •μ˜ν•˜λŠ” 방법이 μŠ€ν‚€λ§ˆ

βœ” μ—”ν‹°ν‹°(Entity)

  • κ³ μœ ν•œ μ •λ³΄μ˜ λ‹¨μœ„

  • λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ 각 ν…Œμ΄λΈ”μ„ 엔티티라고 ν•  수 있음

βœ” ν•„λ“œ(fields)

  • ν•΄λ‹Ή ν…Œμ΄λΈ” λ‚΄μ˜ μš”μ†Œ(μ—΄)λ“€

  • μ—”ν‹°ν‹°μ˜ νŠΉμ„±μ„ μ„€λͺ…

  • ν•œ ν…Œμ΄λΈ”(μ—”ν‹°ν‹°) μ•ˆμ—λŠ” ID ν•„λ“œκ°€ 포함됨
    ➜ 각 ν•„λ“œμ˜ κ³ μœ ν•œ IDλ“€ = ν•΄λ‹Ή ν…Œμ΄λΈ”μ˜ κΈ°λ³Έ ν‚€(Primary key) μ—­ν• 

  • ν•œ ν…Œμ΄λΈ”(μ—”ν‹°ν‹°) μ•ˆμ— λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ Primary key(ID ν•„λ“œ)λ₯Ό 가져와 μ°Έμ‘°ν•  λ•Œ,
    κ·Έ 값을 νŠΉμ • λ ˆμ½”λ“œλ₯Ό κ³ μœ ν•˜κ²Œ μ‹λ³„ν•˜λŠ” μ™Έλž˜ ν‚€ (foreign key)라고 함

    Ex. Orders ν…Œμ΄λΈ”κ³Ό Customers ν…Œμ΄λΈ”μ΄ μžˆμ„ λ•Œ,
    Orders ν…Œμ΄λΈ”μ— Customers ν…Œμ΄λΈ”μ˜ primary key(customersID)κ°€ μ°Έμ‘°λ˜μ–΄μžˆλ‹€κ³  ν•˜λ©΄,

    • Orders.customersID ➜ foreign key
    • Customers.customersID ➜ primary key

βœ” λ ˆμ½”λ“œ(record)

  • ν…Œμ΄λΈ” 내에 μ €μž₯된 ν•­λͺ©(ν–‰)

✏️ ν…Œμ΄λΈ”κ³Ό ν…Œμ΄λΈ” μ‚¬μ΄μ˜ 관계

1:1 관계 (one-to-one) (μΌλŒ€ 일 관계)

  • ν•œ ν…Œμ΄λΈ”μ˜ ν•˜λ‚˜μ˜ λ ˆμ½”λ“œκ°€ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ λ ˆμ½”λ“œ ν•œ κ°œμ™€ μ—°κ²°λœ 경우
    ( μ‹€λ¬΄μ—μ„œλŠ” λŒ€λΆ€λΆ„ λŒ€λŸ‰μ˜ 정보λ₯Ό 닀루기 λ•Œλ¬Έμ— μ—°κ²° 관계가 λ§Žμ•„, 1:1 κ΄€κ³„λŠ” 보톡 자주 μ‚¬μš© X )

Ex. μœ„μ˜ μ˜ˆμ‹œμ™€ 같이 Users ν…Œμ΄λΈ”κ³Ό Phonebook ν…Œμ΄λΈ”μ΄ μžˆλ‹€κ³  κ°€μ •ν•˜λ©΄,
β €
Users ν…Œμ΄λΈ”μ€ ID, name, phone_id λΌλŠ” 열을 가지고 있고,
( μ—¬κΈ°μ„œ phone_idλŠ” Phonebook ν…Œμ΄λΈ”μ˜ ID와 μ—°κ²°λœ μ™Έλž˜ν‚€(foreign key) )
Phonebook ν…Œμ΄λΈ”μ€ ID와 phone_numberλ₯Ό 가지고 μžˆλ‹€.
β €
이 μ˜ˆμ‹œμ—μ„œ, ν•œ phone_number은 단 ν•œλͺ…μ˜ user만 κ°€μ§ˆ 수 있고,
λ°˜λŒ€μ˜ κ²½μš°λ„ κ°€λŠ₯ν•˜λ‹€λ©΄,

➜ 이 두 ν…Œμ΄λΈ”μ˜ κ΄€κ³„λŠ” 1:1 관계라고 ν•  수 있음
β €
( User ν…Œμ΄λΈ”μ— phone_idλ₯Ό λŒ€μ‹ ν•΄ phone_numberλ₯Ό 직접 μ €μž₯ν•˜λŠ” 게 λ‚˜μ„ 수 있음 )

βœ” 1:N 관계 (one-to-many) (μΌλŒ€ λ‹€ 관계)

  • ν•˜λ‚˜μ˜ λ ˆμ½”λ“œκ°€ μ„œλ‘œ λ‹€λ₯Έ μ—¬λŸ¬ 개의 λ ˆμ½”λ“œμ™€ μ—°κ²°λœ 경우

Ex1. μœ„μ˜ μ˜ˆμ‹œμ™€ 같이 Users ν…Œμ΄λΈ”κ³Ό Phonebook ν…Œμ΄λΈ”μ΄ μžˆλ‹€κ³  κ°€μ •ν•˜λ©΄,
β €
Users ν…Œμ΄λΈ”μ€ ID, name μ΄λΌλŠ” 열을 가지고 있고,
Phonebook ν…Œμ΄λΈ”μ€ phone_id, phone_number, user_idλ₯Ό 가지고 μžˆλ‹€.
( μ—¬κΈ°μ„œ user_idλŠ” User ν…Œμ΄λΈ”μ˜ user_idλ₯Ό μ°Έμ‘°ν•œ μ™Έλž˜ν‚€(foreign key) )
β €
이 μ˜ˆμ‹œμ—μ„œ, ν•œλͺ…μ˜ userλŠ” μ—¬λŸ¬ phone_numberλ₯Ό κ°€μ§ˆ 수 μžˆμ§€λ§Œ,
μ—¬λŸ¬λͺ…μ˜ userκ°€ ν•˜λ‚˜μ˜ phone_numberλ₯Ό κ°€μ§ˆ μˆ˜λŠ” μ—†λ‹€.

➜ 이 두 ν…Œμ΄λΈ”μ˜ κ΄€κ³„λŠ” 1:N 관계라고 ν•  수 있음


Ex2. Teachers ν…Œμ΄λΈ”κ³Ό Classes ν…Œμ΄λΈ”μ΄ μžˆμ„ λ•Œ,
μ—¬λŸ¬ μ„ μƒλ‹˜μ΄ ν•œ κ³Όλͺ©μ„ κ°€λ₯΄μΉœλ‹€ λ³΄λ‹€λŠ” <ν•œ μ„ μƒλ‹˜μ΄ μ—¬λŸ¬ κ³Όλͺ©μ„ κ°€λ₯΄μΉœλ‹€>라고 말할 수 있음
(Teachersκ°€ 1, Classesκ°€ λ‹€)
β €
이 경우, Teachers ν…Œμ΄λΈ”μ˜ 각 ν•„λ“œ(μ„ μƒλ‹˜ λͺ©λ‘)에 Classes ν…Œμ΄λΈ”μ˜ 각 ν•„λ“œμ˜ primary key(κ³Όλͺ©λ“€ κ°€λ¦¬ν‚€λŠ” ID)λ₯Ό μ°Έμ‘°ν•œλ‹€κ³  ν•  λ•Œ (1에 N을 μ°Έμ‘°ν•œλ‹€κ³  ν•  λ•Œ),
β €
문제점 1) ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λ©΄ ν•΄λ‹Ή μ—΄μ˜ ν¬κΈ°λŠ” μ •ν•΄μ ΈμžˆκΈ° λ•Œλ¬Έμ— κ³Όλͺ© μˆ˜κ°€ λ§Žμ•„μ§„λ‹€λ©΄ μˆ˜μ—… IDλ₯Ό 담을 곡간이 λΆ€μ‘±ν•  수 있음
β €
문제점 2) ν•΄λ‹Ή κ³Όλͺ©μ„ λ‹΄λ‹Ήν•˜λŠ” μ„ μƒλ‹˜μ„ μ•Œμ•„λ³΄κΈ° μœ„ν•œ λ³΅μž‘λ„κ°€ λ†’μ•„μ§„λ‹€λŠ” 문제점이 있음
β €
➜ 1:N 관계일 λ•Œ 1에 N을 μ°Έμ‘°ν•˜μ§€ μ•Šκ³  N에 1을 μ°Έμ‘°
Classes ν…Œμ΄λΈ” λ‚΄ 각 ν•„λ“œμ— Teachers의 foreign key(μ„ μƒλ‹˜ ID)λ₯Ό μ°Έμ‘°ν•œλ‹€λ©΄ 효율적으둜 μ‚¬μš© κ°€λŠ₯

βœ” N:M 관계 (many-to-many) (λ‹€λŒ€ λ‹€ 관계)

  • μ—¬λŸ¬ 개의 λ ˆμ½”λ“œκ°€ λ‹€λ₯Έ ν…Œμ΄λΈ”μ˜ μ—¬λŸ¬ 개의 λ ˆμ½”λ“œμ™€ 관계가 μžˆλŠ” 경우
    ➜ Join ν…Œμ΄λΈ” μ‚¬μš©

Ex1. 여행을 μ˜ˆμ‹œλ‘œ λ“€μ–΄, μœ„μ˜ μ˜ˆμ‹œμ™€ 같이 Customer ν…Œμ΄λΈ”κ³Ό Package ν…Œμ΄λΈ”μ΄ μžˆμ„ λ•Œ,
β €
Customer ν…Œμ΄λΈ”μ€ ID, name μ΄λΌλŠ” 열을 가지고 있고,
μ—¬ν–‰ Package ν…Œμ΄λΈ”μ€ ID, name, package_idλ₯Ό 가지고 μžˆλ‹€.
β €β €
이 μ˜ˆμ‹œμ—μ„œ, ν•œλͺ…μ˜ CustomerλŠ” μ—¬λŸ¬ Package μƒν’ˆμ„ ꡬ맀할 수 있고,
λ°˜λŒ€λ‘œ, ν•˜λ‚˜μ˜ Package μƒν’ˆμ„ μ—¬λŸ¬ Customer이 ꡬ맀할 수 μžˆλ‹€

➜ 이 두 ν…Œμ΄λΈ”μ˜ κ΄€κ³„λŠ” N:M 관계라고 ν•  수 있음
β €
μ—¬κΈ°μ„œ 두 ν…Œμ΄λΈ”μ˜ 관계λ₯Ό λ‚˜νƒ€λ‚΄λ €λ©΄ 각 ν…Œμ΄λΈ”μ—λ‹€ 각 ν…Œμ΄λΈ”μ˜ primary key듀을 μ°Έμ‘°ν•΄μ•Όν•˜λŠ”λ°,

➜ 이 λ•Œ, μœ„μ™€ 같이 Join ν…Œμ΄λΈ”(두 ν…Œμ΄λΈ”μ΄ 참쑰된 μƒˆ ν…Œμ΄λΈ”)을 λ§Œλ“€μ–΄μ„œ μ°Έμ‘°ν•  수 있음
β €
Join ν…Œμ΄λΈ”μΈ customer_package ν…Œμ΄λΈ”μ€ customer_id와 package_idλ₯Ό λ¬Άμ–΄μ£ΌλŠ” 역할이고,
이 ν…Œμ΄λΈ”μ„ 톡해 μ–΄λ–€ 고객이 λͺ‡κ°œμ˜ μ—¬ν–‰μƒν’ˆμ„ κ΅¬λ§€ν–ˆλŠ”μ§€ / μ–΄λ–€ μ—¬ν–‰μƒν’ˆμ΄ λͺ‡λͺ…μ˜ 고객을 가지고 μžˆλŠ”μ§€ 확인 κ°€λŠ₯
( Join ν…Œμ΄λΈ”λ§Œμ˜ primary key도 λ¬Όλ‘  생성해야함 )
β €
(μ΄λŠ” 1:N관계λ₯Ό λ‘λ²ˆ μ“΄κ±°λ‚˜ λ§ˆμ°¬κ°€μ§€)

βœ” 자기참쑰 관계 (Self Referencing Relationship)

  • ν…Œμ΄λΈ” λ‚΄μ—μ„œ μ°Έμ‘°ν•œ 관계
    ( 1:N(μΌλŒ€λ‹€) 관계와 μœ μ‚¬ν•˜μ§€λ§Œ ν…Œμ΄λΈ” λͺ‡κ°œμ—μ„œ μ°Έμ‘°ν•˜λŠ”μ§€κ°€ 닀름 )

Ex. μœ„μ˜ μ˜ˆμ‹œμ—μ„œ,
User ν…Œμ΄λΈ”μ˜ recommend_idλŠ” User ν…Œμ΄λΈ”μ˜ user_id와 μ—°κ²°λ˜μ–΄ 있음
β €
ν•œ λͺ…μ˜ μœ μ €(user_id)λŠ” ν•œ λͺ…μ˜ μΆ”μ²œμΈ(recommend_id)λ₯Ό κ°€μ§ˆ 수 있고,
μ—¬λŸ¬ λͺ…이 ν•œ λͺ…μ˜ μœ μ €λ₯Ό μΆ”μ²œμΈμœΌλ‘œ 등둝할 수 있음
➜ 이 경우, 자기 μ°Έμ‘° 관계


πŸ’¬ κ°•μ˜μ—μ„œμ˜ Q )

λ§Œμ•½ μ™Έλž˜ν‚€λ₯Ό 리슀트 ν˜•μ‹μœΌλ‘œ κ΄€λ¦¬ν•˜λŠ” ν•„λ“œκ°€ μžˆλ‹€λ©΄, μ–΄λ–€ λ¬Έμ œκ°€ λ°œμƒν•  수 μžˆμ„κΉŒ?
( 쑰인 ν…Œμ΄λΈ” μ‚¬μš©ν•˜μ§€ μ•Šμ„ λ•Œμ˜ 문제점 )

πŸ’¬ λ‚˜μ˜ Answer )

문제점 1. ν…Œμ΄λΈ”μ„ μƒμ„±ν•˜λ©΄ ν•΄λ‹Ή μ—΄μ˜ ν¬κΈ°λŠ” μ •ν•΄μ ΈμžˆκΈ° λ•Œλ¬Έμ— μ°Έμ‘°ν•  데이터가 λ§Žμ„ λ•Œ κ·Έλ₯Ό 담을 곡간이 λΆ€μ‘±ν•΄ μ €μž₯을 λͺ»ν•  수 있음

문제점 2. 데이터λ₯Ό μ‘°νšŒν•˜λŠ”λ° λ§Žμ€ λΉ„μš©μ΄ λ°œμƒν•˜κ²Œ 됨

문제점 3. 데이터λ₯Ό μˆ˜μ •ν•  λ•Œ 두 곳에 μˆ˜μ •μ΄ 잘 λ˜μ—ˆλŠ”μ§€ 확인이 뢈편 (μ‹€μˆ˜ 유발 κ°€λŠ₯)


😜 μŠ€ν‚€λ§ˆ λ””μžμΈ μ‹€μŠ΅ - μΈμŠ€νƒ€κ·Έλž¨

μΈμŠ€νƒ€κ·Έλž¨μ˜ 각 κΈ°λŠ₯듀을 ν…Œμ΄λΈ”λ‘œ ν•˜μ—¬ μŠ€ν‚€λ§ˆ λ””μžμΈμ„ ν•΄λ³΄μ•˜λ‹€!

각 ν…Œμ΄λΈ” 및 ν•„λ“œλ₯Ό μ„€λͺ…ν•˜μžλ©΄,

  • Users ν…Œμ΄λΈ”
    고유 primary key인 id / name / email / password ν•„λ“œλ₯Ό 가짐

  • Following ν…Œμ΄λΈ”
    고유 primary key인 id / following_count / follower_count / user_id ν•„λ“œλ₯Ό 가짐

    • ν•œ userκ°€ μ—¬λŸ¬λͺ…을 following κ°€λŠ₯ (이게 제일 ν—·κ°ˆλ¦Ό γ…  λ°˜λŒ€λ„ κ°€λŠ₯ν•œκ°€..?)
      ➜ 1:N 관계 (user_id에 참쑰함) (일단 μ΄λ ‡κ²Œ μƒκ°ν•΄μ„œ 이런 μ‹μœΌλ‘œ κ΅¬ν˜„ν•¨)
      (μ΄λŠ” μ°¨μ°¨ μ•Œμ•„λ³΄κ³  λ‹€μ‹œ μˆ˜μ •ν•  것!)
  • Post ν…Œμ΄λΈ”
    고유 primary key인 id / user_id / img / comments_id / created_At ν•„λ“œλ₯Ό 가짐

  • HashTag ν…Œμ΄λΈ”
    고유 primary key인 id / hashTag ν•„λ“œλ₯Ό 가짐
  • Post_HashTag ν…Œμ΄λΈ” ( μœ„ Post ν…Œμ΄λΈ”κ³Ό HashTag ν…Œμ΄λΈ”μ˜ Join ν…Œμ΄λΈ” )
    고유 primary key인 id / hashTag_id / post_id ν•„λ“œλ₯Ό 가짐

    • ν•œ post μ•ˆμ— μ—¬λŸ¬κ°œμ˜ hashTag κ°€λŠ₯ (μ•„λž˜μ™€ 같이 λ°˜λŒ€λ„ κ°€λŠ₯)
      ➜ N:M 관계 (hashTag_id에 참쑰함)
      β €
    • ν•œ hashTag λˆ„λ₯΄λ©΄ μ—¬λŸ¬κ°œμ˜ post λ³Ό 수 있음 (μœ„μ™€ 같이 λ°˜λŒ€λ„ κ°€λŠ₯)
      ➜ N:M 관계 (post_id에 참쑰함)
      β €
      ( μœ„ Post ν…Œμ΄λΈ”κ³Ό HashTag ν…Œμ΄λΈ”μ˜ N:M 관계λ₯Ό Join ν…Œμ΄λΈ”λ‘œ λ”°λ‘œ λΉΌμ„œ ν‘œν˜„ )
  • Comments ν…Œμ΄λΈ”
    고유 primary key인 id / comments / user_id / post_idν•„λ“œλ₯Ό 가짐

    • ν•œ userκ°€ μ—¬λŸ¬κ°œμ˜ comments 올리기 κ°€λŠ₯ (λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯)
      ➜ 1:N 관계 (user_id에 참쑰함)
      β €
    • ν•œ post에 μ—¬λŸ¬κ°œμ˜ comments 있음 (λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯)
      ➜ 1:N 관계 (post_id에 참쑰함)
  • Likes ν…Œμ΄λΈ”
    고유 primary key인 id / user_id / post_id ν•„λ“œλ₯Ό 가짐

    • ν•œ userκ°€ μ—¬λŸ¬κ°œμ˜ likes κ°€λŠ₯ (λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯)
      ➜ 1:N 관계 (user_id에 참쑰함)
      β €
    • ν•œ post에 μ—¬λŸ¬κ°œμ˜ likes κ°€λŠ₯ (λ°˜λŒ€λŠ” λΆˆκ°€λŠ₯)
      ➜ 1:N 관계 (post_id에 참쑰함)

일단 이런 μ‹μœΌλ‘œ λ””μžμΈμ„ 해보긴 ν–ˆλŠ”λ° 맞게 ν•œ κ±΄μ§€λŠ” 사싀 λͺ¨λ₯΄κ² λ‹€ ~,,

μ•„λž˜λŠ” https://dbdiagram.io/home μ—μ„œ μœ„ μŠ€ν‚€λ§ˆ λ””μžμΈ ν•  λ•Œ μ μ—ˆλ˜ λ¬Έμž₯듀이닀! ⬇️
( μ •ν™•ν•œ 쿼리문은 μ•„λ‹ˆκ³  λ‹€μ΄μ–΄κ·Έλž¨ 문법에 가깝닀 )

TABLE Users {
  id int
  name varchar
  email varchar
  password password
}
ref {
   Users.id > Post.user_id
}

TABLE Following {
  id int
  following_id int
  user_id int
}
ref {
  Following.user_id > Users.id
}

TABLE Likes {
  id int
  user_id int
  post_id int
}
ref {
  Likes.user_id > Users.id
}
ref {
  Likes.post_id > Post.id
}

TABLE HashTag {
  id int
  hashTag varchar
}

TABLE Post {
  id int
  user_id int
  img varchar
  comments_id int
  created_At timestamp
}
TABLE Comments {
  id int
  comments varchar
  post_id int
  user_id int
}
ref {
  Comments.user_id > Users.id
}
ref {
  Comments.post_id > Post.comments_id
}

TABLE Post_HashTag {
  id int
  hashTag_id int
  post_id int
}
ref {
  Post_HashTag.hashTag_id > HashTag.id
}
ref {
  Post_HashTag.post_id > Post.id
}

🌈 λŠλ‚€μ 

λ””μžμΈ κ΅¬μƒν•˜λŠ” 게 λ„ˆλ¬΄ ν—·κ°ˆλ Έλ‹€!!
μ²˜μŒμ—” 감도 μ•ˆμž‘ν˜€μ„œ '뭘 μ–΄λ–»κ²Œ ν•΄μ•Όν•˜λŠ” 거지..??' ν•˜λ‹€κ°€
λ‹€λ₯Έ 뢄듀이 ν•˜μ‹  μŠ€ν‚€λ§ˆ λ””μžμΈμ„ 보고 μ–΄λ–€ ꡬ쑰둜 μ΄λ£¨μ–΄μ Έμ„œ λ””μžμΈν•˜λŠ” 건지 이해뢀터 ν–ˆλ‹€
주어진 4μ‹œκ°„ 쀑에 2μ‹œκ°„ 정도λ₯Ό μ΄ν•΄ν•˜λŠ”λ° μΌλŠ”λ° 사싀 μ œλŒ€λ‘œ μ΄ν•΄ν•œ κ±΄μ§€λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ
λ§žκ² μ§€..~~..
κ·Έλž˜λ„ 끝내 κ΅¬ν˜„μ„ ν•˜κΈ΄ ν–ˆλŠ”λ° ν…Œμ΄λΈ” κ°„μ˜ 관계λ₯Ό ν‘œν˜„ν•˜λŠ” 뢀뢄이 제일 ν—·κ°ˆλ¦°λ‹€
뭐가 어디에 μ°Έμ‘°λ˜μ•Όν•  지 머리둜만 μƒκ°ν•˜λ €λ‹ˆ λ§‰λ§‰ν•΄μ„œ 쒅이에 μ“°λ©΄μ„œ κ΅¬ν˜„μ„ λλƒˆλ‹€

0개의 λŒ“κΈ€