๋ฐ˜์„ฑ๋ฌธ

0

์žฅ๊ณ  ํ”„๋กœ์ ํŠธ

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

๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์„ ์ด์ œ์„œ์•ผ ์™„์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

์„œ๋ฒ„ ๊ธฐ๋Šฅ์ด ํ•˜๋‚˜ํ•˜๋‚˜ ๊ตฌํ˜„๋  ๋•Œ๋งˆ๋‹ค ์ •๋ง์ด์ง€ ์ธ์ƒ์˜ ๋ณด๋žŒ์„ ๋Š๊ผˆ๊ณ  ๊ฐ™์ด ์ž‘์—…ํ•˜๋Š” ํŒ€์›๋“ค๊ณผ ๋ฐฉ๊ธ‹๋ฐฉ๊ธ‹ ์ฆ๊ฒ๊ฒŒ ์›ƒ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜,
๋ง‰ํŒ์— ์›น์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„์— ์ง„์ž…ํ–ˆ์„ ๋•Œ๋Š” ์ด์ „์— ๊ตฌํ˜„ํ•ด ๋†“์•˜๋˜ ๊ธฐ๋Šฅ๋“ค์˜ ํ—ˆ์ ‘ํ•จ์ด ๋“œ๋Ÿฌ๋‚˜๋ฉด์„œ ํŒ€์›๋“ค์—๊ฒŒ ๋„ˆ๋ฌด ๋ฏธ์•ˆํ–ˆ๋‹ค.

์–ด๋–ค ๊ฒƒ๋“ค์ด ๋ฌธ์ œ์˜€๊ณ  ๊ทธ์— ๋Œ€ํ•ด ์–ด๋–ค ๊ณต๋ถ€๋ฅผ ํ•ด์•ผํ• ์ง€ ์ ๋Š” ๊ฒƒ์ด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.


Website Auth

๊ทผ๋ณธ ์›์ธ

์šฐ๋ฆฌ์˜ ๋ฉ”์ธ ์ฝ˜ํ…์ธ ๋Š” App์ด๊ธฐ์— App๊ณผ์˜ ์—ฐ๊ณ„์—๋งŒ ์‹ ๊ฒฝ์„ ์ผ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด๋งˆ์ €๋„ ๊ธฐ๋Šฅ์˜ ํ€„๋ฆฌํ‹ฐ๋ณด๋‹ค๋Š” ๊ฒ‰์œผ๋กœ ๋ณด์ด๋Š” ๊ธฐ๋Šฅ์˜ ๊ตฌํ˜„์—๋งŒ ์ดˆ์ ์„ ๋‘๊ณ  ์ž‘์—…ํ–ˆ๋‹ค.

django์—์„œ ์ œ๊ณตํ•˜๋Š” model๊ณผ class๋“ฑ์˜ api๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์€ ํšŒ์›๊ฐ€์ž… ๋ฐ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์€ ์‹œ๊ฐ„์ด ์ง€๋‚  ์ˆ˜๋ก ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ๋˜์—ˆ๋‹ค.

๊ตฌํ˜„ ์งํ›„์—๋Š” ๋›ธ ๋“ฏ์ด ๊ธฐ๋ปํ–ˆ์—ˆ๋Š”๋ฐ ์ด ์ฝ”๋“œ๊ฐ€ ๋ชจ๋“  ๊ฑธ ๋ง์น˜๊ฒŒ ๋  ์ค„์€ ๋ชฐ๋ž๋‹ค.
์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

@csrf_exempt
def user_list(request):
    # ํšŒ์›๋ชฉ๋ก
    if request.method == 'GET':
        query_set = Account.objects.all()
        serializer = AccountSerializer(query_set, many=True)
        return JsonResponse(serializer.data, safe=False)
    # ํšŒ์›๊ฐ€์ž…
    elif request.method == 'POST':
        data = JSONParser().parse(request)
        # ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ID
        if Account.objects.filter(pid=data['pid']).exists():
            msg = dict(
                msg="Already Exists"
            )
            return JsonResponse(msg, status=400)
        # ์ง๋ ฌํ™” ๋ฐ ์ €์žฅ
        serializer = AccountSerializer(data=data)
        if serializer.is_valid():
            serializer.save()
            return JsonResponse(serializer.data, status=201)
        return JsonResponse(serializer.errors, status=400)

๋ฌธ์ œ ๋ฐœ์ƒ

๋ฐ์ดํ„ฐ ์ „์†ก ๋‹จ๊ณ„์—์„œ User ์‹๋ณ„์˜ ์–ด๋ ค์›€์ด ๋“œ๋Ÿฌ๋‚ฌ๋‹ค.
๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋†“๊ณ  ์ดํ›„ App์—์„œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์ค˜์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ๋ถ€ํ„ฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

App์ฐจ์›์—์„œ์˜ ํ•ด๊ฒฐ

์ด ๋ถ€๋ถ„์€ ๋‹คํ–‰์Šค๋Ÿฝ๊ฒŒ๋„ Unity์—์„œ ์ž์ฒด์ ์œผ๋กœ ์ง€์›ํ•˜๋Š” playerprefs๋ผ๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์—ˆ๊ธฐ์— ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

Request๋งˆ๋‹ค User๊ฐ€ ๋ˆ„๊ตฐ์ง€๋ฅผ ์ฒจ๋ถ€ํ•˜์—ฌ ์„œ๋ฒ„๋กœ ์ „์†กํ–ˆ๊ณ , ๊ทธ ๋•๋ถ„์— ๋ฐ›์€ User ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ORM์„ ํ†ตํ•œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ–ˆ๋‹ค.
playerprefs๊ฐ€ ์—†์—ˆ๋‹ค๋ฉด ๋ชจ๋“  ๊ฑธ ๊ฐˆ์•„ ์—Ž์–ด์•ผ ํ–ˆ์„ ๊ฒƒ์ด๋‹ค.

๋” ์‹ฌ๊ฐํ•ด์ง„ Website ๊ตฌํ˜„

์•„๋ฌด๋ฆฌ App์ด ์ฃผ๋ ฅ์ด๋ผ ํ•ด๋„ Web์—์„œ ์ž์‹ ์˜ ์šด๋™๊ธฐ๋ก์„ ํ•„ํ„ฐ๋งํ•ด์„œ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ค‘์š”ํ•˜๋‹ค.

์—ฌ๊ธฐ์„œ ๋“œ๋Ÿฌ๋‚œ ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๋Š” Web์ด loginํ•œ user๊ฐ€ ๋ˆ„๊ตฐ์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.

์‚ฌ์‹ค ์ด๋ฏธ ์•Œ๊ณ  ์žˆ์—ˆ์ง€๋งŒ JWT ๋˜๋Š” Session ๊ธฐ๋Šฅ์„ ๋ถ™์—ฌ์„œ ํ•ด๊ฒฐ ํ•  ์ˆ˜ ์žˆ์„ ์ค„๋กœ ์•Œ์•˜๋‹ค.

ํ•˜์ง€๋งŒ ๋งˆ์Œ์ด ๋„ˆ๋ฌด ๊ธ‰ํ–ˆ๋‹ค.
ํ”„๋ก ํŠธ๋Š” ํ”„๋ก ํŠธ๋Œ€๋กœ ์ง„๋„๊ฐ€ ์ž˜ ๋‚˜๊ฐ€์ง€ ์•Š์•˜๋‹ค. bootstrap์ด๋‚˜ tailwindcss๋ฅผ ์ด์šฉํ•œ ๋””์ž์ธ๋„ ๋ด์•ผ ํ–ˆ๋‹ค.

๊ฒฐ๊ตญ์€ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—์„œ๋Š” ์†์„ ๋–ผ๊ณ , ๊ธ‰ํ•œ ๋Œ€๋กœ html์„ ๋ฆฌํ„ดํ•˜๋ฉด์„œ context์— id๋ฅผ ๋ถ™์—ฌ๋ณด๋‚ด์„œ ORM์„ ํ†ตํ•ด ๊ด€๋ จ ์ •๋ณด๋ฅผ ํ†ต์งธ๋กœ ์˜ฌ๋ ค๋ฒ„๋ฆฌ๋Š” ๋ฌด์‹ํ•œ ์ง“์„ ํ•ด์•ผ ํ–ˆ๋‹ค.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div class="btn-group">
    <a href="{% url 'exlogin' %}" class="btn btn-info"> Logout </a>
</div>
  <!--๋ฌธ์ œ์˜ ๊ทธ ๋ถ€๋ถ„-->
    <h1> Welcome! {{pid}}. Check you RECORDS. </h1>
    <br><br><br>
    <h3> BICEPS CURL </h3>
        <table class="table">
            <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">   Total Count   </th>
                <th scope="col">   L-Count   </th>
                <th scope="col">   R-Count   </th>
                <th scope="col">   RunTime   </th>
                <th scope="col">   Date   </th>
            </tr>
            </thead>
            <tbody>
            {% for record in biceps_queryset %}
            <tr>
                <td>{{forloop.counter}}</td>
                <td><a href="#">{{record.count}}</a></td>
                <td><a href="#">{{record.count1}}</a></td>
                <td><a href="#">{{record.count2}}</a></td>
                <td><a href="#">{{record.times}}</a></td>
                <td><a href="#">{{record.day}}</a></td>
            </tr>
            {% endfor %}
            </tbody>
        </table>
<br><br><br><br><br>
    <h3> SQUAT </h3>
  <table class="table">
            <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">   Total Count   </th>
                <th scope="col">   RunTime   </th>
                <th scope="col">   Date   </th>
            </tr>
            </thead>
            <tbody>
            {% for record in squat_queryset %}
            <tr>
                <td>{{forloop.counter}}</td>
                <td><a href="#">{{record.count}}</a></td>
                <td><a href="#">{{record.times}}</a></td>
                <td><a href="#">{{record.day}}</a></td>
            </tr>
            {% endfor %}
            </tbody>
        </table>
<br><br><br><br><br>
    <h3> Push Up </h3>
  <table class="table">
            <thead>
            <tr>
                <th scope="col">#</th>
                <th scope="col">   Total Count   </th>
                <th scope="col">   RunTime   </th>
                <th scope="col">   Date   </th>
            </tr>
            </thead>
            <tbody>
            {% for record in pushup_queryset %}
            <tr>
                <td>{{forloop.counter}}</td>
                <td><a href="#">{{record.count}}</a></td>
                <td><a href="#">{{record.times}}</a></td>
                <td><a href="#">{{record.day}}</a></td>
            </tr>
            {% endfor %}
            </tbody>
        </table>
</body>
</html>

html์—๋Š” ์ „ํ˜€ ์ต์ˆ™ํ•˜์ง€ ์•Š๊ธฐ์— <br><br><br><br><br>์„ ๋•Œ๋ ค ๋ฐ•์€ ๋ถ€๋ถ„๋„ ๋ณด์ธ๋‹ค.
์œ„์˜ html์€ ๋‹ค์Œ์˜ ์ฝ”๋“œ๋กœ ํ˜ธ์ถœ๋œ๋‹ค.

@csrf_exempt
def exlogin(request):
    if request.method == "POST":

        form = LoginForm(request.POST)

        if form.is_valid():

            data = form.cleaned_data

            pid_get = data['pid']
            pwd_get = data['pwd']

            try:
                target = Account.objects.get(pid=pid_get)
            except Account.DoesNotExist:
                return render(request, 'Web/error.html', {'err': 0})

            posted_inform = Account.objects.values("pid", "pwd").get(pid=pid_get)
            posted_account = posted_inform['pid']
            posted_password = posted_inform['pwd']

            if pid_get == posted_account and pwd_get == posted_password:
                biceps_queryset = BicepsCurl.objects.filter(pid=pid_get)
                squat_queryset = Squat.objects.filter(pid=pid_get)
                pushup_queryset = PushUp.objects.filter(pid=pid_get)
                context = {
                    'pid': pid_get,
                    'biceps_queryset': biceps_queryset,
                    'squat_queryset': squat_queryset,
                    'pushup_queryset': pushup_queryset,
                }
                return render(request, 'Web/main.html', context)

            if pwd_get != posted_password:
                return render(request, 'Web/error.html', {'err': 1})

    else:
        form = LoginForm()

    ctx = {
        'form': form,
    }
    return render(request, 'Web/exlogin.html', ctx)

login form์œผ๋กœ ์ž…๋ ฅ๋ฐ›์€ id๋ฅผ ๊ทธ๋Œ€๋กœ ์จ์„œ ์˜ค์ง '์—ด๋žŒ๋งŒ' ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ์ฝ”๋“œ๋‹ค. ๋‚˜๋ฆ„ error ํŽ˜์ด์ง€๋„ ๋งŒ๋“ค์–ด์„œ ๊ทธ๋Ÿด์‹ธํ•˜๊ฒŒ ๋ณด์ด๊ฒŒ ํ–ˆ์ง€๋งŒ ์ด๊ฑด ์ง„์งœ ์ฝ”๋“œ๋ฅผ ์ง  ๋‚ด๊ฐ€ ๋ด๋„ ์‚ฌ๊ธฐ์™€ ๋‹ค๋ฆ„์ด ์—†๋‹ค.

์‹ฌ์ง€์–ด ID ๋ถˆ์ผ์น˜ ์ฝ”๋“œ ๋ถ€๋ถ„์€ ์ž‘๋™ํ•˜์ง€๋„ ์•Š๋Š” ๋‹ค๋Š” ๊ฒƒ์ด ํ•™๊ณ„์˜ ํ•จ์ •.
๊ทธ๋‚˜๋งˆ PW ๋ถˆ์ผ์น˜ ์ฝ”๋“œ๊ฐ€ ๊ธฐ์ ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋ฉด์„œ ์ด ํ•˜๋‚˜๋กœ ๋จน๊ณ ์‚ฌ๋Š” ์ง€๊ฒฝ์— ์ด๋ฅด๋ €๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๋ชจ๋“  ๊ธฐ๋Šฅ ์ฝ”๋“œ์— ๋ถ™์–ด์žˆ๋Š” @csrf_exempt๋ฅผ ๋ณด๋ฉด ์ •๋ง์ด์ง€ ๋งˆ์Œ์ด ์•„ํ”„๋‹ค.

have to learn:
๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌด์—‡์„ ๊ณต๋ถ€ํ•ด์•ผํ• ๊นŒ?
์ผ๋‹จ ๋‹ˆ์ฝœ๋ผ์Šค ์„ ์ƒ๋‹˜์˜ cookie - token - session - JWT์— ๊ด€ํ•œ ์„ค๋ช… ์˜์ƒ์„ ๋ดค๋‹ค.

์ด๊ฒƒ๋“ค์ด ์–ด๋–ค ์ƒํ™ฉ์— ์“ฐ์ด๋Š”์ง€๋ฅผ ์ด์ œ๋Š” ์•ˆ๋‹ค.

๋ฌธ์ œ๋Š” ์ •ํ™•ํ•œ ๊ตฌํ˜„์ด ๋˜๊ฒ ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ด์— ๊ด€ํ•œ ๊ฒƒ์€ ๊ตฌ๊ธ€๋‹˜์ด ํ•ด๊ฒฐํ•ด์ฃผ์‹ค ๊ฒƒ์ด๋‹ค.
์ด๋ฏธ ๋งŽ์€ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•ˆ๋‹ค.
์ •ํ™•ํ•˜๊ฒŒ ๋”ฐ๋ผํ•˜๋ฉด์„œ ํด๋ก  ์ฝ”๋”ฉ์„ ์‹œ๋„ํ•  ๊ฒƒ์ด๋‹ค.
๋ฐ•์•„๋ณด๋ฉด์„œ ๋ฐฐ์šฐ๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ •ํ™•ํ•˜๋‹ค๊ณ  ๋Š๋ผ๋Š” ์ค‘์ด๋‹ค.

์ˆ˜๋งŽ์€ ์‹œ๋„๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ๊ฒฐ๊ตญ์€ ๋ถˆ์„ ๋ˆ ์ฑ„๋กœ ์ž ๋“ค์–ด๋ฒ„๋ฆฐ ํ”์ ๋“ค์„ ๋ณด๊ณ  ์žˆ์žํ•˜๋‹ˆ ๊ฐ€์Šด์ด ์šธ์ƒ์ด ๋œ๋‹ค.


๋ณด์•ˆ

@csrf_exempt ์ด๋†ˆ๋ถ€ํ„ฐ ์–ด๋–ป๊ฒŒ๋“  ํ•ด์•ผ ํ•œ๋‹ค.
๋ณด์•ˆ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋†ˆ์ธ๋ฐ ์ด๊ฑธ ๊บผ๋ฒ„๋ฆฌ๋‹ˆ ์•„๋ฌดํŠผ ์ž˜๋ชป๋๋‹ค.

์ €๊ฑธ ๋ถ™์ด์ง€ ์•Š์œผ๋ฉด forbidden(403)์„ ๋ณด๊ฑฐ๋‚˜ missing CSRF ์–ด์ฉŒ๊ตฌ...๋ฅผ ์ฃผ๋กœ ์˜์ ‘ํ•˜๊ฒŒ ๋œ๋‹ค.

์ดˆ๊ธฐ์—๋Š” App์—์„œ DB์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ง€์†์ ์œผ๋กœ ์“ฐ๊ธฐ ์‹œ์ž‘ํ–ˆ๋‹ค.

์ค‘๊ฐ„์— ์•Œ์•„๋ณผ ๊ธฐํšŒ๊ฐ€ ๋ถ„๋ช…ํžˆ ์žˆ์—ˆ์„ ๊ฒƒ์ธ๋ฐ ๊ทธ๋ƒฅ ์ข‹๋‹ค๊ณ  ๋ณต๋ถ™ํ•˜๋ฉด์„œ ๊ธฐ๋Šฅ ํ™•์žฅ์—๋งŒ ์‹ ๊ฒฝ ์“ด ๊ฒฐ๊ณผ๊ฐ€ ๋งค์šฐ ์ฒ˜์ฐธํ•ด์กŒ๋‹ค.

๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ์‹œ๋„ ์ค‘์— django REST framework๋ฅผ ์“ฐ๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด ๋‹จ๊ณ„์—์„œ ๋ณธ์งˆ์„ ๊ณต๋ถ€ํ•˜์ง€ ์•Š๊ณ  ์œ ํŠœ๋ธŒ๋ฅผ ๋”ฐ๋ผํ•˜๋ฉด์„œ ํด๋กœ๋‹๋งŒ ํ•˜๋‹ค ๋ณด๋‹ˆ ์ด๋ ‡๊ฒŒ ๋œ ๊ฒƒ์ด๋ผ ๋Š๋‚€๋‹ค.


์•ž์œผ๋กœ์˜ ๋ฐฉํ–ฅ์„ฑ

  • REST framework ๊ณต์‹๋ฌธ์„œ๋ฅผ ์ •ํ™•ํžˆ ๋”ฐ๋ผํ•ด๋ณด๋ฉด์„œ ์ด๊ฒƒ์ด ์ œ๊ณตํ•˜๊ณ ์ž ํ•˜๋Š” ํ•ต์‹ฌ์ด ๊ธฐ๋Šฅ์ด ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๊ฐˆ ๊ฒƒ์ด๋‹ค.

  • ํ•จ์ˆ˜ํ˜• view๋ณด๋‹ค๋Š” ํด๋ž˜์Šคํ˜• view ์ฆ‰, django์—์„œ ์ œ๊ณตํ•˜๋Š” ์œ ์šฉํ•œ API ์œ„์ฃผ๋กœ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ django์˜ ์žฅ์ ์„ ์ตœ๋Œ€ํ•œ ์‚ด๋ฆด ๊ฒƒ์ด๋‹ค.


์—ฌ์ „ํžˆ ์ด๋ ‡๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค.
์ •ํ™•ํ•˜๊ณ  ์•Œ์ฐฌ ๋ฏธ์™„์„ฑ๋ณด๋‹ค๋Š” ์•„๋ฌดํŠผ ๋Œ์•„๊ฐ€๋Š” ์™„์„ฑ๋œ ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋” ํ™•์‹คํ•˜๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ด ์•„๋ฌดํŠผ ๋Œ์•„๊ฐ€๋Š” ์™„์„ฑ๋œ ๋ฌด์–ธ๊ฐ€๋„ ์ ๋‹นํžˆ ๊ฐ–์ถœ ๊ฑด ๊ฐ–์ถฐ์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๋ผ๊ณ  ์žˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ •๋ง์ •๋ง ์žˆ์–ด์•ผํ•  ๊ฒƒ์„ ๋จผ์ € ์ฑ™๊ฒจ์•ผ๊ฒ ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๊ทธ๊ฒƒ์„ ํ† ๋Œ€๋กœ ์™„์„ฑํ•œ๋‹ค.
์™„์„ฑ ํ›„์— ๋ฐ˜์„ฑํ•œ๋‹ค.

์ข…ํ•ฉํ•˜์ž๋ฉด,
์™„์„ฑํ•˜๋ฉด์„œ ๋ฐ˜์„ฑํ•˜๋Š” ๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

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