# Remind & Practice
Django๋ ๋ค์ํ ๊ธฐ๋ฅ์ด ๊ฐ๋ฐ๋์ด ์คํ์์คํ ๋์ด์๊ธฐ ๋๋ฌธ์ ๊ฐ์ด๋๋ฅผ ์ ์ฝ์ด๋ณด๋ฉด ๋ง์ ๊ธฐ๋ฅ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๋ง์ ๊ธฐ๋ฅ ์ค ํ๋์ธ CKEditor๊ธฐ๋ฅ์ ์ฌ์ฉํด๋ด ์๋ค!
๊ทธ๋ฌ๊ธฐ ์ํด ๋จผ์ static file ๊ด๋ จ ์ค์ ์ด ์๋ฃ๋ ํ๋ก์ ํธ๊ฐ ํ์ํฉ๋๋ค.
์๋๋ ์ ๊ฐ ์ํ ํ๋ก์ ํธ๋ฅผ ์ฐจ๊ทผ์ฐจ๊ทผ Remind
ํ ์ ์๋๋ก ์์ฑํ์ต๋๋ค.
# 1.blog_ckeditor ํ๋ก์ ํธ ๋ง๋ค๊ธฐ
$ python -m venv ckeditor_venv # ๊ฐ์ํ๊ฒฝ ์์ฑ
$ source ckeditor_venv/Scripts/activate # ๊ฐ์ํ๊ฒฝ ์คํ
$ pip install django # django ์ค์น
$ django-admin startproject blog_ckeditor #ํ๋ก์ ํธ ์์ฑ
$ python manage.py startapp 'blogapp' # app ์์ฑ
$ python manage.py runserver # http://127.0.0.1:8000/
# 2. ํ๋ก์ ํธ์ App ์ฐ๊ฒฐํ๊ธฐ
settings.py
์ app ์๋ฆฌ๊ธฐ
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blogapp.apps.BlogappConfig', # Add
]
# 3. App - template ๋ง๋ค๊ธฐ
๊ฒฝ๋ก : blogapp/templates/index.html
์ด๋ฒ์ ์ฌ๋ฏธ๋ก Cover
๋ฅผ ๋ฃ์ด๋ดค์ต๋๋ค.
๋ค๋ฅธ ๋ถํธ์คํธ๋ฉ์ ์ ์ฉ์์ผ๋ณด์ ๋ ์ข์์.
๊ฒฝ๋ก : blogapp/templates/blogmain.html
index ํ์ด์ง๋ ๋์ค์ ํ์ฉํ๋ ค๊ตฌ ๋ง๋ค์๊ณ
CKEditor๋ฅผ ํ์ฉํ๊ธฐ ์ํ blog home์ ๋ฐ๋ก ์์ฑํ ๊ฒ์!
# static file ๊ฒฝ๋ก
# 4. App - view ๋ง๋ค๊ธฐ
์์ฒญ์ด ๋ค์ด์ค๋ฉด home.html ํ์ผ์ ์ด์ด์ฃผ๋ ํจ์๋ฅผ blog ํด๋ ๋ด๋ถ์ views.py
ํ์ผ์ ์์ฑํด๋ด
์๋ค.
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
def blogMain(request):
return render(request, 'blogMain.html')
# 5. URLconf ์ฐ๊ฒฐ
๋ค์์ url์ ์ฐ๊ฒฐํด์ฃผ์ด์ผ ํฉ๋๋ค.
urls.py
ํ์ผ์ ์ด์ด ๋ค์ ๋ด์ฉ์ ์ถ๊ฐํ์ธ์.
from django.contrib import admin
from django.urls import path
import blogapp.views
urlpatterns = [
path('admin/', admin.site.urls),
path('', blogapp.views.index, name='index'),
path('blogMain/', blogapp.views.blogMain, name='blogMain'),
]
# 6.static file ์ ์ฉ
๋ถํธ์คํธ๋ฉ file์ static file๋ก ๋ง๋ค์ด์ค์ผ๊ฒ ์ฃ .
์ด์ ํฌ์คํ ์์ ๋ค๋ค๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ์ฉ์ํฌ๊ฒ์!
# blog_ckeditor/settings.py
import os
# ...
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'blogapp', 'static')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
# โนcollectstatic ์คํ
$ python manage.py collectstatic
์๋ฒ๋ฅผ ์คํ์์ผ ๋ถํธ์คํธ๋ฉ ์ ์ฉ์ด ์ ๋์๋์ง ํ๋ฒ์ฉ ํ์ธํด๋ณด์ธ์!
# 7.๋ธ๋ก๊ทธ ๋ฉ์ธ ์ปจํ ์ธ ๊ตฌ์ฑ
- ๊ธ์ฐ๊ธฐ
- ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
- ๋ก๊ทธ์์ ๊ธฐ๋ฅ
๋ก๊ทธ์ธ/๋ก๊ทธ์์์ ๋์ค์ ๊ผญ ๊ตฌํํด๋ณด์ธ์!
# โนindex.html ์์
๋ธ๋ก๊ทธ์ ๋ค์ด์ฌ ๋๋ง๋ค ์ฃผ์์ ๊ณ์ [http://127.0.0.1:8000/blogMain/]์ ์ณ์ ๋ค์ด์ค๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์ฐ๋ ๋งํฌ๋ฅผ ๊ฑธ์ด์ ๋๊ฒจ๋ด ์๋ค.
์ ๋ ๊ฐ์ด๋ฐ [Learn more] ๋ฒํผ์ ๋๋ฅด๋ฉด ๋ฉ์ธ ํ๋ฉด์ผ๋ก ๋์ด๊ฐ๋๋ก ๊ตฌ์ฑํ๊ฒ ์ต๋๋ค.
[index.html] ๋ฌธ์๋ฅผ ์ด๊ณ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
<a href="{% url 'blogMain' %}" class="btn btn-lg btn-secondary">Learn more</a>
# โนblogMain.html ์์
๋ธ๋ก๊ทธ ๋ฉ์ธ ์ปจํ ์ธ ๊ธฐ๋ฅ๋๋ก ์ถ๊ฐํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- cover๋ก ๋์๊ฐ๋ ๋งํฌ
<a class="navbar-brand" href="{% url 'index' %}">Likelion HUFS 8th</a>
- ๋ธ๋ก๊ทธ main ๋งํฌ
<a class="nav-link" href="{% url 'blogMain' %}">Home <span class="sr-only">(current)</span></a>
- ๊ธ์ฐ๊ธฐ, ๋ก๊ทธ์ธ, ๋ก๊ทธ์์ navbar
<li class="nav-item">
<a class="nav-link" href="#">๊ธ์ฐ๊ธฐ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">๋ก๊ทธ์ธ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">๋ก๊ทธ์์</a>
</li>
# 8. App - models.py ์์ฑ
๋ธ๋ก๊ทธ ์์ฑํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ์ดํฐ๋ฅผ ๋๊ฐ์ด ์ ์ฉํฉ๋๋ค.
- ์ ๋ชฉ
- ๋ด์ฉ
- ์์ฑ์ผ์
blogapp ํด๋ ๋ด์์ models.py
๋ฅผ ์ด์ด
์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์์ฑํด ์ค๋๋ค.
from django.db import models
class Blog(models.Model):
title = models.CharField(max_length=100)
pub_date = models.DateTimeField()
body = models.TextField()
# 9. Database migration
database ๋ชจ๋ธ์ ์์ฑํ ์ดํ์๋ ํญ์ ๋ค์ ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
models.py
์์ ์ฝ๋ ์์ฑpython manage.py makemigrations
์ ํตํด migration ๋ง๋ค๊ธฐpython manage.py migrate
์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฉํ๊ธฐ
$ python manage.py makemigrations
$ python manage.py migrate
# 10. Admin ์์ฑ
๋ธ๋ก๊ทธ ๊ฒ์๊ธ์ ๊ด๋ฆฌํ๋ ๊ด๋ฆฌ์admin
๋ฅผ ๋ง๋ค์ด์ฃผ๋ ์ฝ๋๋ฅผ ์์ฑํด๋ด
์๋ค.
$ python manage.py createsuperuser
- ์ด๋ฆ
- ์ด๋ฉ์ผ
- ๋น๋ฐ๋ฒํธ
- ๋น๋ฐ๋ฒํธ ํ์ธ
# 11. Admin์ model ๋ฑ๋กํ๊ธฐ
blog ํด๋ ์์ผ๋ก ๋ค์ด๊ฐ์ admin.py๋ฅผ ์์ ํฉ๋๋ค.
from django.contrib import admin
from .models import Blog
# Register your models here.
admin.site.register(Blog)
# 12. Admin page์์ ๊ฒ์๊ธ ์์ฑํ๊ธฐ
- http://127.0.0.1:8000/admin๋ก ์ ์
- blog ๊ฒ์๊ธ ์์ฑ
# 13. view๋ก ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
model์ ๋ง๋ค๊ณ ๊ทธ ์์ ๋ฐ์ดํฐ๋ ๋ฃ์์ผ๋ฉด ์ด๊ฑธ template
์ผ๋ก ๋ณด๋ด ๋ณด์ฌ์ค์ผ ํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ model์์ template์ผ๋ก ๋ฐ๋ก ๋ด์ฉ์ ๋ณด๋ผ์๋ ์๊ณ ํญ์ view
๋ฅผ ๊ฑฐ์ณ์ ๋ณด๋
๋๋ค.
์ด๋ฒ์ form
์ ๋ฐ๋ก ์์ฑํด ๋ชจ๋ธ์ ํญ๋ชฉ์ ๊ฐ์ ธ์ค๋ ์์
์ ํด๋ณด์์.
form
์์ ๊ธ์ฐ๊ธฐ์ ์ฌ์ฉํ ํผ์ ๋ง๋ค๊ณํ ํ๋ฆฟ
์ผ๋ก ์์ฑํ ๊ฒ๋๋ค.
# โนforms.py ๋ง๋ค๊ธฐ
# blogapp/forms.py ์์ฑ!
from django import forms
from .models import Blog
class CreateBlog(forms.ModelForm):
class Meta:
model = Blog
fields = ['title', 'pub_date', 'body']
# โนํ ํ๋ฆฟ๊ณผ view ๋๋๋ง
# createBlog.html
/blogapp/templates/createBlog.html
์์ฑ
# urls.py
blog_ckeditor/urls.py
์์
from django.contrib import admin
from django.urls import path
import blogapp.views
urlpatterns = [
path('admin/', admin.site.urls),
path('', blogapp.views.index, name='index'),
path('blogMain/', blogapp.views.blogMain, name='blogMain'),
path('blogMain/createBlog/', blogapp.views.createBlog, name='createBlog'),
]
# blogMain.html ์ฐ๊ฒฐ
blogapp/blogMain.html
์์
<li class="nav-item">
<a class="nav-link" href="{% url 'createBlog' %}">๊ธ์ฐ๊ธฐ</a>
</li>
# views.py ์์
blogapp/views.py
์์
from django.shortcuts import render
from .forms import CreateBlog
def index(request):
return render(request, 'index.html')
def blogMain(request):
return render(request, 'blogMain.html')
def createBlog(request):
form = CreateBlog()
return render(request, 'createBlog.html', {'form' : form})
- [blogapp]-[views.py]์์ [createBlog] ํจ์๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
- ๋ถ๋ฌ๋ค์ธ ํผ์ [createBlog.html]์ผ๋ก ๋ณด๋ด๊ธฐ ์ํด [form]์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๋ณด๋ด์ค๋๋ค.
- ์ง๊ธ๊น์ง๋ render(request, 'ํ ํ๋ฆฟ') ํ์์ผ๋ก ์ฌ์ฉํ์์ง๋ง, ์ฌ๊ธฐ์๋ ์ธ๋ฒ์งธ ์ธ์๊ฐ ํ๋ ๋ ์ถ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
- ์ธ๋ฒ์งธ ์ธ์๋ [context]๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ฉฐ, ๋์ ๋๋ฆฌ ์๋ฃํ์ ํํ๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ [createBlog.html] ๋ฌธ์์ ๋์ ๋๋ฆฌ ์๋ฃํ์ ๋ณด๋ด๊ฒ ๋๊ณ , [createBlog.html]์์๋ ์ฅ๊ณ ํ ํ๋ฆฟ ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ๊ฐ์ ์ถ๋ ฅํ ์ ์๊ฒ ๋ฉ๋๋ค.
# โนcreateBlog.html ์์ ํ๊ธฐ
์์์ ๋์ ๋๋ฆฌ ์๋ฃํ์ผ๋ก [form]์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ ๋ฌํ์์ผ๋ฏ๋ก ํค ๊ฐ 'form'์ ์ด์ฉํ์ฌ ์ถ๋ ฅํด๋ด ์๋ค. html ๋ฌธ์์์ ์ถ๋ ฅํ ๋์๋ ์ฅ๊ณ ํ ํ๋ฆฟ ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ์ถ๋ ฅํฉ๋๋ค.
ํํ๋ ์ ๊ฐ์ ํ์์ ์ด์ฉํฉ๋๋ค. ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ฐ๋ผ ์ฅ๊ณ ํ ํ๋ฆฟ์ ํ์ฉํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ์ผ๋จ ๊ทธ๋ฅ ๊ฐ์ ์ถ๋ ฅํด๋ณด๋๋ก ํฉ์๋ค.
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Form</title>
</head>
<body>
{{ form.as_p }}
</body>
</html>
# 14. Templates - DB ์ฐ๋
- ์ง๊ธ๊น์ง ํ ์์ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ ์์ฑ ์ดํ๋ถํฐ ์ ๋ฆฌํ์ฌ๋ด ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ชจ๋ธ์ ์์ฑ
- ๊ทธ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฌ ํผ์ ์์ฑ
- ๋ทฐ์์ ์์ ํผ์ ๋ถ๋ฌ ๋ค์ด๊ณ ํ ํ๋ฆฟ์ ์ ๋ฌ
- ํ ํ๋ฆฟ์์ ํ๋ฉด์ ์ถ๋ ฅ
์ด์ ๋ถํฐ ํด์ผ๋๋ ์์ ์ ํ ํ๋ฆฟ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ์ ๋, ์ด ๋ฐ์ดํฐ๋ค์ด ์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์ด ๋์ด์ผํ๋ ์์ ์ ๋๋ค.
๊ด๋ฆฌ์ ํ์ด์ง์์๋ ๋จ์ง [Save] ๋ฒํผ๋ง ๋๋ฅด๋ฉด ์ ์ฅ์ด ๋์์ง๋ง, ์ง๊ธํ๊ณ ์๋ ์์ ๋ค์ ๊ด๋ฆฌ์ ํ์ด์ง๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ง์ ์ค์ ํด์ฃผ์ด์ผ ํฉ๋๋ค.
# โนcreateBlog.html ์์
- ํ์ฌ [createBlog.html] ๋ฌธ์์๋ ๋จ์ง ํผ์ ์ถ๋ ฅํ๋ ์ฝ๋๋ง์ด ์์ ๋ฟ์ ๋๋ค.
- ๋ฌผ๋ก ์ง๊ธ๋ ํผ์ ๊ทธ๋๋ก ๊ฐ์ ธ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ ์๋ ์์ต๋๋ค๋ง ์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
- html์์๋ ์ฌ์ฉ์๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด
<form method="POST">
{{ form.as_p }}
<input type="submit" value="์ ์ฅ"/>
</form>
# โนviews.py - createBlog() ์์
[blogapp]-[views.py]๋ก ๋์์์ createBlog() ํจ์๋ฅผ ์์ ํ์ฌ ์ ๋๋ก DB์ ์ ์ฅํ๋๋ก ์์ ํฉ๋๋ค.
from django.shortcuts import render, redirect
from .forms import CreateBlog
def index(request):
return render(request, 'index.html')
def blogMain(request):
return render(request, 'blogMain.html')
def createBlog(request):
if request.method == 'POST':
form = CreateBlog(request.POST)
if form.is_valid():
form.save()
return redirect('blogMain')
else:
return redirect('index')
else:
form = CreateBlog()
return render(request, 'createBlog.html', {'form': form})
# form = CreateBlog()
# return render(request, 'createBlog.html', {'form': form})
์๋ฌ๊ฐ ๋๋ค.
# โนcsrf_token
Django๋ POST
๋ฐ์ดํฐ ์ ๋ฌ ๊ณผ์ ์์ ๋ณด์์ ์ํด csrf_token
์ด ์์ผ๋ฉด ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋๋ก ์ฒ๋ฆฌ ๋์ด์์ต๋๋ค.
์ฐธ๊ณ ) CSRF(Cross-Site Request Forgery)๋? - ์ฌ์ดํธ_๊ฐ_์์ฒญ_์์กฐ
ํ ์ค์ ๋ ์ถ๊ฐํด์ฃผ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค.
{% csrf_token %}
์ถ๊ฐํด์ฃผ๊ณ Admin ํ์ด์ง์์ ์ ์ ์ฅ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
# 15.Template ์์
์ด์ ์ธ์ ์์ ๋ง์ด ๋ค๋ฃจ์๊ธฐ ๋๋ฌธ์ ์ ์ฉ๋ง ํ๊ณ ๋์ด๊ฐ๊ฒ์!
๊ธ์ฐ๊ธฐ ํ์ด์ง๋ ๋ถํธ์คํธ๋ฉ ํ ํ๋ฆฟ์ ์์๋ฐ์์ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค.
blog_ckeditor/templates
์์ฑ- base.html ์์ฑ
- blogMain.html ๋ด์ฉ base.html๋ก ๋ณต๋ถ
์ฐ๋ฆฌ๊ฐ ํ์ํ ๊ณตํต ๋ถ๋ถ์ธ nav
๋ถ๋ถ์ base๋ก ๋ฌถ์ผ๋ฉด ๋ฉ๋๋ค.
base.html
๋ด์ฉ
{% load static %}
<head>
<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"
integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z"
crossorigin="anonymous"
/>
<link rel="stylesheet" href="{% static 'css/navbar-top-fixed.css' %}" />
</head>
<body>
<nav class="navbar navbar-expand-md navbar-dark fixed-top bg-dark">
<a class="navbar-brand" href="{% url 'index' %}">Likelion HUFS 8th</a>
<button
class="navbar-toggler"
type="button"
data-toggle="collapse"
data-target="#navbarCollapse"
aria-controls="navbarCollapse"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarCollapse">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="{% url 'blogMain' %}"
>Home <span class="sr-only">(current)</span></a
>
</li>
<li class="nav-item">
<a class="nav-link" href="{% url 'createBlog' %}">๊ธ์ฐ๊ธฐ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">๋ก๊ทธ์ธ</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">๋ก๊ทธ์์</a>
</li>
</ul>
<form class="form-inline mt-2 mt-md-0">
<input
class="form-control mr-sm-2"
type="text"
placeholder="Search"
aria-label="Search"
/>
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">
Search
</button>
</form>
</div>
</nav>
{% block content %}
{% endblock %}
</body>
๋งจ ์๋๋ ๋ค์๊ณผ ๊ฐ์ด
{% block content %}
{% endblock %}
์์ ํ ํ๋ฆฟ ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ด์ blogMain.html
๊ณผ createBlog.html
ํ์ผ์ ์์ ํค์๋๋ฅผ ์ ์ด์ฃผ๋ฉด ๋ฉ๋๋ค.
blogMain.html
๋ด์ฉ
{% extends 'base.html' %}
{% block content %}
<main role="main" class="container">
<div class="jumbotron">
<h1>๋ฉ์์ด์ฌ์์ฒ๋ผ HUFS</h1>
<p class="lead">CKEditor๋ฅผ ์ํ ๋ธ๋ก๊ทธ ํ</p>
<a
class="btn btn-lg btn-primary"
href="{{ site.baseurl }}/docs/{{ site.docs_version }}/components/navbar/"
role="button"
>Button Click »</a
>
</div>
</main>
{% endblock %}
createBlog.html
๋ด์ฉ
{% extends 'base.html' %}
{% block content %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Form</title>
</head>
<body>
<form method="POST">
{% csrf_token %} {{ form.as_p }}
<input type="submit" value="์ ์ฅ" />
</form>
</body>
</html>
{% endblock %}
์๋ฒ๋ฅผ ๋๋ ค๋ณด๋ฉด ์ ์์ ์ผ๋ก ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ๊น์ง ๋ฆฌ๋ง์ธ๋ ๋ฐ ๊ธฐ๋ณธ ์ค์ ๋!