TIL_16 | [Python] import, modules, path..(too hard๐Ÿ˜‚)

code_signยท2021๋…„ 1์›” 14์ผ
0

Python

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

python์„ ๊ณต๋ถ€ํ•˜๋‹ค๊ฐ€ ๋ณด๋‹ˆ ๋นผ๋†“์„ ์ˆ˜ ์—†๋Š” ๊ณ ๊ธ‰(?)๊ธฐ์ˆ ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ import, from์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋…€์„๋“ค๊ณผ modules, path!

์˜ค๋Š˜์€ ์ด ๊ฐœ๋…๋“ค์„ ์™„์ „์ •๋ณต ํ•ด๋ณด๋ ค ํ•œ๋‹ค!

Modules & Packages

ํŒŒ์ด์ฌ์—์„œ ๋ชจ๋“ˆ์€ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜ ๊ทธ๋ฆฌ๊ณ  ํด๋ž˜์Šค ๋“ฑ์„ ๋ชจ์•„๋†“์€ ํŒŒ์ผ

โ“์™œ ๋ชจ์•„๋†จ์–ด?

  • ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋ ค๊ณ 
  • ์ „์ฒด ์ฝ”๋“œ๊ฐ€ ํ•œ ํŒŒ์ผ์— ๋„ฃ๊ธฐ์—๋Š” ๋„ˆ๋ฌด ์ปค์กŒ์„๋•Œ ์—ฌ๋Ÿฌ ํŒŒ์ผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์ •๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„œ

์šฐ๋ฆฌ๋Š” len(list)๊ฐ™์€ ๋‚ด์žฅ ํ•จ์ˆ˜๋ฅผ ์“ธ๋•Œ len์„ ์„ ์–ธํ•œ์ ์€ ์—†์ง€๋งŒ ์ž˜ ์จ์™”๋‹ค. ์ด๋ฏธ ํŒŒ์ด์ฌ์—์„œ ๋ชจ๋“ˆ๋กœ ๊ตฌํ˜„ํ•ด๋†“์•˜๊ธฐ ๋•Œ๋ฌธ!

Module ๋งŒ๋“ค ์ˆ˜ ์žˆ์–ด?

๊ทธ๋ƒฅ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ทธ ์•ˆ์— ์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ํ•จ์ˆ˜๋‚˜ ํด๋ž˜์Šค ํ˜น์€ ๋ณ€์ˆ˜๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๋‹ˆ๊นŒ!

## my_module_file.py
def my_module():
	...
def your_module():
	...
   
class my_class():
    ...

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ํ›„์— import <๋ชจ๋“ˆ์ด๋ฆ„>.<๋ชจ๋“ˆ์—์„œ ์‚ฌ์šฉํ•˜๊ธธ ์›ํ•˜๋Š” ๋ณ€์ˆ˜/ํ•จ์ˆ˜/ํด๋ž˜์Šค ์ด๋ฆ„>์œผ๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ๋œ๋‹ค!

import my_module_file

# ํ•จ์ˆ˜ ์‹คํ–‰
my_module_file.my_module()

from์€ ๋ญ˜๊นŒ??

from์€ import๋ณด๋‹ค ํฐ ๊ฐœ๋…์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ ์šฐ๋ฆฌ๋Š” my_module()ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด my_module_file.my_module()์ด๋ผ๊ณ  ๊ธธ๊ฒŒ ์จ์•ผ๋งŒ ํ–ˆ๋Š”๋ฐ, from์„ ์“ฐ๋ฉด ๊ฐ„๋‹จํžˆ ํ•  ์ˆ˜ ์žˆ๋‹ค.

from my_module_file import my_module

# ํ•จ์ˆ˜ ์‚ฌ์šฉ
my_module()

# ํ•จ์ˆ˜ ์‚ฌ์šฉ x -> ์—๋Ÿฌ
your_module()

from์€ ๋ชจ๋“ˆ์˜ ํฐ ๋ฉ์–ด๋ฆฌ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , import๋กœ ์ž‘์€ ๋ฉ์–ด๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. ์ด๋ ‡๊ฒŒ ์“ฐ๋ฉด ํ•จ์ˆ˜๋ฅผ ๊ฐ„๋‹จํžˆ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

2๋ฒˆ์งธ ํ•จ์ˆ˜์ธ your_module()์€ import๋กœ ๊ฐ€์ ธ์˜ค์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ๊ทธ๋Ÿผ ํ•ด๋‹น ๋ชจ๋“ˆ์˜ ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„  ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?

๋ฐ”๋กœ *๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ!

from my_module_file import *

# ํ•จ์ˆ˜ ์‚ฌ์šฉ
my_module()
your_module()

*์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋ชจ๋“  ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋ผ๋Š” ๋œป์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ์กด์— ์ž‘์„ฑํ•˜๋˜ ํ•จ์ˆ˜๋ช…, ๋ณ€์ˆ˜๋ช…๊ณผ ๊ฒน์ณ์„œ ์ถฉ๋Œ์ด ๋‚  ์ˆ˜ ์žˆ๊ธฐ์— ์„ ํ˜ธํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.

as๋กœ ๋ณ„์นญ ์‚ฌ์šฉํ•˜๊ธฐ!

๋” ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ํ•ด ๋ณด๋ฉด as๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ„์นญ์œผ๋กœ ๋‚ด๊ฐ€ ๊ธฐ์–ตํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

from my_module_file import my_module as my

# my_module() ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Œ 
my() 

์ด๋ ‡๊ฒŒ as ๋’ค์— ๋ณ„์นญ์œผ๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.(์™„์ „ ๊ฐ„ํŽธ!!)


์ง„์งœ from, import, as๋งŒ์œผ๋กœ๋„ ๋ฌต์€ ์ฒด์ฆ์ด ํ›… ๋‚ด๋ ค๊ฐ„ ๊ฒƒ ๊ฐ™๋‹ค!ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹๐Ÿ™Œ

Packages = ๋” ๋ณต์žกํ•œ Module์ผ๋ฟ!

Packages๋Š” Module๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด์ง€๋งŒ, Module๋กœ ๋†”๋‘๊ธฐ์—” ๋„ˆ๋ฌด ํฌ๊ฑฐ๋‚˜ ๋น„ํšจ์œจ์ ์ผ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๋ง ๊ทธ๋Œ€๋กœ ํ•˜๋‚˜์˜ ํด๋”๊ฐ€ ํ•˜๋‚˜์˜ ํŒจํ‚ค์ง€๊ฐ€ ๋˜๊ณ , ๊ทธ ํŒจํ‚ค์ง€์˜ ์ด๋ฆ„์ด ํด๋” ์ด๋ฆ„์ด๋‹ค.

# ๋˜‘๊ฐ™์ด ์‚ฌ์šฉ!
import pkg.mod1
from pkg.mod2 import func2

pkg.mod1.func1()
func2()

์ฐธ ์‰ฝ์ฅฌ?๐Ÿ‘

Python์˜ import Search ์ˆœ์„œ๐Ÿ˜Ž

๋งŒ์•ฝ์— ์ง€๊ธˆ abc๋ผ๋Š” ๋ชจ๋“ˆ ํ˜น์€ ํŒจํ‚ค์ง€๋ฅผ importํ•ด์•ผํ•œ๋‹ค๋ฉด, ํŒŒ์ด์ฌ์€ ์ด๊ฒƒ์„ ์–ด๋–ค ์ˆœ์„œ๋กœ ์ฐพ์„๊นŒ?

๋ฐ”๋กœ sys.modules -> built-in modules -> sys.path์ˆœ์œผ๋กœ ์ฐพ๋Š”๋‹ค!

sys.modules

ํŒŒ์ด์ฌ์ด ๊ฐ€์žฅ ๋จผ์ € ํ™•์ธํ•˜๋Š” ๊ณณ์ด๋‹ค. sys.modules๋Š” ๋‹จ์ˆœํ•œ ํด๋”์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฏธ import๋œ ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋“ค์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.

์ฆ‰, ํ•œ๋ฒˆ import๋œ ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋“ค์€ ํŒŒ์ด์ฌ์ด ๋˜ ๋‹ค์‹œ ์ฐพ์ง€ ์•Š์•„๋„ ๋œ๋‹ค๋Š” ๋œป! (์ƒˆ๋กญ๊ฒŒ importํ•˜๋Š” ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋Š” ์ฐพ์„ ์ˆ˜ ์—†๋‹ค...๐Ÿ˜ซ)

built-in modules

ํŒŒ์ด์ฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ณต์‹ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค. ์ด๋ฏธ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋‹ˆ ํŒŒ์ด์ฌ์ด ์‰ฝ๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

sys.path

sys.path๋Š” list ํƒ€์ž…์œผ๋กœ string์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๊ฒฝ๋กœ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ์ฐพ์ง€ ๋ชปํ•œ๋‹ค๋ฉด ModuleNotFoundError๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

# sys.path์˜ ํ˜•ํƒœ
['',
 '/Users/song-eun-u/anaconda3/bin',
 '/Users/song-eun-u/anaconda3/lib/python36.zip',
 '/Users/song-eun-u/anaconda3/lib/python3.6',
 '/Users/song-eun-u/anaconda3/lib/python3.6/lib-dynload',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/aeosa',
 '/Users/song-eun-u/anaconda3/lib/python3.6/site-packages/IPython/extensions',
 '/Users/song-eun-u/.ipython']

ํŒŒ์ด์ฌ์ด path์™€ packages๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•!๐Ÿคฃ

์ˆœ์„œ๋Š” ๋Œ€๋žต ์•Œ์•˜๊ณ ... ๊ทธ๋ ‡๋‹ค๋ฉด ์ฐพ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ผ๊นŒ??

์ •๋ง ๊ฐ„.๋‹จ.ํžˆ. ๋งํ•˜์ž๋ฉด,

์ ˆ๋Œ€๊ฒฝ๋กœ(Absolte path)๋Š” ๋‚ด ํ”„๋กœ์ ํŠธ ๋ช…๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ํŠธ๋ฆฌํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค!

์ƒ๋Œ€๊ฒฝ๋กœ(Relative path)๋Š” ๊ฐ™์€ ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋‹ค๋Š” ๊ฐ€์ •ํ•˜์— .์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค!

# ์ ˆ๋Œ€๊ฒฝ๋กœ
# module5์˜ func1์— ์ ‘๊ทผํ•œ๋‹ค๋Š” ๊ฐ€์ •
# my_app์ด๋ผ๋Š” ํ”„๋กœ์ ํŠธ๋ช…์€ ์ตœ์ƒ๋‹จ ๊ฒฝ๋กœ๋กœ ๋ฐ”๋€Œ์ง€ ์•Š๊ธฐ์— ์ƒ๋žต๊ฐ€๋Šฅ
from package2.subpackage1.modeuls5 import func1

# ์ƒ๋Œ€๊ฒฝ๋กœ
# ํ˜„์žฌ package2์— ์žˆ๊ณ , module3์˜ class3์— ์ ‘๊ทผํ•œ๋‹ค๋Š” ๊ฐ€์ •
# ..์€ ์ƒ์œ„ ํด๋”๋กœ ์ด๋™
from .module3 import class3

์˜ค๋Š˜์€ ์ •๋ง ์‰ฌ์šด๊ฒƒ๋“ค๋งŒ ๋ฐฐ์›Œ๋ดค์œผ๋‹ˆ ๋งˆ์ง€๋ง‰ ์ •๋ฆฌ ํ•˜๊ณ  ๋๋งˆ์น˜๋„๋ก ํ•˜์ž!ใ…‹ใ…‹ใ…‹ใ…‹
(๊ฑฐ์ ˆ์€ ๊ฑฐ์ ˆํ•ด.)


์ •๋ฆฌํ•˜์ž!๐Ÿง‘๐Ÿปโ€๐Ÿ’ป

โ“sys.modules ์™€ sys.path์˜ ์ฐจ์ด์ 

sys.modules๋Š” ์ด๋ฏธ importํ•œ๊ฒƒ๋“ค์ด ์žˆ๊ณ , ์ œ์ผ ๋จผ์ € ๊ฒ€์ƒ‰.
sys.path๋Š” list ํƒ€์ž…์œผ๋กœ ๊ฒฝ๋กœ๊ฐ€ string์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ์ œ์ผ ๋งˆ์ง€๋ง‰์— ๊ฒ€์ƒ‰

โ“sys๋„ import ํ•ด์•ผํ•˜๋Š” ๋ชจ๋“ˆ์ธ๋ฐ ํŒŒ์ด์ฌ์€ ์–ด๋–ป๊ฒŒ ์ฐพ์„๊นŒ?

sys๋„ ํŒŒ์ด์ฌ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“ˆ์ด๊ธฐ์— ๋•Œ๋ฌธ์— ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

โ“Absolute Path์™€ Relative Path์˜ ์ฐจ์ด์ 

Absolute path๋Š” ์ตœ์ƒ๋‹จ์— ํ”„๋กœ์ ํŠธ ๋ช…์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ํŒจํ‚ค์ง€๋ฅผ ์ปค์ณ ํŒŒ์ผ, ํ•จ์ˆ˜ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด๊ณ ,
Relative path๋Š” ํ˜„์žฌ ํด๋”์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ๊ฐ™์€ ์œ„์น˜์— ์žˆ๋‹ค๋ฉด .์œผ๋กœ ์ ‘๊ทผ, ์ƒ์œ„ ํด๋”์— ์žˆ๋‹ค๋ฉด ..์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

โ“calculator ๋งŒ๋“ค๊ณ  ์—๋Ÿฌ ํ™•์ธํ•˜๊ธฐ

# absoulte path
#from calculator.add_and_multiply import add_and_multiply 


# relative path
from .calculator.add_and_multiply import add_and_multiply


if __name__ == '__main__':
    print(add_and_multiply(1,2))

๊ฒ€์ • ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ํด๋”๊ตฌ์„ฑ์ด ๋˜์–ด ์žˆ์„๋•Œ ์œ„ ์ฝ”๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ์•„๋ž˜์˜ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.

๊ณต์‹ ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด

Note that relative imports are based on the name of the current module. Since the name of the main module is always "main", modules intended for use as the main module of a Python application must always use absolute imports.

์ด๋ ‡๊ฒŒ ๋‚˜์˜ค๋Š”๋ฐ ์ด ๋ง์€ ์ฆ‰,

์ƒ๋Œ€ ๊ฒฝ๋กœ๋กœ import๋ฅผ ์‹œ๋„ํ•  ๋•Œ ํ˜„์žฌ module์˜ ์ด๋ฆ„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ๋‹ค. main module์˜ ์ด๋ฆ„์€ ํ•ญ์ƒ __main__ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

โ“์œ„์™€ ์—ฐ๊ฒฐํ•ด์„œ, add_and_multiply.py์—์„œ multiply ํ•จ์ˆ˜๋ฅผ ์ ˆ๋Œ€๊ฒฝ๋กœ์™€ ์ƒ๋Œ€๊ฒฝ๋กœ๋กœ ์‚ฌ์šฉํ•ด๋ณด๋ฉด?

# ์ ˆ๋Œ€๊ฒฝ๋กœ
from calculator.multiplication import multiply

# ์ƒ๋Œ€๊ฒฝ๋กœ
from .multiplication import multiply

๊ฒฐ๋ก ์€ ๋‘˜ ๋‹ค ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ!
๋‹ค๋งŒ, ์ฐจ์ด์ ์ด๋ผ๋ฉด ์ƒ๋Œ€๊ฒฝ๋กœ๊ฐ€ ๊ฐ™์€ packages ์•ˆ์—์„œ๋ผ๋ฉด ํ›จ์”ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์—ด์‹ฌํžˆ ๋”ฐ๋ผ์˜จ ๋‚˜์™€ ์ด๊ธ€์€ ๋ณด๋Š” ๋‹น์‹ ์„ ์นญ์ฐฌํ•ด...!๐Ÿ‘


Today, Learned๐Ÿง‘๐Ÿปโ€๐Ÿ’ป

๋ฐฐ์šด์ ๐Ÿ˜Ž

  • ํŒŒ์ด์ฌ์ด ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๋Š” ์ˆœ์„œ
  • ํŒŒ์ด์ฌ์ด ๋ชจ๋“ˆ๊ณผ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ๋Š” ๋ฐฉ๋ฒ•
  • from, import, as์˜ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ
  • __main__์—์„œ๋Š” ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์‚ฌ์šฉํ•˜์ž!!

๋Š๋‚€์ ๐Ÿคฉ

  • ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ์ ˆ๋Œ€ ์•ˆ๊นŒ๋จน์„๋“ฏ... ์—ญ์‹œ ๋ธ”๋กœ๊น…์˜ ์œ„๋Œ€ํ•จ...!
  • ์˜ค๋Š˜์€ ์•ฝ๊ฐ„ ์–ด๋ ค์šด ๊ฐœ๋…์ด์—ˆ๋Š”๋ฐ ์ž˜ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š”๊ฑฐ ๋ณด๋‹ˆ.. ๋‚˜ ๊ฐœ๋ฐœ์ž์— ์†Œ์งˆ์ข€ ์žˆ๋Š”๋“ฏ?!(๊ณง ๋ถ€์„œ์งˆ ํ—ˆ์„ธใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹ใ…‹)

์˜ค๋Š˜์˜ ํ•œ๋งˆ๋””๐Ÿ™Œ

์–ด๋ ค์šด ๊ฐœ๋…??? ๋‚˜์—๊ฒ ๊ทธ์ € ๋ฐฅ ๋ง์•„์„œ ํ›„๋ฃจ๋ฃฉ! ๋š-๋”ฑ- ํ•˜๋Š” ์ผ ์ผ๋ฟ...๐Ÿ˜ƒ๐Ÿ”ซ

profile
๋ฐฉํƒˆ์ถœ ์ข‹์•„ํ•˜๋Š” ์ฝ”๋”ฉ๋•ํ›„

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