(1) CSRF์ ๊ตฌ์กฐ
1) ์ดํด
CSRF(Cross-Site Request Forgery, ์ฌ์ดํธ ๊ฐ ์์ฒญ ์์กฐ)๋ ๋ค๋ฅธ ์ฌ์ดํธ์์ ํผํด์์ ์ธ์ฆ ๊ถํ์ ๋์ฉํด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋ ๊ณต๊ฒฉ ๋ฐฉ์์ด๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์๋ ๋ก๊ทธ์ธ ๊ณผ์ ์์ ์ธ์
ID๋ ํ ํฐ ๊ฐ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณ์ ๊ถํ์ด ํ์ํ ์์ฒญ์ ์๋ฒ๋ก ๋ณด๋ผ ๋ ์ด ์ ๋ณด๋ฅผ ์ฌ์ฉํ๋ค. CSRF๋ ํด๋น ์ธ์ฆ ์ ๋ณด๋ง ์๋ค๋ฉด ์๋ฒ๊ฐ ์์ฒญ์ ์ถ์ฒ๋ ๋ด์ฉ์ ํ์ธํ์ง ์์ผ๋ฏ๋ก ๋๊ตฌ๋ ์ธ๊ฐ๋ฅผ ๋ฐ์ ์ ์๋ค๋ ์ทจ์ฝ์ ์ ๋
ธ๋ฆฐ๋ค.
2) ๊ณต๊ฒฉ ์๋๋ฆฌ์ค ์์
![[๊ทธ๋ฆผ 2-1] CSRF์ ๊ตฌ์กฐ](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F6d7fa230-23c2-4b9c-b287-fdeb076e90bd%2Fc21fdd08-eb02-47ca-b872-2bd96a932e06%2FFrame_3-2.png?table=block&id=ad418da7-aa7e-4c81-8295-0e265c677c9d&cache=v2)
์ด๋ฉ์ผ์ ํตํ ๊ฐ์ธ์ ๋ณด ๋ณ๊ฒฝ ์๋๋ฆฌ์ค
- ํผํด์๊ฐ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธํ๋ฉด ์ธ์ฆ ์ ๋ณด(์ธ์ ID, ํ ํฐ ๋ฑ)๊ฐ ๋ธ๋ผ์ฐ์ ์ ์ฅ์์ ์ ์ฅ๋จ
- ๊ณต๊ฒฉ์๋ ํผํด์์ ๋ธ๋ผ์ฐ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ด์ฉํด ์ฌ์ดํธ ๊ฐ์ธ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ๋ ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ฆ
- ๊ณต๊ฒฉ์๋ ์ ์คํฌ๋ฆฝํธ๋ฅผ ์น ํ์ด์ง๋ ํ๋ก๊ทธ๋จ์ผ๋ก ์ ์ํ๊ณ , ํผํด์์๊ฒ ์น ํ์ด์ง ๋งํฌ๋ ํ๋ก๊ทธ๋จ ์ฒจ๋ถํ์ผ์ด ํฌํจ๋ ์ด๋ฉ์ผ์ ๋ฐ์กํจ
- ํผํด์๊ฐ CSRF ์ทจ์ฝ์ ์ด ์๋ ์น ์ฌ์ดํธ์ ๋ก๊ทธ์ธํ ์ํ๋ก ๊ณต๊ฒฉ์์ ์ด๋ฉ์ผ์ ์ด์ด ๋ด. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์์ ๋งํฌ๋ฅผ ํด๋ฆญํ๊ฑฐ๋ ์ฒจ๋ถํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์ ์คํํจ
- ํผํด์์ ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํด, ํผํด์ ๋ชจ๋ฅด๊ฒ ์๋ฒ๋ก ์์ฒญ์ ์ ์กํจ
- ์๋ฒ๋ ์์ฒญ์ ํฌํจ๋ ์ธ์ฆ ์ ๋ณด๋ฅผ ํ์ธํ์ฌ ์์ฒญ์๋ฅผ ์ง์ํ๊ณ , ์์ฒญ์ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํจ
- ๊ฒฐ๊ตญ ์ฌ์ดํธ ๋ด ํผํด์์ ๊ฐ์ธ์ ๋ณด๋ ๊ณต๊ฒฉ์๊ฐ ์๋ํ ๋๋ก ๋ณ๊ฒฝ๋จ
์ด ์๋๋ฆฌ์ค์์ ๊ณต๊ฒฉ์๋ ํผํด์์ ์ธ์ฆ ์ธ์
์ ์ง์ ํ์ทจํ์ง ์์๋ค. ์ฆ CSRF๋ ํผํด์์ ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํ ๊ฐ์ ์ ์ธ ๋ฐฉ์์ผ๋ก ํผํด์์ ๊ถํ์ ์์กฐํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.ยนโพ ์ด์ ๊ณต๊ฒฉ์๋ ํผํด์๋ ๋ชจ๋ฅด๋ ์์ ์ํ ์ฌ์ดํธ์์์ ์๊ณ ์ด์ฒด, ์ปค๋ฎค๋ํฐ ์ฌ์ดํธ์์ ๊ฒ์๋ฌผ ์์ฑ, ๋ฐ์ดํ
์ฌ์ดํธ์์ ํ๋กํ ์
์ฉ ๋ฑ ๋ค์ํ ์
์์ ์ธ ํ์๋ฅผ ํ ์ ์๊ฒ ๋๋ค.
3) XSS์ ๋น๊ต
CSRF๋ ์์ ์ดํด๋ณธ XSS์ 'ํผํด์์ ๋ธ๋ผ์ฐ์ ์์ ํน์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ๋ค'๋ ์ ์์ ๊ฐ๋ค. ํ์ง๋ง ๋ ๊ณต๊ฒฉ์ ๋ชฉ์ ๊ณผ ๋ฐฉ์์๋ ์ฐจ์ด๊ฐ ์๋ค. XSS๊ฐ ์
์ฑ ์คํฌ๋ฆฝํธ ์คํ์ ํตํด ์ง์ ์ ์ผ๋ก ๋ฏผ๊ฐ ์ ๋ณด๋ฅผ ํ์ทจํ๊ณ ์
์ฉยฒโพํ๋ค๋ฉด, CSRF๋ ๊ธฐ์กด์ ์ธ์ฆ๋ ํผํด์์ ์ธ์
์ ํตํด ๊ฐ์ ์ ์ผ๋ก๋ง ํ๋ํ ์ ์๋ค. ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก XSS์ ํผํด๊ฐ CSRF์ ํผํด๋ณด๋ค ์ฌ๊ฐํ๋ค.
๋ํ XSS๊ฐ ํด๋ผ์ด์ธํธ ์ธก์์ ์ฌ์ฉ์ ์
๋ ฅ๊ฐ์ด ์ ์ ํ ์ฒ๋ฆฌ๋์ง ์๋ ์ทจ์ฝ์ ์ ์ด์ฉํ๋ค๋ฉด, CSRF๋ ์๋ฒ ์ธก์์ ์์ฒญ์ ์ถ์ฒ๋ฅผ ์ ๋๋ก ๊ฒ์ฆํ์ง ์๋ ์ทจ์ฝ์ ์ ๋
ธ๋ฆฐ๋ค. ๋ฐ๋ผ์ ๊ณต๊ฒฉ ๋ฐฉ์ด๋ XSS๋ ํด๋ผ์ด์ธํธ, CSRF๋ ์๋ฒ์ธก์ ์ญํ ์ด๋ผ ํ ์ ์๋ค.
์ถ๊ฐ๋ก, ๋ ๊ณต๊ฒฉ ๋ฐฉ์์ด ์์ ํ ๋
๋ฆฝ์ ์ด์ง๋ง์ ์๋ค. XSS ์ทจ์ฝ์ ์ ์ด์ฉํ์ฌ CSRF ๊ณต๊ฒฉ์ ์๋ํ๋ ๋ณตํฉ์ ์ธ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋๋ฐ, ์ด๋ฌํ ๋ณตํฉ ๊ณต๊ฒฉ์ XSS์ ์ง์ ์ ์ธ ์ํ์ฑ๊ณผ CSRF์ ์๋ฐํจ์ ๊ฒฐํฉํ์ฌ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ํ์งํ๊ธฐ ์ด๋ ค์ด ์ํ์ด ๋๋ค. ์ด์ฒ๋ผ ์น ๋ณด์์์ ๋ค์ํ ์ทจ์ฝ์ ๋ค์ ์๋ก ์ฐ๊ด๋์ด ์์ด ๊ฐ๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ๋์ํด์ผ ํ ๋ฟ ์๋๋ผ ์ข
ํฉ์ ์ธ ๋ณด์ ์ ๋ต์ ์๋ฆฝํด์ผ ํ๋ค.
ยนโพ ๋ฐ๋๋ก ํผํด์์ ์ธ์
ํ ํฐ์ด๋ ์ฟ ํค ๋ฑ์ ์ง์ ํ์ทจํ์ฌ ํผํด์๋ก ์์ฅํ๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ ์ธ์
ํ์ด์ฌํน์ด๋ผ๊ณ ํ๋ค.
ยฒโพ XSS๋ฅผ ์ด์ฉํ ์ธ์
ํ์ด์ฌํน
ย
(2) ๋์ฑ ๋ฐฉ๋ฒ
CSRF ์ทจ์ฝ์ ์ ํต์ฌ์ ์๋ฒ์์ ์์ฒญ์ ์ถ์ฒ๋ฅผ ์ฒ ์ ํ ํ์ธํ์ง ์๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก CSRF ๋ฐฉ์ด๋ฅผ ์ํด์๋ ์๋ฒ ์ธก์์ ์์ฒญ์ ์ถ์ฒ์ ์ ๋น์ฑ์ ๊ฒ์ฆํ๋ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํด์ผ ํ๋ค. ํ๋ก ํธ์๋๋ ์ด ๊ณผ์ ์ ์ดํดํ๊ณ , ํ์ํ ๊ฒ์ฆ ์ ๋ณด๋ฅผ ์์ฒญ์ ํฌํจ์์ผ ์๋ฒ๋ฅผ ๋ณด์กฐํ๋ ์ญํ ์ ํ๋ค.
1) CSRF ํ ํฐ(๋๊ธฐํ ํ ํฐ) ํจํด
์ธ์
๋ณ ๊ณ ์ ํ ํ ํฐ์ ์์ฑํด ์ ํจ์ฑ์ ๊ฒ์ฆํ๋ ๋ฐฉ์์ผ๋ก ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ CSRF ๋ฐฉ์ด๋ฒ ์ค ํ๋์ด๋ค.
์ฌ์ฉ์ ๋ก๊ทธ์ธ ์ ์๋ฒ๋ ์ธ์
ยนโพ์ ์์ํ๋ค. ๊ฐ ์ธ์
๋ง๋ค ์๋ฒ๋ ๋๋ค ๋ฌธ์์ด์ธ CSRF ํ ํฐ์ ์์ฑ, ์ ์ฅํ๊ณ ํด๋ผ์ด์ธํธ์ ์ ๋ฌํ๋ค. ์ดํ ํด๋ผ์ด์ธํธ ์์ฒญ๋ง๋ค ์ด ํ ํฐ์ ํฌํจํ๋๋ก ํ๋ฉด, ์๋ฒ๋ ์ ์ฅ๋ ํ ํฐ๊ณผ ์์ฒญ์ ํ ํฐ์ด ์ผ์นํ๋์ง ๋น๊ตํด ์์ฒญ์ ์ ์ ์ฌ๋ถ๋ฅผ ๊ฐ๋ ค๋ผ ์ ์๋ค. ์ด ํจํด์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ํ ํฐ์ ๋น๊ต ๊ณผ์ ๋๋ฌธ์ ๋๊ธฐํ ํ ํฐ ํจํด์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
<form action="/" method="POST"> <input type="hidden" name="CSRF_TOKEN" value="SEcretTOken%1234&5678*90" /> <!-- ๋ค๋ฅธ form ์์๋ค... --> </form>
์์ ๊ฐ์ด HTML์ ํ ํฐ์ ์ฝ์
ํ๊ณ
<form>
์ ์ ์กํ๋ค๋ฉด, ํด๋ผ์ด์ธํธ๋ ์์ฒญ์ ์๋์ผ๋ก CSRF ํ ํฐ์ ์ฒจ๋ถํ ์ ์๋ค. CSRF ํ ํฐ๊ฐ์ ์ธ์
๋ง๋ค ๋ณ๊ฒฝ๋๋ฏ๋ก ๊ณต๊ฒฉ์๋ ํ ํฐ๊ฐ์ ์ ์ ์๊ณ , ์ ํจํ CSRF ํ ํฐ์ด ์ฒจ๋ถ๋์ง ์์ ์์ฒญ์ ์๋ฒ์์ ์ฐจ๋จ๋๋ค.2) Double Submit ์ฟ ํค ํจํด
CSRF ํ ํฐ ํจํด์ ์ธ์
๋์ ์๋ฒ์ ํ ํฐ์ ์ ์งํด์ผ ํ๋ค. ์ด ๋ฐฉ์์ ์ฌ์ดํธ ์ ์์๊ฐ ๋ง์ ์ธ์
์ ๋ณด๊ฐ ์ปค์ง๋ฉด ์๋ฒ์ ๋ถํ๊ฐ ๋ ์ ์๋ค. ์ด์ ๋ํ ๋์์ผ๋ก Double Submit ์ฟ ํค ํจํด์ ์ฌ์ฉํ ์ ์๋ค. ์ด ํจํด์์ ํ ํฐ ๋๊ฐ์ ์ผ์น์ฑ์ ๊ฒ์ฆํ๋ ๋ก์ง์ CSRF ํ ํฐ ํจํด๊ณผ ๋์ผํ์ง๋ง, ๋ ํ ํฐ์ ๋ชจ๋ ์๋ฒ๊ฐ ์๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅํ๋ค๋ ์ ์์ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ธ๋ค.
์ฌ์ฉ์ ๋ก๊ทธ์ธ์ ์๋ฒ๋ ๋๋ค ๋ฌธ์์ด ํ ํฐ์ ์์ฑํ๊ณ
HttpOnly
ํ๋๊ทธยฒโพ๋ฅผ ์ค์ ํ์ง ์์ ์ฟ ํค์ ๋ฃ์ด ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌํ๋ค. ์ฟ ํค๋ ๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋๋ฉฐ ์ดํ ํด๋ผ์ด์ธํธ ์์ฒญ์ ์๋์ผ๋ก ํฌํจ๋๋ค. ๊ฐ๋ฐ์๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ธ๋ผ์ฐ์ ์์ ์ด ์ฟ ํค์ ํ ํฐ ๊ฐ์ ์ฝ์ด์ ์์ฒญ์ ๋ณธ๋ฌธ์ด๋ ์ปค์คํ
ํค๋์ ์ถ๊ฐ๋ก ํฌํจ์์ผ์ผ ํ๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฒ๋ ์ฟ ํค์ ์์ฒญ์ ํฌํจ๋ ํ ํฐ์ ๋น๊ตํด ์ผ์น ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ๋ค. ์ด๋ ๊ฒ ๋์ผํ ํ ํฐ์ ์ฟ ํค์ ์์ฒญ ๋ฐ์ดํฐ์ ์ด์ค์ผ๋ก ๋ณด๋ด๊ธฐ ๋๋ฌธ์ Double Submit(์ด์ค ์ ์ก) ์ฟ ํค ํจํด์ด๋ผ๊ณ ํ๋ค.๋ธ๋ผ์ฐ์ ์ ์ ์ฅ๋ ์ฟ ํค๋ SOP(๋์ผ ์ถ์ฒ ์ ์ฑ
)์ ์ํด ๋ค๋ฅธ ๋๋ฉ์ธ์์๋ ์ ๊ทผํ ์ ์์ผ๋ฏ๋ก CSRF ๊ณต๊ฒฉ์ ์์ ํ๋ค. ํ์ง๋ง XSS ๊ณต๊ฒฉ์ ๋์ผ ๋๋ฉ์ธ์์ ์ผ์ด๋๋ฏ๋ก SOP์ ์ ํ์ ๋ฐ์ง ์์ผ๋ ์ฃผ์๊ฐ ํ์ํ๋ค.
3) SameSite ์ฟ ํค ์์ฑ ์ฌ์ฉ
CSRF๋ ๊ต์ฐจ ์ฌ์ดํธ ์์ฒญ์ ํตํด ๋ธ๋ผ์ฐ์ ์ ์ธ์ฆ ์ ๋ณด๋ฅผ ์
์ฉํ๋ ๊ณต๊ฒฉ ๋ฐฉ๋ฒ์ด๋ค. ์ธ์ฆ ์ ๋ณด๋ก ์ฟ ํค๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฝ์ฐ, ์ฟ ํค์ SameSite ์์ฑ์ ์ค์ ํด ๋ธ๋ผ์ฐ์ ๊ฐ ๊ต์ฐจ ์ฌ์ดํธ ์์ฒญ์ ์ฟ ํค๋ฅผ ํฌํจ์ํค์ง ์๋๋ก ์ ํํ ์ ์๋ค.
/* ์๋ฒ ์ธก ์ฝ๋ */ const express = require('express'); const session = require('express-session'); // express ์ฑ์ ์ธ์ ๊ด๋ฆฌ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ const app = express(); // ์๋ฒ ์ฑ ์์ฑ app.use(session({ // ์ธ์ ๋ฏธ๋ค์จ์ด ์ค์ cookie: { sameSite: 'strict', // sameSite ์์ฑ ์ค์ secure: true // HTTPS ์ฌ์ฉ } }));
SameSite ์์ฑ์ด ๋์ผ ์ฌ์ดํธ๋ฅผ ํ๋จํ๋ ๊ธฐ์ค์ eTLD+1(effective Top Level Domain+1)์ด๋ค. ์ ํจํ ์ต์์ ๋๋ฉ์ธ(eTLD)๊ณผ ๊ทธ ์๋ธ๋๋ฉ์ธ์ ํฌํจํ๋ฏ๋ก, ์๋ฅผ ๋ค์ด
static.example.com
๊ณผ api.example.com
์ ๋์ผ ์ฌ์ดํธ์ด๊ณ , cross-site.com
๋ ๊ทธ๋ ์ง ์์ ๊ฒ์ด๋ค.SameSite์ ๊ฐ์ผ๋ก ์ค์ ํ ์ ์๋ ์ต์
์ ์๋์ ๊ฐ๋ค.
SameSite | ์๋ฏธ |
Strict | ๋์ผํ ์ฌ์ดํธ ์์ฒญ์์๋ง ์ฟ ํค ํฌํจ |
Lax(๊ธฐ๋ณธ๊ฐ) | GET ์์ฒญ๊ณผ ์ต์์ ๋ ๋ฒจ ํ์์๋ ์ฟ ํค ํฌํจ. ๊ทธ ์ธ์ ๊ต์ฐจ ์ฌ์ดํธ ์์ฒญ์๋ ์ ํ |
None | ์ฌ์ดํธ์ ๊ด๊ณ์์ด ๋ชจ๋ ์์ฒญ์ ์ฟ ํค ํฌํจ |
4) Origin ํค๋ ๊ฒ์ฌ
์๋ฒ์ ๋ค์ด์จ ์์ฒญ์ Origin ํค๋๋ฅผ ๊ฒ์ฌํด์ ์ถ์ฒ์ ์ ๋ขฐ์ฑ์ ๊ฒ์ฌํ๋ ๋ฐฉ๋ฒ์ด๋ค. Origin ํค๋๋ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๋ธ๋ผ์ฐ์ ์ ์ํด ์๋์ผ๋ก ์ค์ ๋๊ณ JavaScript๋ก ์กฐ์ํ ์ ์์ด ๋ฏฟ์ ์ ์๋ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
/* ์๋ฒ ์ธก ์ฝ๋ */ const express = require('express'); const app = express(); // ์๋ฒ ์ฑ ์์ฑ app.use((req, res, next) => { // ์ถ์ฒ ๊ฒ์ฆ ๋ฏธ๋ค์จ์ด ์ค์ const allowedOrigins = ['https://example1.com', 'https://example2.com']; // ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ ๋ชฉ๋ก const origin = req.headers.origin; if (allowedOrigins.includes(origin)) { next(); } else { res.status(403).json({ error: 'Forbidden - Invalid Origin' }); } });
์ด ๋ฐฉ๋ฒ์ ๊ตฌํ์ด ๊ฐ์ฅ ๊ฐ๋จํ์ง๋ง, ์ ๋ขฐํ ์ ์๋ ์ถ์ฒ ๋ชฉ๋ก์ ์ง์์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค๋ ๋จ์ ์ด ์๋ค. ๋ํ CDN์ด๋ ํ๋ก์ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ๊ณ ๋ คํ๊ธฐ ๊น๋ค๋ก์ ์ฃผ๋ก ๋ค๋ฅธ CSRF ๋ฐฉ์ด ๊ธฐ๋ฒ์ ๋ณด์กฐ ์๋จ์ผ๋ก ์ฌ์ฉ๋๋ค.
ยนโพ ์ฌ์ฉ์์ ์๋ฒ ๊ฐ์ ์ฐ๊ฒฐ, ๋๋ ๊ทธ ์ฐ๊ฒฐ ์ ์ง ์ํ๋ฅผ ์๋ฒ์ ๊ธฐ๋กํ ๊ฒ
ยฒโพ ์ฟ ํค ์์ฑ์
HttpOnly
ํ๋๊ทธ๋ฅผ ์ค์ ํ๋ฉด ์ฟ ํค์ HTTP(S)๋ก๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ ์คํฌ๋ฆฝํธ ์ธ์ด๋ก๋ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค. ๋ฐ๋๋ก ์ด ํ๋๊ทธ๋ฅผ ์ค์ ํ์ง ์๋๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ๊ทผํ ์ ์๋ค.ย